<?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>149144</bug_id>
          
          <creation_ts>2015-09-14 17:44:39 -0700</creation_ts>
          <short_desc>[Win] Tiled drawing is rendering more times than it should</short_desc>
          <delta_ts>2015-09-15 12:56:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1125826</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-14 17:44:39 -0700</bug_when>
    <thetext>Errors in the Windows tiled drawing implementation cause WebKit to draw the same content multiple times. Furthermore, the nested CALayers used in the tiled drawing system caused the coordinate system to be flipped twice, causing some content to render upside down.

This patch corrects both of these problems. It also has the benefit of causing the debug border drawing for accelerated compositing to work properly on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125827</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-14 17:45:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/22313905&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125869</commentid>
    <comment_count>2</comment_count>
      <attachid>261166</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-14 20:58:03 -0700</bug_when>
    <thetext>Created attachment 261166
WIP Patch (Not for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125885</commentid>
    <comment_count>3</comment_count>
      <attachid>261171</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-14 21:54:36 -0700</bug_when>
    <thetext>Created attachment 261171
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126005</commentid>
    <comment_count>4</comment_count>
      <attachid>261201</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 10:17:55 -0700</bug_when>
    <thetext>Created attachment 261201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126021</commentid>
    <comment_count>5</comment_count>
      <attachid>261207</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 10:39:34 -0700</bug_when>
    <thetext>Created attachment 261207
Patch (Correct deprecation warning)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126046</commentid>
    <comment_count>6</comment_count>
      <attachid>261207</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-09-15 11:00:04 -0700</bug_when>
    <thetext>Comment on attachment 261207
Patch (Correct deprecation warning)

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

&gt; Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters:-3038
&gt; -    &lt;ClCompile Include=&quot;..\dom\ClassNodeList.cpp&quot;&gt;
&gt; -      &lt;Filter&gt;dom&lt;/Filter&gt;
&gt; -    &lt;/ClCompile&gt;

Why did this change?

&gt; Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters:-3239
&gt; -    &lt;ClCompile Include=&quot;..\dom\NodeFilter.cpp&quot;&gt;
&gt; -      &lt;Filter&gt;dom&lt;/Filter&gt;
&gt; -    &lt;/ClCompile&gt;

Ditto.

&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:74
&gt; +#if OS(WINDOWS)
&gt; +    if (platformCALayer-&gt;layerType() == PlatformCALayer::LayerTypeTiledBackingTileLayer) {
&gt; +        // Tiled layers in Windows have flipped coordinates
&gt; +        CGContextScaleCTM(context, 1, -1);
&gt; +        CGContextTranslateCTM(context, 0, -indicatorBox.size.height);
&gt; +    }
&gt; +#endif

This doesn&apos;t seem like the right place for this code.

&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:95
&gt;      CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1, -1));
&gt;      CGContextSelectFont(context, &quot;Helvetica&quot;, 22, kCGEncodingMacRoman);

I think it would be better to move these lines into PlatformCALayer::drawTextAtPoint().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126053</commentid>
    <comment_count>7</comment_count>
      <attachid>261207</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 11:13:30 -0700</bug_when>
    <thetext>Comment on attachment 261207
Patch (Correct deprecation warning)

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

&gt;&gt; Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters:-3038
&gt;&gt; -    &lt;/ClCompile&gt;
&gt; 
&gt; Why did this change?

People update the WebCore.vcxproj file, but usually forget to update WebCore.vcxproj.filters. In this case, &quot;ClassNodeList.cpp&quot; was renamed to &quot;dom\ClassCollection.cpp&quot; in &lt;http://trac.webkit.org/changeset/188735&gt;, but the fact that this file was removed did not get registered until I updated the project file for this change.

&gt;&gt; Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters:-3239
&gt;&gt; -    &lt;/ClCompile&gt;
&gt; 
&gt; Ditto.

Ditto. The &quot;NodeFilter.cpp&quot; file was deleted in &lt;http://trac.webkit.org/changeset/189230&gt;.

&gt;&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:74
&gt;&gt; +#endif
&gt; 
&gt; This doesn&apos;t seem like the right place for this code.

Maybe, but this is called directly from TileGrid::platformCALayerPaintContents; I guess I could add the check there, and use the new &quot;flipCoordinates&quot; method at that point.

&gt;&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:95
&gt;&gt;      CGContextSelectFont(context, &quot;Helvetica&quot;, 22, kCGEncodingMacRoman);
&gt; 
&gt; I think it would be better to move these lines into PlatformCALayer::drawTextAtPoint().

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126063</commentid>
    <comment_count>8</comment_count>
      <attachid>261207</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 11:28:12 -0700</bug_when>
    <thetext>Comment on attachment 261207
Patch (Correct deprecation warning)

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:95
&gt;&gt;&gt;      CGContextSelectFont(context, &quot;Helvetica&quot;, 22, kCGEncodingMacRoman);
&gt;&gt; 
&gt;&gt; I think it would be better to move these lines into PlatformCALayer::drawTextAtPoint().
&gt; 
&gt; OK!

Haha -- I have to! They are deprecated as well!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126066</commentid>
    <comment_count>9</comment_count>
      <attachid>261218</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 11:29:33 -0700</bug_when>
    <thetext>Created attachment 261218
Patch v3 (revised for EWS and smfr&apos;s comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126075</commentid>
    <comment_count>10</comment_count>
      <attachid>261218</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-09-15 11:39:29 -0700</bug_when>
    <thetext>Comment on attachment 261218
Patch v3 (revised for EWS and smfr&apos;s comments)

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

&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:-67
&gt; +    CGContextSaveGState(context);
&gt; +
&gt;      indicatorBox.size.width = 12 + 10 * strlen(text);
&gt;      indicatorBox.size.height = 27;
&gt; -    CGContextSaveGState(context);

This change is a no-op.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126077</commentid>
    <comment_count>11</comment_count>
      <attachid>261218</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 11:40:55 -0700</bug_when>
    <thetext>Comment on attachment 261218
Patch v3 (revised for EWS and smfr&apos;s comments)

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

&gt;&gt; Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp:-67
&gt;&gt; -    CGContextSaveGState(context);
&gt; 
&gt; This change is a no-op.

Whoops. I&apos;ll revert that before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126095</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 12:56:45 -0700</bug_when>
    <thetext>Committed r189821: &lt;http://trac.webkit.org/changeset/189821&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261166</attachid>
            <date>2015-09-14 20:58:03 -0700</date>
            <delta_ts>2015-09-14 21:54:33 -0700</delta_ts>
            <desc>WIP Patch (Not for review)</desc>
            <filename>bug-149144-20150914211352.patch</filename>
            <type>text/plain</type>
            <size>52808</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA5LTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIFRpbGVkIGRyYXdp
bmcgaXMgcmVuZGVyaW5nIG1vcmUgdGltZXMgdGhhbiBpdCBzaG91bGQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTE0NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjIzMTM5MDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJvdmlkZSBhIG1vcmUgZmFpdGhmdWwgaW1wbGVtZW5hdGlvbiBvZiB0aGUg
T2JqZWN0aXZlIEMgdGlsZWQgZHJhd2luZyBsb2dpYy4KKyAgICAgICAgKDEpIENyZWF0ZSBhIG5l
dyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSB0aGUKKyAg
ICAgICAgICAgIGNvbnRhaW5lciBvZiB0aWxlcy4gVGhpcyBtYXRjaGVzIHRoZSBPYmplY3RpdmUg
QyBkZXNpZ24uCisgICAgICAgICgyKSBNb3ZlIGltcGxlbWVudGF0aW9uIG9mIHNldmVyYWwgbWV0
aG9kcyAoZS5nLiwgaXNPcGFxdWUpIHRvIHRoZSBpbnRlcm5hbAorICAgICAgICAgICAgY2xhc3Mg
aW1wbGVtZW50YXRpb24gc28gdGhhdCB0aGUgVGlsZSBEcmF3aW5nIGxvZ2ljIGNhbiBwZXJmb3Jt
IHNwZWNpYWwKKyAgICAgICAgICAgIGhhbmRsaW5nIGluIHRoZXNlIGNhc2VzLgorICAgICAgICAo
MykgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIFRpbGVkIERyYXdpbmcgbG9naWMgZnJvbSBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbCwKKyAgICAgICAgICAgIHNpbmNlIGl0IHdhcyBqdXN0IGR1cGxp
Y2F0aW5nIGNvZGUgaW4gVGlsZUNvbnRyb2xsZXIgYW5kIFRpbGVHcmlkLgorICAgICAgICAoNCkg
Q2xlYW4gdXAgdGhlIGRpc3BsYXkgY2FsbGJhY2sgY29kZSB0byBhdm9pZCBwZXJmb3JtaW5nIGlu
Y29ycmVjdCBmbGlwcGluZworICAgICAgICAgICAgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLgor
ICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOiBBZGQg
dGhlIG5ldyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4pOiBDcmVhdGUgYSBXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbgorICAgICAgICBvYmplY3QgaWYgdXNpbmcgdGlsZWQgZHJhd2luZy4KKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6flBsYXRmb3JtQ0FMYXllcldpbik6CisgICAgICAg
IChQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKTogTW92ZSBpbXBsZW1lbnRhdGlvbiB0byBp
bnRlcm5hbCBjbGFzcy4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0T3BhcXVlKTog
RGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKTogRGl0
dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKTogRGl0dG8u
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZSk6IERpdHRvLgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpjb3JuZXJSYWRpdXMpOiBEaXR0by4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbjo6dGlsZWRCYWNraW5nKTogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbCk6IFJlbW92ZSB0aWxpbmctbG9naWMKKyAgICAgICAgcmVsYXRlZCBtZW1iZXIgdmFyaWFi
bGVzLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6On5QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Zmxp
cENvbnRleHQpOiBBZGRlZCBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgIChzaG91bGRJbnZl
cnRCZWZvcmVEcmF3aW5nQ29udGVudCk6IERpdHRvLgorICAgICAgICAoc2hvdWxkSW52ZXJ0QmVm
b3JlRHJhd2luZ1JlcGFpbnRDb3VudGVycyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6ZHJhd1JlcGFpbnRDb3VudGVycyk6IEhlbHBlciBtZXRob2QgdG8KKyAg
ICAgICAgc2hhcmUgY29kZSBiZXR3ZWVuIHRoZSB0d28gbGF5ZXIgY2xhc3Nlcy4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheSk6IHVz
ZSBudWxscHRyLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRz
RGlzcGxheSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNl
dE5lZWRzRGlzcGxheUluUmVjdCk6IE1vdmUgdGlsZWQgY29kZQorICAgICAgICB0byBXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbiBhbmQgc2ltcGxpZnkgdGhlIHJlbWFpbmcgY29kZS4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRTdWJsYXllcnMpOiBSZW1vdmUgdGlsZSBj
b2RlLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmdldFN1YmxheWVycyk6
IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZUFsbFN1
YmxheWVycyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omlu
c2VydFN1YmxheWVyKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6c3VibGF5ZXJDb3VudCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OmluZGV4T2ZTdWJsYXllcik6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OnN1YmxheWVyQXRJbmRleCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldEJvdW5kcyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldEZyYW1lKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6aXNPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXRPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpjb250ZW50c1NjYWxlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Q29udGVudHNTY2FsZSk6IERpdHRvLgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvcmRlcldpZHRoKTogRGl0dG8uCisgICAg
ICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyQ29sb3IpOiBEaXR0by4K
KyAgICAgICAgKGxheWVyVHlwZUlzVGlsZWQpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OmNvbnN0cmFpbmVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZURpc3BsYXlDYWxsYmFjayk6IERlbGV0ZWQu
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSk6IERlbGV0ZWQu
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6cmVtb3ZlVGlsZSk6IERlbGV0
ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVDb3VudCk6
IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVGls
ZXMpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdU
aWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpjcmVh
dGVUaWxlQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6dGlsZWRCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpvd25lcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4p
OgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46On5XZWJUaWxlZEJhY2tpbmdMYXll
cldpbik6CisgICAgICAgIChEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dDo6RGlzcGxheU9uTWFp
blRocmVhZENvbnRleHQpOgorICAgICAgICAocmVkaXNwYXRjaE9uTWFpblF1ZXVlKToKKyAgICAg
ICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2spOgorICAgICAgICAo
V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJU
aWxlZEJhY2tpbmdMYXllcldpbjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW46OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2lu
OjpzZXRPcGFxdWUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmNvbnRlbnRz
U2NhbGUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldENvbnRlbnRzU2Nh
bGUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKToK
KyAgICAgICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3JkZXJDb2xvcik6CisgICAg
ICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6Y3JlYXRlVGlsZUNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnRpbGVkQmFja2luZyk6CisgICAgICAgIChX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmg6IEFkZGVkLgorCiAyMDE1
LTA5LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1l
bnQuY3JlYXRlTm9kZUl0ZXJhdG9yKG51bGwpIC8gRG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihu
dWxsKSBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTg5NjE4KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNzQ4NCw2ICs3NDg0LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxGaWxlU3lzdGVtLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3Vu
ZGF0aW9uXGNmXFdlYkNvcmVBVkNGUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSVNPVlRUQ3VlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGF1ZGlvXEF1ZGlvU2Vzc2lvbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxhdWRpb1xQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbi5jcHAiIC8+CkBAIC0yMDg1MCw2ICsyMDg1NiwxMiBAQAogICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2lu
XFBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5oIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbEluY2x1ZGU+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHTENvbnRleHQuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2dcU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIj4KQEAgLTIyODM0LDQgKzIyODQ2
LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgICA8SW1w
b3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0b21pemF0aW9uc1xtYXNtLnRh
cmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Cis8L1Byb2plY3Q+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTg5NjE4
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMzLDkgKzMwMzMsNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZG9tXENoaWxkTm9kZUxpc3QuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkb21c
Q2xhc3NOb2RlTGlzdC5jcHAiPgotICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDbGllbnRSZWN0LmNwcCI+
CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzIzNCw5
ICszMjMxLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxOb2RlLmNwcCI+CiAg
ICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZG9tXE5vZGVGaWx0ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZG9tPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkb21c
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTcyNjYsNiArNzI2MCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGFnZVxET01TZWN1cml0eVBvbGljeS5jcHAiPgogICAgICAgPEZpbHRlcj5wYWdl
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXERhdGFVUkxEZWNvZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRvbVxDbGFzc0NvbGxlY3Rpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caHRtbFxHZW5lcmljQ2FjaGVkSFRNTENvbGxlY3Rpb24uY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhXHdp
bjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91
cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cQ29vcmRp
bmF0ZXMuaCI+CkBAIC0xMDEwMCw5ICsxMDEwMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkb21cQ2hpbGROb2RlTGlzdC5oIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xhc3NOb2Rl
TGlzdC5oIj4KLSAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xpZW50UmVjdC5oIj4KICAgICAgIDxGaWx0
ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTI1NSw2ICsxNTI1MiwxMiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxET01TZWN1cml0eVBvbGljeS5oIj4K
ICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yXEluc3BlY3RvckZy
b250ZW5kUm91dGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxu
ZXR3b3JrXERhdGFVUkxEZWNvZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
b21cQ2xhc3NDb2xsZWN0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xjYVx3aW5cV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCI+CisgICAgICA8
RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRl
PgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxj
c3NcQ1NTR3JhbW1hci55LmluIj4KQEAgLTE1NDU5LDQgKzE1NDYyLDQgQEAKICAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cd2luPC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwv
UHJvamVjdD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5jcHAJKHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdAogICAgIGlu
ZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0cmxlbih0ZXh0KTsKICAgICBpbmRp
Y2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRl
eHQpOworCiAgICAgCiAgICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41Zik7CiAgICAg
Q0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRv
ckJveCwgMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
Q0FDRkxheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlzaW9uIDE4OTYx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJU
cmVlSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NiwxMSArMTQ2LDExIEBAIHZvaWQgQ0FD
RkxheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOwogICAgIG1fcm9vdExheWVyLT5zZXRHZW9tZXRy
eUZsaXBwZWQodHJ1ZSk7CiAKLSNpZm5kZWYgTkRFQlVHCisvKiNpZm5kZWYgTkRFQlVHCiAgICAg
Q0dDb2xvclJlZiBkZWJ1Z0NvbG9yID0gQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0IoMSwgMCwgMCwg
MC44KTsKICAgICBtX3Jvb3RMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKGRlYnVnQ29sb3IpOwog
ICAgIENHQ29sb3JSZWxlYXNlKGRlYnVnQ29sb3IpOwotI2VuZGlmCisjZW5kaWYqLwogfQogCiBD
QUNGTGF5ZXJUcmVlSG9zdDo6fkNBQ0ZMYXllclRyZWVIb3N0KCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAxODk2MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlSGVhZGVy
RGV0ZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCIKICNpbmNs
dWRlIDxRdWFydHpDb3JlL0NvcmVBbmltYXRpb25DRi5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3Rl
bUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KQEAgLTE0MiwxNyArMTQzLDIwIEBAIFBsYXRmb3JtQ0FMYXllcldpbjo6UGxhdGZv
cm1DQUxheWVyV2luKEwKICNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIHRoZSBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCBvYmplY3QgYW5kIHBvaW50IHRvIGl0IGluIHRoZSB1c2VyZGF0YS4KLSAg
ICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogaW50ZXJuID0gbmV3IFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsKHRoaXMpOworICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKiBpbnRl
cm4gPSBudWxscHRyOworCisgICAgaWYgKHVzZXNUaWxlZEJhY2tpbmdMYXllcigpKSB7CisgICAg
ICAgIGludGVybiA9IG5ldyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbih0aGlzKTsKKyAgICAgICAg
VGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbio+KGludGVybiktPmNyZWF0ZVRpbGVDb250cm9sbGVyKHRoaXMpOwor
ICAgICAgICBtX2N1c3RvbVN1YmxheWVycyA9IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1DQUxh
eWVyTGlzdD4odGlsZUNvbnRyb2xsZXItPmNvbnRhaW5lckxheWVycygpKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgaW50ZXJuID0gbmV3IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKHRoaXMpOwor
CiAgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9sYXllci5nZXQoKSwgaW50ZXJuKTsKIAogICAg
IC8vIFNldCB0aGUgZGlzcGxheSBjYWxsYmFjawogICAgIENBQ0ZMYXllclNldERpc3BsYXlDYWxs
YmFjayhtX2xheWVyLmdldCgpLCBkaXNwbGF5Q2FsbGJhY2spOwogICAgIENBQ0ZMYXllclNldExh
eW91dENhbGxiYWNrKG1fbGF5ZXIuZ2V0KCksIGxheW91dFN1YmxheWVyc1Byb2MpOwotCi0gICAg
aWYgKHVzZXNUaWxlZEJhY2tpbmdMYXllcigpKSB7Ci0gICAgICAgIFRpbGVDb250cm9sbGVyKiB0
aWxlQ29udHJvbGxlciA9IGludGVybi0+Y3JlYXRlVGlsZUNvbnRyb2xsZXIodGhpcyk7Ci0gICAg
ICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUNBTGF5ZXJM
aXN0Pih0aWxlQ29udHJvbGxlci0+Y29udGFpbmVyTGF5ZXJzKCkpOwotICAgIH0KIH0KIAogUGxh
dGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVyV2luKCkKQEAgLTE2MCw5ICsxNjQsMTIg
QEAgUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVyV2luKAogICAgIC8vIFRvc3Mg
YWxsIHRoZSBraWRzCiAgICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CiAKLSAgICAvLyBHZXQgcmlk
IG9mIHRoZSB1c2VyIGRhdGEKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogbGF5ZXJJ
bnRlcm4gPSBpbnRlcm4odGhpcyk7Ci0gICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9sYXllci5n
ZXQoKSwgMCk7CisgICAgaWYgKHVzZXNUaWxlZEJhY2tpbmdMYXllcigpKQorICAgICAgICByZWlu
dGVycHJldF9jYXN0PFdlYlRpbGVkQmFja2luZ0xheWVyV2luKj4obGF5ZXJJbnRlcm4pLT5pbnZh
bGlkYXRlKCk7CisKKyAgICAvLyBHZXQgcmlkIG9mIHRoZSB1c2VyIGRhdGEKKyAgICBDQUNGTGF5
ZXJTZXRVc2VyRGF0YShtX2xheWVyLmdldCgpLCBudWxscHRyKTsKIAogICAgIENBQ0ZMYXllclJl
bW92ZUZyb21TdXBlcmxheWVyKG1fbGF5ZXIuZ2V0KCkpOwogCkBAIC0zNTgsMTIgKzM2NSwxMiBA
QCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0TWFzayhQbGF0Zm9yCiAKIGJvb2wgUGxhdGZv
cm1DQUxheWVyV2luOjppc09wYXF1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENBQ0ZMYXllcklz
T3BhcXVlKG1fbGF5ZXIuZ2V0KCkpOworICAgIHJldHVybiBpbnRlcm4odGhpcyktPmlzT3BhcXVl
KCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRPcGFxdWUoYm9vbCB2YWx1ZSkK
IHsKLSAgICBDQUNGTGF5ZXJTZXRPcGFxdWUobV9sYXllci5nZXQoKSwgdmFsdWUpOworICAgIGlu
dGVybih0aGlzKS0+c2V0T3BhcXVlKHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQog
CkBAIC01MjYsMTkgKzUzMywxMyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0QmFja2dy
b3VuZENvCiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB2
YWx1ZSkKIHsKLSAgICBDQUNGTGF5ZXJTZXRCb3JkZXJXaWR0aChtX2xheWVyLmdldCgpLCB2YWx1
ZSk7CisgICAgaW50ZXJuKHRoaXMpLT5zZXRCb3JkZXJXaWR0aCh2YWx1ZSk7CiAgICAgc2V0TmVl
ZHNDb21taXQoKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9y
KGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKLSAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAg
dmFsdWUuZ2V0UkdCQShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJd
LCBjb21wb25lbnRzWzNdKTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9y
U3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBSZXRh
aW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFj
ZS5nZXQoKSwgY29tcG9uZW50cykpOwotCi0gICAgQ0FDRkxheWVyU2V0Qm9yZGVyQ29sb3IobV9s
YXllci5nZXQoKSwgY29sb3IuZ2V0KCkpOworICAgIGludGVybih0aGlzKS0+c2V0Qm9yZGVyQ29s
b3IodmFsdWUpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKQEAgLTU4NywxOCArNTg4LDEz
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRFZGdlQW50aWFsaWEKIAogZmxvYXQgUGxh
dGZvcm1DQUxheWVyV2luOjpjb250ZW50c1NjYWxlKCkgY29uc3QKIHsKLSNpZiBIQVZFKENBQ0ZM
QVlFUl9TRVRDT05URU5UU1NDQUxFKQotICAgIHJldHVybiBDQUNGTGF5ZXJHZXRDb250ZW50c1Nj
YWxlKG1fbGF5ZXIuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4gMS4wZjsKLSNlbmRpZgorICAg
IHJldHVybiBpbnRlcm4odGhpcyktPmNvbnRlbnRzU2NhbGUoKTsKIH0KIAogdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0jaWYg
SEFWRShDQUNGTEFZRVJfU0VUQ09OVEVOVFNTQ0FMRSkKLSAgICBDQUNGTGF5ZXJTZXRDb250ZW50
c1NjYWxlKG1fbGF5ZXIuZ2V0KCksIHNjYWxlRmFjdG9yKTsKLSNlbmRpZgorICAgIGludGVybih0
aGlzKS0+c2V0Q29udGVudHNTY2FsZShzY2FsZUZhY3Rvcik7CisgICAgc2V0TmVlZHNDb21taXQo
KTsKIH0KIAogZmxvYXQgUGxhdGZvcm1DQUxheWVyV2luOjpjb3JuZXJSYWRpdXMoKSBjb25zdApA
QCAtNzc2LDUgKzc3Miw1IEBAIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyV2luOjp0aWxl
ZEIKICAgICBpZiAoIXVzZXNUaWxlZEJhY2tpbmdMYXllcigpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJldHVybiBpbnRlcm4odGhpcyktPnRpbGVkQmFja2luZygpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFdlYlRpbGVkQmFja2luZ0xheWVyV2luKj4oaW50ZXJuKHRo
aXMpKS0+dGlsZWRCYWNraW5nKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDMzICs0MCw5IEBACiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLS8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGEgc2lu
Z2xlIHRpbGUgaW4gYSB0aWxlZCBsYXllci4gU2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0bwotLy8g
YXZvaWQgbG90cyBvZiBzbWFsbCB0aWxlcyAoYW5kIHRoZXJlZm9yZSBsb3RzIG9mIGRyYXdpbmcg
Y2FsbGJhY2tzKSwgYnV0IHNtYWxsIGVub3VnaAotLy8gdG8ga2VlcCB0aGUgb3ZlcmFsbCB0aWxl
IGNvc3QgbG93Lgotc3RhdGljIGNvbnN0IGludCBjVGlsZWRMYXllclRpbGVTaXplID0gNTEyOwot
Ci1zdGF0aWMgYm9vbCBsYXllclR5cGVJc1RpbGVkKGNvbnN0IFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSkKLXsKLSAgICByZXR1cm4gbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlV2ViVGlsZWRMYXllcgotICAgICAgICB8fCBsYXllclR5cGUgPT0gUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIKLSAgICAgICAgfHwg
bGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7
Ci19Ci0KIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbChQbGF0Zm9ybUNBTGF5ZXIqIG93bmVyKQotICAgIDogbV90aWxlU2l6ZShDR1NpemVNYWtl
KGNUaWxlZExheWVyVGlsZVNpemUsIGNUaWxlZExheWVyVGlsZVNpemUpKQotICAgICwgbV9jb25z
dHJhaW5lZFNpemUoY29uc3RyYWluZWRTaXplKG93bmVyLT5ib3VuZHMoKS5zaXplKCkpKQotICAg
ICwgbV9vd25lcihvd25lcikKLXsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5s
YXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gVGlsZWQgbGF5ZXJzIGFyZSBwbGFjZWQgaW4gYSBj
aGlsZCBsYXllciB0aGF0IGlzIGFsd2F5cyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIFRpbGVkTGF5
ZXIKLSAgICAgICAgbV90aWxlUGFyZW50ID0gYWRvcHRDRihDQUNGTGF5ZXJDcmVhdGUoa0NBQ0ZM
YXllcikpOwotICAgICAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihtX293bmVyLT5wbGF0Zm9y
bUxheWVyKCksIG1fdGlsZVBhcmVudC5nZXQoKSwgMCk7Ci0jaWYgSEFWRShDQUNGTEFZRVJfU0VU
Q09OVEVOVFNTQ0FMRSkKLSAgICAgICAgQ0FDRkxheWVyU2V0Q29udGVudHNTY2FsZShtX3RpbGVQ
YXJlbnQuZ2V0KCksIENBQ0ZMYXllckdldENvbnRlbnRzU2NhbGUobV9vd25lci0+cGxhdGZvcm1M
YXllcigpKSk7Ci0jZW5kaWYKLQotICAgICAgICB1cGRhdGVUaWxlcygpOwotICAgIH0KKyAgICA6
IG1fb3duZXIob3duZXIpCit7CiB9CiAKIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp+UGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKQpAQCAtOTYsNiArNzIsMjQgQEAgc3RhdGljIHZvaWQg
cmVkaXNwYXRjaE9uTWFpblF1ZXVlKHZvaWQqCiAgICAgc2VsZi0+ZGlzcGxheUNhbGxiYWNrKHJl
dGFpbmVkQ29udGV4dC0+bGF5ZXIuZ2V0KCksIHJldGFpbmVkQ29udGV4dC0+Y29udGV4dC5nZXQo
KSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmZsaXBDb250ZXh0KENH
Q29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IGhlaWdodCkKK3sKKyAgICBDR0NvbnRleHRTY2Fs
ZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IDAsIC1oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRJbnZlcnRCZWZvcmVEcmF3aW5n
Q29udGVudChQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5
ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBjb29yZGluYXRlT3JpZW50YXRp
b24pCit7CisgICAgcmV0dXJuIChsYXllclR5cGUgIT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXIpCisgICAgICAgICYmIChjb29yZGluYXRlT3JpZW50YXRp
b24gPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pOworfQor
CitzdGF0aWMgYm9vbCBzaG91bGRJbnZlcnRCZWZvcmVEcmF3aW5nUmVwYWludENvdW50ZXJzKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllcjo6Q29tcG9z
aXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGNvb3JkaW5hdGVPcmllbnRhdGlvbikKK3sKKyAg
ICByZXR1cm4gKGxheWVyVHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFj
a2luZ1RpbGVMYXllcikKKyAgICAgICAgJiYgKGNvb3JkaW5hdGVPcmllbnRhdGlvbiA9PSBHcmFw
aGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bik7Cit9CisKIHZvaWQgUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYgY2FM
YXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkg
ewpAQCAtMTA5LDY5ICsxMDMsMzEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
ZGlzcGxheQogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKICAgICBDR1JlY3Qg
bGF5ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKLSAgICBpZiAob3duZXIoKS0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7Ci0gICAgICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIDAsIC1sYXllckJvdW5kcy5zaXplLmhlaWdodCk7Ci0gICAgfQorICAgIFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSA9IG93bmVyKCktPmxheWVyVHlwZSgp
OworICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiA9IG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3Jp
ZW50YXRpb24oKTsKIAotICAgIGlmIChvd25lcigpLT5vd25lcigpKSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgaWYgKHNob3VsZEludmVy
dEJlZm9yZURyYXdpbmdDb250ZW50KGxheWVyVHlwZSwgb3JpZW50YXRpb24pKQorICAgICAgICBm
bGlwQ29udGV4dChjb250ZXh0LCBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7CiAKLSAgICAgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1
c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKLSAgICAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBs
YXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQotICAgICAgICBDR1JlY3QgY2xpcEJvdW5k
cyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKLSAgICAgICAgSW50UmVj
dCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwotICAgICAgICBvd25lcigpLT5v
d25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKG93bmVyKCksIGdyYXBoaWNzQ29u
dGV4dCwgY2xpcCk7Ci0gICAgfQotI2lmbmRlZiBOREVCVUcKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2UnZCBh
dm9pZCBjYWxsaW5nIC1zZXROZWVkc0Rpc3BsYXkgb24gYSBsYXllciB0aGF0IGlzIGEgcGxhaW4g
Y29sb3IsCi0gICAgICAgIC8vIHNvIENBIG5ldmVyIG1ha2VzIGJhY2tpbmcgc3RvcmUgZm9yIGl0
ICh3aGljaCBpcyB3aGF0IC1zZXROZWVkc0Rpc3BsYXkgd2lsbCBkbyBhYm92ZSkuCi0gICAgICAg
IENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAwLjBmLCAxLjBmLCAwLjBmLCAxLjBm
KTsKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGF5ZXJCb3VuZHMpOwotICAg
IH0KLSNlbmRpZgorICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4
dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQorICAgIC8vIHNtYWxsZXIgdGhhbiB0
aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKKyAgICBDR1JlY3QgY2xpcEJvdW5k
cyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICBJbnRSZWN0IGNs
aXAoZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CisgICAgb3duZXIoKS0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhvd25lcigpLCBncmFwaGljc0NvbnRleHQsIGNs
aXApOwogCiAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBh
aW50Q291bnRlcihvd25lcigpKSkgewotICAgICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6bnVt
YmVyKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3Vu
dChvd25lcigpKSk7CisgICAgICAgIGludCBkcmF3Q291bnQgPSBvd25lcigpLT5vd25lcigpLT5w
bGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQob3duZXIoKSk7CiAKICAgICAgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAotICAgICAgICAvLyBNYWtlIHRoZSBiYWNr
Z3JvdW5kIG9mIHRoZSBjb3VudGVyIHRoZSBzYW1lIGFzIHRoZSBib3JkZXIgY29sb3IsCi0gICAg
ICAgIC8vIHVubGVzcyB0aGVyZSBpcyBubyBib3JkZXIsIHRoZW4gbWFrZSBpdCByZWQKLSAgICAg
ICAgZmxvYXQgYm9yZGVyV2lkdGggPSBDQUNGTGF5ZXJHZXRCb3JkZXJXaWR0aChjYUxheWVyKTsK
LSAgICAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkgewotICAgICAgICAgICAgQ0dDb2xvclJlZiBi
b3JkZXJDb2xvciA9IENBQ0ZMYXllckdldEJvcmRlckNvbG9yKGNhTGF5ZXIpOwotICAgICAgICAg
ICAgY29uc3QgQ0dGbG9hdCogY29sb3JzID0gQ0dDb2xvckdldENvbXBvbmVudHMoYm9yZGVyQ29s
b3IpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIGNvbG9y
c1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0sIGNvbG9yc1szXSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAuMGYs
IDAuMGYsIDAuOGYpOwotICAgICAgICAKLSAgICAgICAgQ0dSZWN0IGFCb3VuZHMgPSBsYXllckJv
dW5kczsKLQotICAgICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEwICogdGV4dC5sZW5n
dGgoKTsKLSAgICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDIyOwotICAgICAgICBDR0NvbnRl
eHRGaWxsUmVjdChjb250ZXh0LCBhQm91bmRzKTsKLSAgICAgICAgCi0gICAgICAgIEZvbnREZXNj
cmlwdGlvbiBkZXNjOwotCi0gICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAg
ICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7Ci0gICAgICAgIFN5c3RlbVBhcmFt
ZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1ldHJp
Y3MsIDApOwotICAgICAgICBkZXNjLnNldE9uZUZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9u
dC5sZkZhY2VOYW1lKTsKLQotICAgICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZSgxOCk7Ci0gICAg
ICAgIAotICAgICAgICBGb250Q2FzY2FkZSBmb250ID0gRm9udENhc2NhZGUoZGVzYywgMCwgMCk7
Ci0gICAgICAgIGZvbnQudXBkYXRlKDApOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjZyhj
b250ZXh0KTsKLSAgICAgICAgY2cuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0gICAgICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4odGV4dCksIElu
dFBvaW50KGFCb3VuZHMub3JpZ2luLnggKyA1LCBhQm91bmRzLm9yaWdpbi55ICsgMTcpKTsKKyAg
ICAgICAgaWYgKHNob3VsZEludmVydEJlZm9yZURyYXdpbmdSZXBhaW50Q291bnRlcnMobGF5ZXJU
eXBlLCBvcmllbnRhdGlvbikpCisgICAgICAgICAgICBmbGlwQ29udGV4dChjb250ZXh0LCBsYXll
ckJvdW5kcy5zaXplLmhlaWdodCk7CisKKyAgICAgICAgZHJhd1JlcGFpbnRDb3VudGVycyhjYUxh
eWVyLCBjb250ZXh0LCBsYXllckJvdW5kcywgZHJhd0NvdW50KTsKIAotICAgICAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOyAgICAgICAgCisgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiAgICAgfQogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsKQEAgLTE3OSw1NyArMTM1LDg4IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OmRpc3BsYXkKICAgICBvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXll
ckRpZERpc3BsYXkob3duZXIoKSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmRyYXdSZXBhaW50Q291bnRlcnMoQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJCb3VuZHMsIGludCBkcmF3Q291bnQpCit7CisgICAgU3Ry
aW5nIHRleHQgPSBTdHJpbmc6Om51bWJlcihkcmF3Q291bnQpOworCisgICAgLy8gTWFrZSB0aGUg
YmFja2dyb3VuZCBvZiB0aGUgY291bnRlciB0aGUgc2FtZSBhcyB0aGUgYm9yZGVyIGNvbG9yLAor
ICAgIC8vIHVubGVzcyB0aGVyZSBpcyBubyBib3JkZXIsIHRoZW4gbWFrZSBpdCByZWQKKyAgICBm
bG9hdCBib3JkZXJXaWR0aCA9IENBQ0ZMYXllckdldEJvcmRlcldpZHRoKGNhTGF5ZXIpOworICAg
IGlmIChib3JkZXJXaWR0aCA+IDApIHsKKyAgICAgICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9
IENBQ0ZMYXllckdldEJvcmRlckNvbG9yKGNhTGF5ZXIpOworICAgICAgICBjb25zdCBDR0Zsb2F0
KiBjb2xvcnMgPSBDR0NvbG9yR2V0Q29tcG9uZW50cyhib3JkZXJDb2xvcik7CisgICAgICAgIENH
Q29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCBjb2xvcnNbMF0sIGNvbG9yc1sxXSwgY29s
b3JzWzJdLCBjb2xvcnNbM10pOworICAgIH0gZWxzZQorICAgICAgICBDR0NvbnRleHRTZXRSR0JG
aWxsQ29sb3IoY29udGV4dCwgMS4wZiwgMC4wZiwgMC4wZiwgMC44Zik7CisKKyAgICBDR1JlY3Qg
YUJvdW5kcyA9IGxheWVyQm91bmRzOworCisgICAgYUJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAx
MCAqIHRleHQubGVuZ3RoKCk7CisgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDIyOworICAgIENH
Q29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGFCb3VuZHMpOworCisgICAgRm9udERlc2NyaXB0aW9u
IGRlc2M7CisKKyAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgbWV0cmljcy5jYlNp
emUgPSBzaXplb2YobWV0cmljcyk7CisgICAgU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5P
TkNMSUVOVE1FVFJJQ1MsIG1ldHJpY3MuY2JTaXplLCAmbWV0cmljcywgMCk7CisgICAgZGVzYy5z
ZXRPbmVGYW1pbHkobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSk7CisKKyAgICBk
ZXNjLnNldENvbXB1dGVkU2l6ZSgxOCk7CisKKyAgICBGb250Q2FzY2FkZSBmb250ID0gRm9udENh
c2NhZGUoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQgY2coY29udGV4dCk7CisgICAgY2cuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgY2cuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwg
SW50UG9pbnQoYUJvdW5kcy5vcmlnaW4ueCArIDUsIGFCb3VuZHMub3JpZ2luLnkgKyAxNykpOwor
CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KKwogdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRS
ZWN0KiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYgKGRpcnR5UmVjdCkgewogICAgICAgICBDR1JlY3Qg
cmVjdCA9ICpkaXJ0eVJlY3Q7CiAgICAgICAgIENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShvd25l
cigpLT5wbGF0Zm9ybUxheWVyKCksICZyZWN0KTsKICAgICB9IGVsc2UKLSAgICAgICAgQ0FDRkxh
eWVyU2V0TmVlZHNEaXNwbGF5KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgMCk7CisgICAgICAg
IENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIG51bGxw
dHIpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3Bs
YXkoKQogewotICAgIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KDApOworICAgIGludGVybmFsU2V0
TmVlZHNEaXNwbGF5KG51bGxwdHIpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiB7
Ci0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBPbmx5IHNldE5lZWRzRGlzcGxheSBmb3IgdGlsZXMgdGhhdCBhcmUgY3Vy
cmVudGx5IHZpc2libGUKLSAgICAgICAgaW50IG51bVRpbGVMYXllcnMgPSB0aWxlQ291bnQoKTsK
LSAgICAgICAgQ0dSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtVGlsZUxheWVyczsgKytpKQotICAgICAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNE
aXNwbGF5KHRpbGVBdEluZGV4KGkpLCAmcmVjdCk7Ci0KLSAgICAgICAgaWYgKG1fb3duZXItPm93
bmVyKCkgJiYgbV9vd25lci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3Vu
dGVyKG1fb3duZXIpKSB7Ci0gICAgICAgICAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBtX293bmVy
LT5ib3VuZHMoKTsKLSAgICAgICAgICAgIENHUmVjdCBpbmRpY2F0b3JSZWN0ID0gQ0dSZWN0TWFr
ZShsYXllckJvdW5kcy5vcmlnaW4ueCwgbGF5ZXJCb3VuZHMub3JpZ2luLnksIDgwLCAyNSk7Ci0g
ICAgICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkodGlsZUF0SW5kZXgoMCksICZpbmRp
Y2F0b3JSZWN0KTsKKyAgICBpZiAoIW93bmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChvd25lcigpLT5sYXllclR5cGUoKSAhPSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRp
bGVkQmFja2luZ0xheWVyKTsKKworICAgIGlmIChvd25lcigpLT5vd25lcigpKSB7CisgICAgICAg
IGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIo
b3duZXIoKSkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IG93bmVyKCkt
PmJvdW5kcygpOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxh
eWVyQm91bmRzOworCisgICAgICAgICAgICAvLyBXZSBhc3N1bWUgYSBtYXhpbXVtIG9mIDQgZGln
aXRzIGFuZCBhIGZvbnQgc2l6ZSBvZiAxOC4KKyAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVj
dC5zZXRXaWR0aCg4MCk7CisgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0SGVpZ2h0
KDIyKTsKKyAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc1RvcERvd24pCisgICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0
LnNldFkobGF5ZXJCb3VuZHMuaGVpZ2h0KCkgLSAobGF5ZXJCb3VuZHMueSgpICsgcmVwYWludENv
dW50ZXJSZWN0LmhlaWdodCgpKSk7CisgICAgICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxh
eSgmcmVwYWludENvdW50ZXJSZWN0KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAob3duZXIo
KS0+bGF5ZXJUeXBlKCkgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcikgewot
ICAgICAgICBpZiAob3duZXIoKSAmJiBvd25lcigpLT5vd25lcigpKSB7Ci0gICAgICAgICAgICBp
ZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG93
bmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gb3duZXIo
KS0+Ym91bmRzKCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlcGFpbnRDb3VudGVyUmVj
dCA9IGxheWVyQm91bmRzOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11
bSBvZiA0IGRpZ2l0cyBhbmQgYSBmb250IHNpemUgb2YgMTguCi0gICAgICAgICAgICAgICAgcmVw
YWludENvdW50ZXJSZWN0LnNldFdpZHRoKDgwKTsKLSAgICAgICAgICAgICAgICByZXBhaW50Q291
bnRlclJlY3Quc2V0SGVpZ2h0KDIyKTsKLSAgICAgICAgICAgICAgICBpZiAob3duZXIoKS0+b3du
ZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQotICAgICAgICAgICAg
ICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0WShsYXllckJvdW5kcy5oZWlnaHQoKSAtIChs
YXllckJvdW5kcy55KCkgKyByZXBhaW50Q291bnRlclJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAg
ICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmcmVwYWludENvdW50ZXJSZWN0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNB
TGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29t
cG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pIHsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qg
ZmxpcHBlZERpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAgICAgICAgICBmbGlwcGVkRGly
dHlSZWN0LnNldFkob3duZXIoKS0+Ym91bmRzKCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVj
dC55KCkgKyBmbGlwcGVkRGlydHlSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgaW50
ZXJuYWxTZXROZWVkc0Rpc3BsYXkoJmZsaXBwZWREaXJ0eVJlY3QpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikgeworICAgICAgICAgICAgRmxvYXRS
ZWN0IGZsaXBwZWREaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgICAgICBmbGlwcGVkRGly
dHlSZWN0LnNldFkob3duZXIoKS0+Ym91bmRzKCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVj
dC55KCkgKyBmbGlwcGVkRGlydHlSZWN0LmhlaWdodCgpKSk7CisgICAgICAgICAgICBpbnRlcm5h
bFNldE5lZWRzRGlzcGxheSgmZmxpcHBlZERpcnR5UmVjdCk7CisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmZGlydHlSZWN0
KTsKICAgICB9CisKKyAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmZGlydHlSZWN0KTsKKwog
ICAgIG93bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7CiB9CiAKQEAgLTI0NywxMSArMjM0LDYgQEAg
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0U3VibAogICAgICAgICBDQUNGTGF5
ZXJJbnNlcnRTdWJsYXllcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGxpc3RbaV0tPnBsYXRm
b3JtTGF5ZXIoKSwgaSk7CiAKICAgICBvd25lcigpLT5zZXROZWVkc0NvbW1pdCgpOwotCi0gICAg
aWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8v
IFByZXNlcnZlIHRoZSB0aWxlIHBhcmVudCBhZnRlciBzZXQKLSAgICAgICAgQ0FDRkxheWVySW5z
ZXJ0U3VibGF5ZXIob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3RpbGVQYXJlbnQuZ2V0KCks
IDApOwotICAgIH0KIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Z2V0U3Vi
bGF5ZXJzKFBsYXRmb3JtQ0FMYXllckxpc3QmIGxpc3QpIGNvbnN0CkBAIC0yNjQsMzUgKzI0Niwy
MCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpnZXRTdWJsCiAKICAgICBzaXpl
X3QgY291bnQgPSBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKTsKIAotICAgIHNpemVfdCBsYXll
cnNUb1NraXAgPSAwOwotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlw
ZSgpKSkgewotICAgICAgICAvLyBFeGNsdWRlIHRoZSB0aWxlIHBhcmVudCBsYXllci4KLSAgICAg
ICAgbGF5ZXJzVG9Ta2lwID0gMTsKLSAgICB9Ci0KLSAgICBsaXN0LnJlc2l6ZShjb3VudCAtIGxh
eWVyc1RvU2tpcCk7Ci0gICAgZm9yIChzaXplX3QgYXJyYXlJbmRleCA9IGxheWVyc1RvU2tpcDsg
YXJyYXlJbmRleCA8IGNvdW50OyArK2FycmF5SW5kZXgpCi0gICAgICAgIGxpc3RbYXJyYXlJbmRl
eCAtIGxheWVyc1RvU2tpcF0gPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihjb25z
dF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVycywgYXJyYXlJbmRl
eCkpKTsKKyAgICBsaXN0LnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChzaXplX3QgYXJyYXlJbmRl
eCA9IDA7IGFycmF5SW5kZXggPCBjb3VudDsgKythcnJheUluZGV4KQorICAgICAgICBsaXN0W2Fy
cmF5SW5kZXhdID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoY29uc3RfY2FzdDx2
b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGFycmF5SW5kZXgpKSk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZUFsbFN1YmxheWVycygp
CiB7Ci0gICAgQ0FDRkxheWVyU2V0U3VibGF5ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwg
MCk7CisgICAgQ0FDRkxheWVyU2V0U3VibGF5ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwg
bnVsbHB0cik7CiAgICAgb3duZXIoKS0+c2V0TmVlZHNDb21taXQoKTsKLQotICAgIGlmIChsYXll
clR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewotICAgICAgICAvLyBSZXN0b3Jl
IHRoZSB0aWxlIHBhcmVudCBhZnRlciByZW1vdmFsCi0gICAgICAgIENBQ0ZMYXllckluc2VydFN1
YmxheWVyKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV90aWxlUGFyZW50LmdldCgpLCAwKTsK
LSAgICB9CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omluc2VydFN1Ymxh
eWVyKFBsYXRmb3JtQ0FMYXllciYgbGF5ZXIsIHNpemVfdCBpbmRleCkKIHsKICAgICBpbmRleCA9
IG1pbihpbmRleCwgc3VibGF5ZXJDb3VudCgpKTsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZCht
X293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gQWRkIDEgdG8gYWNjb3VudCBmb3Ig
dGhlIHRpbGUgcGFyZW50IGxheWVyCi0gICAgICAgICsraW5kZXg7Ci0gICAgfQogCiAgICAgbGF5
ZXIucmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKICAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihv
d25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGxheWVyLnBsYXRmb3JtTGF5ZXIoKSwgaW5kZXgpOwpA
QCAtMzAyLDE1ICsyNjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnNl
cnRTCiBzaXplX3QgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnN1YmxheWVyQ291bnQoKSBj
b25zdAogewogICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJz
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgc2l6ZV90IGNvdW50ID0gc3VibGF5ZXJz
ID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwOwotCi0gICAgaWYgKGxheWVyVHlwZUlz
VGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFN1YnRyYWN0IDEgdG8g
YWNjb3VudCBmb3IgdGhlIHRpbGUgcGFyZW50IGxheWVyCi0gICAgICAgIEFTU0VSVChjb3VudCA+
IDApOwotICAgICAgICBjb3VudC0tOwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKKyAgICBy
ZXR1cm4gc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwOwogfQogCiBp
bnQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmluZGV4T2ZTdWJsYXllcihjb25zdCBQbGF0
Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSkKQEAgLTMyNSwxNiArMjg0LDkgQEAgaW50IFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjppbmRleE9mUwogCiAgICAgc2l6ZV90IG4gPSBDRkFycmF5R2V0
Q291bnQoc3VibGF5ZXJzKTsKIAotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxh
eWVyVHlwZSgpKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkgewot
ICAgICAgICAgICAgaWYgKENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpKSA9PSBy
ZWYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgLSAxOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVycywgaSkgPT0gcmVmKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuOyArK2kpIHsKKyAgICAgICAgaWYgKENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJz
LCBpKSA9PSByZWYpCisgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9CiAKICAgICByZXR1cm4g
LTE7CkBAIC0zNDIsMzAgKzI5NCwyMCBAQCBpbnQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OmluZGV4T2ZTCiAKIFBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OnN1YmxheWVyQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKGxheWVyVHlwZUlz
VGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIEFkZCAxIHRvIGFjY291
bnQgZm9yIHRoZSB0aWxlIHBhcmVudCBsYXllcgotICAgICAgICBpbmRleCsrOwotICAgIH0KLQog
ICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG93bmVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSk7CiAgICAgaWYgKCFzdWJsYXllcnMgfHwgaW5kZXggPCAwIHx8IENG
QXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDw9IGluZGV4KQotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1DQUxheWVyKHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lk
Kj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGluZGV4KSkpKTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvdW5kcyhjb25zdCBG
bG9hdFJlY3QmIGJvdW5kcykKIHsKLSAgICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3QocmVjdCwgb3du
ZXIoKS0+Ym91bmRzKCkpKQorICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChib3VuZHMsIG93bmVy
KCktPmJvdW5kcygpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0FDRkxheWVyU2V0Qm91bmRz
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgcmVjdCk7CisgICAgQ0FDRkxheWVyU2V0Qm91bmRz
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYm91bmRzKTsKICAgICBvd25lcigpLT5zZXROZWVk
c0NvbW1pdCgpOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBl
KCkpKSB7Ci0gICAgICAgIG1fY29uc3RyYWluZWRTaXplID0gY29uc3RyYWluZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKLSAgICAgICAgdXBkYXRlVGlsZXMoKTsKLSAgICB9CiB9CiAKIHZvaWQgUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAg
LTM3NiwxNjYgKzMxOCw0OCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRG
cmFtCiAKICAgICBDQUNGTGF5ZXJTZXRGcmFtZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHJl
Y3QpOwogICAgIG93bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7Ci0KLSAgICBpZiAobGF5ZXJUeXBl
SXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkpCi0gICAgICAgIHVwZGF0ZVRpbGVzKCk7CiB9
CiAKLUNHU2l6ZSBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Y29uc3RyYWluZWRTaXplKGNv
bnN0IENHU2l6ZSYgc2l6ZSkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OmlzT3BhcXVlKCkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgY01heFRpbGVDb3VudCA9IDUxMjsK
LSAgICBjb25zdCBmbG9hdCBjU3FydE1heFRpbGVDb3VudCA9IHNxcnRmKGNNYXhUaWxlQ291bnQp
OwotCi0gICAgQ0dTaXplIGNvbnN0cmFpbmVkU2l6ZSA9IHNpemU7Ci0KLSAgICBpbnQgdGlsZUNv
bHVtbnMgPSBjZWlsZihjb25zdHJhaW5lZFNpemUud2lkdGggLyBtX3RpbGVTaXplLndpZHRoKTsK
LSAgICBpbnQgdGlsZVJvd3MgPSBjZWlsZihjb25zdHJhaW5lZFNpemUuaGVpZ2h0IC8gbV90aWxl
U2l6ZS5oZWlnaHQpOwotCi0gICAgYm9vbCB0b29NYW55VGlsZXMgPSB0aWxlQ29sdW1ucyAmJiBu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIHRpbGVDb2x1bW5zIDwgdGlsZVJvd3MgfHwgdGls
ZUNvbHVtbnMgKiB0aWxlUm93cyA+IGNNYXhUaWxlQ291bnQ7Ci0KLSAgICAvLyBJZiBudW1iZXIg
b2YgdGlsZXMgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgaXMgPCBzcXJ0KGNNYXhUaWxlQ291
bnQpCi0gICAgLy8ganVzdCBzaG9ydGVuIHRoZSBsb25nZXIgZGltZW5zaW9uLiBPdGhlcndpc2Ug
c2hvcnRlbiBib3RoIGRpbWVuc2lvbnMKLSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHJhdGlvIG9m
IHdpZHRoIHRvIGhlaWdodAotCi0gICAgaWYgKHRvb01hbnlUaWxlcykgewotICAgICAgICBpZiAo
dGlsZVJvd3MgPCBjU3FydE1heFRpbGVDb3VudCkKLSAgICAgICAgICAgIHRpbGVDb2x1bW5zID0g
Zmxvb3JmKGNNYXhUaWxlQ291bnQgLyB0aWxlUm93cyk7Ci0gICAgICAgIGVsc2UgaWYgKHRpbGVD
b2x1bW5zIDwgY1NxcnRNYXhUaWxlQ291bnQpCi0gICAgICAgICAgICB0aWxlUm93cyA9IGZsb29y
ZihjTWF4VGlsZUNvdW50IC8gdGlsZUNvbHVtbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHRpbGVSb3dzID0gY2VpbGYoc3FydGYoY01heFRpbGVDb3VudCAqIGNvbnN0cmFpbmVkU2l6
ZS5oZWlnaHQgLyBjb25zdHJhaW5lZFNpemUud2lkdGgpKTsKLSAgICAgICAgICAgIHRpbGVDb2x1
bW5zID0gZmxvb3JmKGNNYXhUaWxlQ291bnQgLyB0aWxlUm93cyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGNvbnN0cmFpbmVkU2l6ZS53aWR0aCA9IHRpbGVDb2x1bW5zICogbV90aWxl
U2l6ZS53aWR0aDsKLSAgICAgICAgY29uc3RyYWluZWRTaXplLmhlaWdodCA9IHRpbGVSb3dzICog
bV90aWxlU2l6ZS5oZWlnaHQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb25zdHJhaW5lZFNp
emU7CisgICAgcmV0dXJuIENBQ0ZMYXllcklzT3BhcXVlKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIo
KSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVEaXNwbGF5Q2Fs
bGJhY2soQ0FDRkxheWVyUmVmIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE9wYXF1ZShib29sIHZhbHVlKQogewotICAgIHN0
YXRpY19jYXN0PFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKj4oQ0FDRkxheWVyR2V0VXNlckRh
dGEobGF5ZXIpKS0+ZHJhd1RpbGUobGF5ZXIsIGNvbnRleHQpOworICAgIENBQ0ZMYXllclNldE9w
YXF1ZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHZhbHVlKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSgpCitmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6Y29udGVudHNTY2FsZSgpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENBQ0ZMYXll
clJlZj4gbmV3TGF5ZXIgPSBhZG9wdENGKENBQ0ZMYXllckNyZWF0ZShrQ0FDRkxheWVyKSk7Ci0g
ICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnQobmV3TGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKDAs
IDEpKTsKLSAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShuZXdMYXllci5nZXQoKSwgdGhpcyk7Ci0g
ICAgQ0FDRkxheWVyU2V0RGlzcGxheUNhbGxiYWNrKG5ld0xheWVyLmdldCgpLCB0aWxlRGlzcGxh
eUNhbGxiYWNrKTsKICNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxFKQotICAgIENB
Q0ZMYXllclNldENvbnRlbnRzU2NhbGUobmV3TGF5ZXIuZ2V0KCksIENBQ0ZMYXllckdldENvbnRl
bnRzU2NhbGUobV90aWxlUGFyZW50LmdldCgpKSk7CisgICAgcmV0dXJuIENBQ0ZMYXllckdldENv
bnRlbnRzU2NhbGUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyNlbHNlCisgICAgcmV0dXJu
IDEuMGY7CiAjZW5kaWYKLQotICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0
U3VibGF5ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0gICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5
ZXIobV90aWxlUGFyZW50LmdldCgpLCBuZXdMYXllci5nZXQoKSwgc3VibGF5ZXJzID8gQ0ZBcnJh
eUdldENvdW50KHN1YmxheWVycykgOiAwKTsKLQotICAgIGlmIChvd25lcigpLT5vd25lcigpLT5w
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkpIHsKLSAgICAgICAgQ0dDb2xvclJlZiBi
b3JkZXJDb2xvciA9IENHQ29sb3JDcmVhdGVHZW5lcmljUkdCKDAuNSwgMCwgMC41LCAwLjcpOwot
ICAgICAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihuZXdMYXllci5nZXQoKSwgYm9yZGVyQ29s
b3IpOwotICAgICAgICBDR0NvbG9yUmVsZWFzZShib3JkZXJDb2xvcik7Ci0gICAgICAgIENBQ0ZM
YXllclNldEJvcmRlcldpZHRoKG5ld0xheWVyLmdldCgpLCAyKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZVRpbGUoKQotewotICAgIENBQ0ZMYXll
clJlbW92ZUZyb21TdXBlcmxheWVyKHRpbGVBdEluZGV4KHRpbGVDb3VudCgpIC0gMSkpOwogfQog
Ci1DQUNGTGF5ZXJSZWYgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVBdEluZGV4KGlu
dCBpbmRleCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldENvbnRlbnRzU2Nh
bGUoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNG
TGF5ZXJHZXRTdWJsYXllcnMobV90aWxlUGFyZW50LmdldCgpKTsKLSAgICBpZiAoIXN1YmxheWVy
cyB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gdGlsZUNvdW50KCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0X2Nhc3Q8
dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpbmRleCkpKTsKKyNpZiBI
QVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxFKQorICAgIENBQ0ZMYXllclNldENvbnRlbnRz
U2NhbGUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBzY2FsZUZhY3Rvcik7CisjZW5kaWYKIH0K
IAotaW50IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp0aWxlQ291bnQoKSBjb25zdAordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyV2lkdGgoZmxvYXQgdmFsdWUp
CiB7Ci0gICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMobV90
aWxlUGFyZW50LmdldCgpKTsKLSAgICByZXR1cm4gc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50
KHN1YmxheWVycykgOiAwOworICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRoKG93bmVyKCktPnBs
YXRmb3JtTGF5ZXIoKSwgdmFsdWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjp1cGRhdGVUaWxlcygpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRC
b3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IEluIGFkZGl0
aW9uIHRvIHJlZG9pbmcgdGhlIG51bWJlciBvZiB0aWxlcywgd2UgbmVlZCB0byBvbmx5IHJlbmRl
ciBhbmQgaGF2ZSBiYWNraW5nCi0gICAgLy8gc3RvcmUgZm9yIHZpc2libGUgbGF5ZXJzCi0gICAg
aW50IG51bVRpbGVzSG9yaXpvbnRhbCA9IGNlaWwobV9jb25zdHJhaW5lZFNpemUud2lkdGggLyBt
X3RpbGVTaXplLndpZHRoKTsKLSAgICBpbnQgbnVtVGlsZXNWZXJ0aWNhbCA9IGNlaWwobV9jb25z
dHJhaW5lZFNpemUuaGVpZ2h0IC8gbV90aWxlU2l6ZS5oZWlnaHQpOwotICAgIGludCBudW1UaWxl
c1RvdGFsID0gbnVtVGlsZXNIb3Jpem9udGFsICogbnVtVGlsZXNWZXJ0aWNhbDsKLSAgICBBU1NF
UlQoIW1fY29uc3RyYWluZWRTaXplLmhlaWdodCB8fCAhbV9jb25zdHJhaW5lZFNpemUud2lkdGgg
fHwgbnVtVGlsZXNUb3RhbCA+IDApOwotCi0gICAgaW50IG51bVRpbGVzVG9DaGFuZ2UgPSBudW1U
aWxlc1RvdGFsIC0gdGlsZUNvdW50KCk7Ci0gICAgaWYgKG51bVRpbGVzVG9DaGFuZ2UgPj0gMCkg
ewotICAgICAgICAvLyBBZGQgbmV3IHRpbGVzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtVGlsZXNUb0NoYW5nZTsgKytpKQotICAgICAgICAgICAgYWRkVGlsZSgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIFJlbW92ZSBvbGQgdGlsZXMKLSAgICAgICAgbnVtVGlsZXNUb0NoYW5n
ZSA9IC1udW1UaWxlc1RvQ2hhbmdlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRp
bGVzVG9DaGFuZ2U7ICsraSkKLSAgICAgICAgICAgIHJlbW92ZVRpbGUoKTsKLSAgICB9CisgICAg
Q0dGbG9hdCBjb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAwIH07CisgICAgUmV0YWluUHRyPENH
Q29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2
aWNlUkdCKCkpOwogCi0gICAgLy8gU2V0IGNvb3JkaW5hdGVzIGZvciBhbGwgdGlsZXMKLSAgICBD
RkFycmF5UmVmIHRpbGVBcnJheSA9IENBQ0ZMYXllckdldFN1YmxheWVycyhtX3RpbGVQYXJlbnQu
Z2V0KCkpOworICAgIGlmICh2YWx1ZS5pc1ZhbGlkKCkpCisgICAgICAgIHZhbHVlLmdldFJHQkEo
Y29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1sz
XSk7CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzSG9yaXpvbnRhbDsgKytpKSB7
Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtVGlsZXNWZXJ0aWNhbDsgKytqKSB7Ci0g
ICAgICAgICAgICBDQUNGTGF5ZXJSZWYgdGlsZSA9IHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4o
Y29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0aWxlQXJyYXksIGkgKiBu
dW1UaWxlc1ZlcnRpY2FsICsgaikpKTsKLSAgICAgICAgICAgIENBQ0ZMYXllclNldFBvc2l0aW9u
KHRpbGUsIENHUG9pbnRNYWtlKGkgKiBtX3RpbGVTaXplLndpZHRoLCBqICogbV90aWxlU2l6ZS5o
ZWlnaHQpKTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1pbihtX3RpbGVTaXplLndpZHRoLCBt
X2NvbnN0cmFpbmVkU2l6ZS53aWR0aCAtIGkgKiBtX3RpbGVTaXplLndpZHRoKTsKLSAgICAgICAg
ICAgIGludCBoZWlnaHQgPSBtaW4obV90aWxlU2l6ZS5oZWlnaHQsIG1fY29uc3RyYWluZWRTaXpl
LmhlaWdodCAtIGogKiBtX3RpbGVTaXplLmhlaWdodCk7Ci0gICAgICAgICAgICBDQUNGTGF5ZXJT
ZXRCb3VuZHModGlsZSwgQ0dSZWN0TWFrZShpICogbV90aWxlU2l6ZS53aWR0aCwgaiAqIG1fdGls
ZVNpemUuaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KSk7Ci0KLSAgICAgICAgICAgIC8vIEZsaXAgWSB0
byBjb21wZW5zYXRlIGZvciB0aGUgZmxpcHBpbmcgdGhhdCBoYXBwZW5zIGR1cmluZyByZW5kZXIg
dG8gbWF0Y2ggdGhlIENHIGNvbnRleHQgY29vcmRpbmF0ZSBzcGFjZQotICAgICAgICAgICAgQ0FU
cmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEsIC0xLCAxKTsK
LSAgICAgICAgICAgIENBVHJhbnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3JtLCAwLCBoZWlnaHQs
IDApOwotICAgICAgICAgICAgQ0FDRkxheWVyU2V0VHJhbnNmb3JtKHRpbGUsIHRyYW5zZm9ybSk7
Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICJUaWxlICgiICsg
U3RyaW5nOjpudW1iZXIoaSkgKyAiLCIgKyBTdHJpbmc6Om51bWJlcihqKSArICIpIjsKLSAgICAg
ICAgICAgIENBQ0ZMYXllclNldE5hbWUodGlsZSwgbmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgp
KTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQorICAgIFJldGFpblB0cjxDR0NvbG9yUmVm
PiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25l
bnRzKSk7CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdUaWxlKENBQ0ZM
YXllclJlZiB0aWxlLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBDR1BvaW50IHRpbGVQ
b3NpdGlvbiA9IENBQ0ZMYXllckdldFBvc2l0aW9uKHRpbGUpOwotICAgIENHUmVjdCB0aWxlQm91
bmRzID0gQ0FDRkxheWVyR2V0Qm91bmRzKHRpbGUpOwotCi0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKLQotICAgIC8vIFNldCB0aGUgY29udGV4dCBjbGlwcGluZyByZWN0YW5nbGUg
dG8gdGhlIGN1cnJlbnQgdGlsZQotICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dS
ZWN0TWFrZSh0aWxlUG9zaXRpb24ueCwgdGlsZVBvc2l0aW9uLnksIHRpbGVCb3VuZHMuc2l6ZS53
aWR0aCwgdGlsZUJvdW5kcy5zaXplLmhlaWdodCkpOwotCi0gICAgaWYgKG93bmVyKCktPm93bmVy
KCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFw
aGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikgewotICAgICAgICAvLyBJ
ZiB0aGUgbGF5ZXIgaXMgcmVuZGVyaW5nIHRvcC1kb3duLCBpdCB3aWxsIGZsaXAgdGhlIGNvb3Jk
aW5hdGVzIGluIHkuIFRpbGVkIGxheWVycyBhcmUKLSAgICAgICAgLy8gYWxyZWFkeSBmbGlwcGlu
Zywgc28gd2UgbmVlZCB0byB1bmRvIHRoYXQgaGVyZS4KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNvbnRleHQsIDAsIG93bmVyKCktPmJvdW5kcygpLmhlaWdodCgpKTsKLSAgICAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotICAgIH0KLQotICAgIC8vIERyYXcg
dGhlIHRpbGUKLSAgICBkaXNwbGF5Q2FsbGJhY2sob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBj
b250ZXh0KTsKLQotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci19Ci0KLVRp
bGVDb250cm9sbGVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Y3JlYXRlVGlsZUNvbnRy
b2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIpCi17Ci0gICAgQVNTRVJUKCFtX3RpbGVD
b250cm9sbGVyKTsKLSAgICBtX3RpbGVDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaWxl
Q29udHJvbGxlcj4ocm9vdExheWVyKTsKLSAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5nZXQo
KTsKLX0KLQotVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZWRC
YWNraW5nKCkKLXsKLSAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5nZXQoKTsKKyAgICBDQUNG
TGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbG9yLmdldCgp
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oCShyZXZp
c2lvbiAxODk2MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICsz
NSw3IEBAIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCAqQ0dDb250ZXh0UmVmOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgUGxh
dGZvcm1DQUxheWVyOwogY2xhc3MgVGlsZUNvbnRyb2xsZXI7CkBAIC00Nyw5ICs0OCw5IEBAIHB1
YmxpYzoKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbChQbGF0Zm9ybUNBTGF5ZXIqKTsK
ICAgICB+UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKTsKIAotICAgIHZvaWQgZGlzcGxheUNh
bGxiYWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLSAgICB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmLCBDR0NvbnRl
eHRSZWYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIFBsYXRm
b3JtQ0FMYXllciogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CiAKICAgICB2b2lk
IHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0Jik7CkBAIC01OSwzMiArNjAs
MjggQEAgcHVibGljOgogICAgIHNpemVfdCBzdWJsYXllckNvdW50KCkgY29uc3Q7CiAgICAgaW50
IGluZGV4T2ZTdWJsYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSk7CiAKLSAg
ICB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNP
cGFxdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpOworCisgICAg
dmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHNldEZy
YW1lKGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgVGlsZUNvbnRyb2xsZXIqIGNyZWF0ZVRpbGVD
b250cm9sbGVyKFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKTsKLSAgICBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpOworICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9y
ZGVyQ29sb3IoY29uc3QgQ29sb3ImKTsKKworICAgIHN0YXRpYyB2b2lkIGZsaXBDb250ZXh0KENH
Q29udGV4dFJlZiwgQ0dGbG9hdCBoZWlnaHQpOworICAgICAgICAKKyAgICB2b2lkIGRyYXdSZXBh
aW50Q291bnRlcnMoQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYsIENHUmVjdCBsYXllckJvdW5k
cywgaW50IGRyYXdDb3VudCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbnRlcm5hbFNldE5lZWRz
RGlzcGxheShjb25zdCBGbG9hdFJlY3QqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHN1YmxheWVy
QXRJbmRleChpbnQpIGNvbnN0OwogCi0gICAgc3RhdGljIHZvaWQgdGlsZURpc3BsYXlDYWxsYmFj
ayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZik7Ci0KLSAgICB2b2lkIGRyYXdUaWxlKENBQ0ZM
YXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLSAgICBDR1NpemUgY29uc3RyYWluZWRTaXplKGNvbnN0
IENHU2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgYWRkVGlsZSgpOwotICAgIHZvaWQgcmVtb3ZlVGls
ZSgpOwotICAgIENBQ0ZMYXllclJlZiB0aWxlQXRJbmRleChpbnQpOwotICAgIGludCB0aWxlQ291
bnQoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVRpbGVzKCk7Ci0KICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIG1fb3duZXI7Ci0KLSAgICBDR1NpemUgbV90aWxlU2l6ZTsKLSAgICBDR1NpemUgbV9jb25z
dHJhaW5lZFNpemU7Ci0gICAgUmV0YWluUHRyPENBQ0ZMYXllclJlZj4gbV90aWxlUGFyZW50Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWxlQ29udHJvbGxlcj4gbV90aWxlQ29udHJvbGxlcjsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJU
aWxlZEJhY2tpbmdMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlRpbGVkQmFja2luZ0xheWVyV2luLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbmNs
dWRlICJUaWxlQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1
ZGUgPFF1YXJ0ekNvcmUvQ0FDRkxheWVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJU
aWxlZEJhY2tpbmdMYXllcldpbjo6V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4oUGxhdGZvcm1DQUxh
eWVyKiBvd25lcikKKyAgICA6IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKG93bmVyKQorewor
fQorCitXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6fldlYlRpbGVkQmFja2luZ0xheWVyV2luKCkK
K3sKK30KKworc3RydWN0IERpc3BsYXlPbk1haW5UaHJlYWRDb250ZXh0IHsKKyAgICBSZXRhaW5Q
dHI8Q0FDRkxheWVyUmVmPiBsYXllcjsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250
ZXh0OworCisgICAgRGlzcGxheU9uTWFpblRocmVhZENvbnRleHQoQ0FDRkxheWVyUmVmIGNhTGF5
ZXIsIENHQ29udGV4dFJlZiBjYUNvbnRleHQpCisgICAgICAgIDogbGF5ZXIoY2FMYXllcikKKyAg
ICAgICAgLCBjb250ZXh0KGNhQ29udGV4dCkKKyAgICB7CisgICAgfQorfTsKKworc3RhdGljIHZv
aWQgcmVkaXNwYXRjaE9uTWFpblF1ZXVlKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheU9uTWFpblRocmVhZENv
bnRleHQ+IHJldGFpbmVkQ29udGV4dChyZWludGVycHJldF9jYXN0PERpc3BsYXlPbk1haW5UaHJl
YWRDb250ZXh0Kj4oY29udGV4dCkpOworICAgIGlmICghcmV0YWluZWRDb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogc2VsZiA9IHN0YXRp
Y19jYXN0PFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKj4oQ0FDRkxheWVyR2V0VXNlckRhdGEo
cmV0YWluZWRDb250ZXh0LT5sYXllci5nZXQoKSkpOworCisgICAgc2VsZi0+ZGlzcGxheUNhbGxi
YWNrKHJldGFpbmVkQ29udGV4dC0+bGF5ZXIuZ2V0KCksIHJldGFpbmVkQ29udGV4dC0+Y29udGV4
dC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmRpc3BsYXlDYWxs
YmFjayhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAg
aWYgKCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICBkaXNwYXRjaF9hc3luY19mKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIG5ldyBEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dChjYUxheWVy
LCBjb250ZXh0KSwgcmVkaXNwYXRjaE9uTWFpblF1ZXVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIW93bmVyKCkgfHwgIW93bmVyKCktPm93bmVyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBDR1Jl
Y3QgbGF5ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZSBsYXllclR5cGUgPSBvd25lcigpLT5sYXllclR5cGUoKTsKKyAgICBHcmFwaGlj
c0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBv
d25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCk7CisK
KyAgICBBU1NFUlQobGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRC
YWNraW5nTGF5ZXIpOworCisgICAgZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6
ZS5oZWlnaHQpOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250
ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5CisgICAgLy8gc21hbGxlciB0aGFu
IHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQorICAgIENHUmVjdCBjbGlwQm91
bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgIEludFJlY3Qg
Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICBvd25lcigpLT5vd25lcigp
LT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKG93bmVyKCksIGdyYXBoaWNzQ29udGV4dCwg
Y2xpcCk7CisKKyAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKG93bmVyKCkpKSB7CisgICAgICAgIGludCBkcmF3Q291bnQgPSBvd25lcigp
LT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQob3duZXIoKSk7
CisgICAgICAgIGRyYXdSZXBhaW50Q291bnRlcnMoY2FMYXllciwgY29udGV4dCwgbGF5ZXJCb3Vu
ZHMsIGRyYXdDb3VudCk7CisgICAgfQorCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKKworICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlz
cGxheShvd25lcigpKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0TmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
IG1fdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBk
aXJ0eVJlY3QpCit7CisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBt
X3RpbGVDb250cm9sbGVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZW5jbG9zaW5nSW50UmVjdChk
aXJ0eVJlY3QpKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0Qm91bmRz
KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzKQoreworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChi
b3VuZHMsIG93bmVyKCktPmJvdW5kcygpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvdW5kcyhib3VuZHMpOworCisgICAgaWYgKG1fdGls
ZUNvbnRyb2xsZXIpCisgICAgICAgIG1fdGlsZUNvbnRyb2xsZXItPnRpbGVDYWNoZUxheWVyQm91
bmRzQ2hhbmdlZCgpOworfQorCitib29sIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjppc09wYXF1
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXIgPyBtX3RpbGVDb250cm9s
bGVyLT50aWxlc0FyZU9wYXF1ZSgpIDogdHJ1ZTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdM
YXllcldpbjo6c2V0T3BhcXVlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fdGlsZUNvbnRyb2xs
ZXIpCisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlc09wYXF1ZSh2YWx1
ZSk7Cit9CisKK2Zsb2F0IFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpjb250ZW50c1NjYWxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlciA/IG1fdGlsZUNvbnRyb2xsZXIt
PmNvbnRlbnRzU2NhbGUoKSA6IDEuMGY7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJX
aW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGVGYWN0b3IpCit7CisgICAgaWYgKG1fdGls
ZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLT5zZXRDb250ZW50
c1NjYWxlKHNjYWxlRmFjdG9yKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6
c2V0Qm9yZGVyV2lkdGgoZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIp
CisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJXaWR0
aCh2YWx1ZSAvIDIpOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3Jk
ZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7CisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIp
CisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJDb2xv
cih2YWx1ZSk7Cit9CisKK1RpbGVDb250cm9sbGVyKiBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6
Y3JlYXRlVGlsZUNvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIpCit7CisgICAg
QVNTRVJUKCFtX3RpbGVDb250cm9sbGVyKTsKKyAgICBtX3RpbGVDb250cm9sbGVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaWxlQ29udHJvbGxlcj4ocm9vdExheWVyKTsKKyAgICByZXR1cm4gbV90aWxl
Q29udHJvbGxlci5nZXQoKTsKK30KKworVGlsZWRCYWNraW5nKiBXZWJUaWxlZEJhY2tpbmdMYXll
cldpbjo6dGlsZWRCYWNraW5nKCkKK3sKKyAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5nZXQo
KTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6aW52YWxpZGF0ZSgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aWxlQ29udHJvbGxlcik7
CisgICAgbV90aWxlQ29udHJvbGxlciA9IG51bGxwdHI7Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGls
ZWRCYWNraW5nTGF5ZXJXaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBXZWJUaWxlZEJhY2tpbmdMYXllcldpbl9oCisjZGVmaW5lIFdl
YlRpbGVkQmFja2luZ0xheWVyV2luX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVGlsZWRCYWNraW5n
TGF5ZXJXaW4gOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwgeworcHVibGljOgor
ICAgIFdlYlRpbGVkQmFja2luZ0xheWVyV2luKFBsYXRmb3JtQ0FMYXllciopOworICAgIH5XZWJU
aWxlZEJhY2tpbmdMYXllcldpbigpOworCisgICAgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxh
eWVyUmVmLCBDR0NvbnRleHRSZWYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRPcGFxdWUoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpIG92ZXJyaWRl
OworCisgICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCkgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisKKyAgICAvLyBXZWJUaWxl
ZEJhY2tpbmdMYXllciBGZWF0dXJlcworICAgIFRpbGVDb250cm9sbGVyKiBjcmVhdGVUaWxlQ29u
dHJvbGxlcihQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcik7CisgICAgVGlsZWRCYWNraW5nKiB0
aWxlZEJhY2tpbmcoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworcHJpdmF0ZToKKyAgICBS
ZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBtX3RpbGVQYXJlbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFRpbGVDb250cm9sbGVyPiBtX3RpbGVDb250cm9sbGVyOworfTsKKworfQorCisjZW5kaWYgLy8g
V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW5faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261171</attachid>
            <date>2015-09-14 21:54:36 -0700</date>
            <delta_ts>2015-09-15 10:17:51 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-149144-20150914221024.patch</filename>
            <type>text/plain</type>
            <size>54490</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA5LTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIFRpbGVkIGRyYXdp
bmcgaXMgcmVuZGVyaW5nIG1vcmUgdGltZXMgdGhhbiBpdCBzaG91bGQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTE0NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjIzMTM5MDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJvdmlkZSBhIG1vcmUgZmFpdGhmdWwgaW1wbGVtZW5hdGlvbiBvZiB0aGUg
T2JqZWN0aXZlIEMgdGlsZWQgZHJhd2luZyBsb2dpYy4KKyAgICAgICAgKDEpIENyZWF0ZSBhIG5l
dyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSB0aGUKKyAg
ICAgICAgICAgIGNvbnRhaW5lciBvZiB0aWxlcy4gVGhpcyBtYXRjaGVzIHRoZSBPYmplY3RpdmUg
QyBkZXNpZ24uCisgICAgICAgICgyKSBNb3ZlIGltcGxlbWVudGF0aW9uIG9mIHNldmVyYWwgbWV0
aG9kcyAoZS5nLiwgaXNPcGFxdWUpIHRvIHRoZSBpbnRlcm5hbAorICAgICAgICAgICAgY2xhc3Mg
aW1wbGVtZW50YXRpb24gc28gdGhhdCB0aGUgVGlsZSBEcmF3aW5nIGxvZ2ljIGNhbiBwZXJmb3Jt
IHNwZWNpYWwKKyAgICAgICAgICAgIGhhbmRsaW5nIGluIHRoZXNlIGNhc2VzLgorICAgICAgICAo
MykgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIFRpbGVkIERyYXdpbmcgbG9naWMgZnJvbSBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbCwKKyAgICAgICAgICAgIHNpbmNlIGl0IHdhcyBqdXN0IGR1cGxp
Y2F0aW5nIGNvZGUgaW4gVGlsZUNvbnRyb2xsZXIgYW5kIFRpbGVHcmlkLgorICAgICAgICAoNCkg
Q2xlYW4gdXAgdGhlIGRpc3BsYXkgY2FsbGJhY2sgY29kZSB0byBhdm9pZCBwZXJmb3JtaW5nIGlu
Y29ycmVjdCBmbGlwcGluZworICAgICAgICAgICAgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLgor
ICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOiBBZGQg
dGhlIG5ldyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4pOiBDcmVhdGUgYSBXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbgorICAgICAgICBvYmplY3QgaWYgdXNpbmcgdGlsZWQgZHJhd2luZy4KKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6flBsYXRmb3JtQ0FMYXllcldpbik6CisgICAgICAg
IChQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKTogTW92ZSBpbXBsZW1lbnRhdGlvbiB0byBp
bnRlcm5hbCBjbGFzcy4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0T3BhcXVlKTog
RGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKTogRGl0
dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKTogRGl0dG8u
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZSk6IERpdHRvLgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpjb3JuZXJSYWRpdXMpOiBEaXR0by4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbjo6dGlsZWRCYWNraW5nKTogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbCk6IFJlbW92ZSB0aWxpbmctbG9naWMKKyAgICAgICAgcmVsYXRlZCBtZW1iZXIgdmFyaWFi
bGVzLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6On5QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Zmxp
cENvbnRleHQpOiBBZGRlZCBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgIChzaG91bGRJbnZl
cnRCZWZvcmVEcmF3aW5nQ29udGVudCk6IERpdHRvLgorICAgICAgICAoc2hvdWxkSW52ZXJ0QmVm
b3JlRHJhd2luZ1JlcGFpbnRDb3VudGVycyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6ZHJhd1JlcGFpbnRDb3VudGVycyk6IEhlbHBlciBtZXRob2QgdG8KKyAg
ICAgICAgc2hhcmUgY29kZSBiZXR3ZWVuIHRoZSB0d28gbGF5ZXIgY2xhc3Nlcy4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheSk6IHVz
ZSBudWxscHRyLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRz
RGlzcGxheSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNl
dE5lZWRzRGlzcGxheUluUmVjdCk6IE1vdmUgdGlsZWQgY29kZQorICAgICAgICB0byBXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbiBhbmQgc2ltcGxpZnkgdGhlIHJlbWFpbmcgY29kZS4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRTdWJsYXllcnMpOiBSZW1vdmUgdGlsZSBj
b2RlLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmdldFN1YmxheWVycyk6
IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZUFsbFN1
YmxheWVycyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omlu
c2VydFN1YmxheWVyKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6c3VibGF5ZXJDb3VudCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OmluZGV4T2ZTdWJsYXllcik6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OnN1YmxheWVyQXRJbmRleCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldEJvdW5kcyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldEZyYW1lKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6aXNPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXRPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpjb250ZW50c1NjYWxlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Q29udGVudHNTY2FsZSk6IERpdHRvLgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvcmRlcldpZHRoKTogRGl0dG8uCisgICAg
ICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyQ29sb3IpOiBEaXR0by4K
KyAgICAgICAgKGxheWVyVHlwZUlzVGlsZWQpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OmNvbnN0cmFpbmVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZURpc3BsYXlDYWxsYmFjayk6IERlbGV0ZWQu
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSk6IERlbGV0ZWQu
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6cmVtb3ZlVGlsZSk6IERlbGV0
ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVDb3VudCk6
IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVGls
ZXMpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdU
aWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpjcmVh
dGVUaWxlQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6dGlsZWRCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpvd25lcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4p
OgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46On5XZWJUaWxlZEJhY2tpbmdMYXll
cldpbik6CisgICAgICAgIChEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dDo6RGlzcGxheU9uTWFp
blRocmVhZENvbnRleHQpOgorICAgICAgICAocmVkaXNwYXRjaE9uTWFpblF1ZXVlKToKKyAgICAg
ICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2spOgorICAgICAgICAo
V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJU
aWxlZEJhY2tpbmdMYXllcldpbjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW46OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2lu
OjpzZXRPcGFxdWUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmNvbnRlbnRz
U2NhbGUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldENvbnRlbnRzU2Nh
bGUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKToK
KyAgICAgICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3JkZXJDb2xvcik6CisgICAg
ICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6Y3JlYXRlVGlsZUNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnRpbGVkQmFja2luZyk6CisgICAgICAgIChX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmg6IEFkZGVkLgorCiAyMDE1
LTA5LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1l
bnQuY3JlYXRlTm9kZUl0ZXJhdG9yKG51bGwpIC8gRG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihu
dWxsKSBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTg5NjE4KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNzQ4NCw2ICs3NDg0LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxGaWxlU3lzdGVtLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0YuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3Vu
ZGF0aW9uXGNmXFdlYkNvcmVBVkNGUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSVNPVlRUQ3VlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGF1ZGlvXEF1ZGlvU2Vzc2lvbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxhdWRpb1xQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbi5jcHAiIC8+CkBAIC0yMDg1MCw2ICsyMDg1NiwxMiBAQAogICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2lu
XFBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5oIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbEluY2x1ZGU+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHTENvbnRleHQuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcY2dcU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIj4KQEAgLTIyODM0LDQgKzIyODQ2
LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgICA8SW1w
b3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0b21pemF0aW9uc1xtYXNtLnRh
cmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Cis8L1Byb2plY3Q+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTg5NjE4
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0
ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMzLDkgKzMwMzMsNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZG9tXENoaWxkTm9kZUxpc3QuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkb21c
Q2xhc3NOb2RlTGlzdC5jcHAiPgotICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDbGllbnRSZWN0LmNwcCI+
CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzIzNCw5
ICszMjMxLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxOb2RlLmNwcCI+CiAg
ICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZG9tXE5vZGVGaWx0ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZG9tPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkb21c
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTcyNjYsNiArNzI2MCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGFnZVxET01TZWN1cml0eVBvbGljeS5jcHAiPgogICAgICAgPEZpbHRlcj5wYWdl
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXERhdGFVUkxEZWNvZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRvbVxDbGFzc0NvbGxlY3Rpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caHRtbFxHZW5lcmljQ2FjaGVkSFRNTENvbGxlY3Rpb24uY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhXHdp
bjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91
cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cQ29vcmRp
bmF0ZXMuaCI+CkBAIC0xMDEwMCw5ICsxMDEwMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkb21cQ2hpbGROb2RlTGlzdC5oIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xhc3NOb2Rl
TGlzdC5oIj4KLSAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xpZW50UmVjdC5oIj4KICAgICAgIDxGaWx0
ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTI1NSw2ICsxNTI1MiwxMiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxET01TZWN1cml0eVBvbGljeS5oIj4K
ICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yXEluc3BlY3RvckZy
b250ZW5kUm91dGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxu
ZXR3b3JrXERhdGFVUkxEZWNvZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
b21cQ2xhc3NDb2xsZWN0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xjYVx3aW5cV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCI+CisgICAgICA8
RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRl
PgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Tm9uZSBJbmNsdWRlPSIuLlxj
c3NcQ1NTR3JhbW1hci55LmluIj4KQEAgLTE1NDU5LDQgKzE1NDYyLDQgQEAKICAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cd2luPC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4KLTwv
UHJvamVjdD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5jcHAJKHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkg
KzYyLDE3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBz
bnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlZCIsIHJlcGFpbnRDb3VudCk7CiAgICAgCiAg
ICAgQ0dSZWN0IGluZGljYXRvckJveCA9IHBsYXRmb3JtQ0FMYXllci0+Ym91bmRzKCk7CisKKyAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisjaWYgT1MoV0lORE9XUykKKyAgICAv
LyBUaWxlZCBsYXllcnMgaW4gV2luZG93cyBoYXZlIGZsaXBwZWQgY29vcmRpbmF0ZXMKKyAgICBD
R0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIDAsIC1pbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQpOworI2VuZGlmCisKICAg
ICBpbmRpY2F0b3JCb3guc2l6ZS53aWR0aCA9IDEyICsgMTAgKiBzdHJsZW4odGV4dCk7CiAgICAg
aW5kaWNhdG9yQm94LnNpemUuaGVpZ2h0ID0gMjc7Ci0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKICAgICAKICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKICAg
ICBDR0NvbnRleHRCZWdpblRyYW5zcGFyZW5jeUxheWVyV2l0aFJlY3QoY29udGV4dCwgaW5kaWNh
dG9yQm94LCAwKTsKQEAgLTg1LDcgKzkzLDExIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpkcmF3
UmVwYWludEluZGljYXQKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJl
Y2F0ZWQtZGVjbGFyYXRpb25zIgogICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4dCwg
Q0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKICAgICBDR0NvbnRleHRTZWxlY3RG
b250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNSb21hbik7CisjaWYg
T1MoV0lORE9XUykKKyAgICBwbGF0Zm9ybUNBTGF5ZXItPmRyYXdUZXh0QXRQb2ludChjb250ZXh0
LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwg
dGV4dCwgc3RybGVuKHRleHQpKTsKKyNlbHNlCiAgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50
KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4ueCArIDUsIGluZGljYXRvckJveC5vcmlnaW4u
eSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOworI2VuZGlmCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCiAgICAgCiAgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNB
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuaAkocmV2aXNpb24gMTg5NjE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzMCw2ICsyMzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJv
b3RMYXllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNMYXlvdXQoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwg
Y29uc3QgY2hhciogdGV4dCwgc2l6ZV90IGxlbmd0aCkgY29uc3QgPSAwOwogI2lmbmRlZiBOREVC
VUcKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnRUcmVlKCkgY29uc3QgPSAwOwogI2VuZGlmIC8vIE5E
RUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJldmlzaW9uIDE4OTYxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIldlYkNvcmVIZWFkZXJEZXRlY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbkNGLmg+
CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5o
PgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTQyLDE3ICsxNDMsMjAgQEAgUGxh
dGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4oTAogI2VuZGlmCiAKICAgICAvLyBD
cmVhdGUgdGhlIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsIG9iamVjdCBhbmQgcG9pbnQgdG8g
aXQgaW4gdGhlIHVzZXJkYXRhLgotICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKiBpbnRl
cm4gPSBuZXcgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwodGhpcyk7CisgICAgUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWwqIGludGVybiA9IG51bGxwdHI7CisKKyAgICBpZiAodXNlc1RpbGVk
QmFja2luZ0xheWVyKCkpIHsKKyAgICAgICAgaW50ZXJuID0gbmV3IFdlYlRpbGVkQmFja2luZ0xh
eWVyV2luKHRoaXMpOworICAgICAgICBUaWxlQ29udHJvbGxlciogdGlsZUNvbnRyb2xsZXIgPSBy
ZWludGVycHJldF9jYXN0PFdlYlRpbGVkQmFja2luZ0xheWVyV2luKj4oaW50ZXJuKS0+Y3JlYXRl
VGlsZUNvbnRyb2xsZXIodGhpcyk7CisgICAgICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gc3RkOjpt
YWtlX3VuaXF1ZTxQbGF0Zm9ybUNBTGF5ZXJMaXN0Pih0aWxlQ29udHJvbGxlci0+Y29udGFpbmVy
TGF5ZXJzKCkpOworICAgIH0gZWxzZQorICAgICAgICBpbnRlcm4gPSBuZXcgUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwodGhpcyk7CisKICAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShtX2xheWVy
LmdldCgpLCBpbnRlcm4pOwogCiAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IGNhbGxiYWNrCiAgICAg
Q0FDRkxheWVyU2V0RGlzcGxheUNhbGxiYWNrKG1fbGF5ZXIuZ2V0KCksIGRpc3BsYXlDYWxsYmFj
ayk7CiAgICAgQ0FDRkxheWVyU2V0TGF5b3V0Q2FsbGJhY2sobV9sYXllci5nZXQoKSwgbGF5b3V0
U3VibGF5ZXJzUHJvYyk7Ci0KLSAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVyKCkpIHsKLSAg
ICAgICAgVGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gaW50ZXJuLT5jcmVhdGVUaWxl
Q29udHJvbGxlcih0aGlzKTsKLSAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFBsYXRmb3JtQ0FMYXllckxpc3Q+KHRpbGVDb250cm9sbGVyLT5jb250YWluZXJMYXll
cnMoKSk7Ci0gICAgfQogfQogCiBQbGF0Zm9ybUNBTGF5ZXJXaW46On5QbGF0Zm9ybUNBTGF5ZXJX
aW4oKQpAQCAtMTYwLDkgKzE2NCwxMiBAQCBQbGF0Zm9ybUNBTGF5ZXJXaW46On5QbGF0Zm9ybUNB
TGF5ZXJXaW4oCiAgICAgLy8gVG9zcyBhbGwgdGhlIGtpZHMKICAgICByZW1vdmVBbGxTdWJsYXll
cnMoKTsKIAotICAgIC8vIEdldCByaWQgb2YgdGhlIHVzZXIgZGF0YQogICAgIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsKiBsYXllckludGVybiA9IGludGVybih0aGlzKTsKLSAgICBDQUNGTGF5
ZXJTZXRVc2VyRGF0YShtX2xheWVyLmdldCgpLCAwKTsKKyAgICBpZiAodXNlc1RpbGVkQmFja2lu
Z0xheWVyKCkpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXJX
aW4qPihsYXllckludGVybiktPmludmFsaWRhdGUoKTsKKworICAgIC8vIEdldCByaWQgb2YgdGhl
IHVzZXIgZGF0YQorICAgIENBQ0ZMYXllclNldFVzZXJEYXRhKG1fbGF5ZXIuZ2V0KCksIG51bGxw
dHIpOwogCiAgICAgQ0FDRkxheWVyUmVtb3ZlRnJvbVN1cGVybGF5ZXIobV9sYXllci5nZXQoKSk7
CiAKQEAgLTM1OCwxMiArMzY1LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRNYXNr
KFBsYXRmb3IKIAogYm9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gQ0FDRkxheWVySXNPcGFxdWUobV9sYXllci5nZXQoKSk7CisgICAgcmV0dXJu
IGludGVybih0aGlzKS0+aXNPcGFxdWUoKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldE9wYXF1ZShib29sIHZhbHVlKQogewotICAgIENBQ0ZMYXllclNldE9wYXF1ZShtX2xheWVy
LmdldCgpLCB2YWx1ZSk7CisgICAgaW50ZXJuKHRoaXMpLT5zZXRPcGFxdWUodmFsdWUpOwogICAg
IHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKQEAgLTUyNiwxOSArNTMzLDEzIEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyV2luOjpzZXRCYWNrZ3JvdW5kQ28KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQogewotICAgIENBQ0ZMYXllclNldEJvcmRlcldp
ZHRoKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKKyAgICBpbnRlcm4odGhpcyktPnNldEJvcmRlcldp
ZHRoKHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewotICAgIENHRmxv
YXQgY29tcG9uZW50c1s0XTsKLSAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBv
bmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwotCi0gICAgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0Yo
Q0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBDQUNG
TGF5ZXJTZXRCb3JkZXJDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQoKSk7CisgICAgaW50
ZXJuKHRoaXMpLT5zZXRCb3JkZXJDb2xvcih2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsK
IH0KIApAQCAtNTg3LDE4ICs1ODgsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEVk
Z2VBbnRpYWxpYQogCiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUoKSBj
b25zdAogewotI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgcmV0dXJu
IENBQ0ZMYXllckdldENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSk7Ci0jZWxzZQotICAgIHJl
dHVybiAxLjBmOwotI2VuZGlmCisgICAgcmV0dXJuIGludGVybih0aGlzKS0+Y29udGVudHNTY2Fs
ZSgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZShmbG9h
dCBzY2FsZUZhY3RvcikKIHsKLSNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxFKQot
ICAgIENBQ0ZMYXllclNldENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSwgc2NhbGVGYWN0b3Ip
OwotI2VuZGlmCisgICAgaW50ZXJuKHRoaXMpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlRmFjdG9y
KTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmNvcm5lclJhZGl1cygpIGNvbnN0CkBAIC03NzYsNSArNzcyLDEwIEBAIFRpbGVkQmFja2luZyog
UGxhdGZvcm1DQUxheWVyV2luOjp0aWxlZEIKICAgICBpZiAoIXVzZXNUaWxlZEJhY2tpbmdMYXll
cigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpbnRlcm4odGhpcykt
PnRpbGVkQmFja2luZygpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luKj4oaW50ZXJuKHRoaXMpKS0+dGlsZWRCYWNraW5nKCk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IENHRmxvYXQgeCwgQ0dGbG9hdCB5LCBjb25zdCBjaGFyKiB0ZXh0LCBzaXplX3QgbGVuZ3RoKSBj
b25zdAoreworICAgIGludGVybih0aGlzKS0+ZHJhd1RleHRBdFBvaW50KGNvbnRleHQsIHgsIHks
IHRleHQsIGxlbmd0aCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCShyZXZpc2lv
biAxODk2MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0xheW91dCgpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgY29uc3Qg
Y2hhciogdGV4dCwgc2l6ZV90IGxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZm5kZWYgTkRF
QlVHCiAgICAgdmlydHVhbCB2b2lkIHByaW50VHJlZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCShyZXZpc2lvbiAxODk2
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwzMyArNDAsOSBAQAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBUaGUg
d2lkdGggYW5kIGhlaWdodCBvZiBhIHNpbmdsZSB0aWxlIGluIGEgdGlsZWQgbGF5ZXIuIFNob3Vs
ZCBiZSBsYXJnZSBlbm91Z2ggdG8KLS8vIGF2b2lkIGxvdHMgb2Ygc21hbGwgdGlsZXMgKGFuZCB0
aGVyZWZvcmUgbG90cyBvZiBkcmF3aW5nIGNhbGxiYWNrcyksIGJ1dCBzbWFsbCBlbm91Z2gKLS8v
IHRvIGtlZXAgdGhlIG92ZXJhbGwgdGlsZSBjb3N0IGxvdy4KLXN0YXRpYyBjb25zdCBpbnQgY1Rp
bGVkTGF5ZXJUaWxlU2l6ZSA9IDUxMjsKLQotc3RhdGljIGJvb2wgbGF5ZXJUeXBlSXNUaWxlZChj
b25zdCBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCi17Ci0gICAgcmV0dXJu
IGxheWVyVHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYlRpbGVkTGF5ZXIKLSAg
ICAgICAgfHwgbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUGFnZVRpbGVk
QmFja2luZ0xheWVyCi0gICAgICAgIHx8IGxheWVyVHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOwotfQotCiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoUGxhdGZvcm1DQUxheWVyKiBvd25lcikKLSAg
ICA6IG1fdGlsZVNpemUoQ0dTaXplTWFrZShjVGlsZWRMYXllclRpbGVTaXplLCBjVGlsZWRMYXll
clRpbGVTaXplKSkKLSAgICAsIG1fY29uc3RyYWluZWRTaXplKGNvbnN0cmFpbmVkU2l6ZShvd25l
ci0+Ym91bmRzKCkuc2l6ZSgpKSkKLSAgICAsIG1fb3duZXIob3duZXIpCi17Ci0gICAgaWYgKGxh
eWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFRpbGVk
IGxheWVycyBhcmUgcGxhY2VkIGluIGEgY2hpbGQgbGF5ZXIgdGhhdCBpcyBhbHdheXMgdGhlIGZp
cnN0IGNoaWxkIG9mIHRoZSBUaWxlZExheWVyCi0gICAgICAgIG1fdGlsZVBhcmVudCA9IGFkb3B0
Q0YoQ0FDRkxheWVyQ3JlYXRlKGtDQUNGTGF5ZXIpKTsKLSAgICAgICAgQ0FDRkxheWVySW5zZXJ0
U3VibGF5ZXIobV9vd25lci0+cGxhdGZvcm1MYXllcigpLCBtX3RpbGVQYXJlbnQuZ2V0KCksIDAp
OwotI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgICAgIENBQ0ZMYXll
clNldENvbnRlbnRzU2NhbGUobV90aWxlUGFyZW50LmdldCgpLCBDQUNGTGF5ZXJHZXRDb250ZW50
c1NjYWxlKG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwotI2VuZGlmCi0KLSAgICAgICAgdXBk
YXRlVGlsZXMoKTsKLSAgICB9CisgICAgOiBtX293bmVyKG93bmVyKQorewogfQogCiBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6flBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKCkKQEAgLTk2
LDYgKzcyLDIzIEBAIHN0YXRpYyB2b2lkIHJlZGlzcGF0Y2hPbk1haW5RdWV1ZSh2b2lkKgogICAg
IHNlbGYtPmRpc3BsYXlDYWxsYmFjayhyZXRhaW5lZENvbnRleHQtPmxheWVyLmdldCgpLCByZXRh
aW5lZENvbnRleHQtPmNvbnRleHQuZ2V0KCkpOwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpmbGlwQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCBoZWln
aHQpCit7CisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOworICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKK30KKworc3RhdGljIGJvb2wg
c2hvdWxkSW52ZXJ0QmVmb3JlRHJhd2luZ0NvbnRlbnQoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50
YXRpb24gY29vcmRpbmF0ZU9yaWVudGF0aW9uKQoreworICAgIHJldHVybiAobGF5ZXJUeXBlICE9
IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyKQorICAgICAg
ICAmJiAoY29vcmRpbmF0ZU9yaWVudGF0aW9uID09IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNUb3BEb3duKTsKK30KKworc3RhdGljIGJvb2wgcmVwYWludENvdW50ZXJzQXJl
RHJhd25CeUdyaWRDb250cm9sbGVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlw
ZSkKK3sKKyAgICByZXR1cm4gbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
VGlsZWRCYWNraW5nVGlsZUxheWVyOworfQorCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKQEAgLTEwOSw2OSArMTAyLDI5
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXkKICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gb3duZXIo
KS0+Ym91bmRzKCk7Ci0gICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNv
bnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzVG9wRG93bikgewotICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0
LCAxLCAtMSk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtbGF5
ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwotICAgIH0KKyAgICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUgPSBvd25lcigpLT5sYXllclR5cGUoKTsKKyAgICBHcmFwaGljc0xheWVy
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBvd25lcigp
LT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCk7CiAKLSAgICBp
ZiAob3duZXIoKS0+b3duZXIoKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOworICAgIGlmIChzaG91bGRJbnZlcnRCZWZvcmVEcmF3aW5nQ29udGVu
dChsYXllclR5cGUsIG9yaWVudGF0aW9uKSkKKyAgICAgICAgZmxpcENvbnRleHQoY29udGV4dCwg
bGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRv
IGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZp
Y2FudGx5Ci0gICAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRp
bGVkIGxheWVycykKLSAgICAgICAgQ0dSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlw
Qm91bmRpbmdCb3goY29udGV4dCk7Ci0gICAgICAgIEludFJlY3QgY2xpcChlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBCb3VuZHMpKTsKLSAgICAgICAgb3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxh
eWVyUGFpbnRDb250ZW50cyhvd25lcigpLCBncmFwaGljc0NvbnRleHQsIGNsaXApOwotICAgIH0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotCi0gICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlJ2QgYXZvaWQgY2FsbGluZyAtc2V0TmVl
ZHNEaXNwbGF5IG9uIGEgbGF5ZXIgdGhhdCBpcyBhIHBsYWluIGNvbG9yLAotICAgICAgICAvLyBz
byBDQSBuZXZlciBtYWtlcyBiYWNraW5nIHN0b3JlIGZvciBpdCAod2hpY2ggaXMgd2hhdCAtc2V0
TmVlZHNEaXNwbGF5IHdpbGwgZG8gYWJvdmUpLgotICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxs
Q29sb3IoY29udGV4dCwgMC4wZiwgMS4wZiwgMC4wZiwgMS4wZik7Ci0gICAgICAgIENHQ29udGV4
dEZpbGxSZWN0KGNvbnRleHQsIGxheWVyQm91bmRzKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBHcmFw
aGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCi0gICAgaWYgKG93bmVyKCkt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihvd25lcigpKSkgewot
ICAgICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG93bmVyKCktPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChvd25lcigpKSk7CisgICAgLy8gSXQn
cyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQg
bWF5IGJlIHNpZ25pZmljYW50bHkKKyAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5k
cyAoZS5nLiB0aWxlZCBsYXllcnMpCisgICAgQ0dSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgSW50UmVjdCBjbGlwKGVuY2xvc2luZ0lu
dFJlY3QoY2xpcEJvdW5kcykpOworICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMob3duZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKKworICAgIGlm
IChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3du
ZXIoKSkKKyAgICAgICAgJiYgIXJlcGFpbnRDb3VudGVyc0FyZURyYXduQnlHcmlkQ29udHJvbGxl
cihsYXllclR5cGUpKSB7CisgICAgICAgIGludCBkcmF3Q291bnQgPSBvd25lcigpLT5vd25lcigp
LT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQob3duZXIoKSk7CiAKICAgICAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAotICAgICAgICAvLyBNYWtlIHRoZSBi
YWNrZ3JvdW5kIG9mIHRoZSBjb3VudGVyIHRoZSBzYW1lIGFzIHRoZSBib3JkZXIgY29sb3IsCi0g
ICAgICAgIC8vIHVubGVzcyB0aGVyZSBpcyBubyBib3JkZXIsIHRoZW4gbWFrZSBpdCByZWQKLSAg
ICAgICAgZmxvYXQgYm9yZGVyV2lkdGggPSBDQUNGTGF5ZXJHZXRCb3JkZXJXaWR0aChjYUxheWVy
KTsKLSAgICAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkgewotICAgICAgICAgICAgQ0dDb2xvclJl
ZiBib3JkZXJDb2xvciA9IENBQ0ZMYXllckdldEJvcmRlckNvbG9yKGNhTGF5ZXIpOwotICAgICAg
ICAgICAgY29uc3QgQ0dGbG9hdCogY29sb3JzID0gQ0dDb2xvckdldENvbXBvbmVudHMoYm9yZGVy
Q29sb3IpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIGNv
bG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0sIGNvbG9yc1szXSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAu
MGYsIDAuMGYsIDAuOGYpOwotICAgICAgICAKLSAgICAgICAgQ0dSZWN0IGFCb3VuZHMgPSBsYXll
ckJvdW5kczsKLQotICAgICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEwICogdGV4dC5s
ZW5ndGgoKTsKLSAgICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDIyOwotICAgICAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCBhQm91bmRzKTsKLSAgICAgICAgCi0gICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBkZXNjOwotCi0gICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAg
ICAgICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7Ci0gICAgICAgIFN5c3RlbVBh
cmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1l
dHJpY3MsIDApOwotICAgICAgICBkZXNjLnNldE9uZUZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9u
Rm9udC5sZkZhY2VOYW1lKTsKLQotICAgICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZSgxOCk7Ci0g
ICAgICAgIAotICAgICAgICBGb250Q2FzY2FkZSBmb250ID0gRm9udENhc2NhZGUoZGVzYywgMCwg
MCk7Ci0gICAgICAgIGZvbnQudXBkYXRlKDApOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
Zyhjb250ZXh0KTsKLSAgICAgICAgY2cuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JT
cGFjZURldmljZVJHQik7Ci0gICAgICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4odGV4dCks
IEludFBvaW50KGFCb3VuZHMub3JpZ2luLnggKyA1LCBhQm91bmRzLm9yaWdpbi55ICsgMTcpKTsK
KyAgICAgICAgZHJhd1JlcGFpbnRDb3VudGVycyhjYUxheWVyLCBjb250ZXh0LCBsYXllckJvdW5k
cywgZHJhd0NvdW50KTsKIAotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OyAgICAgICAgCisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAgICAg
fQogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKQEAgLTE3OSw1NyArMTMy
LDk1IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXkKICAgICBvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXllckRpZERpc3BsYXkob3duZXIoKSk7CiB9
CiAKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdSZXBhaW50Q291bnRlcnMo
Q0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJC
b3VuZHMsIGludCBkcmF3Q291bnQpCit7CisgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6Om51bWJl
cihkcmF3Q291bnQpOworCisgICAgLy8gTWFrZSB0aGUgYmFja2dyb3VuZCBvZiB0aGUgY291bnRl
ciB0aGUgc2FtZSBhcyB0aGUgYm9yZGVyIGNvbG9yLAorICAgIC8vIHVubGVzcyB0aGVyZSBpcyBu
byBib3JkZXIsIHRoZW4gbWFrZSBpdCByZWQKKyAgICBmbG9hdCBib3JkZXJXaWR0aCA9IENBQ0ZM
YXllckdldEJvcmRlcldpZHRoKGNhTGF5ZXIpOworICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHsK
KyAgICAgICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9IENBQ0ZMYXllckdldEJvcmRlckNvbG9y
KGNhTGF5ZXIpOworICAgICAgICBjb25zdCBDR0Zsb2F0KiBjb2xvcnMgPSBDR0NvbG9yR2V0Q29t
cG9uZW50cyhib3JkZXJDb2xvcik7CisgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCBjb2xvcnNbMF0sIGNvbG9yc1sxXSwgY29sb3JzWzJdLCBjb2xvcnNbM10pOworICAg
IH0gZWxzZQorICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMS4wZiwg
MC4wZiwgMC4wZiwgMC44Zik7CisKKyAgICBDR1JlY3QgYUJvdW5kcyA9IGxheWVyQm91bmRzOwor
CisgICAgYUJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMCAqIHRleHQubGVuZ3RoKCk7CisgICAg
YUJvdW5kcy5zaXplLmhlaWdodCA9IDIyOworICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQs
IGFCb3VuZHMpOworCisgICAgZHJhd1RleHRBdFBvaW50KGNvbnRleHQsIGFCb3VuZHMub3JpZ2lu
LnggKyA1LCBhQm91bmRzLm9yaWdpbi55ICsgMTcsIHRleHQuYXNjaWkoKS5kYXRhKCksIHRleHQu
YXNjaWkoKS5sZW5ndGgoKSk7CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGV4dEF0UG9pbnQo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQgeCwgQ0dGbG9hdCB5LCBjb25zdCBjaGFyKiBt
ZXNzYWdlLCBzaXplX3QgbGVuZ3RoKSBjb25zdAoreworICAgIFN0cmluZyB0ZXh0KG1lc3NhZ2Us
IGxlbmd0aCk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKworICAgIE5PTkNMSUVOVE1F
VFJJQ1MgbWV0cmljczsKKyAgICBtZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihtZXRyaWNzKTsKKyAg
ICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgbWV0cmljcy5j
YlNpemUsICZtZXRyaWNzLCAwKTsKKyAgICBkZXNjLnNldE9uZUZhbWlseShtZXRyaWNzLmxmU21D
YXB0aW9uRm9udC5sZkZhY2VOYW1lKTsKKworICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKDE4KTsK
KworICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShkZXNjLCAwLCAwKTsKKyAgICBm
b250LnVwZGF0ZSgwKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBj
Zy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBj
Zy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7Cit9CisKIHZv
aWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmludGVybmFsU2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQogewogICAgIGlmIChkaXJ0eVJlY3QpIHsKICAgICAg
ICAgQ0dSZWN0IHJlY3QgPSAqZGlydHlSZWN0OwogICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rp
c3BsYXkob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCAmcmVjdCk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIDAp
OworICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkob3duZXIoKS0+cGxhdGZvcm1MYXll
cigpLCBudWxscHRyKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0
TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgwKTsKKyAgICBp
bnRlcm5hbFNldE5lZWRzRGlzcGxheShudWxscHRyKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGly
dHlSZWN0KQogewotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgp
KSkgewotICAgICAgICAvLyBGSVhNRTogT25seSBzZXROZWVkc0Rpc3BsYXkgZm9yIHRpbGVzIHRo
YXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlCi0gICAgICAgIGludCBudW1UaWxlTGF5ZXJzID0gdGls
ZUNvdW50KCk7Ci0gICAgICAgIENHUmVjdCByZWN0ID0gZGlydHlSZWN0OwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVRpbGVMYXllcnM7ICsraSkKLSAgICAgICAgICAgIENBQ0ZMYXll
clNldE5lZWRzRGlzcGxheSh0aWxlQXRJbmRleChpKSwgJnJlY3QpOwotCi0gICAgICAgIGlmICht
X293bmVyLT5vd25lcigpICYmIG1fb3duZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dS
ZXBhaW50Q291bnRlcihtX293bmVyKSkgewotICAgICAgICAgICAgQ0dSZWN0IGxheWVyQm91bmRz
ID0gbV9vd25lci0+Ym91bmRzKCk7Ci0gICAgICAgICAgICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9
IENHUmVjdE1ha2UobGF5ZXJCb3VuZHMub3JpZ2luLngsIGxheWVyQm91bmRzLm9yaWdpbi55LCA4
MCwgMjUpOwotICAgICAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5KHRpbGVBdEluZGV4
KDApLCAmaW5kaWNhdG9yUmVjdCk7CisgICAgaWYgKCFvd25lcigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQob3duZXIoKS0+bGF5ZXJUeXBlKCkgIT0gUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVUaWxlZEJhY2tpbmdMYXllcik7CisKKyAgICBpZiAob3duZXIoKS0+b3duZXIoKSkg
eworICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFp
bnRDb3VudGVyKG93bmVyKCkpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMg
PSBvd25lcigpLT5ib3VuZHMoKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZXBhaW50Q291bnRl
clJlY3QgPSBsYXllckJvdW5kczsKKworICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11
bSBvZiA0IGRpZ2l0cyBhbmQgYSBmb250IHNpemUgb2YgMTguCisgICAgICAgICAgICByZXBhaW50
Q291bnRlclJlY3Quc2V0V2lkdGgoODApOworICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0
LnNldEhlaWdodCgyMik7CisgICAgICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZv
cm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQorICAgICAgICAgICAgICAgIHJlcGFpbnRD
b3VudGVyUmVjdC5zZXRZKGxheWVyQm91bmRzLmhlaWdodCgpIC0gKGxheWVyQm91bmRzLnkoKSAr
IHJlcGFpbnRDb3VudGVyUmVjdC5oZWlnaHQoKSkpOworICAgICAgICAgICAgaW50ZXJuYWxTZXRO
ZWVkc0Rpc3BsYXkoJnJlcGFpbnRDb3VudGVyUmVjdCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKG93bmVyKCktPmxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2Vi
TGF5ZXIpIHsKLSAgICAgICAgaWYgKG93bmVyKCkgJiYgb3duZXIoKS0+b3duZXIoKSkgewotICAg
ICAgICAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50
Q291bnRlcihvd25lcigpKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5k
cyA9IG93bmVyKCktPmJvdW5kcygpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXBhaW50
Q291bnRlclJlY3QgPSBsYXllckJvdW5kczsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGFzc3Vt
ZSBhIG1heGltdW0gb2YgNCBkaWdpdHMgYW5kIGEgZm9udCBzaXplIG9mIDE4LgotICAgICAgICAg
ICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zZXRXaWR0aCg4MCk7Ci0gICAgICAgICAgICAgICAg
cmVwYWludENvdW50ZXJSZWN0LnNldEhlaWdodCgyMik7Ci0gICAgICAgICAgICAgICAgaWYgKG93
bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKLSAg
ICAgICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNldFkobGF5ZXJCb3VuZHMuaGVp
Z2h0KCkgLSAobGF5ZXJCb3VuZHMueSgpICsgcmVwYWludENvdW50ZXJSZWN0LmhlaWdodCgpKSk7
Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoJnJlcGFpbnRDb3VudGVy
UmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7Ci0gICAgICAgICAgICAgICAg
RmxvYXRSZWN0IGZsaXBwZWREaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgICAgICAgICAg
ZmxpcHBlZERpcnR5UmVjdC5zZXRZKG93bmVyKCktPmJvdW5kcygpLmhlaWdodCgpIC0gKGZsaXBw
ZWREaXJ0eVJlY3QueSgpICsgZmxpcHBlZERpcnR5UmVjdC5oZWlnaHQoKSkpOwotICAgICAgICAg
ICAgICAgIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KCZmbGlwcGVkRGlydHlSZWN0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChvd25lcigpLT5v
d25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pIHsKKyAgICAgICAg
ICAgIEZsb2F0UmVjdCBmbGlwcGVkRGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgICAgICAgICAg
ZmxpcHBlZERpcnR5UmVjdC5zZXRZKG93bmVyKCktPmJvdW5kcygpLmhlaWdodCgpIC0gKGZsaXBw
ZWREaXJ0eVJlY3QueSgpICsgZmxpcHBlZERpcnR5UmVjdC5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgaW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoJmZsaXBwZWREaXJ0eVJlY3QpOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgaW50ZXJuYWxTZXROZWVkc0Rpc3BsYXko
JmRpcnR5UmVjdCk7CiAgICAgfQorCisgICAgaW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoJmRpcnR5
UmVjdCk7CisKICAgICBvd25lcigpLT5zZXROZWVkc0NvbW1pdCgpOwogfQogCkBAIC0yNDcsMTEg
KzIzOCw2IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldFN1YmwKICAgICAg
ICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBsaXN0
W2ldLT5wbGF0Zm9ybUxheWVyKCksIGkpOwogCiAgICAgb3duZXIoKS0+c2V0TmVlZHNDb21taXQo
KTsKLQotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewot
ICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdGlsZSBwYXJlbnQgYWZ0ZXIgc2V0Ci0gICAgICAgIENB
Q0ZMYXllckluc2VydFN1YmxheWVyKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV90aWxlUGFy
ZW50LmdldCgpLCAwKTsKLSAgICB9CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmdldFN1YmxheWVycyhQbGF0Zm9ybUNBTGF5ZXJMaXN0JiBsaXN0KSBjb25zdApAQCAtMjY0
LDM1ICsyNTAsMjAgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Z2V0U3VibAog
CiAgICAgc2l6ZV90IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycyk7CiAKLSAgICBz
aXplX3QgbGF5ZXJzVG9Ta2lwID0gMDsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVy
LT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gRXhjbHVkZSB0aGUgdGlsZSBwYXJlbnQgbGF5
ZXIuCi0gICAgICAgIGxheWVyc1RvU2tpcCA9IDE7Ci0gICAgfQotCi0gICAgbGlzdC5yZXNpemUo
Y291bnQgLSBsYXllcnNUb1NraXApOwotICAgIGZvciAoc2l6ZV90IGFycmF5SW5kZXggPSBsYXll
cnNUb1NraXA7IGFycmF5SW5kZXggPCBjb3VudDsgKythcnJheUluZGV4KQotICAgICAgICBsaXN0
W2FycmF5SW5kZXggLSBsYXllcnNUb1NraXBdID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNB
TGF5ZXIoY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMs
IGFycmF5SW5kZXgpKSk7CisgICAgbGlzdC5yZXNpemUoY291bnQpOworICAgIGZvciAoc2l6ZV90
IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgY291bnQ7ICsrYXJyYXlJbmRleCkKKyAgICAg
ICAgbGlzdFthcnJheUluZGV4XSA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKGNv
bnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBhcnJheUlu
ZGV4KSkpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpyZW1vdmVBbGxT
dWJsYXllcnMoKQogewotICAgIENBQ0ZMYXllclNldFN1YmxheWVycyhvd25lcigpLT5wbGF0Zm9y
bUxheWVyKCksIDApOworICAgIENBQ0ZMYXllclNldFN1YmxheWVycyhvd25lcigpLT5wbGF0Zm9y
bUxheWVyKCksIG51bGxwdHIpOwogICAgIG93bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7Ci0KLSAg
ICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgdGlsZSBwYXJlbnQgYWZ0ZXIgcmVtb3ZhbAotICAgICAgICBDQUNGTGF5
ZXJJbnNlcnRTdWJsYXllcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIG1fdGlsZVBhcmVudC5n
ZXQoKSwgMCk7Ci0gICAgfQogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpp
bnNlcnRTdWJsYXllcihQbGF0Zm9ybUNBTGF5ZXImIGxheWVyLCBzaXplX3QgaW5kZXgpCiB7CiAg
ICAgaW5kZXggPSBtaW4oaW5kZXgsIHN1YmxheWVyQ291bnQoKSk7Ci0gICAgaWYgKGxheWVyVHlw
ZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIEFkZCAxIHRvIGFj
Y291bnQgZm9yIHRoZSB0aWxlIHBhcmVudCBsYXllcgotICAgICAgICArK2luZGV4OwotICAgIH0K
IAogICAgIGxheWVyLnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgQ0FDRkxheWVySW5zZXJ0
U3VibGF5ZXIob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBsYXllci5wbGF0Zm9ybUxheWVyKCks
IGluZGV4KTsKQEAgLTMwMiwxNSArMjczLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6aW5zZXJ0Uwogc2l6ZV90IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzdWJsYXll
ckNvdW50KCkgY29uc3QKIHsKICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdl
dFN1YmxheWVycyhvd25lcigpLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIHNpemVfdCBjb3VudCA9
IHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDogMDsKLQotICAgIGlmIChs
YXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewotICAgICAgICAvLyBTdWJ0
cmFjdCAxIHRvIGFjY291bnQgZm9yIHRoZSB0aWxlIHBhcmVudCBsYXllcgotICAgICAgICBBU1NF
UlQoY291bnQgPiAwKTsKLSAgICAgICAgY291bnQtLTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291
bnQ7CisgICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDog
MDsKIH0KIAogaW50IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbmRleE9mU3VibGF5ZXIo
Y29uc3QgUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UpCkBAIC0zMjUsMTYgKzI4OCw5IEBAIGlu
dCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW5kZXhPZlMKIAogICAgIHNpemVfdCBuID0g
Q0ZBcnJheUdldENvdW50KHN1YmxheWVycyk7CiAKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZCht
X293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBu
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVy
cywgaSkgPT0gcmVmKQotICAgICAgICAgICAgICAgIHJldHVybiBpIC0gMTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGkpID09IHJl
ZikKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGlmIChDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHN1YmxheWVycywgaSkgPT0gcmVmKQorICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIC0xOwpAQCAtMzQyLDE0ICsyOTgsOSBAQCBpbnQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OmluZGV4T2ZTCiAKIFBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnN1YmxheWVyQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKGxh
eWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIEFkZCAx
IHRvIGFjY291bnQgZm9yIHRoZSB0aWxlIHBhcmVudCBsYXllcgotICAgICAgICBpbmRleCsrOwot
ICAgIH0KLQogICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJz
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiAgICAgaWYgKCFzdWJsYXllcnMgfHwgaW5kZXgg
PCAwIHx8IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDw9IGluZGV4KQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgcmV0dXJuIFBsYXRmb3Jt
Q0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3Rf
Y2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGluZGV4KSkpKTsK
IH0KQEAgLTM2MSwxMSArMzEyLDYgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
c2V0Qm91bgogCiAgICAgQ0FDRkxheWVyU2V0Qm91bmRzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIo
KSwgcmVjdCk7CiAgICAgb3duZXIoKS0+c2V0TmVlZHNDb21taXQoKTsKLQotICAgIGlmIChsYXll
clR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewotICAgICAgICBtX2NvbnN0cmFp
bmVkU2l6ZSA9IGNvbnN0cmFpbmVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgICAgIHVwZGF0ZVRp
bGVzKCk7Ci0gICAgfQogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRG
cmFtZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0zNzYsMTY2ICszMjIsNDggQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0RnJhbQogCiAgICAgQ0FDRkxheWVyU2V0RnJh
bWUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCByZWN0KTsKICAgICBvd25lcigpLT5zZXROZWVk
c0NvbW1pdCgpOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBl
KCkpKQotICAgICAgICB1cGRhdGVUaWxlcygpOwogfQogCi1DR1NpemUgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OmNvbnN0cmFpbmVkU2l6ZShjb25zdCBDR1NpemUmIHNpemUpIGNvbnN0Citi
b29sIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppc09wYXF1ZSgpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgaW50IGNNYXhUaWxlQ291bnQgPSA1MTI7Ci0gICAgY29uc3QgZmxvYXQgY1NxcnRNYXhU
aWxlQ291bnQgPSBzcXJ0ZihjTWF4VGlsZUNvdW50KTsKLQotICAgIENHU2l6ZSBjb25zdHJhaW5l
ZFNpemUgPSBzaXplOwotCi0gICAgaW50IHRpbGVDb2x1bW5zID0gY2VpbGYoY29uc3RyYWluZWRT
aXplLndpZHRoIC8gbV90aWxlU2l6ZS53aWR0aCk7Ci0gICAgaW50IHRpbGVSb3dzID0gY2VpbGYo
Y29uc3RyYWluZWRTaXplLmhlaWdodCAvIG1fdGlsZVNpemUuaGVpZ2h0KTsKLQotICAgIGJvb2wg
dG9vTWFueVRpbGVzID0gdGlsZUNvbHVtbnMgJiYgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkg
LyB0aWxlQ29sdW1ucyA8IHRpbGVSb3dzIHx8IHRpbGVDb2x1bW5zICogdGlsZVJvd3MgPiBjTWF4
VGlsZUNvdW50OwotCi0gICAgLy8gSWYgbnVtYmVyIG9mIHRpbGVzIHZlcnRpY2FsbHkgb3IgaG9y
aXpvbnRhbGx5IGlzIDwgc3FydChjTWF4VGlsZUNvdW50KQotICAgIC8vIGp1c3Qgc2hvcnRlbiB0
aGUgbG9uZ2VyIGRpbWVuc2lvbi4gT3RoZXJ3aXNlIHNob3J0ZW4gYm90aCBkaW1lbnNpb25zCi0g
ICAgLy8gYWNjb3JkaW5nIHRvIHRoZSByYXRpbyBvZiB3aWR0aCB0byBoZWlnaHQKLQotICAgIGlm
ICh0b29NYW55VGlsZXMpIHsKLSAgICAgICAgaWYgKHRpbGVSb3dzIDwgY1NxcnRNYXhUaWxlQ291
bnQpCi0gICAgICAgICAgICB0aWxlQ29sdW1ucyA9IGZsb29yZihjTWF4VGlsZUNvdW50IC8gdGls
ZVJvd3MpOwotICAgICAgICBlbHNlIGlmICh0aWxlQ29sdW1ucyA8IGNTcXJ0TWF4VGlsZUNvdW50
KQotICAgICAgICAgICAgdGlsZVJvd3MgPSBmbG9vcmYoY01heFRpbGVDb3VudCAvIHRpbGVDb2x1
bW5zKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aWxlUm93cyA9IGNlaWxmKHNxcnRm
KGNNYXhUaWxlQ291bnQgKiBjb25zdHJhaW5lZFNpemUuaGVpZ2h0IC8gY29uc3RyYWluZWRTaXpl
LndpZHRoKSk7Ci0gICAgICAgICAgICB0aWxlQ29sdW1ucyA9IGZsb29yZihjTWF4VGlsZUNvdW50
IC8gdGlsZVJvd3MpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25zdHJhaW5lZFNp
emUud2lkdGggPSB0aWxlQ29sdW1ucyAqIG1fdGlsZVNpemUud2lkdGg7Ci0gICAgICAgIGNvbnN0
cmFpbmVkU2l6ZS5oZWlnaHQgPSB0aWxlUm93cyAqIG1fdGlsZVNpemUuaGVpZ2h0OwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gY29uc3RyYWluZWRTaXplOworICAgIHJldHVybiBDQUNGTGF5ZXJJ
c09wYXF1ZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjp0aWxlRGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBsYXllciwg
Q0dDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpz
ZXRPcGFxdWUoYm9vbCB2YWx1ZSkKIHsKLSAgICBzdGF0aWNfY2FzdDxQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbCo+KENBQ0ZMYXllckdldFVzZXJEYXRhKGxheWVyKSktPmRyYXdUaWxlKGxheWVy
LCBjb250ZXh0KTsKKyAgICBDQUNGTGF5ZXJTZXRPcGFxdWUob3duZXIoKS0+cGxhdGZvcm1MYXll
cigpLCB2YWx1ZSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmFkZFRp
bGUoKQorZmxvYXQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmNvbnRlbnRzU2NhbGUoKSBj
b25zdAogewotICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+IG5ld0xheWVyID0gYWRvcHRDRihD
QUNGTGF5ZXJDcmVhdGUoa0NBQ0ZMYXllcikpOwotICAgIENBQ0ZMYXllclNldEFuY2hvclBvaW50
KG5ld0xheWVyLmdldCgpLCBDR1BvaW50TWFrZSgwLCAxKSk7Ci0gICAgQ0FDRkxheWVyU2V0VXNl
ckRhdGEobmV3TGF5ZXIuZ2V0KCksIHRoaXMpOwotICAgIENBQ0ZMYXllclNldERpc3BsYXlDYWxs
YmFjayhuZXdMYXllci5nZXQoKSwgdGlsZURpc3BsYXlDYWxsYmFjayk7CiAjaWYgSEFWRShDQUNG
TEFZRVJfU0VUQ09OVEVOVFNTQ0FMRSkKLSAgICBDQUNGTGF5ZXJTZXRDb250ZW50c1NjYWxlKG5l
d0xheWVyLmdldCgpLCBDQUNGTGF5ZXJHZXRDb250ZW50c1NjYWxlKG1fdGlsZVBhcmVudC5nZXQo
KSkpOworICAgIHJldHVybiBDQUNGTGF5ZXJHZXRDb250ZW50c1NjYWxlKG93bmVyKCktPnBsYXRm
b3JtTGF5ZXIoKSk7CisjZWxzZQorICAgIHJldHVybiAxLjBmOwogI2VuZGlmCi0KLSAgICBDRkFy
cmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyhtX3RpbGVQYXJlbnQuZ2V0
KCkpOwotICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKG1fdGlsZVBhcmVudC5nZXQoKSwgbmV3
TGF5ZXIuZ2V0KCksIHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDogMCk7
Ci0KLSAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9y
ZGVycygpKSB7Ci0gICAgICAgIENHQ29sb3JSZWYgYm9yZGVyQ29sb3IgPSBDR0NvbG9yQ3JlYXRl
R2VuZXJpY1JHQigwLjUsIDAsIDAuNSwgMC43KTsKLSAgICAgICAgQ0FDRkxheWVyU2V0Qm9yZGVy
Q29sb3IobmV3TGF5ZXIuZ2V0KCksIGJvcmRlckNvbG9yKTsKLSAgICAgICAgQ0dDb2xvclJlbGVh
c2UoYm9yZGVyQ29sb3IpOwotICAgICAgICBDQUNGTGF5ZXJTZXRCb3JkZXJXaWR0aChuZXdMYXll
ci5nZXQoKSwgMik7Ci0gICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpyZW1vdmVUaWxlKCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldENvbnRl
bnRzU2NhbGUoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgQ0FDRkxheWVyUmVtb3ZlRnJvbVN1
cGVybGF5ZXIodGlsZUF0SW5kZXgodGlsZUNvdW50KCkgLSAxKSk7Ci19Ci0KLUNBQ0ZMYXllclJl
ZiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUF0SW5kZXgoaW50IGluZGV4KQotewot
ICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG1fdGlsZVBh
cmVudC5nZXQoKSk7Ci0gICAgaWYgKCFzdWJsYXllcnMgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49
IHRpbGVDb3VudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KHN1YmxheWVycywgaW5kZXgpKSk7CisjaWYgSEFWRShDQUNGTEFZRVJfU0VUQ09OVEVOVFNT
Q0FMRSkKKyAgICBDQUNGTGF5ZXJTZXRDb250ZW50c1NjYWxlKG93bmVyKCktPnBsYXRmb3JtTGF5
ZXIoKSwgc2NhbGVGYWN0b3IpOworI2VuZGlmCiB9CiAKLWludCBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6dGlsZUNvdW50KCkgY29uc3QKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQogewotICAgIENGQXJyYXlSZWYgc3VibGF5
ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0gICAgcmV0
dXJuIHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDogMDsKKyAgICBDQUNG
TGF5ZXJTZXRCb3JkZXJXaWR0aChvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHZhbHVlKTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVGlsZXMoKQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZh
bHVlKQogewotICAgIC8vIEZJWE1FOiBJbiBhZGRpdGlvbiB0byByZWRvaW5nIHRoZSBudW1iZXIg
b2YgdGlsZXMsIHdlIG5lZWQgdG8gb25seSByZW5kZXIgYW5kIGhhdmUgYmFja2luZwotICAgIC8v
IHN0b3JlIGZvciB2aXNpYmxlIGxheWVycwotICAgIGludCBudW1UaWxlc0hvcml6b250YWwgPSBj
ZWlsKG1fY29uc3RyYWluZWRTaXplLndpZHRoIC8gbV90aWxlU2l6ZS53aWR0aCk7Ci0gICAgaW50
IG51bVRpbGVzVmVydGljYWwgPSBjZWlsKG1fY29uc3RyYWluZWRTaXplLmhlaWdodCAvIG1fdGls
ZVNpemUuaGVpZ2h0KTsKLSAgICBpbnQgbnVtVGlsZXNUb3RhbCA9IG51bVRpbGVzSG9yaXpvbnRh
bCAqIG51bVRpbGVzVmVydGljYWw7Ci0gICAgQVNTRVJUKCFtX2NvbnN0cmFpbmVkU2l6ZS5oZWln
aHQgfHwgIW1fY29uc3RyYWluZWRTaXplLndpZHRoIHx8IG51bVRpbGVzVG90YWwgPiAwKTsKLQot
ICAgIGludCBudW1UaWxlc1RvQ2hhbmdlID0gbnVtVGlsZXNUb3RhbCAtIHRpbGVDb3VudCgpOwot
ICAgIGlmIChudW1UaWxlc1RvQ2hhbmdlID49IDApIHsKLSAgICAgICAgLy8gQWRkIG5ldyB0aWxl
cwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzVG9DaGFuZ2U7ICsraSkKLSAg
ICAgICAgICAgIGFkZFRpbGUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBSZW1vdmUgb2xk
IHRpbGVzCi0gICAgICAgIG51bVRpbGVzVG9DaGFuZ2UgPSAtbnVtVGlsZXNUb0NoYW5nZTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlc1RvQ2hhbmdlOyArK2kpCi0gICAgICAg
ICAgICByZW1vdmVUaWxlKCk7Ci0gICAgfQorICAgIENHRmxvYXQgY29tcG9uZW50c1s0XSA9IHsg
MCwgMCwgMCwgMCB9OworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2Ug
PSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKIAotICAgIC8vIFNldCBj
b29yZGluYXRlcyBmb3IgYWxsIHRpbGVzCi0gICAgQ0ZBcnJheVJlZiB0aWxlQXJyYXkgPSBDQUNG
TGF5ZXJHZXRTdWJsYXllcnMobV90aWxlUGFyZW50LmdldCgpKTsKKyAgICBpZiAodmFsdWUuaXNW
YWxpZCgpKQorICAgICAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNb
MV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwogCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1UaWxlc0hvcml6b250YWw7ICsraSkgewotICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IG51bVRpbGVzVmVydGljYWw7ICsraikgewotICAgICAgICAgICAgQ0FDRkxheWVyUmVmIHRp
bGUgPSBzdGF0aWNfY2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlH
ZXRWYWx1ZUF0SW5kZXgodGlsZUFycmF5LCBpICogbnVtVGlsZXNWZXJ0aWNhbCArIGopKSk7Ci0g
ICAgICAgICAgICBDQUNGTGF5ZXJTZXRQb3NpdGlvbih0aWxlLCBDR1BvaW50TWFrZShpICogbV90
aWxlU2l6ZS53aWR0aCwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0KSk7Ci0gICAgICAgICAgICBpbnQg
d2lkdGggPSBtaW4obV90aWxlU2l6ZS53aWR0aCwgbV9jb25zdHJhaW5lZFNpemUud2lkdGggLSBp
ICogbV90aWxlU2l6ZS53aWR0aCk7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0ID0gbWluKG1fdGls
ZVNpemUuaGVpZ2h0LCBtX2NvbnN0cmFpbmVkU2l6ZS5oZWlnaHQgLSBqICogbV90aWxlU2l6ZS5o
ZWlnaHQpOwotICAgICAgICAgICAgQ0FDRkxheWVyU2V0Qm91bmRzKHRpbGUsIENHUmVjdE1ha2Uo
aSAqIG1fdGlsZVNpemUud2lkdGgsIGogKiBtX3RpbGVTaXplLmhlaWdodCwgd2lkdGgsIGhlaWdo
dCkpOwotCi0gICAgICAgICAgICAvLyBGbGlwIFkgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGZsaXBw
aW5nIHRoYXQgaGFwcGVucyBkdXJpbmcgcmVuZGVyIHRvIG1hdGNoIHRoZSBDRyBjb250ZXh0IGNv
b3JkaW5hdGUgc3BhY2UKLSAgICAgICAgICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FU
cmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwgMSk7Ci0gICAgICAgICAgICBDQVRyYW5zZm9ybTNE
VHJhbnNsYXRlKHRyYW5zZm9ybSwgMCwgaGVpZ2h0LCAwKTsKLSAgICAgICAgICAgIENBQ0ZMYXll
clNldFRyYW5zZm9ybSh0aWxlLCB0cmFuc2Zvcm0pOwotCi0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICAgICAgU3RyaW5nIG5hbWUgPSAiVGlsZSAoIiArIFN0cmluZzo6bnVtYmVyKGkpICsgIiwiICsg
U3RyaW5nOjpudW1iZXIoaikgKyAiKSI7Ci0gICAgICAgICAgICBDQUNGTGF5ZXJTZXROYW1lKHRp
bGUsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAg
IH0KLX0KKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IgPSBhZG9wdENGKENHQ29sb3JD
cmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29tcG9uZW50cykpOwogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpkcmF3VGlsZShDQUNGTGF5ZXJSZWYgdGlsZSwgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCi17Ci0gICAgQ0dQb2ludCB0aWxlUG9zaXRpb24gPSBDQUNGTGF5ZXJHZXRQb3Np
dGlvbih0aWxlKTsKLSAgICBDR1JlY3QgdGlsZUJvdW5kcyA9IENBQ0ZMYXllckdldEJvdW5kcyh0
aWxlKTsKLQotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICAvLyBTZXQg
dGhlIGNvbnRleHQgY2xpcHBpbmcgcmVjdGFuZ2xlIHRvIHRoZSBjdXJyZW50IHRpbGUKLSAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UodGlsZVBvc2l0aW9uLngsIHRp
bGVQb3NpdGlvbi55LCB0aWxlQm91bmRzLnNpemUud2lkdGgsIHRpbGVCb3VuZHMuc2l6ZS5oZWln
aHQpKTsKLQotICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50
c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc1RvcERvd24pIHsKLSAgICAgICAgLy8gSWYgdGhlIGxheWVyIGlzIHJlbmRlcmluZyB0
b3AtZG93biwgaXQgd2lsbCBmbGlwIHRoZSBjb29yZGluYXRlcyBpbiB5LiBUaWxlZCBsYXllcnMg
YXJlCi0gICAgICAgIC8vIGFscmVhZHkgZmxpcHBpbmcsIHNvIHdlIG5lZWQgdG8gdW5kbyB0aGF0
IGhlcmUuCi0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCBvd25lcigp
LT5ib3VuZHMoKS5oZWlnaHQoKSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQs
IDEsIC0xKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IHRoZSB0aWxlCi0gICAgZGlzcGxheUNhbGxi
YWNrKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgY29udGV4dCk7Ci0KLSAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotfQotCi1UaWxlQ29udHJvbGxlciogUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OmNyZWF0ZVRpbGVDb250cm9sbGVyKFBsYXRmb3JtQ0FMYXllciogcm9v
dExheWVyKQotewotICAgIEFTU0VSVCghbV90aWxlQ29udHJvbGxlcik7Ci0gICAgbV90aWxlQ29u
dHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8VGlsZUNvbnRyb2xsZXI+KHJvb3RMYXllcik7Ci0g
ICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXIuZ2V0KCk7Ci19Ci0KLVRpbGVkQmFja2luZyogUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVkQmFja2luZygpCi17Ci0gICAgcmV0dXJuIG1f
dGlsZUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgQ0FDRkxheWVyU2V0Qm9yZGVyQ29sb3Iob3duZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBjb2xvci5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaAkocmV2aXNpb24gMTg5NjE4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR0Nv
bnRleHQgKkNHQ29udGV4dFJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKIGNsYXNzIFRpbGVD
b250cm9sbGVyOwpAQCAtNDcsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWwoUGxhdGZvcm1DQUxheWVyKik7CiAgICAgflBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsKCk7CiAKLSAgICB2b2lkIGRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYsIENHQ29u
dGV4dFJlZik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGxh
eUNhbGxiYWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIG93bmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9vd25lcjsgfQogCiAgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgUGxhdGZv
cm1DQUxheWVyTGlzdCYpOwpAQCAtNTksMzIgKzYwLDMwIEBAIHB1YmxpYzoKICAgICBzaXplX3Qg
c3VibGF5ZXJDb3VudCgpIGNvbnN0OwogICAgIGludCBpbmRleE9mU3VibGF5ZXIoY29uc3QgUGxh
dGZvcm1DQUxheWVyKiByZWZlcmVuY2UpOwogCi0gICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldE9wYXF1ZShib29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHMoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKIAot
ICAgIFRpbGVDb250cm9sbGVyKiBjcmVhdGVUaWxlQ29udHJvbGxlcihQbGF0Zm9ybUNBTGF5ZXIq
IHJvb3RMYXllcik7Ci0gICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKTsKKyAgICB2aXJ0
dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNTY2FsZShmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxv
YXQpOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CisK
KyAgICBzdGF0aWMgdm9pZCBmbGlwQ29udGV4dChDR0NvbnRleHRSZWYsIENHRmxvYXQgaGVpZ2h0
KTsKKyAgICAgICAgCisgICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiwg
Q0dDb250ZXh0UmVmLCBDR1JlY3QgbGF5ZXJCb3VuZHMsIGludCBkcmF3Q291bnQpOworCisgICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYsIENHRmxvYXQgeCwgQ0dG
bG9hdCB5LCBjb25zdCBjaGFyKiB0ZXh0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCopOwog
ICAgIFBsYXRmb3JtQ0FMYXllciogc3VibGF5ZXJBdEluZGV4KGludCkgY29uc3Q7CiAKLSAgICBz
dGF0aWMgdm9pZCB0aWxlRGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVm
KTsKLQotICAgIHZvaWQgZHJhd1RpbGUoQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYpOwotICAg
IENHU2l6ZSBjb25zdHJhaW5lZFNpemUoY29uc3QgQ0dTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBh
ZGRUaWxlKCk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKCk7Ci0gICAgQ0FDRkxheWVyUmVmIHRpbGVB
dEluZGV4KGludCk7Ci0gICAgaW50IHRpbGVDb3VudCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRl
VGlsZXMoKTsKLQogICAgIFBsYXRmb3JtQ0FMYXllciogbV9vd25lcjsKLQotICAgIENHU2l6ZSBt
X3RpbGVTaXplOwotICAgIENHU2l6ZSBtX2NvbnN0cmFpbmVkU2l6ZTsKLSAgICBSZXRhaW5QdHI8
Q0FDRkxheWVyUmVmPiBtX3RpbGVQYXJlbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRpbGVDb250
cm9sbGVyPiBtX3RpbGVDb250cm9sbGVyOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGls
ZWRCYWNraW5nTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW4uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlRpbGVDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiVGlsZWRCYWNraW5nLmgiCisjaW5jbHVkZSA8UXVhcnR6Q29yZS9DQUNGTGF5ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlRpbGVkQmFja2luZ0xheWVyV2luOjpXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbihQbGF0Zm9ybUNBTGF5ZXIqIG93bmVyKQorICAgIDogUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWwob3duZXIpCit7Cit9CisKK1dlYlRpbGVkQmFja2luZ0xheWVyV2lu
Ojp+V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4oKQoreworfQorCitzdHJ1Y3QgRGlzcGxheU9uTWFp
blRocmVhZENvbnRleHQgeworICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+IGxheWVyOworICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQ7CisKKyAgICBEaXNwbGF5T25NYWluVGhy
ZWFkQ29udGV4dChDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVmIGNhQ29udGV4dCkK
KyAgICAgICAgOiBsYXllcihjYUxheWVyKQorICAgICAgICAsIGNvbnRleHQoY2FDb250ZXh0KQor
ICAgIHsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCByZWRpc3BhdGNoT25NYWluUXVldWUodm9p
ZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dD4gcmV0YWluZWRDb250ZXh0KHJlaW50
ZXJwcmV0X2Nhc3Q8RGlzcGxheU9uTWFpblRocmVhZENvbnRleHQqPihjb250ZXh0KSk7CisgICAg
aWYgKCFyZXRhaW5lZENvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsKiBzZWxmID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWwqPihDQUNGTGF5ZXJHZXRVc2VyRGF0YShyZXRhaW5lZENvbnRleHQtPmxheWVyLmdldCgp
KSk7CisKKyAgICBzZWxmLT5kaXNwbGF5Q2FsbGJhY2socmV0YWluZWRDb250ZXh0LT5sYXllci5n
ZXQoKSwgcmV0YWluZWRDb250ZXh0LT5jb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAg
ICAgIGRpc3BhdGNoX2FzeW5jX2YoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbmV3IERpc3Bs
YXlPbk1haW5UaHJlYWRDb250ZXh0KGNhTGF5ZXIsIGNvbnRleHQpLCByZWRpc3BhdGNoT25NYWlu
UXVldWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghb3duZXIoKSB8
fCAhb3duZXIoKS0+b3duZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0U2F2
ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENHUmVjdCBsYXllckJvdW5kcyA9IG93bmVyKCktPmJv
dW5kcygpOworICAgIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSA9IG93bmVy
KCktPmxheWVyVHlwZSgpOworICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FM
YXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKKworICAgIEFTU0VSVChsYXllclR5cGUgPT0gUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcik7CisKKyAgICBmbGlwQ29u
dGV4dChjb250ZXh0LCBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQg
dG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25p
ZmljYW50bHkKKyAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxl
ZCBsYXllcnMpCisgICAgQ0dSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRp
bmdCb3goY29udGV4dCk7CisgICAgSW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJv
dW5kcykpOworICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVu
dHMob3duZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKKworICAgIGlmIChvd25lcigpLT5v
d25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIoKSkpIHsKKyAg
ICAgICAgaW50IGRyYXdDb3VudCA9IG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllcklu
Y3JlbWVudFJlcGFpbnRDb3VudChvd25lcigpKTsKKyAgICAgICAgZHJhd1JlcGFpbnRDb3VudGVy
cyhjYUxheWVyLCBjb250ZXh0LCBsYXllckJvdW5kcywgZHJhd0NvdW50KTsKKyAgICB9CisKKyAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworCisgICAgb3duZXIoKS0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KG93bmVyKCkpOworfQorCit2b2lkIFdl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGlmIChtX3Rp
bGVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci0+c2V0TmVlZHNE
aXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAobV90aWxl
Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCkpOworfQorCit2b2lkIFdlYlRp
bGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiBib3VuZHMpCit7
CisgICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KGJvdW5kcywgb3duZXIoKS0+Ym91bmRzKCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm91
bmRzKGJvdW5kcyk7CisKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgbV90aWxl
Q29udHJvbGxlci0+dGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgV2Vi
VGlsZWRCYWNraW5nTGF5ZXJXaW46OmlzT3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
aWxlQ29udHJvbGxlciA/IG1fdGlsZUNvbnRyb2xsZXItPnRpbGVzQXJlT3BhcXVlKCkgOiB0cnVl
OworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRPcGFxdWUoYm9vbCB2YWx1
ZSkKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNv
bnRyb2xsZXItPnNldFRpbGVzT3BhcXVlKHZhbHVlKTsKK30KKworZmxvYXQgV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVD
b250cm9sbGVyID8gbV90aWxlQ29udHJvbGxlci0+Y29udGVudHNTY2FsZSgpIDogMS4wZjsKK30K
Kwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBz
Y2FsZUZhY3RvcikKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
IG1fdGlsZUNvbnRyb2xsZXItPnNldENvbnRlbnRzU2NhbGUoc2NhbGVGYWN0b3IpOworfQorCit2
b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB2YWx1ZSkK
K3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRy
b2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKHZhbHVlIC8gMik7Cit9CisKK3ZvaWQgV2Vi
VGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkK
K3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRy
b2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKHZhbHVlKTsKK30KKworVGlsZUNvbnRyb2xs
ZXIqIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpjcmVhdGVUaWxlQ29udHJvbGxlcihQbGF0Zm9y
bUNBTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBBU1NFUlQoIW1fdGlsZUNvbnRyb2xsZXIpOwor
ICAgIG1fdGlsZUNvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbGVDb250cm9sbGVyPihy
b290TGF5ZXIpOworICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLmdldCgpOworfQorCitUaWxl
ZEJhY2tpbmcqIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjp0aWxlZEJhY2tpbmcoKQoreworICAg
IHJldHVybiBtX3RpbGVDb250cm9sbGVyLmdldCgpOworfQorCit2b2lkIFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luOjppbnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVChtX3RpbGVDb250cm9sbGVyKTsKKyAgICBtX3RpbGVDb250cm9sbGVyID0gbnVs
bHB0cjsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9X
ZWJUaWxlZEJhY2tpbmdMYXllcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVk
QmFja2luZ0xheWVyV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYlRpbGVk
QmFja2luZ0xheWVyV2luX2gKKyNkZWZpbmUgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW5faAorCisj
aW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiA6IHB1YmxpYyBQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbCB7CitwdWJsaWM6CisgICAgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4o
UGxhdGZvcm1DQUxheWVyKik7CisgICAgfldlYlRpbGVkQmFja2luZ0xheWVyV2luKCk7CisKKyAg
ICB2b2lkIGRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKworICAgIGJvb2wg
aXNPcGFxdWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldE9wYXF1ZShib29sKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwor
CisgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0
Q29udGVudHNTY2FsZShmbG9hdCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEJvcmRlcldpZHRo
KGZsb2F0KSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3Im
KSBvdmVycmlkZTsKKworICAgIC8vIFdlYlRpbGVkQmFja2luZ0xheWVyIEZlYXR1cmVzCisgICAg
VGlsZUNvbnRyb2xsZXIqIGNyZWF0ZVRpbGVDb250cm9sbGVyKFBsYXRmb3JtQ0FMYXllciogcm9v
dExheWVyKTsKKyAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpOworICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworCitwcml2YXRlOgorICAgIFJldGFpblB0cjxDQUNGTGF5ZXJSZWY+IG1fdGls
ZVBhcmVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGlsZUNvbnRyb2xsZXI+IG1fdGlsZUNvbnRy
b2xsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261201</attachid>
            <date>2015-09-15 10:17:55 -0700</date>
            <delta_ts>2015-09-15 10:39:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149144-20150915103341.patch</filename>
            <type>text/plain</type>
            <size>55488</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBAQAorMjAxNS0wOS0xNCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBUaWxlZCBkcmF3
aW5nIGlzIHJlbmRlcmluZyBtb3JlIHRpbWVzIHRoYW4gaXQgc2hvdWxkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxNDQKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzIyMzEzOTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb3ZpZGUgYSBtb3JlIGZhaXRoZnVsIGltcGxlbWVuYXRpb24gb2YgdGhl
IE9iamVjdGl2ZSBDIHRpbGVkIGRyYXdpbmcgbG9naWMuCisgICAgICAgICgxKSBDcmVhdGUgYSBu
ZXcgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4gY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgdGhlCisg
ICAgICAgICAgICBjb250YWluZXIgb2YgdGlsZXMuIFRoaXMgbWF0Y2hlcyB0aGUgT2JqZWN0aXZl
IEMgZGVzaWduLgorICAgICAgICAoMikgTW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXZlcmFsIG1l
dGhvZHMgKGUuZy4sIGlzT3BhcXVlKSB0byB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgIGNsYXNz
IGltcGxlbWVudGF0aW9uIHNvIHRoYXQgdGhlIFRpbGUgRHJhd2luZyBsb2dpYyBjYW4gcGVyZm9y
bSBzcGVjaWFsCisgICAgICAgICAgICBoYW5kbGluZyBpbiB0aGVzZSBjYXNlcy4KKyAgICAgICAg
KDMpIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBUaWxlZCBEcmF3aW5nIGxvZ2ljIGZyb20gUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwsCisgICAgICAgICAgICBzaW5jZSBpdCB3YXMganVzdCBkdXBs
aWNhdGluZyBjb2RlIGluIFRpbGVDb250cm9sbGVyIGFuZCBUaWxlR3JpZC4KKyAgICAgICAgKDQp
IENsZWFuIHVwIHRoZSBkaXNwbGF5IGNhbGxiYWNrIGNvZGUgdG8gYXZvaWQgcGVyZm9ybWluZyBp
bmNvcnJlY3QgZmxpcHBpbmcKKyAgICAgICAgICAgIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4K
KworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6IEFkZCBuZXcgV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW4gZmlsZS4gICAgICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qOiBBZGQgdGhlIG5ldyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBmaWxl
cy4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4p
OiBDcmVhdGUgYSBXZWJUaWxlZEJhY2tpbmdMYXllcldpbgorICAgICAgICBvYmplY3QgaWYgdXNp
bmcgdGlsZWQgZHJhd2luZy4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6flBsYXRmb3Jt
Q0FMYXllcldpbik6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKTogTW92
ZSBpbXBsZW1lbnRhdGlvbiB0byBpbnRlcm5hbCBjbGFzcy4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbjo6c2V0T3BhcXVlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldEJvcmRlcldpZHRoKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dEJvcmRlckNvbG9yKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRl
bnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVu
dHNTY2FsZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpjb3JuZXJSYWRp
dXMpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6dGlsZWRCYWNraW5nKTog
RGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludCk6IE5l
dyBoZWxwZXIgbWV0aG9kIHRvIGRyYXcgcmVwYWludCBjb3VudGVyCisgICAgICAgIHRleHQuIE5l
ZWRlZCB0byB3b3JrIGFyb3VuZCBidWcgaW4gQ0cuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCk6IFJlbW92
ZSB0aWxpbmctbG9naWMKKyAgICAgICAgcmVsYXRlZCBtZW1iZXIgdmFyaWFibGVzLgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6On5QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZmxpcENvbnRleHQpOiBB
ZGRlZCBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgIChzaG91bGRJbnZlcnRCZWZvcmVEcmF3
aW5nQ29udGVudCk6IERpdHRvLgorICAgICAgICAoc2hvdWxkSW52ZXJ0QmVmb3JlRHJhd2luZ1Jl
cGFpbnRDb3VudGVycyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmRpc3BsYXlDYWxsYmFjayk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6ZHJhd1JlcGFpbnRDb3VudGVycyk6IEhlbHBlciBtZXRob2QgdG8KKyAgICAgICAgc2hhcmUg
Y29kZSBiZXR3ZWVuIHRoZSB0d28gbGF5ZXIgY2xhc3Nlcy4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheSk6IHVzZSBudWxscHRyLgor
ICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxh
eUluUmVjdCk6IE1vdmUgdGlsZWQgY29kZQorICAgICAgICB0byBXZWJUaWxlZEJhY2tpbmdMYXll
cldpbiBhbmQgc2ltcGxpZnkgdGhlIHJlbWFpbmcgY29kZS4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXRTdWJsYXllcnMpOiBSZW1vdmUgdGlsZSBjb2RlLgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmdldFN1YmxheWVycyk6IERpdHRvLgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZUFsbFN1YmxheWVycyk6IERp
dHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omluc2VydFN1YmxheWVy
KTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c3VibGF5ZXJD
b3VudCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmluZGV4
T2ZTdWJsYXllcik6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OnN1YmxheWVyQXRJbmRleCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldEJvdW5kcyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldEZyYW1lKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6aXNPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpzZXRPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpjb250ZW50c1NjYWxlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6c2V0Q29udGVudHNTY2FsZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OnNldEJvcmRlcldpZHRoKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyQ29sb3IpOiBEaXR0by4KKyAgICAgICAgKGxh
eWVyVHlwZUlzVGlsZWQpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OmNvbnN0cmFpbmVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6dGlsZURpc3BsYXlDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSk6IERlbGV0ZWQuCisgICAgICAgIChQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6cmVtb3ZlVGlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUF0SW5kZXgpOiBEZWxldGVkLgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVDb3VudCk6IERlbGV0ZWQuCisg
ICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVGlsZXMpOiBEZWxldGVk
LgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdUaWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpjcmVhdGVUaWxlQ29udHJv
bGxlcik6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGls
ZWRCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpvd25lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJU
aWxlZEJhY2tpbmdMYXllcldpbjo6V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4pOgorICAgICAgICAo
V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46On5XZWJUaWxlZEJhY2tpbmdMYXllcldpbik6CisgICAg
ICAgIChEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dDo6RGlzcGxheU9uTWFpblRocmVhZENvbnRl
eHQpOgorICAgICAgICAocmVkaXNwYXRjaE9uTWFpblF1ZXVlKToKKyAgICAgICAgKFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2spOgorICAgICAgICAoV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdM
YXllcldpbjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46
OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRPcGFxdWUp
OgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUpOgorICAg
ICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAg
ICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKToKKyAgICAgICAgKFdl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbjo6Y3JlYXRlVGlsZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViVGls
ZWRCYWNraW5nTGF5ZXJXaW46OnRpbGVkQmFja2luZyk6CisgICAgICAgIChXZWJUaWxlZEJhY2tp
bmdMYXllcldpbjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmg6IEFkZGVkLgorCiAyMDE1LTA5LTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQuY3JlYXRlTm9k
ZUl0ZXJhdG9yKG51bGwpIC8gRG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihudWxsKSBzaG91bGQg
dGhyb3cgYSBUeXBlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFr
ZQkocmV2aXNpb24gMTg5NjE4KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUZpbHRlcnNX
aW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVy
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVl
SG9zdC5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0ODQsNiArNzQ4NCwxMiBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cRmlsZVN5c3RlbS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRpb25cY2ZcQ0RN
U2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxXZWJDb3JlQVZDRlJlc291cmNlTG9h
ZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGNhXHdpblxXZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAiPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdf
V2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXElTT1ZUVEN1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxhdWRpb1xBdWRpb1Nlc3Npb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cYXVkaW9cUGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwIiAvPgpAQCAtMjA4NTAsNiAr
MjA4NTYsMTIgQEAKICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cUGxhdGZv
cm1DQUxheWVyV2luLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xjYVx3aW5cV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCI+CisgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Cisg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcR0xDb250ZXh0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXFN1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCI+CkBAIC0yMjgzNCw0ICsyMjg0Niw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1
aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Q
cm9qZWN0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMzAzMyw5ICsz
MDMzLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDaGlsZE5vZGVMaXN0LmNw
cCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXENsYXNzTm9kZUxpc3QuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkb21cQ2xpZW50UmVjdC5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTMyMzQsOSArMzIzMSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkb21cTm9kZS5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxOb2RlRmlsdGVyLmNw
cCI+Ci0gICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIj4KICAgICAg
IDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC03MjY2LDYgKzcyNjAs
MTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcRE9NU2VjdXJpdHlQb2xpY3ku
Y3BwIj4KICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xEYXRhVVJMRGVjb2Rlci5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkb21cQ2xhc3NDb2xsZWN0aW9uLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcR2VuZXJpY0NhY2hlZEhUTUxD
b2xsZWN0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGNhXHdpblxXZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAiPgorICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljc1xjYVx3aW48L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAg
PC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXGdlb2xvY2F0aW9uXENvb3JkaW5hdGVzLmgiPgpAQCAtMTAxMDAsOSArMTAxMDAsNiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENoaWxkTm9kZUxpc3QuaCI+CiAgICAg
ICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZG9tXENsYXNzTm9kZUxpc3QuaCI+Ci0gICAgICA8RmlsdGVyPmRvbTwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENs
aWVudFJlY3QuaCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpAQCAtMTUyNTUsNiArMTUyNTIsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBh
Z2VcRE9NU2VjdXJpdHlQb2xpY3kuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFk
ZXJzXGluc3BlY3RvclxJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xEYXRhVVJMRGVjb2Rlci5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENsYXNzQ29sbGVjdGlvbi5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luLmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xjYVx3aW48
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+
CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cY3NzXENTU0dyYW1tYXIueS5pbiI+CkBAIC0xNTQ1OSw0
ICsxNTQ2Miw0IEBACiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXHdpbjwvRmlsdGVyPgogICAgIDwv
TUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCShyZXZpc2lvbiAxODk2MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwxOSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6
ZHJhd1JlcGFpbnRJbmRpY2F0CiAgICAgc25wcmludGYodGV4dCwgc2l6ZW9mKHRleHQpLCAiJWQi
LCByZXBhaW50Q291bnQpOwogICAgIAogICAgIENHUmVjdCBpbmRpY2F0b3JCb3ggPSBwbGF0Zm9y
bUNBTGF5ZXItPmJvdW5kcygpOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
KworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKHBsYXRmb3JtQ0FMYXllci0+bGF5ZXJUeXBlKCkg
PT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXIpIHsKKyAg
ICAgICAgLy8gVGlsZWQgbGF5ZXJzIGluIFdpbmRvd3MgaGF2ZSBmbGlwcGVkIGNvb3JkaW5hdGVz
CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICAgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1pbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQp
OworICAgIH0KKyNlbmRpZgorCiAgICAgaW5kaWNhdG9yQm94LnNpemUud2lkdGggPSAxMiArIDEw
ICogc3RybGVuKHRleHQpOwogICAgIGluZGljYXRvckJveC5zaXplLmhlaWdodCA9IDI3OwotICAg
IENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgCiAgICAgQ0dDb250ZXh0U2V0QWxw
aGEoY29udGV4dCwgMC41Zik7CiAgICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldp
dGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7CkBAIC04NSwxMyArOTUsMTkgQEAgdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdAogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgQ0dDb250ZXh0
U2V0VGV4dE1hdHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkp
OwogICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4dCwgIkhlbHZldGljYSIsIDIyLCBrQ0dF
bmNvZGluZ01hY1JvbWFuKTsKLSAgICBDR0NvbnRleHRTaG93VGV4dEF0UG9pbnQoY29udGV4dCwg
aW5kaWNhdG9yQm94Lm9yaWdpbi54ICsgNSwgaW5kaWNhdG9yQm94Lm9yaWdpbi55ICsgMjIsIHRl
eHQsIHN0cmxlbih0ZXh0KSk7CisgICAgcGxhdGZvcm1DQUxheWVyLT5kcmF3VGV4dEF0UG9pbnQo
Y29udGV4dCwgaW5kaWNhdG9yQm94Lm9yaWdpbi54ICsgNSwgaW5kaWNhdG9yQm94Lm9yaWdpbi55
ICsgMjIsIHRleHQsIHN0cmxlbih0ZXh0KSk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CiAgICAgCiAgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7CiAgICAg
Q0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBp
cyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2luZG93cyBDRyA8cmRhcjovL3Byb2Js
ZW0vMjI3MDM0NzA+Cit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHQ29u
dGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgY29uc3QgY2hhciogdGV4dCwg
c2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBDR0NvbnRleHRTaG93VGV4dEF0UG9pbnQoY29u
dGV4dCwgeCwgeSwgdGV4dCwgbGVuZ3RoKTsKK30KKwogUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBvb2wo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQogewogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+
IGxheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgJKHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjYsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dEF0UG9pbnQo
Q0dDb250ZXh0UmVmLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgY29uc3QgY2hhciogdGV4dCwgc2l6
ZV90IGxlbmd0aCkgY29uc3Q7CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgdmlydHVhbCBQbGF0
Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNMYXlvdXQoKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAkocmV2
aXNpb24gMTg5NjE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1h
dGlvbldpbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgiCisjaW5j
bHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIlRpbGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZUhlYWRlckRldGVjdGlvbi5oIgorI2luY2x1ZGUgIldlYlRpbGVkQmFja2luZ0xheWVy
V2luLmgiCiAjaW5jbHVkZSA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uQ0YuaD4KICNpbmNsdWRl
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0xNDIsMTcgKzE0NCwyMCBAQCBQbGF0Zm9ybUNBTGF5
ZXJXaW46OlBsYXRmb3JtQ0FMYXllcldpbihMCiAjZW5kaWYKIAogICAgIC8vIENyZWF0ZSB0aGUg
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwgb2JqZWN0IGFuZCBwb2ludCB0byBpdCBpbiB0aGUg
dXNlcmRhdGEuCi0gICAgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwqIGludGVybiA9IG5ldyBQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCh0aGlzKTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbCogaW50ZXJuID0gbnVsbHB0cjsKKworICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5
ZXIoKSkgeworICAgICAgICBpbnRlcm4gPSBuZXcgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4odGhp
cyk7CisgICAgICAgIFRpbGVDb250cm9sbGVyKiB0aWxlQ29udHJvbGxlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4qPihpbnRlcm4pLT5jcmVhdGVUaWxlQ29udHJv
bGxlcih0aGlzKTsKKyAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBzdGQ6Om1ha2VfdW5pcXVl
PFBsYXRmb3JtQ0FMYXllckxpc3Q+KHRpbGVDb250cm9sbGVyLT5jb250YWluZXJMYXllcnMoKSk7
CisgICAgfSBlbHNlCisgICAgICAgIGludGVybiA9IG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbCh0aGlzKTsKKwogICAgIENBQ0ZMYXllclNldFVzZXJEYXRhKG1fbGF5ZXIuZ2V0KCksIGlu
dGVybik7CiAKICAgICAvLyBTZXQgdGhlIGRpc3BsYXkgY2FsbGJhY2sKICAgICBDQUNGTGF5ZXJT
ZXREaXNwbGF5Q2FsbGJhY2sobV9sYXllci5nZXQoKSwgZGlzcGxheUNhbGxiYWNrKTsKICAgICBD
QUNGTGF5ZXJTZXRMYXlvdXRDYWxsYmFjayhtX2xheWVyLmdldCgpLCBsYXlvdXRTdWJsYXllcnNQ
cm9jKTsKLQotICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkgewotICAgICAgICBUaWxl
Q29udHJvbGxlciogdGlsZUNvbnRyb2xsZXIgPSBpbnRlcm4tPmNyZWF0ZVRpbGVDb250cm9sbGVy
KHRoaXMpOwotICAgICAgICBtX2N1c3RvbVN1YmxheWVycyA9IHN0ZDo6bWFrZV91bmlxdWU8UGxh
dGZvcm1DQUxheWVyTGlzdD4odGlsZUNvbnRyb2xsZXItPmNvbnRhaW5lckxheWVycygpKTsKLSAg
ICB9CiB9CiAKIFBsYXRmb3JtQ0FMYXllcldpbjo6flBsYXRmb3JtQ0FMYXllcldpbigpCkBAIC0x
NjAsOSArMTY1LDEyIEBAIFBsYXRmb3JtQ0FMYXllcldpbjo6flBsYXRmb3JtQ0FMYXllcldpbigK
ICAgICAvLyBUb3NzIGFsbCB0aGUga2lkcwogICAgIHJlbW92ZUFsbFN1YmxheWVycygpOwogCi0g
ICAgLy8gR2V0IHJpZCBvZiB0aGUgdXNlciBkYXRhCiAgICAgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWwqIGxheWVySW50ZXJuID0gaW50ZXJuKHRoaXMpOwotICAgIENBQ0ZMYXllclNldFVzZXJE
YXRhKG1fbGF5ZXIuZ2V0KCksIDApOworICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkK
KyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxXZWJUaWxlZEJhY2tpbmdMYXllcldpbio+KGxheWVy
SW50ZXJuKS0+aW52YWxpZGF0ZSgpOworCisgICAgLy8gR2V0IHJpZCBvZiB0aGUgdXNlciBkYXRh
CisgICAgQ0FDRkxheWVyU2V0VXNlckRhdGEobV9sYXllci5nZXQoKSwgbnVsbHB0cik7CiAKICAg
ICBDQUNGTGF5ZXJSZW1vdmVGcm9tU3VwZXJsYXllcihtX2xheWVyLmdldCgpKTsKIApAQCAtMzU4
LDEyICszNjYsMTIgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE1hc2soUGxhdGZvcgog
CiBib29sIFBsYXRmb3JtQ0FMYXllcldpbjo6aXNPcGFxdWUoKSBjb25zdAogewotICAgIHJldHVy
biBDQUNGTGF5ZXJJc09wYXF1ZShtX2xheWVyLmdldCgpKTsKKyAgICByZXR1cm4gaW50ZXJuKHRo
aXMpLT5pc09wYXF1ZSgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0T3BhcXVl
KGJvb2wgdmFsdWUpCiB7Ci0gICAgQ0FDRkxheWVyU2V0T3BhcXVlKG1fbGF5ZXIuZ2V0KCksIHZh
bHVlKTsKKyAgICBpbnRlcm4odGhpcyktPnNldE9wYXF1ZSh2YWx1ZSk7CiAgICAgc2V0TmVlZHND
b21taXQoKTsKIH0KIApAQCAtNTI2LDE5ICs1MzQsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldEJhY2tncm91bmRDbwogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Qm9yZGVy
V2lkdGgoZmxvYXQgdmFsdWUpCiB7Ci0gICAgQ0FDRkxheWVyU2V0Qm9yZGVyV2lkdGgobV9sYXll
ci5nZXQoKSwgdmFsdWUpOworICAgIGludGVybih0aGlzKS0+c2V0Qm9yZGVyV2lkdGgodmFsdWUp
OwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpz
ZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgQ0dGbG9hdCBjb21wb25l
bnRzWzRdOwotICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwg
Y29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0Io
KSk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3Jl
YXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKLQotICAgIENBQ0ZMYXllclNldEJv
cmRlckNvbG9yKG1fbGF5ZXIuZ2V0KCksIGNvbG9yLmdldCgpKTsKKyAgICBpbnRlcm4odGhpcykt
PnNldEJvcmRlckNvbG9yKHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkBAIC01
ODcsMTggKzU4OSwxMyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0RWRnZUFudGlhbGlh
CiAKIGZsb2F0IFBsYXRmb3JtQ0FMYXllcldpbjo6Y29udGVudHNTY2FsZSgpIGNvbnN0CiB7Ci0j
aWYgSEFWRShDQUNGTEFZRVJfU0VUQ09OVEVOVFNTQ0FMRSkKLSAgICByZXR1cm4gQ0FDRkxheWVy
R2V0Q29udGVudHNTY2FsZShtX2xheWVyLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDEuMGY7
Ci0jZW5kaWYKKyAgICByZXR1cm4gaW50ZXJuKHRoaXMpLT5jb250ZW50c1NjYWxlKCk7CiB9CiAK
IHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlRmFj
dG9yKQogewotI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgQ0FDRkxh
eWVyU2V0Q29udGVudHNTY2FsZShtX2xheWVyLmdldCgpLCBzY2FsZUZhY3Rvcik7Ci0jZW5kaWYK
KyAgICBpbnRlcm4odGhpcyktPnNldENvbnRlbnRzU2NhbGUoc2NhbGVGYWN0b3IpOworICAgIHNl
dE5lZWRzQ29tbWl0KCk7CiB9CiAKIGZsb2F0IFBsYXRmb3JtQ0FMYXllcldpbjo6Y29ybmVyUmFk
aXVzKCkgY29uc3QKQEAgLTc3Niw1ICs3NzMsMjYgQEAgVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNB
TGF5ZXJXaW46OnRpbGVkQgogICAgIGlmICghdXNlc1RpbGVkQmFja2luZ0xheWVyKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGludGVybih0aGlzKS0+dGlsZWRCYWNr
aW5nKCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXJX
aW4qPihpbnRlcm4odGhpcykpLT50aWxlZEJhY2tpbmcoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCB4
LCBDR0Zsb2F0IHksIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7
CisgICAgU3RyaW5nIHRleHQobWVzc2FnZSwgbGVuZ3RoKTsKKworICAgIEZvbnREZXNjcmlwdGlv
biBkZXNjOworCisgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOworICAgIG1ldHJpY3MuY2JT
aXplID0gc2l6ZW9mKG1ldHJpY3MpOworICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRO
T05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1ldHJpY3MsIDApOworICAgIGRlc2Mu
c2V0T25lRmFtaWx5KG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpOworCisgICAg
ZGVzYy5zZXRDb21wdXRlZFNpemUoMTgpOworCisgICAgRm9udENhc2NhZGUgZm9udCA9IEZvbnRD
YXNjYWRlKGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOworCisgICAgR3Jh
cGhpY3NDb250ZXh0IGNnKGNvbnRleHQpOworICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6Ymxh
Y2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4o
dGV4dCksIEludFBvaW50KHgsIHkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgJ
KHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzTGF5b3V0KCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYsIENHRmxvYXQgeCwgQ0dGbG9hdCB5
LCBjb25zdCBjaGFyKiB0ZXh0LCBzaXplX3QgbGVuZ3RoKSBjb25zdCBvdmVycmlkZTsKIAogI2lm
bmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnRUcmVlKCkgY29uc3Qgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlz
aW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIK
ICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgog
I2luY2x1ZGUgIldlYkNvcmVIZWFkZXJEZXRlY3Rpb24uaCIKQEAgLTQwLDMzICszOSw5IEBACiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLS8vIFRoZSB3
aWR0aCBhbmQgaGVpZ2h0IG9mIGEgc2luZ2xlIHRpbGUgaW4gYSB0aWxlZCBsYXllci4gU2hvdWxk
IGJlIGxhcmdlIGVub3VnaCB0bwotLy8gYXZvaWQgbG90cyBvZiBzbWFsbCB0aWxlcyAoYW5kIHRo
ZXJlZm9yZSBsb3RzIG9mIGRyYXdpbmcgY2FsbGJhY2tzKSwgYnV0IHNtYWxsIGVub3VnaAotLy8g
dG8ga2VlcCB0aGUgb3ZlcmFsbCB0aWxlIGNvc3QgbG93Lgotc3RhdGljIGNvbnN0IGludCBjVGls
ZWRMYXllclRpbGVTaXplID0gNTEyOwotCi1zdGF0aWMgYm9vbCBsYXllclR5cGVJc1RpbGVkKGNv
bnN0IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkKLXsKLSAgICByZXR1cm4g
bGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2ViVGlsZWRMYXllcgotICAg
ICAgICB8fCBsYXllclR5cGUgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVQYWdlVGlsZWRC
YWNraW5nTGF5ZXIKLSAgICAgICAgfHwgbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7Ci19Ci0KIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbChQbGF0Zm9ybUNBTGF5ZXIqIG93bmVyKQotICAg
IDogbV90aWxlU2l6ZShDR1NpemVNYWtlKGNUaWxlZExheWVyVGlsZVNpemUsIGNUaWxlZExheWVy
VGlsZVNpemUpKQotICAgICwgbV9jb25zdHJhaW5lZFNpemUoY29uc3RyYWluZWRTaXplKG93bmVy
LT5ib3VuZHMoKS5zaXplKCkpKQotICAgICwgbV9vd25lcihvd25lcikKLXsKLSAgICBpZiAobGF5
ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gVGlsZWQg
bGF5ZXJzIGFyZSBwbGFjZWQgaW4gYSBjaGlsZCBsYXllciB0aGF0IGlzIGFsd2F5cyB0aGUgZmly
c3QgY2hpbGQgb2YgdGhlIFRpbGVkTGF5ZXIKLSAgICAgICAgbV90aWxlUGFyZW50ID0gYWRvcHRD
RihDQUNGTGF5ZXJDcmVhdGUoa0NBQ0ZMYXllcikpOwotICAgICAgICBDQUNGTGF5ZXJJbnNlcnRT
dWJsYXllcihtX293bmVyLT5wbGF0Zm9ybUxheWVyKCksIG1fdGlsZVBhcmVudC5nZXQoKSwgMCk7
Ci0jaWYgSEFWRShDQUNGTEFZRVJfU0VUQ09OVEVOVFNTQ0FMRSkKLSAgICAgICAgQ0FDRkxheWVy
U2V0Q29udGVudHNTY2FsZShtX3RpbGVQYXJlbnQuZ2V0KCksIENBQ0ZMYXllckdldENvbnRlbnRz
U2NhbGUobV9vd25lci0+cGxhdGZvcm1MYXllcigpKSk7Ci0jZW5kaWYKLQotICAgICAgICB1cGRh
dGVUaWxlcygpOwotICAgIH0KKyAgICA6IG1fb3duZXIob3duZXIpCit7CiB9CiAKIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjp+UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKQpAQCAtOTYs
NiArNzEsMjMgQEAgc3RhdGljIHZvaWQgcmVkaXNwYXRjaE9uTWFpblF1ZXVlKHZvaWQqCiAgICAg
c2VsZi0+ZGlzcGxheUNhbGxiYWNrKHJldGFpbmVkQ29udGV4dC0+bGF5ZXIuZ2V0KCksIHJldGFp
bmVkQ29udGV4dC0+Y29udGV4dC5nZXQoKSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OmZsaXBDb250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IGhlaWdo
dCkKK3sKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgQ0dDb250
ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBz
aG91bGRJbnZlcnRCZWZvcmVEcmF3aW5nQ29udGVudChQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRh
dGlvbiBjb29yZGluYXRlT3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIChsYXllclR5cGUgIT0g
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXIpCisgICAgICAg
ICYmIChjb29yZGluYXRlT3JpZW50YXRpb24gPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdD
b29yZGluYXRlc1RvcERvd24pOworfQorCitzdGF0aWMgYm9vbCByZXBhaW50Q291bnRlcnNBcmVE
cmF3bkJ5R3JpZENvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBl
KQoreworICAgIHJldHVybiBsYXllclR5cGUgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVU
aWxlZEJhY2tpbmdUaWxlTGF5ZXI7Cit9CisKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVmIGNv
bnRleHQpCiB7CiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewpAQCAtMTA5LDc0ICsxMDEsNDUg
QEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheQogICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKICAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBvd25lcigp
LT5ib3VuZHMoKTsKLSAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29u
dGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNUb3BEb3duKSB7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQs
IDEsIC0xKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1sYXll
ckJvdW5kcy5zaXplLmhlaWdodCk7Ci0gICAgfQotCi0gICAgaWYgKG93bmVyKCktPm93bmVyKCkp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKLQot
ICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4
dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQotICAgICAgICAvLyBzbWFsbGVyIHRo
YW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCi0gICAgICAgIENHUmVjdCBj
bGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwotICAgICAg
ICBJbnRSZWN0IGNsaXAoZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7Ci0gICAgICAgIG93
bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMob3duZXIoKSwgZ3Jh
cGhpY3NDb250ZXh0LCBjbGlwKTsKLSAgICB9Ci0jaWZuZGVmIE5ERUJVRwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAvLyBGSVhNRTogaWRlYWxs
eSB3ZSdkIGF2b2lkIGNhbGxpbmcgLXNldE5lZWRzRGlzcGxheSBvbiBhIGxheWVyIHRoYXQgaXMg
YSBwbGFpbiBjb2xvciwKLSAgICAgICAgLy8gc28gQ0EgbmV2ZXIgbWFrZXMgYmFja2luZyBzdG9y
ZSBmb3IgaXQgKHdoaWNoIGlzIHdoYXQgLXNldE5lZWRzRGlzcGxheSB3aWxsIGRvIGFib3ZlKS4K
LSAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMGYsIDEuMGYsIDAu
MGYsIDEuMGYpOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBsYXllckJvdW5k
cyk7Ci0gICAgfQotI2VuZGlmCisgICAgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJU
eXBlID0gb3duZXIoKS0+bGF5ZXJUeXBlKCk7CiAKLSAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG93bmVyKCkpKSB7Ci0gICAgICAgIFN0
cmluZyB0ZXh0ID0gU3RyaW5nOjpudW1iZXIob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxh
eWVySW5jcmVtZW50UmVwYWludENvdW50KG93bmVyKCkpKTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqIGNsaWVudCA9IG93bmVyKCktPm93bmVyKCk7CisgICAgR3JhcGhpY3NMYXllcjo6Q29t
cG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gY2xpZW50LT5wbGF0
Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCk7CiAKLSAgICAgICAgQ0dDb250ZXh0U2F2
ZUdTdGF0ZShjb250ZXh0KTsKKyAgICBpZiAoc2hvdWxkSW52ZXJ0QmVmb3JlRHJhd2luZ0NvbnRl
bnQobGF5ZXJUeXBlLCBvcmllbnRhdGlvbikpCisgICAgICAgIGZsaXBDb250ZXh0KGNvbnRleHQs
IGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKIAotICAgICAgICAvLyBNYWtlIHRoZSBiYWNrZ3Jv
dW5kIG9mIHRoZSBjb3VudGVyIHRoZSBzYW1lIGFzIHRoZSBib3JkZXIgY29sb3IsCi0gICAgICAg
IC8vIHVubGVzcyB0aGVyZSBpcyBubyBib3JkZXIsIHRoZW4gbWFrZSBpdCByZWQKLSAgICAgICAg
ZmxvYXQgYm9yZGVyV2lkdGggPSBDQUNGTGF5ZXJHZXRCb3JkZXJXaWR0aChjYUxheWVyKTsKLSAg
ICAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkgewotICAgICAgICAgICAgQ0dDb2xvclJlZiBib3Jk
ZXJDb2xvciA9IENBQ0ZMYXllckdldEJvcmRlckNvbG9yKGNhTGF5ZXIpOwotICAgICAgICAgICAg
Y29uc3QgQ0dGbG9hdCogY29sb3JzID0gQ0dDb2xvckdldENvbXBvbmVudHMoYm9yZGVyQ29sb3Ip
OwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yc1sw
XSwgY29sb3JzWzFdLCBjb2xvcnNbMl0sIGNvbG9yc1szXSk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEuMGYsIDAuMGYsIDAu
MGYsIDAuOGYpOwotICAgICAgICAKLSAgICAgICAgQ0dSZWN0IGFCb3VuZHMgPSBsYXllckJvdW5k
czsKLQotICAgICAgICBhQm91bmRzLnNpemUud2lkdGggPSAxMCArIDEwICogdGV4dC5sZW5ndGgo
KTsKLSAgICAgICAgYUJvdW5kcy5zaXplLmhlaWdodCA9IDIyOwotICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBhQm91bmRzKTsKLSAgICAgICAgCi0gICAgICAgIEZvbnREZXNjcmlw
dGlvbiBkZXNjOwotCi0gICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAg
bWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7Ci0gICAgICAgIFN5c3RlbVBhcmFtZXRl
cnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6ZSwgJm1ldHJpY3Ms
IDApOwotICAgICAgICBkZXNjLnNldE9uZUZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5s
ZkZhY2VOYW1lKTsKLQotICAgICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZSgxOCk7Ci0gICAgICAg
IAotICAgICAgICBGb250Q2FzY2FkZSBmb250ID0gRm9udENhc2NhZGUoZGVzYywgMCwgMCk7Ci0g
ICAgICAgIGZvbnQudXBkYXRlKDApOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250
ZXh0KTsKLSAgICAgICAgY2cuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURl
dmljZVJHQik7Ci0gICAgICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4odGV4dCksIEludFBv
aW50KGFCb3VuZHMub3JpZ2luLnggKyA1LCBhQm91bmRzLm9yaWdpbi55ICsgMTcpKTsKLQotICAg
ICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOyAgICAgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKworICAgIC8vIEl0J3MgaW1wb3J0
YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBz
aWduaWZpY2FudGx5CisgICAgLy8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUuZy4g
dGlsZWQgbGF5ZXJzKQorICAgIENHUmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJv
dW5kaW5nQm94KGNvbnRleHQpOworICAgIEludFJlY3QgY2xpcChlbmNsb3NpbmdJbnRSZWN0KGNs
aXBCb3VuZHMpKTsKKyAgICBjbGllbnQtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMob3du
ZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKKworICAgIGlmIChjbGllbnQtPnBsYXRmb3Jt
Q0FMYXllclNob3dSZXBhaW50Q291bnRlcihvd25lcigpKQorICAgICAgICAmJiAhcmVwYWludENv
dW50ZXJzQXJlRHJhd25CeUdyaWRDb250cm9sbGVyKGxheWVyVHlwZSkpIHsKKyAgICAgICAgaW50
IGRyYXdDb3VudCA9IGNsaWVudC0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50
KG93bmVyKCkpOworICAgICAgICBkcmF3UmVwYWludENvdW50ZXJzKGNhTGF5ZXIsIGNvbnRleHQs
IGxheWVyQm91bmRzLCBkcmF3Q291bnQpOwogICAgIH0KIAogICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7CiAKLSAgICBvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJM
YXllckRpZERpc3BsYXkob3duZXIoKSk7CisgICAgY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJMYXll
ckRpZERpc3BsYXkob3duZXIoKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmRyYXdSZXBhaW50Q291bnRlcnMoQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJCb3VuZHMsIGludCBkcmF3Q291bnQpCit7CisgICAgQ0dD
b2xvclJlZiBiYWNrZ3JvdW5kQ29sb3IgPSBudWxscHRyOworICAgIC8vIE1ha2UgdGhlIGJhY2tn
cm91bmQgb2YgdGhlIGNvdW50ZXIgdGhlIHNhbWUgYXMgdGhlIGJvcmRlciBjb2xvciwKKyAgICAv
LyB1bmxlc3MgdGhlcmUgaXMgbm8gYm9yZGVyLCB0aGVuIG1ha2UgaXQgcmVkCisgICAgZmxvYXQg
Ym9yZGVyV2lkdGggPSBDQUNGTGF5ZXJHZXRCb3JkZXJXaWR0aChjYUxheWVyKTsKKyAgICBpZiAo
Ym9yZGVyV2lkdGggPiAwKQorICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDQUNGTGF5ZXJHZXRC
b3JkZXJDb2xvcihjYUxheWVyKTsKKyAgICBlbHNlCisgICAgICAgIGJhY2tncm91bmRDb2xvciA9
IGNhY2hlZENHQ29sb3IoQ29sb3IoMjU1LCAwLCAwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisK
KyAgICBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdG9yKGNvbnRleHQsIG93bmVy
KCksIGRyYXdDb3VudCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6aW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBk
aXJ0eVJlY3QpCkBAIC0xODUsNTEgKzE0OCw0MyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjppbnRlcm5hCiAgICAgICAgIENHUmVjdCByZWN0ID0gKmRpcnR5UmVjdDsKICAgICAg
ICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgJnJl
Y3QpOwogICAgIH0gZWxzZQotICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkob3duZXIo
KS0+cGxhdGZvcm1MYXllcigpLCAwKTsKKyAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbnVsbHB0cik7CiB9CiAKIHZvaWQgUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgaW50ZXJuYWxTZXRO
ZWVkc0Rpc3BsYXkoMCk7CisgICAgaW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkobnVsbHB0cik7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxl
ZChtX293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gRklYTUU6IE9ubHkgc2V0TmVl
ZHNEaXNwbGF5IGZvciB0aWxlcyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZQotICAgICAgICBp
bnQgbnVtVGlsZUxheWVycyA9IHRpbGVDb3VudCgpOwotICAgICAgICBDR1JlY3QgcmVjdCA9IGRp
cnR5UmVjdDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlTGF5ZXJzOyArK2kp
Ci0gICAgICAgICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkodGlsZUF0SW5kZXgoaSksICZy
ZWN0KTsKLQotICAgICAgICBpZiAobV9vd25lci0+b3duZXIoKSAmJiBtX293bmVyLT5vd25lcigp
LT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIobV9vd25lcikpIHsKLSAgICAgICAg
ICAgIENHUmVjdCBsYXllckJvdW5kcyA9IG1fb3duZXItPmJvdW5kcygpOwotICAgICAgICAgICAg
Q0dSZWN0IGluZGljYXRvclJlY3QgPSBDR1JlY3RNYWtlKGxheWVyQm91bmRzLm9yaWdpbi54LCBs
YXllckJvdW5kcy5vcmlnaW4ueSwgODAsIDI1KTsKLSAgICAgICAgICAgIENBQ0ZMYXllclNldE5l
ZWRzRGlzcGxheSh0aWxlQXRJbmRleCgwKSwgJmluZGljYXRvclJlY3QpOworICAgIGlmICghb3du
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG93bmVyKCktPmxheWVyVHlwZSgp
ICE9IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIpOworCisgICAg
aWYgKG93bmVyKCktPm93bmVyKCkpIHsKKyAgICAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihvd25lcigpKSkgeworICAgICAgICAgICAg
RmxvYXRSZWN0IGxheWVyQm91bmRzID0gb3duZXIoKS0+Ym91bmRzKCk7CisgICAgICAgICAgICBG
bG9hdFJlY3QgcmVwYWludENvdW50ZXJSZWN0ID0gbGF5ZXJCb3VuZHM7CisKKyAgICAgICAgICAg
IC8vIFdlIGFzc3VtZSBhIG1heGltdW0gb2YgNCBkaWdpdHMgYW5kIGEgZm9udCBzaXplIG9mIDE4
LgorICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNldFdpZHRoKDgwKTsKKyAgICAgICAg
ICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zZXRIZWlnaHQoMjIpOworICAgICAgICAgICAgaWYgKG93
bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKKyAg
ICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0WShsYXllckJvdW5kcy5oZWlnaHQo
KSAtIChsYXllckJvdW5kcy55KCkgKyByZXBhaW50Q291bnRlclJlY3QuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgICAgIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KCZyZXBhaW50Q291bnRlclJlY3QpOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChvd25lcigpLT5sYXllclR5cGUoKSA9PSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVdlYkxheWVyKSB7Ci0gICAgICAgIGlmIChvd25lcigpICYmIG93
bmVyKCktPm93bmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIoKSkpIHsKLSAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKLSAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QgcmVwYWludENvdW50ZXJSZWN0ID0gbGF5ZXJCb3VuZHM7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBXZSBhc3N1bWUgYSBtYXhpbXVtIG9mIDQgZGlnaXRzIGFuZCBhIGZvbnQg
c2l6ZSBvZiAxOC4KLSAgICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0V2lkdGgo
ODApOwotICAgICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zZXRIZWlnaHQoMjIpOwot
ICAgICAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250
ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdD
b29yZGluYXRlc1RvcERvd24pCi0gICAgICAgICAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVj
dC5zZXRZKGxheWVyQm91bmRzLmhlaWdodCgpIC0gKGxheWVyQm91bmRzLnkoKSArIHJlcGFpbnRD
b3VudGVyUmVjdC5oZWlnaHQoKSkpOwotICAgICAgICAgICAgICAgIGludGVybmFsU2V0TmVlZHNE
aXNwbGF5KCZyZXBhaW50Q291bnRlclJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24o
KSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93
bikgewotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBmbGlwcGVkRGlydHlSZWN0ID0gZGlydHlS
ZWN0OwotICAgICAgICAgICAgICAgIGZsaXBwZWREaXJ0eVJlY3Quc2V0WShvd25lcigpLT5ib3Vu
ZHMoKS5oZWlnaHQoKSAtIChmbGlwcGVkRGlydHlSZWN0LnkoKSArIGZsaXBwZWREaXJ0eVJlY3Qu
aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmZmxp
cHBlZERpcnR5UmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQor
ICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmll
bnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0
ZXNUb3BEb3duKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgZmxpcHBlZERpcnR5UmVjdCA9IGRp
cnR5UmVjdDsKKyAgICAgICAgICAgIGZsaXBwZWREaXJ0eVJlY3Quc2V0WShvd25lcigpLT5ib3Vu
ZHMoKS5oZWlnaHQoKSAtIChmbGlwcGVkRGlydHlSZWN0LnkoKSArIGZsaXBwZWREaXJ0eVJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KCZmbGlwcGVk
RGlydHlSZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIGlu
dGVybmFsU2V0TmVlZHNEaXNwbGF5KCZkaXJ0eVJlY3QpOwogICAgIH0KKworICAgIGludGVybmFs
U2V0TmVlZHNEaXNwbGF5KCZkaXJ0eVJlY3QpOworCiAgICAgb3duZXIoKS0+c2V0TmVlZHNDb21t
aXQoKTsKIH0KIApAQCAtMjQ3LDExICsyMDIsNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpzZXRTdWJsCiAgICAgICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKG93bmVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSwgbGlzdFtpXS0+cGxhdGZvcm1MYXllcigpLCBpKTsKIAogICAgIG93
bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7Ci0KLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293
bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRpbGUgcGFyZW50
IGFmdGVyIHNldAotICAgICAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihvd25lcigpLT5wbGF0
Zm9ybUxheWVyKCksIG1fdGlsZVBhcmVudC5nZXQoKSwgMCk7Ci0gICAgfQogfQogCiB2b2lkIFBs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpnZXRTdWJsYXllcnMoUGxhdGZvcm1DQUxheWVyTGlz
dCYgbGlzdCkgY29uc3QKQEAgLTI2NCwzNSArMjE0LDIwIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OmdldFN1YmwKIAogICAgIHNpemVfdCBjb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChzdWJsYXllcnMpOwogCi0gICAgc2l6ZV90IGxheWVyc1RvU2tpcCA9IDA7Ci0gICAgaWYgKGxh
eWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIEV4Y2x1
ZGUgdGhlIHRpbGUgcGFyZW50IGxheWVyLgotICAgICAgICBsYXllcnNUb1NraXAgPSAxOwotICAg
IH0KLQotICAgIGxpc3QucmVzaXplKGNvdW50IC0gbGF5ZXJzVG9Ta2lwKTsKLSAgICBmb3IgKHNp
emVfdCBhcnJheUluZGV4ID0gbGF5ZXJzVG9Ta2lwOyBhcnJheUluZGV4IDwgY291bnQ7ICsrYXJy
YXlJbmRleCkKLSAgICAgICAgbGlzdFthcnJheUluZGV4IC0gbGF5ZXJzVG9Ta2lwXSA9IFBsYXRm
b3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKGNvbnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBhcnJheUluZGV4KSkpOworICAgIGxpc3QucmVzaXplKGNv
dW50KTsKKyAgICBmb3IgKHNpemVfdCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvdW50
OyArK2FycmF5SW5kZXgpCisgICAgICAgIGxpc3RbYXJyYXlJbmRleF0gPSBQbGF0Zm9ybUNBTGF5
ZXI6OnBsYXRmb3JtQ0FMYXllcihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KHN1YmxheWVycywgYXJyYXlJbmRleCkpKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbDo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKLSAgICBDQUNGTGF5ZXJTZXRTdWJs
YXllcnMob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCAwKTsKKyAgICBDQUNGTGF5ZXJTZXRTdWJs
YXllcnMob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBudWxscHRyKTsKICAgICBvd25lcigpLT5z
ZXROZWVkc0NvbW1pdCgpOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5
ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFJlc3RvcmUgdGhlIHRpbGUgcGFyZW50IGFmdGVyIHJl
bW92YWwKLSAgICAgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIob3duZXIoKS0+cGxhdGZvcm1M
YXllcigpLCBtX3RpbGVQYXJlbnQuZ2V0KCksIDApOwotICAgIH0KIH0KIAogdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW5zZXJ0U3VibGF5ZXIoUGxhdGZvcm1DQUxheWVyJiBsYXll
ciwgc2l6ZV90IGluZGV4KQogewogICAgIGluZGV4ID0gbWluKGluZGV4LCBzdWJsYXllckNvdW50
KCkpOwotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewot
ICAgICAgICAvLyBBZGQgMSB0byBhY2NvdW50IGZvciB0aGUgdGlsZSBwYXJlbnQgbGF5ZXIKLSAg
ICAgICAgKytpbmRleDsKLSAgICB9CiAKICAgICBsYXllci5yZW1vdmVGcm9tU3VwZXJsYXllcigp
OwogICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwg
bGF5ZXIucGxhdGZvcm1MYXllcigpLCBpbmRleCk7CkBAIC0zMDIsMTUgKzIzNyw3IEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omluc2VydFMKIHNpemVfdCBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6c3VibGF5ZXJDb3VudCgpIGNvbnN0CiB7CiAgICAgQ0ZBcnJheVJlZiBz
dWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMob3duZXIoKS0+cGxhdGZvcm1MYXllcigp
KTsKLSAgICBzaXplX3QgY291bnQgPSBzdWJsYXllcnMgPyBDRkFycmF5R2V0Q291bnQoc3VibGF5
ZXJzKSA6IDA7Ci0KLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUo
KSkpIHsKLSAgICAgICAgLy8gU3VidHJhY3QgMSB0byBhY2NvdW50IGZvciB0aGUgdGlsZSBwYXJl
bnQgbGF5ZXIKLSAgICAgICAgQVNTRVJUKGNvdW50ID4gMCk7Ci0gICAgICAgIGNvdW50LS07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvdW50OworICAgIHJldHVybiBzdWJsYXllcnMgPyBDRkFycmF5
R2V0Q291bnQoc3VibGF5ZXJzKSA6IDA7CiB9CiAKIGludCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IFBsYXRmb3JtQ0FMYXllciogcmVmZXJlbmNlKQpA
QCAtMzI1LDE2ICsyNTIsOSBAQCBpbnQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmluZGV4
T2ZTCiAKICAgICBzaXplX3QgbiA9IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpOwogCi0gICAg
aWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGkpID09IHJlZikKLSAgICAgICAgICAgICAgICByZXR1
cm4gaSAtIDE7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoc3VibGF5ZXJzLCBpKSA9PSByZWYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAg
ICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBpZiAo
Q0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGkpID09IHJlZikKKyAgICAgICAgICAg
IHJldHVybiBpOwogICAgIH0KIAogICAgIHJldHVybiAtMTsKQEAgLTM0MiwxNCArMjYyLDkgQEAg
aW50IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbmRleE9mUwogCiBQbGF0Zm9ybUNBTGF5
ZXIqIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzdWJsYXllckF0SW5kZXgoaW50IGluZGV4
KSBjb25zdAogewotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgp
KSkgewotICAgICAgICAvLyBBZGQgMSB0byBhY2NvdW50IGZvciB0aGUgdGlsZSBwYXJlbnQgbGF5
ZXIKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0KICAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9
IENBQ0ZMYXllckdldFN1YmxheWVycyhvd25lcigpLT5wbGF0Zm9ybUxheWVyKCkpOwogICAgIGlm
ICghc3VibGF5ZXJzIHx8IGluZGV4IDwgMCB8fCBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKSA8
PSBpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihzdGF0aWNfY2Fz
dDxDQUNGTGF5ZXJSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
c3VibGF5ZXJzLCBpbmRleCkpKSk7CiB9CkBAIC0zNjEsMTEgKzI3Niw2IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvdW4KIAogICAgIENBQ0ZMYXllclNldEJvdW5kcyhv
d25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHJlY3QpOwogICAgIG93bmVyKCktPnNldE5lZWRzQ29t
bWl0KCk7Ci0KLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkp
IHsKLSAgICAgICAgbV9jb25zdHJhaW5lZFNpemUgPSBjb25zdHJhaW5lZFNpemUocmVjdC5zaXpl
KCkpOwotICAgICAgICB1cGRhdGVUaWxlcygpOwotICAgIH0KIH0KIAogdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzc2
LDE2NiArMjg2LDQ4IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEZyYW0K
IAogICAgIENBQ0ZMYXllclNldEZyYW1lKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgcmVjdCk7
CiAgICAgb3duZXIoKS0+c2V0TmVlZHNDb21taXQoKTsKLQotICAgIGlmIChsYXllclR5cGVJc1Rp
bGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkKLSAgICAgICAgdXBkYXRlVGlsZXMoKTsKIH0KIAot
Q0dTaXplIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpjb25zdHJhaW5lZFNpemUoY29uc3Qg
Q0dTaXplJiBzaXplKSBjb25zdAorYm9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aXNP
cGFxdWUoKSBjb25zdAogewotICAgIGNvbnN0IGludCBjTWF4VGlsZUNvdW50ID0gNTEyOwotICAg
IGNvbnN0IGZsb2F0IGNTcXJ0TWF4VGlsZUNvdW50ID0gc3FydGYoY01heFRpbGVDb3VudCk7Ci0K
LSAgICBDR1NpemUgY29uc3RyYWluZWRTaXplID0gc2l6ZTsKLQotICAgIGludCB0aWxlQ29sdW1u
cyA9IGNlaWxmKGNvbnN0cmFpbmVkU2l6ZS53aWR0aCAvIG1fdGlsZVNpemUud2lkdGgpOwotICAg
IGludCB0aWxlUm93cyA9IGNlaWxmKGNvbnN0cmFpbmVkU2l6ZS5oZWlnaHQgLyBtX3RpbGVTaXpl
LmhlaWdodCk7Ci0KLSAgICBib29sIHRvb01hbnlUaWxlcyA9IHRpbGVDb2x1bW5zICYmIG51bWVy
aWNfbGltaXRzPGludD46Om1heCgpIC8gdGlsZUNvbHVtbnMgPCB0aWxlUm93cyB8fCB0aWxlQ29s
dW1ucyAqIHRpbGVSb3dzID4gY01heFRpbGVDb3VudDsKLQotICAgIC8vIElmIG51bWJlciBvZiB0
aWxlcyB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseSBpcyA8IHNxcnQoY01heFRpbGVDb3VudCkK
LSAgICAvLyBqdXN0IHNob3J0ZW4gdGhlIGxvbmdlciBkaW1lbnNpb24uIE90aGVyd2lzZSBzaG9y
dGVuIGJvdGggZGltZW5zaW9ucwotICAgIC8vIGFjY29yZGluZyB0byB0aGUgcmF0aW8gb2Ygd2lk
dGggdG8gaGVpZ2h0Ci0KLSAgICBpZiAodG9vTWFueVRpbGVzKSB7Ci0gICAgICAgIGlmICh0aWxl
Um93cyA8IGNTcXJ0TWF4VGlsZUNvdW50KQotICAgICAgICAgICAgdGlsZUNvbHVtbnMgPSBmbG9v
cmYoY01heFRpbGVDb3VudCAvIHRpbGVSb3dzKTsKLSAgICAgICAgZWxzZSBpZiAodGlsZUNvbHVt
bnMgPCBjU3FydE1heFRpbGVDb3VudCkKLSAgICAgICAgICAgIHRpbGVSb3dzID0gZmxvb3JmKGNN
YXhUaWxlQ291bnQgLyB0aWxlQ29sdW1ucyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
dGlsZVJvd3MgPSBjZWlsZihzcXJ0ZihjTWF4VGlsZUNvdW50ICogY29uc3RyYWluZWRTaXplLmhl
aWdodCAvIGNvbnN0cmFpbmVkU2l6ZS53aWR0aCkpOwotICAgICAgICAgICAgdGlsZUNvbHVtbnMg
PSBmbG9vcmYoY01heFRpbGVDb3VudCAvIHRpbGVSb3dzKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgY29uc3RyYWluZWRTaXplLndpZHRoID0gdGlsZUNvbHVtbnMgKiBtX3RpbGVTaXpl
LndpZHRoOwotICAgICAgICBjb25zdHJhaW5lZFNpemUuaGVpZ2h0ID0gdGlsZVJvd3MgKiBtX3Rp
bGVTaXplLmhlaWdodDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnN0cmFpbmVkU2l6ZTsK
KyAgICByZXR1cm4gQ0FDRkxheWVySXNPcGFxdWUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpKTsK
IH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZURpc3BsYXlDYWxsYmFj
ayhDQUNGTGF5ZXJSZWYgbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0T3BhcXVlKGJvb2wgdmFsdWUpCiB7Ci0gICAgc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwqPihDQUNGTGF5ZXJHZXRVc2VyRGF0YShs
YXllcikpLT5kcmF3VGlsZShsYXllciwgY29udGV4dCk7CisgICAgQ0FDRkxheWVyU2V0T3BhcXVl
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgdmFsdWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjphZGRUaWxlKCkKK2Zsb2F0IFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpjb250ZW50c1NjYWxlKCkgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVm
PiBuZXdMYXllciA9IGFkb3B0Q0YoQ0FDRkxheWVyQ3JlYXRlKGtDQUNGTGF5ZXIpKTsKLSAgICBD
QUNGTGF5ZXJTZXRBbmNob3JQb2ludChuZXdMYXllci5nZXQoKSwgQ0dQb2ludE1ha2UoMCwgMSkp
OwotICAgIENBQ0ZMYXllclNldFVzZXJEYXRhKG5ld0xheWVyLmdldCgpLCB0aGlzKTsKLSAgICBD
QUNGTGF5ZXJTZXREaXNwbGF5Q2FsbGJhY2sobmV3TGF5ZXIuZ2V0KCksIHRpbGVEaXNwbGF5Q2Fs
bGJhY2spOwogI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgQ0FDRkxh
eWVyU2V0Q29udGVudHNTY2FsZShuZXdMYXllci5nZXQoKSwgQ0FDRkxheWVyR2V0Q29udGVudHNT
Y2FsZShtX3RpbGVQYXJlbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gQ0FDRkxheWVyR2V0Q29udGVu
dHNTY2FsZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCkpOworI2Vsc2UKKyAgICByZXR1cm4gMS4w
ZjsKICNlbmRpZgotCi0gICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJs
YXllcnMobV90aWxlUGFyZW50LmdldCgpKTsKLSAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllciht
X3RpbGVQYXJlbnQuZ2V0KCksIG5ld0xheWVyLmdldCgpLCBzdWJsYXllcnMgPyBDRkFycmF5R2V0
Q291bnQoc3VibGF5ZXJzKSA6IDApOwotCi0gICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRm
b3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSkgewotICAgICAgICBDR0NvbG9yUmVmIGJvcmRl
ckNvbG9yID0gQ0dDb2xvckNyZWF0ZUdlbmVyaWNSR0IoMC41LCAwLCAwLjUsIDAuNyk7Ci0gICAg
ICAgIENBQ0ZMYXllclNldEJvcmRlckNvbG9yKG5ld0xheWVyLmdldCgpLCBib3JkZXJDb2xvcik7
Ci0gICAgICAgIENHQ29sb3JSZWxlYXNlKGJvcmRlckNvbG9yKTsKLSAgICAgICAgQ0FDRkxheWVy
U2V0Qm9yZGVyV2lkdGgobmV3TGF5ZXIuZ2V0KCksIDIpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6cmVtb3ZlVGlsZSgpCi17Ci0gICAgQ0FDRkxheWVyUmVt
b3ZlRnJvbVN1cGVybGF5ZXIodGlsZUF0SW5kZXgodGlsZUNvdW50KCkgLSAxKSk7Ci19Ci0KLUNB
Q0ZMYXllclJlZiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUF0SW5kZXgoaW50IGlu
ZGV4KQotewotICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJz
KG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0gICAgaWYgKCFzdWJsYXllcnMgfHwgaW5kZXggPCAwIHx8
IGluZGV4ID49IHRpbGVDb3VudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KHN1YmxheWVycywgaW5kZXgpKSk7CiB9CiAKLWludCBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6dGlsZUNvdW50KCkgY29uc3QKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgQ0ZB
cnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMobV90aWxlUGFyZW50Lmdl
dCgpKTsKLSAgICByZXR1cm4gc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykg
OiAwOworI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCisgICAgQ0FDRkxheWVy
U2V0Q29udGVudHNTY2FsZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHNjYWxlRmFjdG9yKTsK
KyNlbmRpZgogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp1cGRhdGVUaWxl
cygpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3JkZXJXaWR0aChmbG9h
dCB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogSW4gYWRkaXRpb24gdG8gcmVkb2luZyB0aGUgbnVt
YmVyIG9mIHRpbGVzLCB3ZSBuZWVkIHRvIG9ubHkgcmVuZGVyIGFuZCBoYXZlIGJhY2tpbmcKLSAg
ICAvLyBzdG9yZSBmb3IgdmlzaWJsZSBsYXllcnMKLSAgICBpbnQgbnVtVGlsZXNIb3Jpem9udGFs
ID0gY2VpbChtX2NvbnN0cmFpbmVkU2l6ZS53aWR0aCAvIG1fdGlsZVNpemUud2lkdGgpOwotICAg
IGludCBudW1UaWxlc1ZlcnRpY2FsID0gY2VpbChtX2NvbnN0cmFpbmVkU2l6ZS5oZWlnaHQgLyBt
X3RpbGVTaXplLmhlaWdodCk7Ci0gICAgaW50IG51bVRpbGVzVG90YWwgPSBudW1UaWxlc0hvcml6
b250YWwgKiBudW1UaWxlc1ZlcnRpY2FsOwotICAgIEFTU0VSVCghbV9jb25zdHJhaW5lZFNpemUu
aGVpZ2h0IHx8ICFtX2NvbnN0cmFpbmVkU2l6ZS53aWR0aCB8fCBudW1UaWxlc1RvdGFsID4gMCk7
Ci0KLSAgICBpbnQgbnVtVGlsZXNUb0NoYW5nZSA9IG51bVRpbGVzVG90YWwgLSB0aWxlQ291bnQo
KTsKLSAgICBpZiAobnVtVGlsZXNUb0NoYW5nZSA+PSAwKSB7Ci0gICAgICAgIC8vIEFkZCBuZXcg
dGlsZXMKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaWxlc1RvQ2hhbmdlOyArK2kp
Ci0gICAgICAgICAgICBhZGRUaWxlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gUmVtb3Zl
IG9sZCB0aWxlcwotICAgICAgICBudW1UaWxlc1RvQ2hhbmdlID0gLW51bVRpbGVzVG9DaGFuZ2U7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXNUb0NoYW5nZTsgKytpKQotICAg
ICAgICAgICAgcmVtb3ZlVGlsZSgpOwotICAgIH0KLQotICAgIC8vIFNldCBjb29yZGluYXRlcyBm
b3IgYWxsIHRpbGVzCi0gICAgQ0ZBcnJheVJlZiB0aWxlQXJyYXkgPSBDQUNGTGF5ZXJHZXRTdWJs
YXllcnMobV90aWxlUGFyZW50LmdldCgpKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
VGlsZXNIb3Jpem9udGFsOyArK2kpIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1U
aWxlc1ZlcnRpY2FsOyArK2opIHsKLSAgICAgICAgICAgIENBQ0ZMYXllclJlZiB0aWxlID0gc3Rh
dGljX2Nhc3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KHRpbGVBcnJheSwgaSAqIG51bVRpbGVzVmVydGljYWwgKyBqKSkpOwotICAgICAgICAg
ICAgQ0FDRkxheWVyU2V0UG9zaXRpb24odGlsZSwgQ0dQb2ludE1ha2UoaSAqIG1fdGlsZVNpemUu
d2lkdGgsIGogKiBtX3RpbGVTaXplLmhlaWdodCkpOwotICAgICAgICAgICAgaW50IHdpZHRoID0g
bWluKG1fdGlsZVNpemUud2lkdGgsIG1fY29uc3RyYWluZWRTaXplLndpZHRoIC0gaSAqIG1fdGls
ZVNpemUud2lkdGgpOwotICAgICAgICAgICAgaW50IGhlaWdodCA9IG1pbihtX3RpbGVTaXplLmhl
aWdodCwgbV9jb25zdHJhaW5lZFNpemUuaGVpZ2h0IC0gaiAqIG1fdGlsZVNpemUuaGVpZ2h0KTsK
LSAgICAgICAgICAgIENBQ0ZMYXllclNldEJvdW5kcyh0aWxlLCBDR1JlY3RNYWtlKGkgKiBtX3Rp
bGVTaXplLndpZHRoLCBqICogbV90aWxlU2l6ZS5oZWlnaHQsIHdpZHRoLCBoZWlnaHQpKTsKLQot
ICAgICAgICAgICAgLy8gRmxpcCBZIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBmbGlwcGluZyB0aGF0
IGhhcHBlbnMgZHVyaW5nIHJlbmRlciB0byBtYXRjaCB0aGUgQ0cgY29udGV4dCBjb29yZGluYXRl
IHNwYWNlCi0gICAgICAgICAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9IENBVHJhbnNmb3Jt
M0RNYWtlU2NhbGUoMSwgLTEsIDEpOwotICAgICAgICAgICAgQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0
ZSh0cmFuc2Zvcm0sIDAsIGhlaWdodCwgMCk7Ci0gICAgICAgICAgICBDQUNGTGF5ZXJTZXRUcmFu
c2Zvcm0odGlsZSwgdHJhbnNmb3JtKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIFN0
cmluZyBuYW1lID0gIlRpbGUgKCIgKyBTdHJpbmc6Om51bWJlcihpKSArICIsIiArIFN0cmluZzo6
bnVtYmVyKGopICsgIikiOwotICAgICAgICAgICAgQ0FDRkxheWVyU2V0TmFtZSh0aWxlLCBuYW1l
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9CisgICAg
Q0FDRkxheWVyU2V0Qm9yZGVyV2lkdGgob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCB2YWx1ZSk7
CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdUaWxlKENBQ0ZMYXll
clJlZiB0aWxlLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKIHsKLSAgICBDR1Bv
aW50IHRpbGVQb3NpdGlvbiA9IENBQ0ZMYXllckdldFBvc2l0aW9uKHRpbGUpOwotICAgIENHUmVj
dCB0aWxlQm91bmRzID0gQ0FDRkxheWVyR2V0Qm91bmRzKHRpbGUpOworICAgIENHRmxvYXQgY29t
cG9uZW50c1s0XSA9IHsgMCwgMCwgMCwgMCB9OworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VS
ZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsK
IAotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNv
bnRleHQgY2xpcHBpbmcgcmVjdGFuZ2xlIHRvIHRoZSBjdXJyZW50IHRpbGUKLSAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UodGlsZVBvc2l0aW9uLngsIHRpbGVQb3Np
dGlvbi55LCB0aWxlQm91bmRzLnNpemUud2lkdGgsIHRpbGVCb3VuZHMuc2l6ZS5oZWlnaHQpKTsK
LQotICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVu
dGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRl
c1RvcERvd24pIHsKLSAgICAgICAgLy8gSWYgdGhlIGxheWVyIGlzIHJlbmRlcmluZyB0b3AtZG93
biwgaXQgd2lsbCBmbGlwIHRoZSBjb29yZGluYXRlcyBpbiB5LiBUaWxlZCBsYXllcnMgYXJlCi0g
ICAgICAgIC8vIGFscmVhZHkgZmxpcHBpbmcsIHNvIHdlIG5lZWQgdG8gdW5kbyB0aGF0IGhlcmUu
Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCBvd25lcigpLT5ib3Vu
ZHMoKS5oZWlnaHQoKSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0x
KTsKLSAgICB9CisgICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkKKyAgICAgICAgdmFsdWUuZ2V0UkdC
QShjb21wb25lbnRzWzBdLCBjb21wb25lbnRzWzFdLCBjb21wb25lbnRzWzJdLCBjb21wb25lbnRz
WzNdKTsKIAotICAgIC8vIERyYXcgdGhlIHRpbGUKLSAgICBkaXNwbGF5Q2FsbGJhY2sob3duZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBjb250ZXh0KTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4g
Y29sb3IgPSBhZG9wdENGKENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZS5nZXQoKSwgY29tcG9uZW50
cykpOwogCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLX0KLQotVGlsZUNv
bnRyb2xsZXIqIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpjcmVhdGVUaWxlQ29udHJvbGxl
cihQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcikKLXsKLSAgICBBU1NFUlQoIW1fdGlsZUNvbnRy
b2xsZXIpOwotICAgIG1fdGlsZUNvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbGVDb250
cm9sbGVyPihyb290TGF5ZXIpOwotICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLmdldCgpOwot
fQotCi1UaWxlZEJhY2tpbmcqIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp0aWxlZEJhY2tp
bmcoKQotewotICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLmdldCgpOworICAgIENBQ0ZMYXll
clNldEJvcmRlckNvbG9yKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgY29sb3IuZ2V0KCkpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgJKHJldmlzaW9u
IDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0ICpDR0NvbnRleHRSZWY7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBQbGF0Zm9y
bUNBTGF5ZXI7CiBjbGFzcyBUaWxlQ29udHJvbGxlcjsKQEAgLTQ3LDkgKzQ4LDkgQEAgcHVibGlj
OgogICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKFBsYXRmb3JtQ0FMYXllciopOwogICAg
IH5QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCgpOwogCi0gICAgdm9pZCBkaXNwbGF5Q2FsbGJh
Y2soQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJl
Zik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgUGxhdGZvcm1D
QUxheWVyKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KIAogICAgIHZvaWQgc2V0
U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FMYXllckxpc3QmKTsKQEAgLTU5LDMyICs2MCwyOCBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IHN1YmxheWVyQ291bnQoKSBjb25zdDsKICAgICBpbnQgaW5k
ZXhPZlN1YmxheWVyKGNvbnN0IFBsYXRmb3JtQ0FMYXllciogcmVmZXJlbmNlKTsKIAotICAgIHZv
aWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBpc09wYXF1
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0RnJhbWUo
Y29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBUaWxlQ29udHJvbGxlciogY3JlYXRlVGlsZUNvbnRy
b2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIpOwotICAgIFRpbGVkQmFja2luZyogdGls
ZWRCYWNraW5nKCk7CisgICAgdmlydHVhbCBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworCisgICAgdmlydHVhbCB2
b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3JkZXJD
b2xvcihjb25zdCBDb2xvciYpOworCisgICAgc3RhdGljIHZvaWQgZmxpcENvbnRleHQoQ0dDb250
ZXh0UmVmLCBDR0Zsb2F0IGhlaWdodCk7CisgICAgICAgIAorICAgIHZvaWQgZHJhd1JlcGFpbnRD
b3VudGVycyhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZiwgQ0dSZWN0IGxheWVyQm91bmRzLCBp
bnQgZHJhd0NvdW50KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGludGVybmFsU2V0TmVlZHNEaXNw
bGF5KGNvbnN0IEZsb2F0UmVjdCopOwogICAgIFBsYXRmb3JtQ0FMYXllciogc3VibGF5ZXJBdElu
ZGV4KGludCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgdm9pZCB0aWxlRGlzcGxheUNhbGxiYWNrKENB
Q0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLQotICAgIHZvaWQgZHJhd1RpbGUoQ0FDRkxheWVy
UmVmLCBDR0NvbnRleHRSZWYpOwotICAgIENHU2l6ZSBjb25zdHJhaW5lZFNpemUoY29uc3QgQ0dT
aXplJikgY29uc3Q7Ci0gICAgdm9pZCBhZGRUaWxlKCk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKCk7
Ci0gICAgQ0FDRkxheWVyUmVmIHRpbGVBdEluZGV4KGludCk7Ci0gICAgaW50IHRpbGVDb3VudCgp
IGNvbnN0OwotICAgIHZvaWQgdXBkYXRlVGlsZXMoKTsKLQogICAgIFBsYXRmb3JtQ0FMYXllciog
bV9vd25lcjsKLQotICAgIENHU2l6ZSBtX3RpbGVTaXplOwotICAgIENHU2l6ZSBtX2NvbnN0cmFp
bmVkU2l6ZTsKLSAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBtX3RpbGVQYXJlbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFRpbGVDb250cm9sbGVyPiBtX3RpbGVDb250cm9sbGVyOwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVk
QmFja2luZ0xheWVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFj
a2luZ0xheWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2luY2x1ZGUg
IlRpbGVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisjaW5jbHVkZSA8
UXVhcnR6Q29yZS9DQUNGTGF5ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlRpbGVk
QmFja2luZ0xheWVyV2luOjpXZWJUaWxlZEJhY2tpbmdMYXllcldpbihQbGF0Zm9ybUNBTGF5ZXIq
IG93bmVyKQorICAgIDogUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwob3duZXIpCit7Cit9CisK
K1dlYlRpbGVkQmFja2luZ0xheWVyV2luOjp+V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4oKQorewor
fQorCitzdHJ1Y3QgRGlzcGxheU9uTWFpblRocmVhZENvbnRleHQgeworICAgIFJldGFpblB0cjxD
QUNGTGF5ZXJSZWY+IGxheWVyOworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQ7
CisKKyAgICBEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dChDQUNGTGF5ZXJSZWYgY2FMYXllciwg
Q0dDb250ZXh0UmVmIGNhQ29udGV4dCkKKyAgICAgICAgOiBsYXllcihjYUxheWVyKQorICAgICAg
ICAsIGNvbnRleHQoY2FDb250ZXh0KQorICAgIHsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCBy
ZWRpc3BhdGNoT25NYWluUXVldWUodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4
dD4gcmV0YWluZWRDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheU9uTWFpblRocmVhZENv
bnRleHQqPihjb250ZXh0KSk7CisgICAgaWYgKCFyZXRhaW5lZENvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKiBzZWxmID0gc3RhdGljX2Nh
c3Q8UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwqPihDQUNGTGF5ZXJHZXRVc2VyRGF0YShyZXRh
aW5lZENvbnRleHQtPmxheWVyLmdldCgpKSk7CisKKyAgICBzZWxmLT5kaXNwbGF5Q2FsbGJhY2so
cmV0YWluZWRDb250ZXh0LT5sYXllci5nZXQoKSwgcmV0YWluZWRDb250ZXh0LT5jb250ZXh0Lmdl
dCgpKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxheUNhbGxiYWNr
KENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBpZiAo
IWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jX2YoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgbmV3IERpc3BsYXlPbk1haW5UaHJlYWRDb250ZXh0KGNhTGF5ZXIsIGNv
bnRleHQpLCByZWRpc3BhdGNoT25NYWluUXVldWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmICghb3duZXIoKSB8fCAhb3duZXIoKS0+b3duZXIoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENHUmVjdCBs
YXllckJvdW5kcyA9IG93bmVyKCktPmJvdW5kcygpOworICAgIFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSA9IG93bmVyKCktPmxheWVyVHlwZSgpOworICAgIEFTU0VSVChsYXll
clR5cGUgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllcik7CisK
KyAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCA9IG93bmVyKCktPm93bmVyKCk7Cisg
ICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVu
dGF0aW9uID0gY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCk7CisK
KyAgICBmbGlwQ29udGV4dChjb250ZXh0LCBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7CisKKyAg
ICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworCisgICAgLy8gSXQn
cyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQg
bWF5IGJlIHNpZ25pZmljYW50bHkKKyAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5k
cyAoZS5nLiB0aWxlZCBsYXllcnMpCisgICAgQ0dSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgSW50UmVjdCBjbGlwKGVuY2xvc2luZ0lu
dFJlY3QoY2xpcEJvdW5kcykpOworICAgIGNsaWVudC0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250
ZW50cyhvd25lcigpLCBncmFwaGljc0NvbnRleHQsIGNsaXApOworCisgICAgaWYgKGNsaWVudC0+
cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG93bmVyKCkpKSB7CisgICAgICAgIGlu
dCBkcmF3Q291bnQgPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3Vu
dChvd25lcigpKTsKKyAgICAgICAgZHJhd1JlcGFpbnRDb3VudGVycyhjYUxheWVyLCBjb250ZXh0
LCBsYXllckJvdW5kcywgZHJhd0NvdW50KTsKKyAgICB9CisKKyAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNvbnRleHQpOworCisgICAgY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJMYXllckRpZERp
c3BsYXkob3duZXIoKSk7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldE5l
ZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVy
biBtX3RpbGVDb250cm9sbGVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZGlydHlSZWN0KQoreworICAgIGlmIChtX3RpbGVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4g
bV90aWxlQ29udHJvbGxlci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGVuY2xvc2luZ0ludFJlY3Qo
ZGlydHlSZWN0KSk7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvdW5k
cyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kcykKK3sKKyAgICBpZiAoQ0dSZWN0RXF1YWxUb1JlY3Qo
Ym91bmRzLCBvd25lcigpLT5ib3VuZHMoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3VuZHMoYm91bmRzKTsKKworICAgIGlmIChtX3Rp
bGVDb250cm9sbGVyKQorICAgICAgICBtX3RpbGVDb250cm9sbGVyLT50aWxlQ2FjaGVMYXllckJv
dW5kc0NoYW5nZWQoKTsKK30KKworYm9vbCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6aXNPcGFx
dWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyID8gbV90aWxlQ29udHJv
bGxlci0+dGlsZXNBcmVPcGFxdWUoKSA6IHRydWU7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5n
TGF5ZXJXaW46OnNldE9wYXF1ZShib29sIHZhbHVlKQoreworICAgIGlmIChtX3RpbGVDb250cm9s
bGVyKQorICAgICAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci0+c2V0VGlsZXNPcGFxdWUodmFs
dWUpOworfQorCitmbG9hdCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6Y29udGVudHNTY2FsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXIgPyBtX3RpbGVDb250cm9sbGVy
LT5jb250ZW50c1NjYWxlKCkgOiAxLjBmOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVy
V2luOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlRmFjdG9yKQoreworICAgIGlmIChtX3Rp
bGVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci0+c2V0Q29udGVu
dHNTY2FsZShzY2FsZUZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46
OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQoreworICAgIGlmIChtX3RpbGVDb250cm9sbGVy
KQorICAgICAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci0+c2V0VGlsZURlYnVnQm9yZGVyV2lk
dGgodmFsdWUgLyAyKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0Qm9y
ZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQoreworICAgIGlmIChtX3RpbGVDb250cm9sbGVy
KQorICAgICAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci0+c2V0VGlsZURlYnVnQm9yZGVyQ29s
b3IodmFsdWUpOworfQorCitUaWxlQ29udHJvbGxlciogV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46
OmNyZWF0ZVRpbGVDb250cm9sbGVyKFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKQoreworICAg
IEFTU0VSVCghbV90aWxlQ29udHJvbGxlcik7CisgICAgbV90aWxlQ29udHJvbGxlciA9IHN0ZDo6
bWFrZV91bmlxdWU8VGlsZUNvbnRyb2xsZXI+KHJvb3RMYXllcik7CisgICAgcmV0dXJuIG1fdGls
ZUNvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK1RpbGVkQmFja2luZyogV2ViVGlsZWRCYWNraW5nTGF5
ZXJXaW46OnRpbGVkQmFja2luZygpCit7CisgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXIuZ2V0
KCk7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmludmFsaWRhdGUoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGlsZUNvbnRyb2xsZXIp
OworICAgIG1fdGlsZUNvbnRyb2xsZXIgPSBudWxscHRyOworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRp
bGVkQmFja2luZ0xheWVyV2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW5faAorI2RlZmluZSBX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luIDogcHVibGljIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsIHsKK3B1YmxpYzoK
KyAgICBXZWJUaWxlZEJhY2tpbmdMYXllcldpbihQbGF0Zm9ybUNBTGF5ZXIqKTsKKyAgICB+V2Vi
VGlsZWRCYWNraW5nTGF5ZXJXaW4oKTsKKworICAgIHZvaWQgZGlzcGxheUNhbGxiYWNrKENBQ0ZM
YXllclJlZiwgQ0dDb250ZXh0UmVmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlz
cGxheSgpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRCb3VuZHMo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBvdmVycmlk
ZTsKKworICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYpIG92ZXJyaWRlOworCisgICAgLy8gV2ViVGls
ZWRCYWNraW5nTGF5ZXIgRmVhdHVyZXMKKyAgICBUaWxlQ29udHJvbGxlciogY3JlYXRlVGlsZUNv
bnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIpOworICAgIFRpbGVkQmFja2luZyog
dGlsZWRCYWNraW5nKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKK3ByaXZhdGU6CisgICAg
UmV0YWluUHRyPENBQ0ZMYXllclJlZj4gbV90aWxlUGFyZW50OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaWxlQ29udHJvbGxlcj4gbV90aWxlQ29udHJvbGxlcjsKK307CisKK30KKworI2VuZGlmIC8v
IFdlYlRpbGVkQmFja2luZ0xheWVyV2luX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261207</attachid>
            <date>2015-09-15 10:39:34 -0700</date>
            <delta_ts>2015-09-15 11:29:30 -0700</delta_ts>
            <desc>Patch (Correct deprecation warning)</desc>
            <filename>bug-149144-20150915105519.patch</filename>
            <type>text/plain</type>
            <size>55714</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBAQAorMjAxNS0wOS0xNCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBUaWxlZCBkcmF3
aW5nIGlzIHJlbmRlcmluZyBtb3JlIHRpbWVzIHRoYW4gaXQgc2hvdWxkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxNDQKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzIyMzEzOTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb3ZpZGUgYSBtb3JlIGZhaXRoZnVsIGltcGxlbWVuYXRpb24gb2YgdGhl
IE9iamVjdGl2ZSBDIHRpbGVkIGRyYXdpbmcgbG9naWMuCisgICAgICAgICgxKSBDcmVhdGUgYSBu
ZXcgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4gY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgdGhlCisg
ICAgICAgICAgICBjb250YWluZXIgb2YgdGlsZXMuIFRoaXMgbWF0Y2hlcyB0aGUgT2JqZWN0aXZl
IEMgZGVzaWduLgorICAgICAgICAoMikgTW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXZlcmFsIG1l
dGhvZHMgKGUuZy4sIGlzT3BhcXVlKSB0byB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgIGNsYXNz
IGltcGxlbWVudGF0aW9uIHNvIHRoYXQgdGhlIFRpbGUgRHJhd2luZyBsb2dpYyBjYW4gcGVyZm9y
bSBzcGVjaWFsCisgICAgICAgICAgICBoYW5kbGluZyBpbiB0aGVzZSBjYXNlcy4KKyAgICAgICAg
KDMpIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBUaWxlZCBEcmF3aW5nIGxvZ2ljIGZyb20gUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwsCisgICAgICAgICAgICBzaW5jZSBpdCB3YXMganVzdCBkdXBs
aWNhdGluZyBjb2RlIGluIFRpbGVDb250cm9sbGVyIGFuZCBUaWxlR3JpZC4KKyAgICAgICAgKDQp
IENsZWFuIHVwIHRoZSBkaXNwbGF5IGNhbGxiYWNrIGNvZGUgdG8gYXZvaWQgcGVyZm9ybWluZyBp
bmNvcnJlY3QgZmxpcHBpbmcKKyAgICAgICAgICAgIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4K
KworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6IEFkZCBuZXcgV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW4gZmlsZS4gICAgICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qOiBBZGQgdGhlIG5ldyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBmaWxl
cy4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4p
OiBDcmVhdGUgYSBXZWJUaWxlZEJhY2tpbmdMYXllcldpbgorICAgICAgICBvYmplY3QgaWYgdXNp
bmcgdGlsZWQgZHJhd2luZy4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6flBsYXRmb3Jt
Q0FMYXllcldpbik6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKTogTW92
ZSBpbXBsZW1lbnRhdGlvbiB0byBpbnRlcm5hbCBjbGFzcy4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbjo6c2V0T3BhcXVlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46
OnNldEJvcmRlcldpZHRoKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dEJvcmRlckNvbG9yKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRl
bnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVu
dHNTY2FsZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpjb3JuZXJSYWRp
dXMpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6dGlsZWRCYWNraW5nKTog
RGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludCk6IE5l
dyBoZWxwZXIgbWV0aG9kIHRvIGRyYXcgcmVwYWludCBjb3VudGVyCisgICAgICAgIHRleHQuIE5l
ZWRlZCB0byB3b3JrIGFyb3VuZCBidWcgaW4gQ0cuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCk6IFJlbW92
ZSB0aWxpbmctbG9naWMKKyAgICAgICAgcmVsYXRlZCBtZW1iZXIgdmFyaWFibGVzLgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6On5QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bCk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZmxpcENvbnRleHQpOiBB
ZGRlZCBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgIChzaG91bGRJbnZlcnRCZWZvcmVEcmF3
aW5nQ29udGVudCk6IERpdHRvLgorICAgICAgICAoc2hvdWxkSW52ZXJ0QmVmb3JlRHJhd2luZ1Jl
cGFpbnRDb3VudGVycyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmRpc3BsYXlDYWxsYmFjayk6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6ZHJhd1JlcGFpbnRDb3VudGVycyk6IEhlbHBlciBtZXRob2QgdG8KKyAgICAgICAgc2hhcmUg
Y29kZSBiZXR3ZWVuIHRoZSB0d28gbGF5ZXIgY2xhc3Nlcy4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheSk6IHVzZSBudWxscHRyLgor
ICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxheSk6IERp
dHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxh
eUluUmVjdCk6IE1vdmUgdGlsZWQgY29kZQorICAgICAgICB0byBXZWJUaWxlZEJhY2tpbmdMYXll
cldpbiBhbmQgc2ltcGxpZnkgdGhlIHJlbWFpbmcgY29kZS4KKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXRTdWJsYXllcnMpOiBSZW1vdmUgdGlsZSBjb2RlLgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmdldFN1YmxheWVycyk6IERpdHRvLgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZUFsbFN1YmxheWVycyk6IERp
dHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omluc2VydFN1YmxheWVy
KTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c3VibGF5ZXJD
b3VudCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmluZGV4
T2ZTdWJsYXllcik6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OnN1YmxheWVyQXRJbmRleCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldEJvdW5kcyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldEZyYW1lKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6aXNPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpzZXRPcGFxdWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpjb250ZW50c1NjYWxlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6c2V0Q29udGVudHNTY2FsZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OnNldEJvcmRlcldpZHRoKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyQ29sb3IpOiBEaXR0by4KKyAgICAgICAgKGxh
eWVyVHlwZUlzVGlsZWQpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OmNvbnN0cmFpbmVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6dGlsZURpc3BsYXlDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSk6IERlbGV0ZWQuCisgICAgICAgIChQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6cmVtb3ZlVGlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUF0SW5kZXgpOiBEZWxldGVkLgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVDb3VudCk6IERlbGV0ZWQuCisg
ICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVGlsZXMpOiBEZWxldGVk
LgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdUaWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpjcmVhdGVUaWxlQ29udHJv
bGxlcik6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGls
ZWRCYWNraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpvd25lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJU
aWxlZEJhY2tpbmdMYXllcldpbjo6V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4pOgorICAgICAgICAo
V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46On5XZWJUaWxlZEJhY2tpbmdMYXllcldpbik6CisgICAg
ICAgIChEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dDo6RGlzcGxheU9uTWFpblRocmVhZENvbnRl
eHQpOgorICAgICAgICAocmVkaXNwYXRjaE9uTWFpblF1ZXVlKToKKyAgICAgICAgKFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2spOgorICAgICAgICAoV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdM
YXllcldpbjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46
OmlzT3BhcXVlKToKKyAgICAgICAgKFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRPcGFxdWUp
OgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUpOgorICAg
ICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAg
ICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRlcldpZHRoKToKKyAgICAgICAgKFdl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbjo6Y3JlYXRlVGlsZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViVGls
ZWRCYWNraW5nTGF5ZXJXaW46OnRpbGVkQmFja2luZyk6CisgICAgICAgIChXZWJUaWxlZEJhY2tp
bmdMYXllcldpbjo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmg6IEFkZGVkLgorCiAyMDE1LTA5LTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQuY3JlYXRlTm9k
ZUl0ZXJhdG9yKG51bGwpIC8gRG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihudWxsKSBzaG91bGQg
dGhyb3cgYSBUeXBlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFr
ZQkocmV2aXNpb24gMTg5NjE4KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUZpbHRlcnNX
aW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVy
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVl
SG9zdC5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0ODQsNiArNzQ4NCwxMiBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cRmlsZVN5c3RlbS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xhdmZvdW5kYXRpb25cY2ZcQ0RN
U2Vzc2lvbkFWRm91bmRhdGlvbkNGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxXZWJDb3JlQVZDRlJlc291cmNlTG9h
ZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGNhXHdpblxXZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAiPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdf
V2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXElTT1ZUVEN1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxhdWRpb1xBdWRpb1Nlc3Npb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cYXVkaW9cUGxhdGZvcm1NZWRpYVNlc3Npb24uY3BwIiAvPgpAQCAtMjA4NTAsNiAr
MjA4NTYsMTIgQEAKICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cUGxhdGZv
cm1DQUxheWVyV2luLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xjYVx3aW5cV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCI+CisgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Cisg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcR0xDb250ZXh0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXFN1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCI+CkBAIC0yMjgzNCw0ICsyMjg0Niw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1
aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Q
cm9qZWN0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMzAzMyw5ICsz
MDMzLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDaGlsZE5vZGVMaXN0LmNw
cCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXENsYXNzTm9kZUxpc3QuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkb21cQ2xpZW50UmVjdC5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTMyMzQsOSArMzIzMSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkb21cTm9kZS5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxOb2RlRmlsdGVyLmNw
cCI+Ci0gICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZG9tXE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIj4KICAgICAg
IDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC03MjY2LDYgKzcyNjAs
MTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcRE9NU2VjdXJpdHlQb2xpY3ku
Y3BwIj4KICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xEYXRhVVJMRGVjb2Rlci5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkb21cQ2xhc3NDb2xsZWN0aW9uLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcR2VuZXJpY0NhY2hlZEhUTUxD
b2xsZWN0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGNhXHdpblxXZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAiPgorICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljc1xjYVx3aW48L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAg
PC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXGdlb2xvY2F0aW9uXENvb3JkaW5hdGVzLmgiPgpAQCAtMTAxMDAsOSArMTAxMDAsNiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENoaWxkTm9kZUxpc3QuaCI+CiAgICAg
ICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZG9tXENsYXNzTm9kZUxpc3QuaCI+Ci0gICAgICA8RmlsdGVyPmRvbTwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENs
aWVudFJlY3QuaCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpAQCAtMTUyNTUsNiArMTUyNTIsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBh
Z2VcRE9NU2VjdXJpdHlQb2xpY3kuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEZvcndhcmRpbmdIZWFk
ZXJzXGluc3BlY3RvclxJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xEYXRhVVJMRGVjb2Rlci5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZG9tXENsYXNzQ29sbGVjdGlvbi5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luLmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1xjYVx3aW48
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+
CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cY3NzXENTU0dyYW1tYXIueS5pbiI+CkBAIC0xNTQ1OSw0
ICsxNTQ2Miw0IEBACiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXHdpbjwvRmlsdGVyPgogICAgIDwv
TUFTTT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCShyZXZpc2lvbiAxODk2MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwxOSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6
ZHJhd1JlcGFpbnRJbmRpY2F0CiAgICAgc25wcmludGYodGV4dCwgc2l6ZW9mKHRleHQpLCAiJWQi
LCByZXBhaW50Q291bnQpOwogICAgIAogICAgIENHUmVjdCBpbmRpY2F0b3JCb3ggPSBwbGF0Zm9y
bUNBTGF5ZXItPmJvdW5kcygpOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
KworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKHBsYXRmb3JtQ0FMYXllci0+bGF5ZXJUeXBlKCkg
PT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXIpIHsKKyAg
ICAgICAgLy8gVGlsZWQgbGF5ZXJzIGluIFdpbmRvd3MgaGF2ZSBmbGlwcGVkIGNvb3JkaW5hdGVz
CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICAgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1pbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQp
OworICAgIH0KKyNlbmRpZgorCiAgICAgaW5kaWNhdG9yQm94LnNpemUud2lkdGggPSAxMiArIDEw
ICogc3RybGVuKHRleHQpOwogICAgIGluZGljYXRvckJveC5zaXplLmhlaWdodCA9IDI3OwotICAg
IENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgCiAgICAgQ0dDb250ZXh0U2V0QWxw
aGEoY29udGV4dCwgMC41Zik7CiAgICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldp
dGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7CkBAIC04MSwxNyArOTEsMjMgQEAgdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdAogICAgIGVsc2UKICAgICAgICAg
Q0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDEpOwogICAgIAotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgogICAgIENHQ29udGV4dFNldFRleHRNYXRy
aXgoY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKICAgICBDR0Nv
bnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNS
b21hbik7Ci0gICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJv
eC5vcmlnaW4ueCArIDUsIGluZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4o
dGV4dCkpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgIHBsYXRmb3JtQ0FMYXll
ci0+ZHJhd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4ueCArIDUsIGlu
ZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOwogICAgIAogICAg
IENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwogICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIHRv
IHdvcmsgYXJvdW5kIGEgYnVnIGluIFdpbmRvd3MgQ0cgPHJkYXI6Ly9wcm9ibGVtLzIyNzAzNDcw
Pgordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dGbG9hdCB4LCBDR0Zsb2F0IHksIGNvbnN0IGNoYXIqIHRleHQsIHNpemVfdCBsZW5n
dGgpIGNvbnN0Cit7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgQ0dD
b250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIHgsIHksIHRleHQsIGxlbmd0aCk7CisjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCit9CisKIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZyb21Qb29sKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBjbGllbnQsIEludFNpemUgc2l6ZSkKIHsKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBs
YXllcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCShyZXZpc2lvbiAxODk2MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjI2LDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0
aWxlZEJhY2tpbmcoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHRBdFBvaW50KENH
Q29udGV4dFJlZiwgQ0dGbG9hdCB4LCBDR0Zsb2F0IHksIGNvbnN0IGNoYXIqIHRleHQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgUGxhdGZv
cm1DQUxheWVyKiByb290TGF5ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzTGF5b3V0KCkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJldmlz
aW9uIDE4OTYxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMCBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRp
b25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldl
YkNvcmVIZWFkZXJEZXRlY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJUaWxlZEJhY2tpbmdMYXllcldp
bi5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbkNGLmg+CiAjaW5jbHVkZSA8
V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTQyLDE3ICsxNDQsMjAgQEAgUGxhdGZvcm1DQUxheWVy
V2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4oTAogI2VuZGlmCiAKICAgICAvLyBDcmVhdGUgdGhlIFBs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsIG9iamVjdCBhbmQgcG9pbnQgdG8gaXQgaW4gdGhlIHVz
ZXJkYXRhLgotICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKiBpbnRlcm4gPSBuZXcgUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwodGhpcyk7CisgICAgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWwqIGludGVybiA9IG51bGxwdHI7CisKKyAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVy
KCkpIHsKKyAgICAgICAgaW50ZXJuID0gbmV3IFdlYlRpbGVkQmFja2luZ0xheWVyV2luKHRoaXMp
OworICAgICAgICBUaWxlQ29udHJvbGxlciogdGlsZUNvbnRyb2xsZXIgPSByZWludGVycHJldF9j
YXN0PFdlYlRpbGVkQmFja2luZ0xheWVyV2luKj4oaW50ZXJuKS0+Y3JlYXRlVGlsZUNvbnRyb2xs
ZXIodGhpcyk7CisgICAgICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxQ
bGF0Zm9ybUNBTGF5ZXJMaXN0Pih0aWxlQ29udHJvbGxlci0+Y29udGFpbmVyTGF5ZXJzKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBpbnRlcm4gPSBuZXcgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwodGhpcyk7CisKICAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShtX2xheWVyLmdldCgpLCBpbnRl
cm4pOwogCiAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IGNhbGxiYWNrCiAgICAgQ0FDRkxheWVyU2V0
RGlzcGxheUNhbGxiYWNrKG1fbGF5ZXIuZ2V0KCksIGRpc3BsYXlDYWxsYmFjayk7CiAgICAgQ0FD
RkxheWVyU2V0TGF5b3V0Q2FsbGJhY2sobV9sYXllci5nZXQoKSwgbGF5b3V0U3VibGF5ZXJzUHJv
Yyk7Ci0KLSAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVyKCkpIHsKLSAgICAgICAgVGlsZUNv
bnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gaW50ZXJuLT5jcmVhdGVUaWxlQ29udHJvbGxlcih0
aGlzKTsKLSAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRm
b3JtQ0FMYXllckxpc3Q+KHRpbGVDb250cm9sbGVyLT5jb250YWluZXJMYXllcnMoKSk7Ci0gICAg
fQogfQogCiBQbGF0Zm9ybUNBTGF5ZXJXaW46On5QbGF0Zm9ybUNBTGF5ZXJXaW4oKQpAQCAtMTYw
LDkgKzE2NSwxMiBAQCBQbGF0Zm9ybUNBTGF5ZXJXaW46On5QbGF0Zm9ybUNBTGF5ZXJXaW4oCiAg
ICAgLy8gVG9zcyBhbGwgdGhlIGtpZHMKICAgICByZW1vdmVBbGxTdWJsYXllcnMoKTsKIAotICAg
IC8vIEdldCByaWQgb2YgdGhlIHVzZXIgZGF0YQogICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsKiBsYXllckludGVybiA9IGludGVybih0aGlzKTsKLSAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0
YShtX2xheWVyLmdldCgpLCAwKTsKKyAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVyKCkpCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4qPihsYXllcklu
dGVybiktPmludmFsaWRhdGUoKTsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIHVzZXIgZGF0YQor
ICAgIENBQ0ZMYXllclNldFVzZXJEYXRhKG1fbGF5ZXIuZ2V0KCksIG51bGxwdHIpOwogCiAgICAg
Q0FDRkxheWVyUmVtb3ZlRnJvbVN1cGVybGF5ZXIobV9sYXllci5nZXQoKSk7CiAKQEAgLTM1OCwx
MiArMzY2LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRNYXNrKFBsYXRmb3IKIAog
Ym9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Q0FDRkxheWVySXNPcGFxdWUobV9sYXllci5nZXQoKSk7CisgICAgcmV0dXJuIGludGVybih0aGlz
KS0+aXNPcGFxdWUoKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldE9wYXF1ZShi
b29sIHZhbHVlKQogewotICAgIENBQ0ZMYXllclNldE9wYXF1ZShtX2xheWVyLmdldCgpLCB2YWx1
ZSk7CisgICAgaW50ZXJuKHRoaXMpLT5zZXRPcGFxdWUodmFsdWUpOwogICAgIHNldE5lZWRzQ29t
bWl0KCk7CiB9CiAKQEAgLTUyNiwxOSArNTM0LDEzIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
OjpzZXRCYWNrZ3JvdW5kQ28KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEJvcmRlcldp
ZHRoKGZsb2F0IHZhbHVlKQogewotICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRoKG1fbGF5ZXIu
Z2V0KCksIHZhbHVlKTsKKyAgICBpbnRlcm4odGhpcyktPnNldEJvcmRlcldpZHRoKHZhbHVlKTsK
ICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0
Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewotICAgIENHRmxvYXQgY29tcG9uZW50
c1s0XTsKLSAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNv
bXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFj
ZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkp
OwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoQ0dDb2xvckNyZWF0
ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBDQUNGTGF5ZXJTZXRCb3Jk
ZXJDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQoKSk7CisgICAgaW50ZXJuKHRoaXMpLT5z
ZXRCb3JkZXJDb2xvcih2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAtNTg3
LDE4ICs1ODksMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNldEVkZ2VBbnRpYWxpYQog
CiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUoKSBjb25zdAogewotI2lm
IEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgcmV0dXJuIENBQ0ZMYXllckdl
dENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiAxLjBmOwot
I2VuZGlmCisgICAgcmV0dXJuIGludGVybih0aGlzKS0+Y29udGVudHNTY2FsZSgpOwogfQogCiB2
b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZUZhY3Rv
cikKIHsKLSNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxFKQotICAgIENBQ0ZMYXll
clNldENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSwgc2NhbGVGYWN0b3IpOwotI2VuZGlmCisg
ICAgaW50ZXJuKHRoaXMpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlRmFjdG9yKTsKKyAgICBzZXRO
ZWVkc0NvbW1pdCgpOwogfQogCiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvcm5lclJhZGl1
cygpIGNvbnN0CkBAIC03NzYsNSArNzczLDI2IEBAIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxh
eWVyV2luOjp0aWxlZEIKICAgICBpZiAoIXVzZXNUaWxlZEJhY2tpbmdMYXllcigpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpbnRlcm4odGhpcyktPnRpbGVkQmFja2lu
ZygpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYlRpbGVkQmFja2luZ0xheWVyV2lu
Kj4oaW50ZXJuKHRoaXMpKS0+dGlsZWRCYWNraW5nKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyV2luOjpkcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQgeCwg
Q0dGbG9hdCB5LCBjb25zdCBjaGFyKiBtZXNzYWdlLCBzaXplX3QgbGVuZ3RoKSBjb25zdAorewor
ICAgIFN0cmluZyB0ZXh0KG1lc3NhZ2UsIGxlbmd0aCk7CisKKyAgICBGb250RGVzY3JpcHRpb24g
ZGVzYzsKKworICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAgICBtZXRyaWNzLmNiU2l6
ZSA9IHNpemVvZihtZXRyaWNzKTsKKyAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9O
Q0xJRU5UTUVUUklDUywgbWV0cmljcy5jYlNpemUsICZtZXRyaWNzLCAwKTsKKyAgICBkZXNjLnNl
dE9uZUZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lKTsKKworICAgIGRl
c2Muc2V0Q29tcHV0ZWRTaXplKDE4KTsKKworICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2Fz
Y2FkZShkZXNjLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKworICAgIEdyYXBo
aWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNr
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRl
eHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCShy
ZXZpc2lvbiAxODk2MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUxheWVyV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0xheW91dCgpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwg
Y29uc3QgY2hhciogdGV4dCwgc2l6ZV90IGxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZm5k
ZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIHByaW50VHJlZSgpIGNvbnN0IG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCShyZXZpc2lv
biAxODk2MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKICNp
bmNsdWRlICJXZWJDb3JlSGVhZGVyRGV0ZWN0aW9uLmgiCkBAIC00MCwzMyArMzksOSBAQAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBUaGUgd2lk
dGggYW5kIGhlaWdodCBvZiBhIHNpbmdsZSB0aWxlIGluIGEgdGlsZWQgbGF5ZXIuIFNob3VsZCBi
ZSBsYXJnZSBlbm91Z2ggdG8KLS8vIGF2b2lkIGxvdHMgb2Ygc21hbGwgdGlsZXMgKGFuZCB0aGVy
ZWZvcmUgbG90cyBvZiBkcmF3aW5nIGNhbGxiYWNrcyksIGJ1dCBzbWFsbCBlbm91Z2gKLS8vIHRv
IGtlZXAgdGhlIG92ZXJhbGwgdGlsZSBjb3N0IGxvdy4KLXN0YXRpYyBjb25zdCBpbnQgY1RpbGVk
TGF5ZXJUaWxlU2l6ZSA9IDUxMjsKLQotc3RhdGljIGJvb2wgbGF5ZXJUeXBlSXNUaWxlZChjb25z
dCBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCi17Ci0gICAgcmV0dXJuIGxh
eWVyVHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYlRpbGVkTGF5ZXIKLSAgICAg
ICAgfHwgbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUGFnZVRpbGVkQmFj
a2luZ0xheWVyCi0gICAgICAgIHx8IGxheWVyVHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZVRpbGVkQmFja2luZ0xheWVyOwotfQotCiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoUGxhdGZvcm1DQUxheWVyKiBvd25lcikKLSAgICA6
IG1fdGlsZVNpemUoQ0dTaXplTWFrZShjVGlsZWRMYXllclRpbGVTaXplLCBjVGlsZWRMYXllclRp
bGVTaXplKSkKLSAgICAsIG1fY29uc3RyYWluZWRTaXplKGNvbnN0cmFpbmVkU2l6ZShvd25lci0+
Ym91bmRzKCkuc2l6ZSgpKSkKLSAgICAsIG1fb3duZXIob3duZXIpCi17Ci0gICAgaWYgKGxheWVy
VHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFRpbGVkIGxh
eWVycyBhcmUgcGxhY2VkIGluIGEgY2hpbGQgbGF5ZXIgdGhhdCBpcyBhbHdheXMgdGhlIGZpcnN0
IGNoaWxkIG9mIHRoZSBUaWxlZExheWVyCi0gICAgICAgIG1fdGlsZVBhcmVudCA9IGFkb3B0Q0Yo
Q0FDRkxheWVyQ3JlYXRlKGtDQUNGTGF5ZXIpKTsKLSAgICAgICAgQ0FDRkxheWVySW5zZXJ0U3Vi
bGF5ZXIobV9vd25lci0+cGxhdGZvcm1MYXllcigpLCBtX3RpbGVQYXJlbnQuZ2V0KCksIDApOwot
I2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgICAgIENBQ0ZMYXllclNl
dENvbnRlbnRzU2NhbGUobV90aWxlUGFyZW50LmdldCgpLCBDQUNGTGF5ZXJHZXRDb250ZW50c1Nj
YWxlKG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwotI2VuZGlmCi0KLSAgICAgICAgdXBkYXRl
VGlsZXMoKTsKLSAgICB9CisgICAgOiBtX293bmVyKG93bmVyKQorewogfQogCiBQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6flBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKCkKQEAgLTk2LDYg
KzcxLDIzIEBAIHN0YXRpYyB2b2lkIHJlZGlzcGF0Y2hPbk1haW5RdWV1ZSh2b2lkKgogICAgIHNl
bGYtPmRpc3BsYXlDYWxsYmFjayhyZXRhaW5lZENvbnRleHQtPmxheWVyLmdldCgpLCByZXRhaW5l
ZENvbnRleHQtPmNvbnRleHQuZ2V0KCkpOwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpmbGlwQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCBoZWlnaHQp
Cit7CisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOworICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKK30KKworc3RhdGljIGJvb2wgc2hv
dWxkSW52ZXJ0QmVmb3JlRHJhd2luZ0NvbnRlbnQoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUg
bGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gY29vcmRpbmF0ZU9yaWVudGF0aW9uKQoreworICAgIHJldHVybiAobGF5ZXJUeXBlICE9IFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyKQorICAgICAgICAm
JiAoY29vcmRpbmF0ZU9yaWVudGF0aW9uID09IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNUb3BEb3duKTsKK30KKworc3RhdGljIGJvb2wgcmVwYWludENvdW50ZXJzQXJlRHJh
d25CeUdyaWRDb250cm9sbGVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkK
K3sKKyAgICByZXR1cm4gbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGls
ZWRCYWNraW5nVGlsZUxheWVyOworfQorCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZiBjb250
ZXh0KQogewogICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKQEAgLTEwOSw3NCArMTAxLDQ1IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXkKICAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gb3duZXIoKS0+
Ym91bmRzKCk7Ci0gICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzVG9wRG93bikgewotICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAx
LCAtMSk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtbGF5ZXJC
b3VuZHMuc2l6ZS5oZWlnaHQpOwotICAgIH0KLQotICAgIGlmIChvd25lcigpLT5vd25lcigpKSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Ci0KLSAg
ICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQs
IGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKLSAgICAgICAgLy8gc21hbGxlciB0aGFu
IHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQotICAgICAgICBDR1JlY3QgY2xp
cEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKLSAgICAgICAg
SW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwotICAgICAgICBvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKG93bmVyKCksIGdyYXBo
aWNzQ29udGV4dCwgY2xpcCk7Ci0gICAgfQotI2lmbmRlZiBOREVCVUcKLSAgICBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkg
d2UnZCBhdm9pZCBjYWxsaW5nIC1zZXROZWVkc0Rpc3BsYXkgb24gYSBsYXllciB0aGF0IGlzIGEg
cGxhaW4gY29sb3IsCi0gICAgICAgIC8vIHNvIENBIG5ldmVyIG1ha2VzIGJhY2tpbmcgc3RvcmUg
Zm9yIGl0ICh3aGljaCBpcyB3aGF0IC1zZXROZWVkc0Rpc3BsYXkgd2lsbCBkbyBhYm92ZSkuCi0g
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAwLjBmLCAxLjBmLCAwLjBm
LCAxLjBmKTsKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGF5ZXJCb3VuZHMp
OwotICAgIH0KLSNlbmRpZgorICAgIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlw
ZSA9IG93bmVyKCktPmxheWVyVHlwZSgpOwogCi0gICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBs
YXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihvd25lcigpKSkgewotICAgICAgICBTdHJp
bmcgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXll
ckluY3JlbWVudFJlcGFpbnRDb3VudChvd25lcigpKSk7CisgICAgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBjbGllbnQgPSBvd25lcigpLT5vd25lcigpOworICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGNsaWVudC0+cGxhdGZv
cm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpOwogCi0gICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CisgICAgaWYgKHNob3VsZEludmVydEJlZm9yZURyYXdpbmdDb250ZW50
KGxheWVyVHlwZSwgb3JpZW50YXRpb24pKQorICAgICAgICBmbGlwQ29udGV4dChjb250ZXh0LCBs
YXllckJvdW5kcy5zaXplLmhlaWdodCk7CiAKLSAgICAgICAgLy8gTWFrZSB0aGUgYmFja2dyb3Vu
ZCBvZiB0aGUgY291bnRlciB0aGUgc2FtZSBhcyB0aGUgYm9yZGVyIGNvbG9yLAotICAgICAgICAv
LyB1bmxlc3MgdGhlcmUgaXMgbm8gYm9yZGVyLCB0aGVuIG1ha2UgaXQgcmVkCi0gICAgICAgIGZs
b2F0IGJvcmRlcldpZHRoID0gQ0FDRkxheWVyR2V0Qm9yZGVyV2lkdGgoY2FMYXllcik7Ci0gICAg
ICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHsKLSAgICAgICAgICAgIENHQ29sb3JSZWYgYm9yZGVy
Q29sb3IgPSBDQUNGTGF5ZXJHZXRCb3JkZXJDb2xvcihjYUxheWVyKTsKLSAgICAgICAgICAgIGNv
bnN0IENHRmxvYXQqIGNvbG9ycyA9IENHQ29sb3JHZXRDb21wb25lbnRzKGJvcmRlckNvbG9yKTsK
LSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCBjb2xvcnNbMF0s
IGNvbG9yc1sxXSwgY29sb3JzWzJdLCBjb2xvcnNbM10pOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLjBmLCAwLjBmLCAwLjBm
LCAwLjhmKTsKLSAgICAgICAgCi0gICAgICAgIENHUmVjdCBhQm91bmRzID0gbGF5ZXJCb3VuZHM7
Ci0KLSAgICAgICAgYUJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMCAqIHRleHQubGVuZ3RoKCk7
Ci0gICAgICAgIGFCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyMjsKLSAgICAgICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgYUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBGb250RGVzY3JpcHRp
b24gZGVzYzsKLQotICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7Ci0gICAgICAgIG1l
dHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwotICAgICAgICBTeXN0ZW1QYXJhbWV0ZXJz
SW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgbWV0cmljcy5jYlNpemUsICZtZXRyaWNzLCAw
KTsKLSAgICAgICAgZGVzYy5zZXRPbmVGYW1pbHkobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZG
YWNlTmFtZSk7Ci0KLSAgICAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoMTgpOwotICAgICAgICAK
LSAgICAgICAgRm9udENhc2NhZGUgZm9udCA9IEZvbnRDYXNjYWRlKGRlc2MsIDAsIDApOwotICAg
ICAgICBmb250LnVwZGF0ZSgwKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4
dCk7Ci0gICAgICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwotICAgICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2lu
dChhQm91bmRzLm9yaWdpbi54ICsgNSwgYUJvdW5kcy5vcmlnaW4ueSArIDE3KSk7Ci0KLSAgICAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgICAgICAgIAorICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFu
dCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2ln
bmlmaWNhbnRseQorICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRp
bGVkIGxheWVycykKKyAgICBDR1JlY3QgY2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3Vu
ZGluZ0JveChjb250ZXh0KTsKKyAgICBJbnRSZWN0IGNsaXAoZW5jbG9zaW5nSW50UmVjdChjbGlw
Qm91bmRzKSk7CisgICAgY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKG93bmVy
KCksIGdyYXBoaWNzQ29udGV4dCwgY2xpcCk7CisKKyAgICBpZiAoY2xpZW50LT5wbGF0Zm9ybUNB
TGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIoKSkKKyAgICAgICAgJiYgIXJlcGFpbnRDb3Vu
dGVyc0FyZURyYXduQnlHcmlkQ29udHJvbGxlcihsYXllclR5cGUpKSB7CisgICAgICAgIGludCBk
cmF3Q291bnQgPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChv
d25lcigpKTsKKyAgICAgICAgZHJhd1JlcGFpbnRDb3VudGVycyhjYUxheWVyLCBjb250ZXh0LCBs
YXllckJvdW5kcywgZHJhd0NvdW50KTsKICAgICB9CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwogCi0gICAgb3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyTGF5
ZXJEaWREaXNwbGF5KG93bmVyKCkpOworICAgIGNsaWVudC0+cGxhdGZvcm1DQUxheWVyTGF5ZXJE
aWREaXNwbGF5KG93bmVyKCkpOworfQorCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmRzLCBpbnQgZHJhd0NvdW50KQoreworICAgIENHQ29s
b3JSZWYgYmFja2dyb3VuZENvbG9yID0gbnVsbHB0cjsKKyAgICAvLyBNYWtlIHRoZSBiYWNrZ3Jv
dW5kIG9mIHRoZSBjb3VudGVyIHRoZSBzYW1lIGFzIHRoZSBib3JkZXIgY29sb3IsCisgICAgLy8g
dW5sZXNzIHRoZXJlIGlzIG5vIGJvcmRlciwgdGhlbiBtYWtlIGl0IHJlZAorICAgIGZsb2F0IGJv
cmRlcldpZHRoID0gQ0FDRkxheWVyR2V0Qm9yZGVyV2lkdGgoY2FMYXllcik7CisgICAgaWYgKGJv
cmRlcldpZHRoID4gMCkKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ0FDRkxheWVyR2V0Qm9y
ZGVyQ29sb3IoY2FMYXllcik7CisgICAgZWxzZQorICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBj
YWNoZWRDR0NvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisg
ICAgUGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXRvcihjb250ZXh0LCBvd25lcigp
LCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OmludGVybmFsU2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGly
dHlSZWN0KQpAQCAtMTg1LDUxICsxNDgsNDMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6aW50ZXJuYQogICAgICAgICBDR1JlY3QgcmVjdCA9ICpkaXJ0eVJlY3Q7CiAgICAgICAg
IENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksICZyZWN0
KTsKICAgICB9IGVsc2UKLSAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5KG93bmVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSwgMCk7CisgICAgICAgIENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShv
d25lcigpLT5wbGF0Zm9ybUxheWVyKCksIG51bGxwdHIpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIGludGVybmFsU2V0TmVl
ZHNEaXNwbGF5KDApOworICAgIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KG51bGxwdHIpOwogfQog
CiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQo
bV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBPbmx5IHNldE5lZWRz
RGlzcGxheSBmb3IgdGlsZXMgdGhhdCBhcmUgY3VycmVudGx5IHZpc2libGUKLSAgICAgICAgaW50
IG51bVRpbGVMYXllcnMgPSB0aWxlQ291bnQoKTsKLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBkaXJ0
eVJlY3Q7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZUxheWVyczsgKytpKQot
ICAgICAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5KHRpbGVBdEluZGV4KGkpLCAmcmVj
dCk7Ci0KLSAgICAgICAgaWYgKG1fb3duZXItPm93bmVyKCkgJiYgbV9vd25lci0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG1fb3duZXIpKSB7Ci0gICAgICAgICAg
ICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBtX293bmVyLT5ib3VuZHMoKTsKLSAgICAgICAgICAgIENH
UmVjdCBpbmRpY2F0b3JSZWN0ID0gQ0dSZWN0TWFrZShsYXllckJvdW5kcy5vcmlnaW4ueCwgbGF5
ZXJCb3VuZHMub3JpZ2luLnksIDgwLCAyNSk7Ci0gICAgICAgICAgICBDQUNGTGF5ZXJTZXROZWVk
c0Rpc3BsYXkodGlsZUF0SW5kZXgoMCksICZpbmRpY2F0b3JSZWN0KTsKKyAgICBpZiAoIW93bmVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChvd25lcigpLT5sYXllclR5cGUoKSAh
PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyKTsKKworICAgIGlm
IChvd25lcigpLT5vd25lcigpKSB7CisgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIoKSkpIHsKKyAgICAgICAgICAgIEZs
b2F0UmVjdCBsYXllckJvdW5kcyA9IG93bmVyKCktPmJvdW5kcygpOworICAgICAgICAgICAgRmxv
YXRSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxheWVyQm91bmRzOworCisgICAgICAgICAgICAv
LyBXZSBhc3N1bWUgYSBtYXhpbXVtIG9mIDQgZGlnaXRzIGFuZCBhIGZvbnQgc2l6ZSBvZiAxOC4K
KyAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zZXRXaWR0aCg4MCk7CisgICAgICAgICAg
ICByZXBhaW50Q291bnRlclJlY3Quc2V0SGVpZ2h0KDIyKTsKKyAgICAgICAgICAgIGlmIChvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgPT0gV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24pCisgICAg
ICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNldFkobGF5ZXJCb3VuZHMuaGVpZ2h0KCkg
LSAobGF5ZXJCb3VuZHMueSgpICsgcmVwYWludENvdW50ZXJSZWN0LmhlaWdodCgpKSk7CisgICAg
ICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmcmVwYWludENvdW50ZXJSZWN0KTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAob3duZXIoKS0+bGF5ZXJUeXBlKCkgPT0gUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVXZWJMYXllcikgewotICAgICAgICBpZiAob3duZXIoKSAmJiBvd25l
cigpLT5vd25lcigpKSB7Ci0gICAgICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZv
cm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG93bmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAg
RmxvYXRSZWN0IGxheWVyQm91bmRzID0gb3duZXIoKS0+Ym91bmRzKCk7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxheWVyQm91bmRzOwotCi0gICAgICAg
ICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11bSBvZiA0IGRpZ2l0cyBhbmQgYSBmb250IHNp
emUgb2YgMTguCi0gICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNldFdpZHRoKDgw
KTsKLSAgICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0SGVpZ2h0KDIyKTsKLSAg
ICAgICAgICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29udGVu
dHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNUb3BEb3duKQotICAgICAgICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Qu
c2V0WShsYXllckJvdW5kcy5oZWlnaHQoKSAtIChsYXllckJvdW5kcy55KCkgKyByZXBhaW50Q291
bnRlclJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlz
cGxheSgmcmVwYWludENvdW50ZXJSZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkg
PT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd24p
IHsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZmxpcHBlZERpcnR5UmVjdCA9IGRpcnR5UmVj
dDsKLSAgICAgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0LnNldFkob3duZXIoKS0+Ym91bmRz
KCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVjdC55KCkgKyBmbGlwcGVkRGlydHlSZWN0Lmhl
aWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoJmZsaXBw
ZWREaXJ0eVJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50
YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVz
VG9wRG93bikgeworICAgICAgICAgICAgRmxvYXRSZWN0IGZsaXBwZWREaXJ0eVJlY3QgPSBkaXJ0
eVJlY3Q7CisgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0LnNldFkob3duZXIoKS0+Ym91bmRz
KCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVjdC55KCkgKyBmbGlwcGVkRGlydHlSZWN0Lmhl
aWdodCgpKSk7CisgICAgICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmZmxpcHBlZERp
cnR5UmVjdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBpbnRl
cm5hbFNldE5lZWRzRGlzcGxheSgmZGlydHlSZWN0KTsKICAgICB9CisKKyAgICBpbnRlcm5hbFNl
dE5lZWRzRGlzcGxheSgmZGlydHlSZWN0KTsKKwogICAgIG93bmVyKCktPnNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKQEAgLTI0NywxMSArMjAyLDYgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6c2V0U3VibAogICAgICAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihvd25lcigpLT5w
bGF0Zm9ybUxheWVyKCksIGxpc3RbaV0tPnBsYXRmb3JtTGF5ZXIoKSwgaSk7CiAKICAgICBvd25l
cigpLT5zZXROZWVkc0NvbW1pdCgpOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25l
ci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0aWxlIHBhcmVudCBh
ZnRlciBzZXQKLSAgICAgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIob3duZXIoKS0+cGxhdGZv
cm1MYXllcigpLCBtX3RpbGVQYXJlbnQuZ2V0KCksIDApOwotICAgIH0KIH0KIAogdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Z2V0U3VibGF5ZXJzKFBsYXRmb3JtQ0FMYXllckxpc3Qm
IGxpc3QpIGNvbnN0CkBAIC0yNjQsMzUgKzIxNCwyMCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpnZXRTdWJsCiAKICAgICBzaXplX3QgY291bnQgPSBDRkFycmF5R2V0Q291bnQo
c3VibGF5ZXJzKTsKIAotICAgIHNpemVfdCBsYXllcnNUb1NraXAgPSAwOwotICAgIGlmIChsYXll
clR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewotICAgICAgICAvLyBFeGNsdWRl
IHRoZSB0aWxlIHBhcmVudCBsYXllci4KLSAgICAgICAgbGF5ZXJzVG9Ta2lwID0gMTsKLSAgICB9
Ci0KLSAgICBsaXN0LnJlc2l6ZShjb3VudCAtIGxheWVyc1RvU2tpcCk7Ci0gICAgZm9yIChzaXpl
X3QgYXJyYXlJbmRleCA9IGxheWVyc1RvU2tpcDsgYXJyYXlJbmRleCA8IGNvdW50OyArK2FycmF5
SW5kZXgpCi0gICAgICAgIGxpc3RbYXJyYXlJbmRleCAtIGxheWVyc1RvU2tpcF0gPSBQbGF0Zm9y
bUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFs
dWVBdEluZGV4KHN1YmxheWVycywgYXJyYXlJbmRleCkpKTsKKyAgICBsaXN0LnJlc2l6ZShjb3Vu
dCk7CisgICAgZm9yIChzaXplX3QgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBjb3VudDsg
KythcnJheUluZGV4KQorICAgICAgICBsaXN0W2FycmF5SW5kZXhdID0gUGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXIoY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChzdWJsYXllcnMsIGFycmF5SW5kZXgpKSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnJlbW92ZUFsbFN1YmxheWVycygpCiB7Ci0gICAgQ0FDRkxheWVyU2V0U3VibGF5
ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgMCk7CisgICAgQ0FDRkxheWVyU2V0U3VibGF5
ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbnVsbHB0cik7CiAgICAgb3duZXIoKS0+c2V0
TmVlZHNDb21taXQoKTsKLQotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVy
VHlwZSgpKSkgewotICAgICAgICAvLyBSZXN0b3JlIHRoZSB0aWxlIHBhcmVudCBhZnRlciByZW1v
dmFsCi0gICAgICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKG93bmVyKCktPnBsYXRmb3JtTGF5
ZXIoKSwgbV90aWxlUGFyZW50LmdldCgpLCAwKTsKLSAgICB9CiB9CiAKIHZvaWQgUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6Omluc2VydFN1YmxheWVyKFBsYXRmb3JtQ0FMYXllciYgbGF5ZXIs
IHNpemVfdCBpbmRleCkKIHsKICAgICBpbmRleCA9IG1pbihpbmRleCwgc3VibGF5ZXJDb3VudCgp
KTsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAg
ICAgICAgLy8gQWRkIDEgdG8gYWNjb3VudCBmb3IgdGhlIHRpbGUgcGFyZW50IGxheWVyCi0gICAg
ICAgICsraW5kZXg7Ci0gICAgfQogCiAgICAgbGF5ZXIucmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsK
ICAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGxh
eWVyLnBsYXRmb3JtTGF5ZXIoKSwgaW5kZXgpOwpAQCAtMzAyLDE1ICsyMzcsNyBAQCB2b2lkIFBs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnNlcnRTCiBzaXplX3QgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OnN1YmxheWVyQ291bnQoKSBjb25zdAogewogICAgIENGQXJyYXlSZWYgc3Vi
bGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7
Ci0gICAgc2l6ZV90IGNvdW50ID0gc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVy
cykgOiAwOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkp
KSB7Ci0gICAgICAgIC8vIFN1YnRyYWN0IDEgdG8gYWNjb3VudCBmb3IgdGhlIHRpbGUgcGFyZW50
IGxheWVyCi0gICAgICAgIEFTU0VSVChjb3VudCA+IDApOwotICAgICAgICBjb3VudC0tOwotICAg
IH0KLQotICAgIHJldHVybiBjb3VudDsKKyAgICByZXR1cm4gc3VibGF5ZXJzID8gQ0ZBcnJheUdl
dENvdW50KHN1YmxheWVycykgOiAwOwogfQogCiBpbnQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWw6OmluZGV4T2ZTdWJsYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSkKQEAg
LTMyNSwxNiArMjUyLDkgQEAgaW50IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbmRleE9m
UwogCiAgICAgc2l6ZV90IG4gPSBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKTsKIAotICAgIGlm
IChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKENGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpKSA9PSByZWYpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGkgLSAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHN1YmxheWVycywgaSkgPT0gcmVmKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAg
ICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgaWYgKENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpKSA9PSByZWYpCisgICAgICAgICAgICBy
ZXR1cm4gaTsKICAgICB9CiAKICAgICByZXR1cm4gLTE7CkBAIC0zNDIsMTQgKzI2Miw5IEBAIGlu
dCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW5kZXhPZlMKIAogUGxhdGZvcm1DQUxheWVy
KiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c3VibGF5ZXJBdEluZGV4KGludCBpbmRleCkg
Y29uc3QKIHsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkp
IHsKLSAgICAgICAgLy8gQWRkIDEgdG8gYWNjb3VudCBmb3IgdGhlIHRpbGUgcGFyZW50IGxheWVy
Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotCiAgICAgQ0ZBcnJheVJlZiBzdWJsYXllcnMgPSBD
QUNGTGF5ZXJHZXRTdWJsYXllcnMob3duZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKICAgICBpZiAo
IXN1YmxheWVycyB8fCBpbmRleCA8IDAgfHwgQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgPD0g
aW5kZXgpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
ICAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoc3RhdGljX2Nhc3Q8
Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1
YmxheWVycywgaW5kZXgpKSkpOwogfQpAQCAtMzYxLDExICsyNzYsNiBAQCB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpzZXRCb3VuCiAKICAgICBDQUNGTGF5ZXJTZXRCb3VuZHMob3du
ZXIoKS0+cGxhdGZvcm1MYXllcigpLCByZWN0KTsKICAgICBvd25lcigpLT5zZXROZWVkc0NvbW1p
dCgpOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7
Ci0gICAgICAgIG1fY29uc3RyYWluZWRTaXplID0gY29uc3RyYWluZWRTaXplKHJlY3Quc2l6ZSgp
KTsKLSAgICAgICAgdXBkYXRlVGlsZXMoKTsKLSAgICB9CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTM3Niwx
NjYgKzI4Niw0OCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRGcmFtCiAK
ICAgICBDQUNGTGF5ZXJTZXRGcmFtZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHJlY3QpOwog
ICAgIG93bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7Ci0KLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxl
ZChtX293bmVyLT5sYXllclR5cGUoKSkpCi0gICAgICAgIHVwZGF0ZVRpbGVzKCk7CiB9CiAKLUNH
U2l6ZSBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Y29uc3RyYWluZWRTaXplKGNvbnN0IENH
U2l6ZSYgc2l6ZSkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmlzT3Bh
cXVlKCkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgY01heFRpbGVDb3VudCA9IDUxMjsKLSAgICBj
b25zdCBmbG9hdCBjU3FydE1heFRpbGVDb3VudCA9IHNxcnRmKGNNYXhUaWxlQ291bnQpOwotCi0g
ICAgQ0dTaXplIGNvbnN0cmFpbmVkU2l6ZSA9IHNpemU7Ci0KLSAgICBpbnQgdGlsZUNvbHVtbnMg
PSBjZWlsZihjb25zdHJhaW5lZFNpemUud2lkdGggLyBtX3RpbGVTaXplLndpZHRoKTsKLSAgICBp
bnQgdGlsZVJvd3MgPSBjZWlsZihjb25zdHJhaW5lZFNpemUuaGVpZ2h0IC8gbV90aWxlU2l6ZS5o
ZWlnaHQpOwotCi0gICAgYm9vbCB0b29NYW55VGlsZXMgPSB0aWxlQ29sdW1ucyAmJiBudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSAvIHRpbGVDb2x1bW5zIDwgdGlsZVJvd3MgfHwgdGlsZUNvbHVt
bnMgKiB0aWxlUm93cyA+IGNNYXhUaWxlQ291bnQ7Ci0KLSAgICAvLyBJZiBudW1iZXIgb2YgdGls
ZXMgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgaXMgPCBzcXJ0KGNNYXhUaWxlQ291bnQpCi0g
ICAgLy8ganVzdCBzaG9ydGVuIHRoZSBsb25nZXIgZGltZW5zaW9uLiBPdGhlcndpc2Ugc2hvcnRl
biBib3RoIGRpbWVuc2lvbnMKLSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHJhdGlvIG9mIHdpZHRo
IHRvIGhlaWdodAotCi0gICAgaWYgKHRvb01hbnlUaWxlcykgewotICAgICAgICBpZiAodGlsZVJv
d3MgPCBjU3FydE1heFRpbGVDb3VudCkKLSAgICAgICAgICAgIHRpbGVDb2x1bW5zID0gZmxvb3Jm
KGNNYXhUaWxlQ291bnQgLyB0aWxlUm93cyk7Ci0gICAgICAgIGVsc2UgaWYgKHRpbGVDb2x1bW5z
IDwgY1NxcnRNYXhUaWxlQ291bnQpCi0gICAgICAgICAgICB0aWxlUm93cyA9IGZsb29yZihjTWF4
VGlsZUNvdW50IC8gdGlsZUNvbHVtbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRp
bGVSb3dzID0gY2VpbGYoc3FydGYoY01heFRpbGVDb3VudCAqIGNvbnN0cmFpbmVkU2l6ZS5oZWln
aHQgLyBjb25zdHJhaW5lZFNpemUud2lkdGgpKTsKLSAgICAgICAgICAgIHRpbGVDb2x1bW5zID0g
Zmxvb3JmKGNNYXhUaWxlQ291bnQgLyB0aWxlUm93cyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0cmFpbmVkU2l6ZS53aWR0aCA9IHRpbGVDb2x1bW5zICogbV90aWxlU2l6ZS53
aWR0aDsKLSAgICAgICAgY29uc3RyYWluZWRTaXplLmhlaWdodCA9IHRpbGVSb3dzICogbV90aWxl
U2l6ZS5oZWlnaHQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb25zdHJhaW5lZFNpemU7Cisg
ICAgcmV0dXJuIENBQ0ZMYXllcklzT3BhcXVlKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVEaXNwbGF5Q2FsbGJhY2so
Q0FDRkxheWVyUmVmIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWw6OnNldE9wYXF1ZShib29sIHZhbHVlKQogewotICAgIHN0YXRpY19j
YXN0PFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKj4oQ0FDRkxheWVyR2V0VXNlckRhdGEobGF5
ZXIpKS0+ZHJhd1RpbGUobGF5ZXIsIGNvbnRleHQpOworICAgIENBQ0ZMYXllclNldE9wYXF1ZShv
d25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHZhbHVlKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSgpCitmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6Y29udGVudHNTY2FsZSgpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENBQ0ZMYXllclJlZj4g
bmV3TGF5ZXIgPSBhZG9wdENGKENBQ0ZMYXllckNyZWF0ZShrQ0FDRkxheWVyKSk7Ci0gICAgQ0FD
RkxheWVyU2V0QW5jaG9yUG9pbnQobmV3TGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKDAsIDEpKTsK
LSAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShuZXdMYXllci5nZXQoKSwgdGhpcyk7Ci0gICAgQ0FD
RkxheWVyU2V0RGlzcGxheUNhbGxiYWNrKG5ld0xheWVyLmdldCgpLCB0aWxlRGlzcGxheUNhbGxi
YWNrKTsKICNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxFKQotICAgIENBQ0ZMYXll
clNldENvbnRlbnRzU2NhbGUobmV3TGF5ZXIuZ2V0KCksIENBQ0ZMYXllckdldENvbnRlbnRzU2Nh
bGUobV90aWxlUGFyZW50LmdldCgpKSk7CisgICAgcmV0dXJuIENBQ0ZMYXllckdldENvbnRlbnRz
U2NhbGUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyNlbHNlCisgICAgcmV0dXJuIDEuMGY7
CiAjZW5kaWYKLQotICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5
ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0gICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIobV90
aWxlUGFyZW50LmdldCgpLCBuZXdMYXllci5nZXQoKSwgc3VibGF5ZXJzID8gQ0ZBcnJheUdldENv
dW50KHN1YmxheWVycykgOiAwKTsKLQotICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9y
bUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkpIHsKLSAgICAgICAgQ0dDb2xvclJlZiBib3JkZXJD
b2xvciA9IENHQ29sb3JDcmVhdGVHZW5lcmljUkdCKDAuNSwgMCwgMC41LCAwLjcpOwotICAgICAg
ICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihuZXdMYXllci5nZXQoKSwgYm9yZGVyQ29sb3IpOwot
ICAgICAgICBDR0NvbG9yUmVsZWFzZShib3JkZXJDb2xvcik7Ci0gICAgICAgIENBQ0ZMYXllclNl
dEJvcmRlcldpZHRoKG5ld0xheWVyLmdldCgpLCAyKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZVRpbGUoKQotewotICAgIENBQ0ZMYXllclJlbW92
ZUZyb21TdXBlcmxheWVyKHRpbGVBdEluZGV4KHRpbGVDb3VudCgpIC0gMSkpOwotfQotCi1DQUNG
TGF5ZXJSZWYgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVBdEluZGV4KGludCBpbmRl
eCkKLXsKLSAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENBQ0ZMYXllckdldFN1YmxheWVycyht
X3RpbGVQYXJlbnQuZ2V0KCkpOwotICAgIGlmICghc3VibGF5ZXJzIHx8IGluZGV4IDwgMCB8fCBp
bmRleCA+PSB0aWxlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChzdWJsYXllcnMsIGluZGV4KSkpOwogfQogCi1pbnQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OnRpbGVDb3VudCgpIGNvbnN0Cit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlRmFjdG9yKQogewotICAgIENGQXJy
YXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG1fdGlsZVBhcmVudC5nZXQo
KSk7Ci0gICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlHZXRDb3VudChzdWJsYXllcnMpIDog
MDsKKyNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxFKQorICAgIENBQ0ZMYXllclNl
dENvbnRlbnRzU2NhbGUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBzY2FsZUZhY3Rvcik7Cisj
ZW5kaWYKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dXBkYXRlVGlsZXMo
KQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyV2lkdGgoZmxvYXQg
dmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IEluIGFkZGl0aW9uIHRvIHJlZG9pbmcgdGhlIG51bWJl
ciBvZiB0aWxlcywgd2UgbmVlZCB0byBvbmx5IHJlbmRlciBhbmQgaGF2ZSBiYWNraW5nCi0gICAg
Ly8gc3RvcmUgZm9yIHZpc2libGUgbGF5ZXJzCi0gICAgaW50IG51bVRpbGVzSG9yaXpvbnRhbCA9
IGNlaWwobV9jb25zdHJhaW5lZFNpemUud2lkdGggLyBtX3RpbGVTaXplLndpZHRoKTsKLSAgICBp
bnQgbnVtVGlsZXNWZXJ0aWNhbCA9IGNlaWwobV9jb25zdHJhaW5lZFNpemUuaGVpZ2h0IC8gbV90
aWxlU2l6ZS5oZWlnaHQpOwotICAgIGludCBudW1UaWxlc1RvdGFsID0gbnVtVGlsZXNIb3Jpem9u
dGFsICogbnVtVGlsZXNWZXJ0aWNhbDsKLSAgICBBU1NFUlQoIW1fY29uc3RyYWluZWRTaXplLmhl
aWdodCB8fCAhbV9jb25zdHJhaW5lZFNpemUud2lkdGggfHwgbnVtVGlsZXNUb3RhbCA+IDApOwot
Ci0gICAgaW50IG51bVRpbGVzVG9DaGFuZ2UgPSBudW1UaWxlc1RvdGFsIC0gdGlsZUNvdW50KCk7
Ci0gICAgaWYgKG51bVRpbGVzVG9DaGFuZ2UgPj0gMCkgewotICAgICAgICAvLyBBZGQgbmV3IHRp
bGVzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXNUb0NoYW5nZTsgKytpKQot
ICAgICAgICAgICAgYWRkVGlsZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFJlbW92ZSBv
bGQgdGlsZXMKLSAgICAgICAgbnVtVGlsZXNUb0NoYW5nZSA9IC1udW1UaWxlc1RvQ2hhbmdlOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVzVG9DaGFuZ2U7ICsraSkKLSAgICAg
ICAgICAgIHJlbW92ZVRpbGUoKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgY29vcmRpbmF0ZXMgZm9y
IGFsbCB0aWxlcwotICAgIENGQXJyYXlSZWYgdGlsZUFycmF5ID0gQ0FDRkxheWVyR2V0U3VibGF5
ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRp
bGVzSG9yaXpvbnRhbDsgKytpKSB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtVGls
ZXNWZXJ0aWNhbDsgKytqKSB7Ci0gICAgICAgICAgICBDQUNGTGF5ZXJSZWYgdGlsZSA9IHN0YXRp
Y19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleCh0aWxlQXJyYXksIGkgKiBudW1UaWxlc1ZlcnRpY2FsICsgaikpKTsKLSAgICAgICAgICAg
IENBQ0ZMYXllclNldFBvc2l0aW9uKHRpbGUsIENHUG9pbnRNYWtlKGkgKiBtX3RpbGVTaXplLndp
ZHRoLCBqICogbV90aWxlU2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1p
bihtX3RpbGVTaXplLndpZHRoLCBtX2NvbnN0cmFpbmVkU2l6ZS53aWR0aCAtIGkgKiBtX3RpbGVT
aXplLndpZHRoKTsKLSAgICAgICAgICAgIGludCBoZWlnaHQgPSBtaW4obV90aWxlU2l6ZS5oZWln
aHQsIG1fY29uc3RyYWluZWRTaXplLmhlaWdodCAtIGogKiBtX3RpbGVTaXplLmhlaWdodCk7Ci0g
ICAgICAgICAgICBDQUNGTGF5ZXJTZXRCb3VuZHModGlsZSwgQ0dSZWN0TWFrZShpICogbV90aWxl
U2l6ZS53aWR0aCwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KSk7Ci0KLSAg
ICAgICAgICAgIC8vIEZsaXAgWSB0byBjb21wZW5zYXRlIGZvciB0aGUgZmxpcHBpbmcgdGhhdCBo
YXBwZW5zIGR1cmluZyByZW5kZXIgdG8gbWF0Y2ggdGhlIENHIGNvbnRleHQgY29vcmRpbmF0ZSBz
cGFjZQotICAgICAgICAgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNE
TWFrZVNjYWxlKDEsIC0xLCAxKTsKLSAgICAgICAgICAgIENBVHJhbnNmb3JtM0RUcmFuc2xhdGUo
dHJhbnNmb3JtLCAwLCBoZWlnaHQsIDApOwotICAgICAgICAgICAgQ0FDRkxheWVyU2V0VHJhbnNm
b3JtKHRpbGUsIHRyYW5zZm9ybSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBTdHJp
bmcgbmFtZSA9ICJUaWxlICgiICsgU3RyaW5nOjpudW1iZXIoaSkgKyAiLCIgKyBTdHJpbmc6Om51
bWJlcihqKSArICIpIjsKLSAgICAgICAgICAgIENBQ0ZMYXllclNldE5hbWUodGlsZSwgbmFtZS5j
cmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQorICAgIENB
Q0ZMYXllclNldEJvcmRlcldpZHRoKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgdmFsdWUpOwog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3VGlsZShDQUNGTGF5ZXJS
ZWYgdGlsZSwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCiB7Ci0gICAgQ0dQb2lu
dCB0aWxlUG9zaXRpb24gPSBDQUNGTGF5ZXJHZXRQb3NpdGlvbih0aWxlKTsKLSAgICBDR1JlY3Qg
dGlsZUJvdW5kcyA9IENBQ0ZMYXllckdldEJvdW5kcyh0aWxlKTsKKyAgICBDR0Zsb2F0IGNvbXBv
bmVudHNbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVm
PiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CiAK
LSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgLy8gU2V0IHRoZSBjb250
ZXh0IGNsaXBwaW5nIHJlY3RhbmdsZSB0byB0aGUgY3VycmVudCB0aWxlCi0gICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RNYWtlKHRpbGVQb3NpdGlvbi54LCB0aWxlUG9zaXRp
b24ueSwgdGlsZUJvdW5kcy5zaXplLndpZHRoLCB0aWxlQm91bmRzLnNpemUuaGVpZ2h0KSk7Ci0K
LSAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNU
b3BEb3duKSB7Ci0gICAgICAgIC8vIElmIHRoZSBsYXllciBpcyByZW5kZXJpbmcgdG9wLWRvd24s
IGl0IHdpbGwgZmxpcCB0aGUgY29vcmRpbmF0ZXMgaW4geS4gVGlsZWQgbGF5ZXJzIGFyZQotICAg
ICAgICAvLyBhbHJlYWR5IGZsaXBwaW5nLCBzbyB3ZSBuZWVkIHRvIHVuZG8gdGhhdCBoZXJlLgot
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgb3duZXIoKS0+Ym91bmRz
KCkuaGVpZ2h0KCkpOwotICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7
Ci0gICAgfQorICAgIGlmICh2YWx1ZS5pc1ZhbGlkKCkpCisgICAgICAgIHZhbHVlLmdldFJHQkEo
Y29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1sz
XSk7CiAKLSAgICAvLyBEcmF3IHRoZSB0aWxlCi0gICAgZGlzcGxheUNhbGxiYWNrKG93bmVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSwgY29udGV4dCk7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNv
bG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UuZ2V0KCksIGNvbXBvbmVudHMp
KTsKIAotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci19Ci0KLVRpbGVDb250
cm9sbGVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Y3JlYXRlVGlsZUNvbnRyb2xsZXIo
UGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIpCi17Ci0gICAgQVNTRVJUKCFtX3RpbGVDb250cm9s
bGVyKTsKLSAgICBtX3RpbGVDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaWxlQ29udHJv
bGxlcj4ocm9vdExheWVyKTsKLSAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5nZXQoKTsKLX0K
LQotVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZWRCYWNraW5n
KCkKLXsKLSAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5nZXQoKTsKKyAgICBDQUNGTGF5ZXJT
ZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGNvbG9yLmdldCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oCShyZXZpc2lvbiAx
ODk2MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICszNSw3IEBA
IHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCAqQ0dDb250ZXh0UmVmOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgUGxhdGZvcm1D
QUxheWVyOwogY2xhc3MgVGlsZUNvbnRyb2xsZXI7CkBAIC00Nyw5ICs0OCw5IEBAIHB1YmxpYzoK
ICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbChQbGF0Zm9ybUNBTGF5ZXIqKTsKICAgICB+
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKTsKIAotICAgIHZvaWQgZGlzcGxheUNhbGxiYWNr
KENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAg
IHZpcnR1YWwgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIFBsYXRmb3JtQ0FM
YXllciogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CiAKICAgICB2b2lkIHNldFN1
YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0Jik7CkBAIC01OSwzMiArNjAsMjggQEAg
cHVibGljOgogICAgIHNpemVfdCBzdWJsYXllckNvdW50KCkgY29uc3Q7CiAgICAgaW50IGluZGV4
T2ZTdWJsYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSk7CiAKLSAgICB2b2lk
IHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlKGJvb2wpOworCisgICAgdmlydHVh
bCB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHNldEZyYW1lKGNv
bnN0IEZsb2F0UmVjdCYpOwogCi0gICAgVGlsZUNvbnRyb2xsZXIqIGNyZWF0ZVRpbGVDb250cm9s
bGVyKFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKTsKLSAgICBUaWxlZEJhY2tpbmcqIHRpbGVk
QmFja2luZygpOworICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9yZGVyQ29s
b3IoY29uc3QgQ29sb3ImKTsKKworICAgIHN0YXRpYyB2b2lkIGZsaXBDb250ZXh0KENHQ29udGV4
dFJlZiwgQ0dGbG9hdCBoZWlnaHQpOworICAgICAgICAKKyAgICB2b2lkIGRyYXdSZXBhaW50Q291
bnRlcnMoQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYsIENHUmVjdCBsYXllckJvdW5kcywgaW50
IGRyYXdDb3VudCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbnRlcm5hbFNldE5lZWRzRGlzcGxh
eShjb25zdCBGbG9hdFJlY3QqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHN1YmxheWVyQXRJbmRl
eChpbnQpIGNvbnN0OwogCi0gICAgc3RhdGljIHZvaWQgdGlsZURpc3BsYXlDYWxsYmFjayhDQUNG
TGF5ZXJSZWYsIENHQ29udGV4dFJlZik7Ci0KLSAgICB2b2lkIGRyYXdUaWxlKENBQ0ZMYXllclJl
ZiwgQ0dDb250ZXh0UmVmKTsKLSAgICBDR1NpemUgY29uc3RyYWluZWRTaXplKGNvbnN0IENHU2l6
ZSYpIGNvbnN0OwotICAgIHZvaWQgYWRkVGlsZSgpOwotICAgIHZvaWQgcmVtb3ZlVGlsZSgpOwot
ICAgIENBQ0ZMYXllclJlZiB0aWxlQXRJbmRleChpbnQpOwotICAgIGludCB0aWxlQ291bnQoKSBj
b25zdDsKLSAgICB2b2lkIHVwZGF0ZVRpbGVzKCk7Ci0KICAgICBQbGF0Zm9ybUNBTGF5ZXIqIG1f
b3duZXI7Ci0KLSAgICBDR1NpemUgbV90aWxlU2l6ZTsKLSAgICBDR1NpemUgbV9jb25zdHJhaW5l
ZFNpemU7Ci0gICAgUmV0YWluUHRyPENBQ0ZMYXllclJlZj4gbV90aWxlUGFyZW50OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUaWxlQ29udHJvbGxlcj4gbV90aWxlQ29udHJvbGxlcjsKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tp
bmdMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYlRpbGVkQmFja2luZ0xheWVyV2luLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbmNsdWRlICJU
aWxlQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1ZGUgPFF1
YXJ0ekNvcmUvQ0FDRkxheWVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbjo6V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4oUGxhdGZvcm1DQUxheWVyKiBv
d25lcikKKyAgICA6IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKG93bmVyKQoreworfQorCitX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6fldlYlRpbGVkQmFja2luZ0xheWVyV2luKCkKK3sKK30K
Kworc3RydWN0IERpc3BsYXlPbk1haW5UaHJlYWRDb250ZXh0IHsKKyAgICBSZXRhaW5QdHI8Q0FD
RkxheWVyUmVmPiBsYXllcjsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0Owor
CisgICAgRGlzcGxheU9uTWFpblRocmVhZENvbnRleHQoQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENH
Q29udGV4dFJlZiBjYUNvbnRleHQpCisgICAgICAgIDogbGF5ZXIoY2FMYXllcikKKyAgICAgICAg
LCBjb250ZXh0KGNhQ29udGV4dCkKKyAgICB7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgcmVk
aXNwYXRjaE9uTWFpblF1ZXVlKHZvaWQqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheU9uTWFpblRocmVhZENvbnRleHQ+
IHJldGFpbmVkQ29udGV4dChyZWludGVycHJldF9jYXN0PERpc3BsYXlPbk1haW5UaHJlYWRDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIGlmICghcmV0YWluZWRDb250ZXh0KQorICAgICAgICByZXR1
cm47CisKKyAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCogc2VsZiA9IHN0YXRpY19jYXN0
PFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKj4oQ0FDRkxheWVyR2V0VXNlckRhdGEocmV0YWlu
ZWRDb250ZXh0LT5sYXllci5nZXQoKSkpOworCisgICAgc2VsZi0+ZGlzcGxheUNhbGxiYWNrKHJl
dGFpbmVkQ29udGV4dC0+bGF5ZXIuZ2V0KCksIHJldGFpbmVkQ29udGV4dC0+Y29udGV4dC5nZXQo
KSk7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmRpc3BsYXlDYWxsYmFjayhD
QUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgaWYgKCFp
c01haW5UaHJlYWQoKSkgeworICAgICAgICBkaXNwYXRjaF9hc3luY19mKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIG5ldyBEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dChjYUxheWVyLCBjb250
ZXh0KSwgcmVkaXNwYXRjaE9uTWFpblF1ZXVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIW93bmVyKCkgfHwgIW93bmVyKCktPm93bmVyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBDR1JlY3QgbGF5
ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUgPSBvd25lcigpLT5sYXllclR5cGUoKTsKKyAgICBBU1NFUlQobGF5ZXJU
eXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIpOworCisg
ICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQgPSBvd25lcigpLT5vd25lcigpOworICAg
IEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiA9IGNsaWVudC0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpOworCisg
ICAgZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOworCisgICAg
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKworICAgIC8vIEl0J3Mg
aW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1h
eSBiZSBzaWduaWZpY2FudGx5CisgICAgLy8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMg
KGUuZy4gdGlsZWQgbGF5ZXJzKQorICAgIENHUmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgIEludFJlY3QgY2xpcChlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBCb3VuZHMpKTsKKyAgICBjbGllbnQtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVu
dHMob3duZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKKworICAgIGlmIChjbGllbnQtPnBs
YXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihvd25lcigpKSkgeworICAgICAgICBpbnQg
ZHJhd0NvdW50ID0gY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQo
b3duZXIoKSk7CisgICAgICAgIGRyYXdSZXBhaW50Q291bnRlcnMoY2FMYXllciwgY29udGV4dCwg
bGF5ZXJCb3VuZHMsIGRyYXdDb3VudCk7CisgICAgfQorCisgICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKKworICAgIGNsaWVudC0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNw
bGF5KG93bmVyKCkpOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXROZWVk
c0Rpc3BsYXkoKQoreworICAgIGlmIChtX3RpbGVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4g
bV90aWxlQ29udHJvbGxlci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW46OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1f
dGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChlbmNsb3NpbmdJbnRSZWN0KGRp
cnR5UmVjdCkpOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXRCb3VuZHMo
Y29uc3QgRmxvYXRSZWN0JiBib3VuZHMpCit7CisgICAgaWYgKENHUmVjdEVxdWFsVG9SZWN0KGJv
dW5kcywgb3duZXIoKS0+Ym91bmRzKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm91bmRzKGJvdW5kcyk7CisKKyAgICBpZiAobV90aWxl
Q29udHJvbGxlcikKKyAgICAgICAgbV90aWxlQ29udHJvbGxlci0+dGlsZUNhY2hlTGF5ZXJCb3Vu
ZHNDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmlzT3BhcXVl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlciA/IG1fdGlsZUNvbnRyb2xs
ZXItPnRpbGVzQXJlT3BhcXVlKCkgOiB0cnVlOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xh
eWVyV2luOjpzZXRPcGFxdWUoYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxl
cikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnNldFRpbGVzT3BhcXVlKHZhbHVl
KTsKK30KKworZmxvYXQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyID8gbV90aWxlQ29udHJvbGxlci0+
Y29udGVudHNTY2FsZSgpIDogMS4wZjsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldp
bjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZUZhY3RvcikKK3sKKyAgICBpZiAobV90aWxl
Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnNldENvbnRlbnRz
U2NhbGUoc2NhbGVGYWN0b3IpOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpz
ZXRCb3JkZXJXaWR0aChmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRo
KHZhbHVlIC8gMik7Cit9CisKK3ZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRl
ckNvbG9yKGNvbnN0IENvbG9yJiB2YWx1ZSkKK3sKKyAgICBpZiAobV90aWxlQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KHZhbHVlKTsKK30KKworVGlsZUNvbnRyb2xsZXIqIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpj
cmVhdGVUaWxlQ29udHJvbGxlcihQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBB
U1NFUlQoIW1fdGlsZUNvbnRyb2xsZXIpOworICAgIG1fdGlsZUNvbnRyb2xsZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPFRpbGVDb250cm9sbGVyPihyb290TGF5ZXIpOworICAgIHJldHVybiBtX3RpbGVD
b250cm9sbGVyLmdldCgpOworfQorCitUaWxlZEJhY2tpbmcqIFdlYlRpbGVkQmFja2luZ0xheWVy
V2luOjp0aWxlZEJhY2tpbmcoKQoreworICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLmdldCgp
OworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjppbnZhbGlkYXRlKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RpbGVDb250cm9sbGVyKTsK
KyAgICBtX3RpbGVDb250cm9sbGVyID0gbnVsbHB0cjsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdlYlRpbGVkQmFja2luZ0xheWVyV2luX2gKKyNkZWZpbmUgV2Vi
VGlsZWRCYWNraW5nTGF5ZXJXaW5faAorCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJUaWxlZEJhY2tpbmdM
YXllcldpbiA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCB7CitwdWJsaWM6Cisg
ICAgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4oUGxhdGZvcm1DQUxheWVyKik7CisgICAgfldlYlRp
bGVkQmFja2luZ0xheWVyV2luKCk7CisKKyAgICB2b2lkIGRpc3BsYXlDYWxsYmFjayhDQUNGTGF5
ZXJSZWYsIENHQ29udGV4dFJlZikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldE9wYXF1ZShib29sKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Qm91bmRzKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KSBvdmVycmlkZTsKKworICAgIHZvaWQg
c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKworICAgIC8vIFdlYlRpbGVk
QmFja2luZ0xheWVyIEZlYXR1cmVzCisgICAgVGlsZUNvbnRyb2xsZXIqIGNyZWF0ZVRpbGVDb250
cm9sbGVyKFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKTsKKyAgICBUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZygpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCitwcml2YXRlOgorICAgIFJl
dGFpblB0cjxDQUNGTGF5ZXJSZWY+IG1fdGlsZVBhcmVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGlsZUNvbnRyb2xsZXI+IG1fdGlsZUNvbnRyb2xsZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261218</attachid>
            <date>2015-09-15 11:29:33 -0700</date>
            <delta_ts>2015-09-15 11:39:29 -0700</delta_ts>
            <desc>Patch v3 (revised for EWS and smfr&apos;s comments)</desc>
            <filename>bug-149144-20150915114519.patch</filename>
            <type>text/plain</type>
            <size>56822</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNS0wOS0xNCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBUaWxlZCBkcmF3
aW5nIGlzIHJlbmRlcmluZyBtb3JlIHRpbWVzIHRoYW4gaXQgc2hvdWxkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxNDQKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzIyMzEzOTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb3ZpZGUgYSBtb3JlIGZhaXRoZnVsIGltcGxlbWVuYXRpb24gb2YgdGhl
IE9iamVjdGl2ZSBDIHRpbGVkIGRyYXdpbmcgbG9naWMuCisgICAgICAgICgxKSBDcmVhdGUgYSBu
ZXcgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4gY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgdGhlCisg
ICAgICAgICAgICBjb250YWluZXIgb2YgdGlsZXMuIFRoaXMgbWF0Y2hlcyB0aGUgT2JqZWN0aXZl
IEMgZGVzaWduLgorICAgICAgICAoMikgTW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXZlcmFsIG1l
dGhvZHMgKGUuZy4sIGlzT3BhcXVlKSB0byB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgIGNsYXNz
IGltcGxlbWVudGF0aW9uIHNvIHRoYXQgdGhlIFRpbGUgRHJhd2luZyBsb2dpYyBjYW4gcGVyZm9y
bSBzcGVjaWFsCisgICAgICAgICAgICBoYW5kbGluZyBpbiB0aGVzZSBjYXNlcy4KKyAgICAgICAg
KDMpIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBUaWxlZCBEcmF3aW5nIGxvZ2ljIGZyb20gUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwsCisgICAgICAgICAgICBzaW5jZSBpdCB3YXMganVzdCBkdXBs
aWNhdGluZyBjb2RlIGluIFRpbGVDb250cm9sbGVyIGFuZCBUaWxlR3JpZC4KKyAgICAgICAgKDQp
IENsZWFuIHVwIHRoZSBkaXNwbGF5IGNhbGxiYWNrIGNvZGUgdG8gYXZvaWQgcGVyZm9ybWluZyBp
bmNvcnJlY3QgZmxpcHBpbmcKKyAgICAgICAgICAgIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4K
KworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6IEFkZCBuZXcgV2ViVGlsZWRCYWNr
aW5nTGF5ZXJXaW4gZmlsZS4gICAgICAgICAgICAKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qOiBBZGQgdGhlIG5ldyBXZWJUaWxlZEJhY2tpbmdMYXllcldpbiBmaWxl
cy4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IERp
dHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXI6OmZsaXBDb250ZXh0KTogQWRkZWQgY29udmVuaWVu
Y2UgbWV0aG9kLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXRv
cik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcDoK
KyAgICAgICAgKFRpbGVHcmlkOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKTogRmxpcCB0
aGUgY29udGV4dCBiZWZvcmUgZHJhd2luZyB0aGUgcmVwYWludAorICAgICAgICBpbmRpY2F0b3Ig
b24gV2luZG93cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6UGxhdGZvcm1DQUxh
eWVyV2luKTogQ3JlYXRlIGEgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4KKyAgICAgICAgb2JqZWN0
IGlmIHVzaW5nIHRpbGVkIGRyYXdpbmcuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46On5Q
bGF0Zm9ybUNBTGF5ZXJXaW4pOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjppc09wYXF1
ZSk6IE1vdmUgaW1wbGVtZW50YXRpb24gdG8gaW50ZXJuYWwgY2xhc3MuCisgICAgICAgIChQbGF0
Zm9ybUNBTGF5ZXJXaW46OnNldE9wYXF1ZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxh
eWVyV2luOjpzZXRCb3JkZXJXaWR0aCk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVy
V2luOjpzZXRCb3JkZXJDb2xvcik6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2lu
Ojpjb250ZW50c1NjYWxlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dENvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbjo6Y29y
bmVyUmFkaXVzKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnRpbGVkQmFj
a2luZyk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0UG9p
bnQpOiBOZXcgaGVscGVyIG1ldGhvZCB0byBkcmF3IHJlcGFpbnQgY291bnRlcgorICAgICAgICB0
ZXh0LiBOZWVkZWQgdG8gd29yayBhcm91bmQgYnVnIGluIENHLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHA6CisgICAgICAg
IChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwp
OiBSZW1vdmUgdGlsaW5nLWxvZ2ljCisgICAgICAgIHJlbGF0ZWQgbWVtYmVyIHZhcmlhYmxlcy4K
KyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp+UGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwpOgorICAgICAgICAoc2hvdWxkSW52ZXJ0QmVmb3JlRHJhd2luZ0NvbnRlbnQpOiBB
ZGRlZCBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgIChzaG91bGRJbnZlcnRCZWZvcmVEcmF3
aW5nUmVwYWludENvdW50ZXJzKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKTogSGVscGVyIG1ldGhvZCB0bworICAgICAgICBz
aGFyZSBjb2RlIGJldHdlZW4gdGhlIHR3byBsYXllciBjbGFzc2VzLgorICAgICAgICAoUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWw6OmludGVybmFsU2V0TmVlZHNEaXNwbGF5KTogdXNlIG51bGxw
dHIuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0TmVlZHNEaXNwbGF5
KTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KTogTW92ZSB0aWxlZCBjb2RlCisgICAgICAgIHRvIFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luIGFuZCBzaW1wbGlmeSB0aGUgcmVtYWluZyBjb2RlLgorICAgICAgICAoUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWw6OnNldFN1YmxheWVycyk6IFJlbW92ZSB0aWxlIGNvZGUuCisg
ICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Z2V0U3VibGF5ZXJzKTogRGl0dG8u
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6cmVtb3ZlQWxsU3VibGF5ZXJz
KTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW5zZXJ0U3Vi
bGF5ZXIpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzdWJs
YXllckNvdW50KTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
aW5kZXhPZlN1YmxheWVyKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbDo6c3VibGF5ZXJBdEluZGV4KTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbDo6c2V0Qm91bmRzKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbDo6c2V0RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjppc09wYXF1ZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldE9wYXF1ZSk6IERpdHRvLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OmNvbnRlbnRzU2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpzZXRDb250ZW50c1NjYWxlKTogRGl0dG8uCisgICAgICAgIChQbGF0Zm9y
bUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0Qm9yZGVyV2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFBs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3JkZXJDb2xvcik6IERpdHRvLgorICAgICAg
ICAobGF5ZXJUeXBlSXNUaWxlZCk6IERlbGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbDo6Y29uc3RyYWluZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjp0aWxlRGlzcGxheUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAg
ICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjphZGRUaWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpyZW1vdmVUaWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp0aWxlQXRJbmRleCk6IERlbGV0ZWQu
CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6dGlsZUNvdW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjp1cGRhdGVUaWxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZHJhd1RpbGUpOiBE
ZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmNyZWF0ZVRpbGVD
b250cm9sbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
Ojp0aWxlZEJhY2tpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Om93bmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpXZWJUaWxlZEJhY2tpbmdMYXllcldpbik6CisgICAg
ICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6fldlYlRpbGVkQmFja2luZ0xheWVyV2luKToK
KyAgICAgICAgKERpc3BsYXlPbk1haW5UaHJlYWRDb250ZXh0OjpEaXNwbGF5T25NYWluVGhyZWFk
Q29udGV4dCk6CisgICAgICAgIChyZWRpc3BhdGNoT25NYWluUXVldWUpOgorICAgICAgICAoV2Vi
VGlsZWRCYWNraW5nTGF5ZXJXaW46OmRpc3BsYXlDYWxsYmFjayk6CisgICAgICAgIChXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW46OnNldEJvdW5kcyk6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXll
cldpbjo6aXNPcGFxdWUpOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldE9w
YXF1ZSk6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6Y29udGVudHNTY2FsZSk6
CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZSk6Cisg
ICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0Qm9yZGVyV2lkdGgpOgorICAgICAg
ICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgKFdl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpjcmVhdGVUaWxlQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6dGlsZWRCYWNraW5nKToKKyAgICAgICAgKFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaDogQWRkZWQuCisKIDIwMTUtMDktMTUg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9zdCBJ
REIgb2JqZWN0IGVuY29kaW5nL2RlY29kaW5nIGZyb20gV2ViS2l0MiB0byBXZWJDb3JlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBRmlsdGVyc1dpbi5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNzQ4NCw2ICs3NDg0LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxGaWxlU3lzdGVtLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxDRE1TZXNzaW9uQVZGb3VuZGF0aW9uQ0Yu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZm
b3VuZGF0aW9uXGNmXFdlYkNvcmVBVkNGUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJv
fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSVNPVlRUQ3VlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGF1ZGlvXEF1ZGlvU2Vzc2lvbi5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxhdWRpb1xQbGF0Zm9y
bU1lZGlhU2Vzc2lvbi5jcHAiIC8+CkBAIC0yMDg0OSw2ICsyMDg1NSwxMiBAQAogICAgIDwvQ2xJ
bmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fc
d2luXFBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxQbGF0Zm9ybUNBTGF5ZXJXaW4uaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpblxXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5oIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2lu
Q2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbEluY2x1ZGU+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHTENvbnRleHQuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcY2dcU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIj4KQEAgLTIyODMyLDQgKzIy
ODQ0LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgICA8
SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0b21pemF0aW9uc1xtYXNt
LnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Cis8L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5m
aWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMzLDkgKzMwMzMsNiBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZG9tXENoaWxkTm9kZUxpc3QuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZG9t
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
b21cQ2xhc3NOb2RlTGlzdC5jcHAiPgotICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxDbGllbnRSZWN0LmNw
cCI+CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzIz
NCw5ICszMjMxLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRvbVxOb2RlLmNwcCI+
CiAgICAgICA8RmlsdGVyPmRvbTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZG9tXE5vZGVGaWx0ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZG9t
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
b21cTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAiPgogICAgICAgPEZpbHRlcj5kb208L0ZpbHRlcj4K
ICAgICA8L0NsQ29tcGlsZT4KQEAgLTcyNjMsNiArNzI1NywxMiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGFnZVxET01TZWN1cml0eVBvbGljeS5jcHAiPgogICAgICAgPEZpbHRlcj5w
YWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxuZXR3b3JrXERhdGFVUkxEZWNvZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRvbVxDbGFzc0NvbGxlY3Rpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caHRtbFxHZW5lcmljQ2FjaGVkSFRNTENvbGxlY3Rpb24uY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2Fcd2luXFdlYlRpbGVk
QmFja2luZ0xheWVyV2luLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNh
XHdpbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1H
cm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cQ29v
cmRpbmF0ZXMuaCI+CkBAIC0xMDA5Nyw5ICsxMDA5Nyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkb21cQ2hpbGROb2RlTGlzdC5oIj4KICAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xhc3NO
b2RlTGlzdC5oIj4KLSAgICAgIDxGaWx0ZXI+ZG9tPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkb21cQ2xpZW50UmVjdC5oIj4KICAgICAgIDxG
aWx0ZXI+ZG9tPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0xNTI0OSw2ICsxNTI0Niwx
MiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxET01TZWN1cml0eVBvbGljeS5o
Ij4KICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cRm9yd2FyZGluZ0hlYWRlcnNcaW5zcGVjdG9yXEluc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXERhdGFVUkxEZWNvZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llxkb21cQ2xhc3NDb2xsZWN0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xjYVx3aW5cV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCI+CisgICAg
ICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhXHdpbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNs
dWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Tm9uZSBJbmNsdWRlPSIu
Llxjc3NcQ1NTR3JhbW1hci55LmluIj4KQEAgLTE1NDUzLDQgKzE1NDU2LDQgQEAKICAgICAgIDxG
aWx0ZXI+cGxhdGZvcm1cd2luPC9GaWx0ZXI+CiAgICAgPC9NQVNNPgogICA8L0l0ZW1Hcm91cD4K
LTwvUHJvamVjdD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRm
b3JtQ0FMYXllci5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDkgKzYyLDExIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAg
ICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlZCIsIHJlcGFpbnRDb3VudCk7CiAgICAg
CiAgICAgQ0dSZWN0IGluZGljYXRvckJveCA9IHBsYXRmb3JtQ0FMYXllci0+Ym91bmRzKCk7CisK
KyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCiAgICAgaW5kaWNhdG9yQm94LnNp
emUud2lkdGggPSAxMiArIDEwICogc3RybGVuKHRleHQpOwogICAgIGluZGljYXRvckJveC5zaXpl
LmhlaWdodCA9IDI3OwotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgCiAg
ICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41Zik7CiAgICAgQ0dDb250ZXh0QmVnaW5U
cmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7CkBAIC04
MSwxNSArODMsMjcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdAog
ICAgIGVsc2UKICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEs
IDEsIDEpOwogICAgIAorICAgIHBsYXRmb3JtQ0FMYXllci0+ZHJhd1RleHRBdFBvaW50KGNvbnRl
eHQsIGluZGljYXRvckJveC5vcmlnaW4ueCArIDUsIGluZGljYXRvckJveC5vcmlnaW4ueSArIDIy
LCB0ZXh0LCBzdHJsZW4odGV4dCkpOworICAgIAorICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5j
eUxheWVyKGNvbnRleHQpOworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpmbGlwQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4
dCwgQ0dGbG9hdCBoZWlnaHQpCit7CisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwg
LTEpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKK30K
KworLy8gVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2lu
ZG93cyBDRyA8cmRhcjovL3Byb2JsZW0vMjI3MDM0NzA+Cit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6
ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENHRmxvYXQg
eSwgY29uc3QgY2hhciogdGV4dCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKICNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdk
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRl
eHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CiAgICAgQ0dDb250ZXh0U2Vs
ZWN0Rm9udChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOwot
ICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2lu
LnggKyA1LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsK
KyAgICBDR0NvbnRleHRTaG93VGV4dEF0UG9pbnQoY29udGV4dCwgeCwgeSwgdGV4dCwgbGVuZ3Ro
KTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICAKLSAgICBDR0NvbnRleHRFbmRU
cmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNv
bnRleHQpOwogfQogCiBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVy
OjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50LCBJbnRTaXpl
IHNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9y
bUNBTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyNiw2ICsyMjYsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dEF0UG9pbnQo
Q0dDb250ZXh0UmVmLCBDR0Zsb2F0IHgsIENHRmxvYXQgeSwgY29uc3QgY2hhciogdGV4dCwgc2l6
ZV90IGxlbmd0aCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBmbGlwQ29udGV4dChDR0NvbnRl
eHRSZWYsIENHRmxvYXQgaGVpZ2h0KTsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFs
IFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0xheW91dCgpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVHcmlkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9UaWxlR3JpZC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjczLDggKzY3MywxMyBAQCB2b2lkIFRpbGVHcmlkOjpwbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlCiAgICAgfQogCiAgICAgaW50IHJlcGFpbnRDb3VudCA9IHBsYXRmb3JtQ0FMYXllcklu
Y3JlbWVudFJlcGFpbnRDb3VudChwbGF0Zm9ybUNBTGF5ZXIpOwotICAgIGlmIChtX2NvbnRyb2xs
ZXIucm9vdExheWVyKCkub3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVy
KDApKQorICAgIGlmIChtX2NvbnRyb2xsZXIucm9vdExheWVyKCkub3duZXIoKS0+cGxhdGZvcm1D
QUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKDApKSB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAg
Ly8gVGlsZWQgbGF5ZXJzIGluIFdpbmRvd3MgaGF2ZSBmbGlwcGVkIGNvb3JkaW5hdGVzCisgICAg
ICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOworI2VuZGlmCiAg
ICAgICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoY29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQsIGNhY2hlZENHQ29s
b3IobV9jb250cm9sbGVyLnRpbGVEZWJ1Z0JvcmRlckNvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VS
R0IpKTsKKyAgICB9CiAKICAgICBpZiAobV9jb250cm9sbGVyLnNjcm9sbGluZ1BlcmZvcm1hbmNl
TG9nZ2luZ0VuYWJsZWQoKSkgewogICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVBhcnQocGxhdGZv
cm1DQUxheWVyLT5wb3NpdGlvbigpLngoKSwgcGxhdGZvcm1DQUxheWVyLT5wb3NpdGlvbigpLnko
KSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkud2lkdGgoKSwgcGxhdGZvcm1DQUxh
eWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw4ICszMiwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIldlYkNvcmVIZWFkZXJEZXRlY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbkNG
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTQyLDE3ICsxNDQsMjAgQEAg
UGxhdGZvcm1DQUxheWVyV2luOjpQbGF0Zm9ybUNBTGF5ZXJXaW4oTAogI2VuZGlmCiAKICAgICAv
LyBDcmVhdGUgdGhlIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsIG9iamVjdCBhbmQgcG9pbnQg
dG8gaXQgaW4gdGhlIHVzZXJkYXRhLgotICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKiBp
bnRlcm4gPSBuZXcgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwodGhpcyk7CisgICAgUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwqIGludGVybiA9IG51bGxwdHI7CisKKyAgICBpZiAodXNlc1Rp
bGVkQmFja2luZ0xheWVyKCkpIHsKKyAgICAgICAgaW50ZXJuID0gbmV3IFdlYlRpbGVkQmFja2lu
Z0xheWVyV2luKHRoaXMpOworICAgICAgICBUaWxlQ29udHJvbGxlciogdGlsZUNvbnRyb2xsZXIg
PSByZWludGVycHJldF9jYXN0PFdlYlRpbGVkQmFja2luZ0xheWVyV2luKj4oaW50ZXJuKS0+Y3Jl
YXRlVGlsZUNvbnRyb2xsZXIodGhpcyk7CisgICAgICAgIG1fY3VzdG9tU3VibGF5ZXJzID0gc3Rk
OjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUNBTGF5ZXJMaXN0Pih0aWxlQ29udHJvbGxlci0+Y29udGFp
bmVyTGF5ZXJzKCkpOworICAgIH0gZWxzZQorICAgICAgICBpbnRlcm4gPSBuZXcgUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWwodGhpcyk7CisKICAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShtX2xh
eWVyLmdldCgpLCBpbnRlcm4pOwogCiAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IGNhbGxiYWNrCiAg
ICAgQ0FDRkxheWVyU2V0RGlzcGxheUNhbGxiYWNrKG1fbGF5ZXIuZ2V0KCksIGRpc3BsYXlDYWxs
YmFjayk7CiAgICAgQ0FDRkxheWVyU2V0TGF5b3V0Q2FsbGJhY2sobV9sYXllci5nZXQoKSwgbGF5
b3V0U3VibGF5ZXJzUHJvYyk7Ci0KLSAgICBpZiAodXNlc1RpbGVkQmFja2luZ0xheWVyKCkpIHsK
LSAgICAgICAgVGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gaW50ZXJuLT5jcmVhdGVU
aWxlQ29udHJvbGxlcih0aGlzKTsKLSAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFBsYXRmb3JtQ0FMYXllckxpc3Q+KHRpbGVDb250cm9sbGVyLT5jb250YWluZXJM
YXllcnMoKSk7Ci0gICAgfQogfQogCiBQbGF0Zm9ybUNBTGF5ZXJXaW46On5QbGF0Zm9ybUNBTGF5
ZXJXaW4oKQpAQCAtMTYwLDkgKzE2NSwxMiBAQCBQbGF0Zm9ybUNBTGF5ZXJXaW46On5QbGF0Zm9y
bUNBTGF5ZXJXaW4oCiAgICAgLy8gVG9zcyBhbGwgdGhlIGtpZHMKICAgICByZW1vdmVBbGxTdWJs
YXllcnMoKTsKIAotICAgIC8vIEdldCByaWQgb2YgdGhlIHVzZXIgZGF0YQogICAgIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsKiBsYXllckludGVybiA9IGludGVybih0aGlzKTsKLSAgICBDQUNG
TGF5ZXJTZXRVc2VyRGF0YShtX2xheWVyLmdldCgpLCAwKTsKKyAgICBpZiAodXNlc1RpbGVkQmFj
a2luZ0xheWVyKCkpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5
ZXJXaW4qPihsYXllckludGVybiktPmludmFsaWRhdGUoKTsKKworICAgIC8vIEdldCByaWQgb2Yg
dGhlIHVzZXIgZGF0YQorICAgIENBQ0ZMYXllclNldFVzZXJEYXRhKG1fbGF5ZXIuZ2V0KCksIG51
bGxwdHIpOwogCiAgICAgQ0FDRkxheWVyUmVtb3ZlRnJvbVN1cGVybGF5ZXIobV9sYXllci5nZXQo
KSk7CiAKQEAgLTM1OCwxMiArMzY2LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRN
YXNrKFBsYXRmb3IKIAogYm9vbCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmlzT3BhcXVlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gQ0FDRkxheWVySXNPcGFxdWUobV9sYXllci5nZXQoKSk7CisgICAgcmV0
dXJuIGludGVybih0aGlzKS0+aXNPcGFxdWUoKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldE9wYXF1ZShib29sIHZhbHVlKQogewotICAgIENBQ0ZMYXllclNldE9wYXF1ZShtX2xh
eWVyLmdldCgpLCB2YWx1ZSk7CisgICAgaW50ZXJuKHRoaXMpLT5zZXRPcGFxdWUodmFsdWUpOwog
ICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKQEAgLTUyNiwxOSArNTM0LDEzIEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjpzZXRCYWNrZ3JvdW5kQ28KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OnNldEJvcmRlcldpZHRoKGZsb2F0IHZhbHVlKQogewotICAgIENBQ0ZMYXllclNldEJvcmRl
cldpZHRoKG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKKyAgICBpbnRlcm4odGhpcyktPnNldEJvcmRl
cldpZHRoKHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbjo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIHZhbHVlKQogewotICAgIENH
RmxvYXQgY29tcG9uZW50c1s0XTsKLSAgICB2YWx1ZS5nZXRSR0JBKGNvbXBvbmVudHNbMF0sIGNv
bXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHNbM10pOwotCi0gICAgUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0
Q0YoQ0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLmdldCgpLCBjb21wb25lbnRzKSk7Ci0KLSAgICBD
QUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihtX2xheWVyLmdldCgpLCBjb2xvci5nZXQoKSk7CisgICAg
aW50ZXJuKHRoaXMpLT5zZXRCb3JkZXJDb2xvcih2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQo
KTsKIH0KIApAQCAtNTg3LDE4ICs1ODksMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OnNl
dEVkZ2VBbnRpYWxpYQogCiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNvbnRlbnRzU2NhbGUo
KSBjb25zdAogewotI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAgcmV0
dXJuIENBQ0ZMYXllckdldENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSk7Ci0jZWxzZQotICAg
IHJldHVybiAxLjBmOwotI2VuZGlmCisgICAgcmV0dXJuIGludGVybih0aGlzKS0+Y29udGVudHNT
Y2FsZSgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6c2V0Q29udGVudHNTY2FsZShm
bG9hdCBzY2FsZUZhY3RvcikKIHsKLSNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1NDQUxF
KQotICAgIENBQ0ZMYXllclNldENvbnRlbnRzU2NhbGUobV9sYXllci5nZXQoKSwgc2NhbGVGYWN0
b3IpOwotI2VuZGlmCisgICAgaW50ZXJuKHRoaXMpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlRmFj
dG9yKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiBmbG9hdCBQbGF0Zm9ybUNBTGF5ZXJX
aW46OmNvcm5lclJhZGl1cygpIGNvbnN0CkBAIC03NzYsNSArNzczLDI2IEBAIFRpbGVkQmFja2lu
ZyogUGxhdGZvcm1DQUxheWVyV2luOjp0aWxlZEIKICAgICBpZiAoIXVzZXNUaWxlZEJhY2tpbmdM
YXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpbnRlcm4odGhp
cyktPnRpbGVkQmFja2luZygpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYlRpbGVk
QmFja2luZ0xheWVyV2luKj4oaW50ZXJuKHRoaXMpKS0+dGlsZWRCYWNraW5nKCk7Cit9CisKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHRmxvYXQgeCwgQ0dGbG9hdCB5LCBjb25zdCBjaGFyKiBtZXNzYWdlLCBzaXplX3QgbGVu
Z3RoKSBjb25zdAoreworICAgIFN0cmluZyB0ZXh0KG1lc3NhZ2UsIGxlbmd0aCk7CisKKyAgICBG
b250RGVzY3JpcHRpb24gZGVzYzsKKworICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAg
ICBtZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihtZXRyaWNzKTsKKyAgICBTeXN0ZW1QYXJhbWV0ZXJz
SW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgbWV0cmljcy5jYlNpemUsICZtZXRyaWNzLCAw
KTsKKyAgICBkZXNjLnNldE9uZUZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VO
YW1lKTsKKworICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKDE4KTsKKworICAgIEZvbnRDYXNjYWRl
IGZvbnQgPSBGb250Q2FzY2FkZShkZXNjLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRy
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBjZy5zZXRGaWxsQ29s
b3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjZy5kcmF3VGV4dChm
b250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbi5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0OCw2ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJv
b3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0xheW91
dCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmLCBDR0Zsb2F0
IHgsIENHRmxvYXQgeSwgY29uc3QgY2hhciogdGV4dCwgc2l6ZV90IGxlbmd0aCkgY29uc3Qgb3Zl
cnJpZGU7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIHByaW50VHJlZSgpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKLSNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxl
ZEJhY2tpbmcuaCIKICNpbmNsdWRlICJXZWJDb3JlSGVhZGVyRGV0ZWN0aW9uLmgiCkBAIC00MCwz
MyArMzksOSBAQAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi0vLyBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiBhIHNpbmdsZSB0aWxlIGluIGEgdGlsZWQg
bGF5ZXIuIFNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8KLS8vIGF2b2lkIGxvdHMgb2Ygc21hbGwg
dGlsZXMgKGFuZCB0aGVyZWZvcmUgbG90cyBvZiBkcmF3aW5nIGNhbGxiYWNrcyksIGJ1dCBzbWFs
bCBlbm91Z2gKLS8vIHRvIGtlZXAgdGhlIG92ZXJhbGwgdGlsZSBjb3N0IGxvdy4KLXN0YXRpYyBj
b25zdCBpbnQgY1RpbGVkTGF5ZXJUaWxlU2l6ZSA9IDUxMjsKLQotc3RhdGljIGJvb2wgbGF5ZXJU
eXBlSXNUaWxlZChjb25zdCBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCi17
Ci0gICAgcmV0dXJuIGxheWVyVHlwZSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYlRp
bGVkTGF5ZXIKLSAgICAgICAgfHwgbGF5ZXJUeXBlID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlUGFnZVRpbGVkQmFja2luZ0xheWVyCi0gICAgICAgIHx8IGxheWVyVHlwZSA9PSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOwotfQotCiBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoUGxhdGZvcm1DQUxheWVy
KiBvd25lcikKLSAgICA6IG1fdGlsZVNpemUoQ0dTaXplTWFrZShjVGlsZWRMYXllclRpbGVTaXpl
LCBjVGlsZWRMYXllclRpbGVTaXplKSkKLSAgICAsIG1fY29uc3RyYWluZWRTaXplKGNvbnN0cmFp
bmVkU2l6ZShvd25lci0+Ym91bmRzKCkuc2l6ZSgpKSkKLSAgICAsIG1fb3duZXIob3duZXIpCi17
Ci0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAg
ICAgIC8vIFRpbGVkIGxheWVycyBhcmUgcGxhY2VkIGluIGEgY2hpbGQgbGF5ZXIgdGhhdCBpcyBh
bHdheXMgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBUaWxlZExheWVyCi0gICAgICAgIG1fdGlsZVBh
cmVudCA9IGFkb3B0Q0YoQ0FDRkxheWVyQ3JlYXRlKGtDQUNGTGF5ZXIpKTsKLSAgICAgICAgQ0FD
RkxheWVySW5zZXJ0U3VibGF5ZXIobV9vd25lci0+cGxhdGZvcm1MYXllcigpLCBtX3RpbGVQYXJl
bnQuZ2V0KCksIDApOwotI2lmIEhBVkUoQ0FDRkxBWUVSX1NFVENPTlRFTlRTU0NBTEUpCi0gICAg
ICAgIENBQ0ZMYXllclNldENvbnRlbnRzU2NhbGUobV90aWxlUGFyZW50LmdldCgpLCBDQUNGTGF5
ZXJHZXRDb250ZW50c1NjYWxlKG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKSkpOwotI2VuZGlmCi0K
LSAgICAgICAgdXBkYXRlVGlsZXMoKTsKLSAgICB9CisgICAgOiBtX293bmVyKG93bmVyKQorewog
fQogCiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6flBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsKCkKQEAgLTk2LDYgKzcxLDE3IEBAIHN0YXRpYyB2b2lkIHJlZGlzcGF0Y2hPbk1haW5RdWV1
ZSh2b2lkKgogICAgIHNlbGYtPmRpc3BsYXlDYWxsYmFjayhyZXRhaW5lZENvbnRleHQtPmxheWVy
LmdldCgpLCByZXRhaW5lZENvbnRleHQtPmNvbnRleHQuZ2V0KCkpOwogfQogCitzdGF0aWMgYm9v
bCBzaG91bGRJbnZlcnRCZWZvcmVEcmF3aW5nQ29udGVudChQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmll
bnRhdGlvbiBjb29yZGluYXRlT3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIChsYXllclR5cGUg
IT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXIpCisgICAg
ICAgICYmIChjb29yZGluYXRlT3JpZW50YXRpb24gPT0gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc1RvcERvd24pOworfQorCitzdGF0aWMgYm9vbCByZXBhaW50Q291bnRlcnNB
cmVEcmF3bkJ5R3JpZENvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJU
eXBlKQoreworICAgIHJldHVybiBsYXllclR5cGUgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI7Cit9CisKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCiB7CiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewpAQCAtMTA5LDc0ICs5NSw0
NSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5CiAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIENHUmVjdCBsYXllckJvdW5kcyA9IG93bmVy
KCktPmJvdW5kcygpOwotICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc1RvcERvd24pIHsKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4
dCwgMSwgLTEpOwotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWxh
eWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKLSAgICB9CisgICAgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGUgbGF5ZXJUeXBlID0gb3duZXIoKS0+bGF5ZXJUeXBlKCk7CiAKLSAgICBpZiAob3duZXIo
KS0+b3duZXIoKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOworICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3du
ZXIoKTsKKyAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKTsKIAotICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0
aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQotICAgICAgICAvLyBz
bWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCi0gICAgICAg
IENHUmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQp
OwotICAgICAgICBJbnRSZWN0IGNsaXAoZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7Ci0g
ICAgICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMob3du
ZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKLSAgICB9Ci0jaWZuZGVmIE5ERUJVRwotICAg
IGVsc2UgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAvLyBGSVhN
RTogaWRlYWxseSB3ZSdkIGF2b2lkIGNhbGxpbmcgLXNldE5lZWRzRGlzcGxheSBvbiBhIGxheWVy
IHRoYXQgaXMgYSBwbGFpbiBjb2xvciwKLSAgICAgICAgLy8gc28gQ0EgbmV2ZXIgbWFrZXMgYmFj
a2luZyBzdG9yZSBmb3IgaXQgKHdoaWNoIGlzIHdoYXQgLXNldE5lZWRzRGlzcGxheSB3aWxsIGRv
IGFib3ZlKS4KLSAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMGYs
IDEuMGYsIDAuMGYsIDEuMGYpOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBs
YXllckJvdW5kcyk7Ci0gICAgfQotI2VuZGlmCisgICAgaWYgKHNob3VsZEludmVydEJlZm9yZURy
YXdpbmdDb250ZW50KGxheWVyVHlwZSwgb3JpZW50YXRpb24pKQorICAgICAgICBQbGF0Zm9ybUNB
TGF5ZXI6OmZsaXBDb250ZXh0KGNvbnRleHQsIGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKIAot
ICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50
ZXIob3duZXIoKSkpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6Om51bWJlcihvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQob3duZXIo
KSkpOwotCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICAgICAg
Ly8gTWFrZSB0aGUgYmFja2dyb3VuZCBvZiB0aGUgY291bnRlciB0aGUgc2FtZSBhcyB0aGUgYm9y
ZGVyIGNvbG9yLAotICAgICAgICAvLyB1bmxlc3MgdGhlcmUgaXMgbm8gYm9yZGVyLCB0aGVuIG1h
a2UgaXQgcmVkCi0gICAgICAgIGZsb2F0IGJvcmRlcldpZHRoID0gQ0FDRkxheWVyR2V0Qm9yZGVy
V2lkdGgoY2FMYXllcik7Ci0gICAgICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHsKLSAgICAgICAg
ICAgIENHQ29sb3JSZWYgYm9yZGVyQ29sb3IgPSBDQUNGTGF5ZXJHZXRCb3JkZXJDb2xvcihjYUxh
eWVyKTsKLSAgICAgICAgICAgIGNvbnN0IENHRmxvYXQqIGNvbG9ycyA9IENHQ29sb3JHZXRDb21w
b25lbnRzKGJvcmRlckNvbG9yKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xv
cihjb250ZXh0LCBjb2xvcnNbMF0sIGNvbG9yc1sxXSwgY29sb3JzWzJdLCBjb2xvcnNbM10pOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250
ZXh0LCAxLjBmLCAwLjBmLCAwLjBmLCAwLjhmKTsKLSAgICAgICAgCi0gICAgICAgIENHUmVjdCBh
Qm91bmRzID0gbGF5ZXJCb3VuZHM7Ci0KLSAgICAgICAgYUJvdW5kcy5zaXplLndpZHRoID0gMTAg
KyAxMCAqIHRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGFCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyMjsK
LSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgYUJvdW5kcyk7Ci0gICAgICAgIAot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLQotICAgICAgICBOT05DTElFTlRNRVRSSUNT
IG1ldHJpY3M7Ci0gICAgICAgIG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwotICAg
ICAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgbWV0cmlj
cy5jYlNpemUsICZtZXRyaWNzLCAwKTsKLSAgICAgICAgZGVzYy5zZXRPbmVGYW1pbHkobWV0cmlj
cy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSk7Ci0KLSAgICAgICAgZGVzYy5zZXRDb21wdXRl
ZFNpemUoMTgpOwotICAgICAgICAKLSAgICAgICAgRm9udENhc2NhZGUgZm9udCA9IEZvbnRDYXNj
YWRlKGRlc2MsIDAsIDApOwotICAgICAgICBmb250LnVwZGF0ZSgwKTsKLQotICAgICAgICBHcmFw
aGljc0NvbnRleHQgY2coY29udGV4dCk7Ci0gICAgICAgIGNnLnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjZy5kcmF3VGV4dChmb250LCBU
ZXh0UnVuKHRleHQpLCBJbnRQb2ludChhQm91bmRzLm9yaWdpbi54ICsgNSwgYUJvdW5kcy5vcmln
aW4ueSArIDE3KSk7Ci0KLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsg
ICAgICAgIAorICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisK
KyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwg
YmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQorICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUg
bGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKKyAgICBDR1JlY3QgY2xpcEJvdW5kcyA9
IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICBJbnRSZWN0IGNsaXAo
ZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CisgICAgY2xpZW50LT5wbGF0Zm9ybUNBTGF5
ZXJQYWludENvbnRlbnRzKG93bmVyKCksIGdyYXBoaWNzQ29udGV4dCwgY2xpcCk7CisKKyAgICBp
ZiAoY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIoKSkKKyAg
ICAgICAgJiYgIXJlcGFpbnRDb3VudGVyc0FyZURyYXduQnlHcmlkQ29udHJvbGxlcihsYXllclR5
cGUpKSB7CisgICAgICAgIGludCBkcmF3Q291bnQgPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllcklu
Y3JlbWVudFJlcGFpbnRDb3VudChvd25lcigpKTsKKyAgICAgICAgZHJhd1JlcGFpbnRDb3VudGVy
cyhjYUxheWVyLCBjb250ZXh0LCBsYXllckJvdW5kcywgZHJhd0NvdW50KTsKICAgICB9CiAKICAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgb3duZXIoKS0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KG93bmVyKCkpOworICAgIGNsaWVudC0+
cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KG93bmVyKCkpOworfQorCit2b2lkIFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBj
YUxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmRzLCBpbnQgZHJh
d0NvdW50KQoreworICAgIENHQ29sb3JSZWYgYmFja2dyb3VuZENvbG9yID0gbnVsbHB0cjsKKyAg
ICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBjb3VudGVyIHRoZSBzYW1lIGFzIHRoZSBi
b3JkZXIgY29sb3IsCisgICAgLy8gdW5sZXNzIHRoZXJlIGlzIG5vIGJvcmRlciwgdGhlbiBtYWtl
IGl0IHJlZAorICAgIGZsb2F0IGJvcmRlcldpZHRoID0gQ0FDRkxheWVyR2V0Qm9yZGVyV2lkdGgo
Y2FMYXllcik7CisgICAgaWYgKGJvcmRlcldpZHRoID4gMCkKKyAgICAgICAgYmFja2dyb3VuZENv
bG9yID0gQ0FDRkxheWVyR2V0Qm9yZGVyQ29sb3IoY2FMYXllcik7CisgICAgZWxzZQorICAgICAg
ICBiYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworCisgICAgUGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGlj
YXRvcihjb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAK
IHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmludGVybmFsU2V0TmVlZHNEaXNwbGF5
KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQpAQCAtMTg1LDUxICsxNDIsNDMgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW50ZXJuYQogICAgICAgICBDR1JlY3QgcmVjdCA9
ICpkaXJ0eVJlY3Q7CiAgICAgICAgIENBQ0ZMYXllclNldE5lZWRzRGlzcGxheShvd25lcigpLT5w
bGF0Zm9ybUxheWVyKCksICZyZWN0KTsKICAgICB9IGVsc2UKLSAgICAgICAgQ0FDRkxheWVyU2V0
TmVlZHNEaXNwbGF5KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgMCk7CisgICAgICAgIENBQ0ZM
YXllclNldE5lZWRzRGlzcGxheShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIG51bGxwdHIpOwog
fQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewotICAgIGludGVybmFsU2V0TmVlZHNEaXNwbGF5KDApOworICAgIGludGVybmFsU2V0TmVlZHNE
aXNwbGF5KG51bGxwdHIpOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAg
aWYgKGxheWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBPbmx5IHNldE5lZWRzRGlzcGxheSBmb3IgdGlsZXMgdGhhdCBhcmUgY3VycmVudGx5
IHZpc2libGUKLSAgICAgICAgaW50IG51bVRpbGVMYXllcnMgPSB0aWxlQ291bnQoKTsKLSAgICAg
ICAgQ0dSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtVGlsZUxheWVyczsgKytpKQotICAgICAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5
KHRpbGVBdEluZGV4KGkpLCAmcmVjdCk7Ci0KLSAgICAgICAgaWYgKG1fb3duZXItPm93bmVyKCkg
JiYgbV9vd25lci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG1f
b3duZXIpKSB7Ci0gICAgICAgICAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBtX293bmVyLT5ib3Vu
ZHMoKTsKLSAgICAgICAgICAgIENHUmVjdCBpbmRpY2F0b3JSZWN0ID0gQ0dSZWN0TWFrZShsYXll
ckJvdW5kcy5vcmlnaW4ueCwgbGF5ZXJCb3VuZHMub3JpZ2luLnksIDgwLCAyNSk7Ci0gICAgICAg
ICAgICBDQUNGTGF5ZXJTZXROZWVkc0Rpc3BsYXkodGlsZUF0SW5kZXgoMCksICZpbmRpY2F0b3JS
ZWN0KTsKKyAgICBpZiAoIW93bmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChv
d25lcigpLT5sYXllclR5cGUoKSAhPSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFj
a2luZ0xheWVyKTsKKworICAgIGlmIChvd25lcigpLT5vd25lcigpKSB7CisgICAgICAgIGlmIChv
d25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIob3duZXIo
KSkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IG93bmVyKCktPmJvdW5k
cygpOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxheWVyQm91
bmRzOworCisgICAgICAgICAgICAvLyBXZSBhc3N1bWUgYSBtYXhpbXVtIG9mIDQgZGlnaXRzIGFu
ZCBhIGZvbnQgc2l6ZSBvZiAxOC4KKyAgICAgICAgICAgIHJlcGFpbnRDb3VudGVyUmVjdC5zZXRX
aWR0aCg4MCk7CisgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0SGVpZ2h0KDIyKTsK
KyAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50
c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc1RvcERvd24pCisgICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJSZWN0LnNldFko
bGF5ZXJCb3VuZHMuaGVpZ2h0KCkgLSAobGF5ZXJCb3VuZHMueSgpICsgcmVwYWludENvdW50ZXJS
ZWN0LmhlaWdodCgpKSk7CisgICAgICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmcmVw
YWludENvdW50ZXJSZWN0KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAob3duZXIoKS0+bGF5
ZXJUeXBlKCkgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcikgewotICAgICAg
ICBpZiAob3duZXIoKSAmJiBvd25lcigpLT5vd25lcigpKSB7Ci0gICAgICAgICAgICBpZiAob3du
ZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG93bmVyKCkp
KSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gb3duZXIoKS0+Ym91
bmRzKCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxh
eWVyQm91bmRzOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11bSBvZiA0
IGRpZ2l0cyBhbmQgYSBmb250IHNpemUgb2YgMTguCi0gICAgICAgICAgICAgICAgcmVwYWludENv
dW50ZXJSZWN0LnNldFdpZHRoKDgwKTsKLSAgICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJl
Y3Quc2V0SGVpZ2h0KDIyKTsKLSAgICAgICAgICAgICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKQotICAgICAgICAgICAgICAgICAg
ICByZXBhaW50Q291bnRlclJlY3Quc2V0WShsYXllckJvdW5kcy5oZWlnaHQoKSAtIChsYXllckJv
dW5kcy55KCkgKyByZXBhaW50Q291bnRlclJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgICAg
ICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmcmVwYWludENvdW50ZXJSZWN0KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc1RvcERvd24pIHsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZmxpcHBl
ZERpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0
LnNldFkob3duZXIoKS0+Ym91bmRzKCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVjdC55KCkg
KyBmbGlwcGVkRGlydHlSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxT
ZXROZWVkc0Rpc3BsYXkoJmZsaXBwZWREaXJ0eVJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3Jt
Q0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikgeworICAgICAgICAgICAgRmxvYXRSZWN0IGZs
aXBwZWREaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0
LnNldFkob3duZXIoKS0+Ym91bmRzKCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVjdC55KCkg
KyBmbGlwcGVkRGlydHlSZWN0LmhlaWdodCgpKSk7CisgICAgICAgICAgICBpbnRlcm5hbFNldE5l
ZWRzRGlzcGxheSgmZmxpcHBlZERpcnR5UmVjdCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLQotICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmZGlydHlSZWN0KTsKICAg
ICB9CisKKyAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgmZGlydHlSZWN0KTsKKwogICAgIG93
bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7CiB9CiAKQEAgLTI0NywxMSArMTk2LDYgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c2V0U3VibAogICAgICAgICBDQUNGTGF5ZXJJbnNl
cnRTdWJsYXllcihvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIGxpc3RbaV0tPnBsYXRmb3JtTGF5
ZXIoKSwgaSk7CiAKICAgICBvd25lcigpLT5zZXROZWVkc0NvbW1pdCgpOwotCi0gICAgaWYgKGxh
eWVyVHlwZUlzVGlsZWQobV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFByZXNl
cnZlIHRoZSB0aWxlIHBhcmVudCBhZnRlciBzZXQKLSAgICAgICAgQ0FDRkxheWVySW5zZXJ0U3Vi
bGF5ZXIob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3RpbGVQYXJlbnQuZ2V0KCksIDApOwot
ICAgIH0KIH0KIAogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Z2V0U3VibGF5ZXJz
KFBsYXRmb3JtQ0FMYXllckxpc3QmIGxpc3QpIGNvbnN0CkBAIC0yNjQsMzUgKzIwOCwyMCBAQCB2
b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpnZXRTdWJsCiAKICAgICBzaXplX3QgY291
bnQgPSBDRkFycmF5R2V0Q291bnQoc3VibGF5ZXJzKTsKIAotICAgIHNpemVfdCBsYXllcnNUb1Nr
aXAgPSAwOwotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkg
ewotICAgICAgICAvLyBFeGNsdWRlIHRoZSB0aWxlIHBhcmVudCBsYXllci4KLSAgICAgICAgbGF5
ZXJzVG9Ta2lwID0gMTsKLSAgICB9Ci0KLSAgICBsaXN0LnJlc2l6ZShjb3VudCAtIGxheWVyc1Rv
U2tpcCk7Ci0gICAgZm9yIChzaXplX3QgYXJyYXlJbmRleCA9IGxheWVyc1RvU2tpcDsgYXJyYXlJ
bmRleCA8IGNvdW50OyArK2FycmF5SW5kZXgpCi0gICAgICAgIGxpc3RbYXJyYXlJbmRleCAtIGxh
eWVyc1RvU2tpcF0gPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihjb25zdF9jYXN0
PHZvaWQqPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVycywgYXJyYXlJbmRleCkpKTsK
KyAgICBsaXN0LnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChzaXplX3QgYXJyYXlJbmRleCA9IDA7
IGFycmF5SW5kZXggPCBjb3VudDsgKythcnJheUluZGV4KQorICAgICAgICBsaXN0W2FycmF5SW5k
ZXhdID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoY29uc3RfY2FzdDx2b2lkKj4o
Q0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGFycmF5SW5kZXgpKSk7CiB9CiAKIHZv
aWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZUFsbFN1YmxheWVycygpCiB7Ci0g
ICAgQ0FDRkxheWVyU2V0U3VibGF5ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgMCk7Cisg
ICAgQ0FDRkxheWVyU2V0U3VibGF5ZXJzKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbnVsbHB0
cik7CiAgICAgb3duZXIoKS0+c2V0TmVlZHNDb21taXQoKTsKLQotICAgIGlmIChsYXllclR5cGVJ
c1RpbGVkKG1fb3duZXItPmxheWVyVHlwZSgpKSkgewotICAgICAgICAvLyBSZXN0b3JlIHRoZSB0
aWxlIHBhcmVudCBhZnRlciByZW1vdmFsCi0gICAgICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVy
KG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV90aWxlUGFyZW50LmdldCgpLCAwKTsKLSAgICB9
CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6Omluc2VydFN1YmxheWVyKFBs
YXRmb3JtQ0FMYXllciYgbGF5ZXIsIHNpemVfdCBpbmRleCkKIHsKICAgICBpbmRleCA9IG1pbihp
bmRleCwgc3VibGF5ZXJDb3VudCgpKTsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVy
LT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gQWRkIDEgdG8gYWNjb3VudCBmb3IgdGhlIHRp
bGUgcGFyZW50IGxheWVyCi0gICAgICAgICsraW5kZXg7Ci0gICAgfQogCiAgICAgbGF5ZXIucmVt
b3ZlRnJvbVN1cGVybGF5ZXIoKTsKICAgICBDQUNGTGF5ZXJJbnNlcnRTdWJsYXllcihvd25lcigp
LT5wbGF0Zm9ybUxheWVyKCksIGxheWVyLnBsYXRmb3JtTGF5ZXIoKSwgaW5kZXgpOwpAQCAtMzAy
LDE1ICsyMzEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnNlcnRTCiBz
aXplX3QgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnN1YmxheWVyQ291bnQoKSBjb25zdAog
ewogICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG93bmVy
KCktPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgc2l6ZV90IGNvdW50ID0gc3VibGF5ZXJzID8gQ0ZB
cnJheUdldENvdW50KHN1YmxheWVycykgOiAwOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQo
bV9vd25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIC8vIFN1YnRyYWN0IDEgdG8gYWNjb3Vu
dCBmb3IgdGhlIHRpbGUgcGFyZW50IGxheWVyCi0gICAgICAgIEFTU0VSVChjb3VudCA+IDApOwot
ICAgICAgICBjb3VudC0tOwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKKyAgICByZXR1cm4g
c3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwOwogfQogCiBpbnQgUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmluZGV4T2ZTdWJsYXllcihjb25zdCBQbGF0Zm9ybUNB
TGF5ZXIqIHJlZmVyZW5jZSkKQEAgLTMyNSwxNiArMjQ2LDkgQEAgaW50IFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjppbmRleE9mUwogCiAgICAgc2l6ZV90IG4gPSBDRkFycmF5R2V0Q291bnQo
c3VibGF5ZXJzKTsKIAotICAgIGlmIChsYXllclR5cGVJc1RpbGVkKG1fb3duZXItPmxheWVyVHlw
ZSgpKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG47ICsraSkgewotICAgICAg
ICAgICAgaWYgKENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpKSA9PSByZWYpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGkgLSAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVycywgaSkgPT0gcmVmKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpOwotICAgICAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyAr
K2kpIHsKKyAgICAgICAgaWYgKENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VibGF5ZXJzLCBpKSA9
PSByZWYpCisgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9CiAKICAgICByZXR1cm4gLTE7CkBA
IC0zNDIsMTQgKzI1Niw5IEBAIGludCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW5kZXhP
ZlMKIAogUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6c3VibGF5
ZXJBdEluZGV4KGludCBpbmRleCkgY29uc3QKIHsKLSAgICBpZiAobGF5ZXJUeXBlSXNUaWxlZCht
X293bmVyLT5sYXllclR5cGUoKSkpIHsKLSAgICAgICAgLy8gQWRkIDEgdG8gYWNjb3VudCBmb3Ig
dGhlIHRpbGUgcGFyZW50IGxheWVyCi0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotCiAgICAgQ0ZB
cnJheVJlZiBzdWJsYXllcnMgPSBDQUNGTGF5ZXJHZXRTdWJsYXllcnMob3duZXIoKS0+cGxhdGZv
cm1MYXllcigpKTsKICAgICBpZiAoIXN1YmxheWVycyB8fCBpbmRleCA8IDAgfHwgQ0ZBcnJheUdl
dENvdW50KHN1YmxheWVycykgPD0gaW5kZXgpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICByZXR1cm4gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9y
bUNBTGF5ZXIoc3RhdGljX2Nhc3Q8Q0FDRkxheWVyUmVmPihjb25zdF9jYXN0PHZvaWQqPihDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KHN1YmxheWVycywgaW5kZXgpKSkpOwogfQpAQCAtMzYxLDExICsy
NzAsNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3VuCiAKICAgICBD
QUNGTGF5ZXJTZXRCb3VuZHMob3duZXIoKS0+cGxhdGZvcm1MYXllcigpLCByZWN0KTsKICAgICBv
d25lcigpLT5zZXROZWVkc0NvbW1pdCgpOwotCi0gICAgaWYgKGxheWVyVHlwZUlzVGlsZWQobV9v
d25lci0+bGF5ZXJUeXBlKCkpKSB7Ci0gICAgICAgIG1fY29uc3RyYWluZWRTaXplID0gY29uc3Ry
YWluZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICAgICAgdXBkYXRlVGlsZXMoKTsKLSAgICB9CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEZyYW1lKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKQEAgLTM3NiwxNjYgKzI4MCw0OCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpzZXRGcmFtCiAKICAgICBDQUNGTGF5ZXJTZXRGcmFtZShvd25lcigpLT5wbGF0
Zm9ybUxheWVyKCksIHJlY3QpOwogICAgIG93bmVyKCktPnNldE5lZWRzQ29tbWl0KCk7Ci0KLSAg
ICBpZiAobGF5ZXJUeXBlSXNUaWxlZChtX293bmVyLT5sYXllclR5cGUoKSkpCi0gICAgICAgIHVw
ZGF0ZVRpbGVzKCk7CiB9CiAKLUNHU2l6ZSBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Y29u
c3RyYWluZWRTaXplKGNvbnN0IENHU2l6ZSYgc2l6ZSkgY29uc3QKK2Jvb2wgUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OmlzT3BhcXVlKCkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgY01heFRp
bGVDb3VudCA9IDUxMjsKLSAgICBjb25zdCBmbG9hdCBjU3FydE1heFRpbGVDb3VudCA9IHNxcnRm
KGNNYXhUaWxlQ291bnQpOwotCi0gICAgQ0dTaXplIGNvbnN0cmFpbmVkU2l6ZSA9IHNpemU7Ci0K
LSAgICBpbnQgdGlsZUNvbHVtbnMgPSBjZWlsZihjb25zdHJhaW5lZFNpemUud2lkdGggLyBtX3Rp
bGVTaXplLndpZHRoKTsKLSAgICBpbnQgdGlsZVJvd3MgPSBjZWlsZihjb25zdHJhaW5lZFNpemUu
aGVpZ2h0IC8gbV90aWxlU2l6ZS5oZWlnaHQpOwotCi0gICAgYm9vbCB0b29NYW55VGlsZXMgPSB0
aWxlQ29sdW1ucyAmJiBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIHRpbGVDb2x1bW5zIDwg
dGlsZVJvd3MgfHwgdGlsZUNvbHVtbnMgKiB0aWxlUm93cyA+IGNNYXhUaWxlQ291bnQ7Ci0KLSAg
ICAvLyBJZiBudW1iZXIgb2YgdGlsZXMgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgaXMgPCBz
cXJ0KGNNYXhUaWxlQ291bnQpCi0gICAgLy8ganVzdCBzaG9ydGVuIHRoZSBsb25nZXIgZGltZW5z
aW9uLiBPdGhlcndpc2Ugc2hvcnRlbiBib3RoIGRpbWVuc2lvbnMKLSAgICAvLyBhY2NvcmRpbmcg
dG8gdGhlIHJhdGlvIG9mIHdpZHRoIHRvIGhlaWdodAotCi0gICAgaWYgKHRvb01hbnlUaWxlcykg
ewotICAgICAgICBpZiAodGlsZVJvd3MgPCBjU3FydE1heFRpbGVDb3VudCkKLSAgICAgICAgICAg
IHRpbGVDb2x1bW5zID0gZmxvb3JmKGNNYXhUaWxlQ291bnQgLyB0aWxlUm93cyk7Ci0gICAgICAg
IGVsc2UgaWYgKHRpbGVDb2x1bW5zIDwgY1NxcnRNYXhUaWxlQ291bnQpCi0gICAgICAgICAgICB0
aWxlUm93cyA9IGZsb29yZihjTWF4VGlsZUNvdW50IC8gdGlsZUNvbHVtbnMpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHRpbGVSb3dzID0gY2VpbGYoc3FydGYoY01heFRpbGVDb3VudCAq
IGNvbnN0cmFpbmVkU2l6ZS5oZWlnaHQgLyBjb25zdHJhaW5lZFNpemUud2lkdGgpKTsKLSAgICAg
ICAgICAgIHRpbGVDb2x1bW5zID0gZmxvb3JmKGNNYXhUaWxlQ291bnQgLyB0aWxlUm93cyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0cmFpbmVkU2l6ZS53aWR0aCA9IHRpbGVD
b2x1bW5zICogbV90aWxlU2l6ZS53aWR0aDsKLSAgICAgICAgY29uc3RyYWluZWRTaXplLmhlaWdo
dCA9IHRpbGVSb3dzICogbV90aWxlU2l6ZS5oZWlnaHQ7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBjb25zdHJhaW5lZFNpemU7CisgICAgcmV0dXJuIENBQ0ZMYXllcklzT3BhcXVlKG93bmVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OnRpbGVEaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGxheWVyLCBDR0NvbnRleHRSZWYgY29u
dGV4dCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE9wYXF1ZShib29sIHZh
bHVlKQogewotICAgIHN0YXRpY19jYXN0PFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKj4oQ0FD
RkxheWVyR2V0VXNlckRhdGEobGF5ZXIpKS0+ZHJhd1RpbGUobGF5ZXIsIGNvbnRleHQpOworICAg
IENBQ0ZMYXllclNldE9wYXF1ZShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIHZhbHVlKTsKIH0K
IAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6YWRkVGlsZSgpCitmbG9hdCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6Y29udGVudHNTY2FsZSgpIGNvbnN0CiB7Ci0gICAgUmV0
YWluUHRyPENBQ0ZMYXllclJlZj4gbmV3TGF5ZXIgPSBhZG9wdENGKENBQ0ZMYXllckNyZWF0ZShr
Q0FDRkxheWVyKSk7Ci0gICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnQobmV3TGF5ZXIuZ2V0KCks
IENHUG9pbnRNYWtlKDAsIDEpKTsKLSAgICBDQUNGTGF5ZXJTZXRVc2VyRGF0YShuZXdMYXllci5n
ZXQoKSwgdGhpcyk7Ci0gICAgQ0FDRkxheWVyU2V0RGlzcGxheUNhbGxiYWNrKG5ld0xheWVyLmdl
dCgpLCB0aWxlRGlzcGxheUNhbGxiYWNrKTsKICNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5U
U1NDQUxFKQotICAgIENBQ0ZMYXllclNldENvbnRlbnRzU2NhbGUobmV3TGF5ZXIuZ2V0KCksIENB
Q0ZMYXllckdldENvbnRlbnRzU2NhbGUobV90aWxlUGFyZW50LmdldCgpKSk7CisgICAgcmV0dXJu
IENBQ0ZMYXllckdldENvbnRlbnRzU2NhbGUob3duZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyNl
bHNlCisgICAgcmV0dXJuIDEuMGY7CiAjZW5kaWYKLQotICAgIENGQXJyYXlSZWYgc3VibGF5ZXJz
ID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0gICAgQ0FDRkxh
eWVySW5zZXJ0U3VibGF5ZXIobV90aWxlUGFyZW50LmdldCgpLCBuZXdMYXllci5nZXQoKSwgc3Vi
bGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVycykgOiAwKTsKLQotICAgIGlmIChvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkpIHsKLSAgICAg
ICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9IENHQ29sb3JDcmVhdGVHZW5lcmljUkdCKDAuNSwg
MCwgMC41LCAwLjcpOwotICAgICAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihuZXdMYXllci5n
ZXQoKSwgYm9yZGVyQ29sb3IpOwotICAgICAgICBDR0NvbG9yUmVsZWFzZShib3JkZXJDb2xvcik7
Ci0gICAgICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRoKG5ld0xheWVyLmdldCgpLCAyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnJlbW92ZVRpbGUoKQot
ewotICAgIENBQ0ZMYXllclJlbW92ZUZyb21TdXBlcmxheWVyKHRpbGVBdEluZGV4KHRpbGVDb3Vu
dCgpIC0gMSkpOwotfQotCi1DQUNGTGF5ZXJSZWYgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OnRpbGVBdEluZGV4KGludCBpbmRleCkKLXsKLSAgICBDRkFycmF5UmVmIHN1YmxheWVycyA9IENB
Q0ZMYXllckdldFN1YmxheWVycyhtX3RpbGVQYXJlbnQuZ2V0KCkpOwotICAgIGlmICghc3VibGF5
ZXJzIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aWxlQ291bnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2Fz
dDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJsYXllcnMsIGluZGV4KSkpOwogfQog
Ci1pbnQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnRpbGVDb3VudCgpIGNvbnN0Cit2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxl
RmFjdG9yKQogewotICAgIENGQXJyYXlSZWYgc3VibGF5ZXJzID0gQ0FDRkxheWVyR2V0U3VibGF5
ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIHN1YmxheWVycyA/IENGQXJyYXlH
ZXRDb3VudChzdWJsYXllcnMpIDogMDsKKyNpZiBIQVZFKENBQ0ZMQVlFUl9TRVRDT05URU5UU1ND
QUxFKQorICAgIENBQ0ZMYXllclNldENvbnRlbnRzU2NhbGUob3duZXIoKS0+cGxhdGZvcm1MYXll
cigpLCBzY2FsZUZhY3Rvcik7CisjZW5kaWYKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6dXBkYXRlVGlsZXMoKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
c2V0Qm9yZGVyV2lkdGgoZmxvYXQgdmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IEluIGFkZGl0aW9u
IHRvIHJlZG9pbmcgdGhlIG51bWJlciBvZiB0aWxlcywgd2UgbmVlZCB0byBvbmx5IHJlbmRlciBh
bmQgaGF2ZSBiYWNraW5nCi0gICAgLy8gc3RvcmUgZm9yIHZpc2libGUgbGF5ZXJzCi0gICAgaW50
IG51bVRpbGVzSG9yaXpvbnRhbCA9IGNlaWwobV9jb25zdHJhaW5lZFNpemUud2lkdGggLyBtX3Rp
bGVTaXplLndpZHRoKTsKLSAgICBpbnQgbnVtVGlsZXNWZXJ0aWNhbCA9IGNlaWwobV9jb25zdHJh
aW5lZFNpemUuaGVpZ2h0IC8gbV90aWxlU2l6ZS5oZWlnaHQpOwotICAgIGludCBudW1UaWxlc1Rv
dGFsID0gbnVtVGlsZXNIb3Jpem9udGFsICogbnVtVGlsZXNWZXJ0aWNhbDsKLSAgICBBU1NFUlQo
IW1fY29uc3RyYWluZWRTaXplLmhlaWdodCB8fCAhbV9jb25zdHJhaW5lZFNpemUud2lkdGggfHwg
bnVtVGlsZXNUb3RhbCA+IDApOwotCi0gICAgaW50IG51bVRpbGVzVG9DaGFuZ2UgPSBudW1UaWxl
c1RvdGFsIC0gdGlsZUNvdW50KCk7Ci0gICAgaWYgKG51bVRpbGVzVG9DaGFuZ2UgPj0gMCkgewot
ICAgICAgICAvLyBBZGQgbmV3IHRpbGVzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
VGlsZXNUb0NoYW5nZTsgKytpKQotICAgICAgICAgICAgYWRkVGlsZSgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFJlbW92ZSBvbGQgdGlsZXMKLSAgICAgICAgbnVtVGlsZXNUb0NoYW5nZSA9
IC1udW1UaWxlc1RvQ2hhbmdlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVRpbGVz
VG9DaGFuZ2U7ICsraSkKLSAgICAgICAgICAgIHJlbW92ZVRpbGUoKTsKLSAgICB9Ci0KLSAgICAv
LyBTZXQgY29vcmRpbmF0ZXMgZm9yIGFsbCB0aWxlcwotICAgIENGQXJyYXlSZWYgdGlsZUFycmF5
ID0gQ0FDRkxheWVyR2V0U3VibGF5ZXJzKG1fdGlsZVBhcmVudC5nZXQoKSk7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVRpbGVzSG9yaXpvbnRhbDsgKytpKSB7Ci0gICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgbnVtVGlsZXNWZXJ0aWNhbDsgKytqKSB7Ci0gICAgICAgICAgICBDQUNG
TGF5ZXJSZWYgdGlsZSA9IHN0YXRpY19jYXN0PENBQ0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lk
Kj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0aWxlQXJyYXksIGkgKiBudW1UaWxlc1ZlcnRpY2Fs
ICsgaikpKTsKLSAgICAgICAgICAgIENBQ0ZMYXllclNldFBvc2l0aW9uKHRpbGUsIENHUG9pbnRN
YWtlKGkgKiBtX3RpbGVTaXplLndpZHRoLCBqICogbV90aWxlU2l6ZS5oZWlnaHQpKTsKLSAgICAg
ICAgICAgIGludCB3aWR0aCA9IG1pbihtX3RpbGVTaXplLndpZHRoLCBtX2NvbnN0cmFpbmVkU2l6
ZS53aWR0aCAtIGkgKiBtX3RpbGVTaXplLndpZHRoKTsKLSAgICAgICAgICAgIGludCBoZWlnaHQg
PSBtaW4obV90aWxlU2l6ZS5oZWlnaHQsIG1fY29uc3RyYWluZWRTaXplLmhlaWdodCAtIGogKiBt
X3RpbGVTaXplLmhlaWdodCk7Ci0gICAgICAgICAgICBDQUNGTGF5ZXJTZXRCb3VuZHModGlsZSwg
Q0dSZWN0TWFrZShpICogbV90aWxlU2l6ZS53aWR0aCwgaiAqIG1fdGlsZVNpemUuaGVpZ2h0LCB3
aWR0aCwgaGVpZ2h0KSk7Ci0KLSAgICAgICAgICAgIC8vIEZsaXAgWSB0byBjb21wZW5zYXRlIGZv
ciB0aGUgZmxpcHBpbmcgdGhhdCBoYXBwZW5zIGR1cmluZyByZW5kZXIgdG8gbWF0Y2ggdGhlIENH
IGNvbnRleHQgY29vcmRpbmF0ZSBzcGFjZQotICAgICAgICAgICAgQ0FUcmFuc2Zvcm0zRCB0cmFu
c2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEsIC0xLCAxKTsKLSAgICAgICAgICAgIENB
VHJhbnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3JtLCAwLCBoZWlnaHQsIDApOwotICAgICAgICAg
ICAgQ0FDRkxheWVyU2V0VHJhbnNmb3JtKHRpbGUsIHRyYW5zZm9ybSk7Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICJUaWxlICgiICsgU3RyaW5nOjpudW1iZXIo
aSkgKyAiLCIgKyBTdHJpbmc6Om51bWJlcihqKSArICIpIjsKLSAgICAgICAgICAgIENBQ0ZMYXll
clNldE5hbWUodGlsZSwgbmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSNlbmRpZgotICAg
ICAgICB9Ci0gICAgfQorICAgIENBQ0ZMYXllclNldEJvcmRlcldpZHRoKG93bmVyKCktPnBsYXRm
b3JtTGF5ZXIoKSwgdmFsdWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpkcmF3VGlsZShDQUNGTGF5ZXJSZWYgdGlsZSwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYg
dmFsdWUpCiB7Ci0gICAgQ0dQb2ludCB0aWxlUG9zaXRpb24gPSBDQUNGTGF5ZXJHZXRQb3NpdGlv
bih0aWxlKTsKLSAgICBDR1JlY3QgdGlsZUJvdW5kcyA9IENBQ0ZMYXllckdldEJvdW5kcyh0aWxl
KTsKKyAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBSZXRh
aW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKSk7CiAKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwot
Ci0gICAgLy8gU2V0IHRoZSBjb250ZXh0IGNsaXBwaW5nIHJlY3RhbmdsZSB0byB0aGUgY3VycmVu
dCB0aWxlCi0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RNYWtlKHRpbGVQ
b3NpdGlvbi54LCB0aWxlUG9zaXRpb24ueSwgdGlsZUJvdW5kcy5zaXplLndpZHRoLCB0aWxlQm91
bmRzLnNpemUuaGVpZ2h0KSk7Ci0KLSAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1D
QUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duKSB7Ci0gICAgICAgIC8vIElmIHRoZSBsYXllciBp
cyByZW5kZXJpbmcgdG9wLWRvd24sIGl0IHdpbGwgZmxpcCB0aGUgY29vcmRpbmF0ZXMgaW4geS4g
VGlsZWQgbGF5ZXJzIGFyZQotICAgICAgICAvLyBhbHJlYWR5IGZsaXBwaW5nLCBzbyB3ZSBuZWVk
IHRvIHVuZG8gdGhhdCBoZXJlLgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4
dCwgMCwgb3duZXIoKS0+Ym91bmRzKCkuaGVpZ2h0KCkpOwotICAgICAgICBDR0NvbnRleHRTY2Fs
ZUNUTShjb250ZXh0LCAxLCAtMSk7Ci0gICAgfQorICAgIGlmICh2YWx1ZS5pc1ZhbGlkKCkpCisg
ICAgICAgIHZhbHVlLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29tcG9uZW50c1sxXSwgY29tcG9u
ZW50c1syXSwgY29tcG9uZW50c1szXSk7CiAKLSAgICAvLyBEcmF3IHRoZSB0aWxlCi0gICAgZGlz
cGxheUNhbGxiYWNrKG93bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgY29udGV4dCk7CisgICAgUmV0
YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihDR0NvbG9yQ3JlYXRlKGNvbG9yU3Bh
Y2UuZ2V0KCksIGNvbXBvbmVudHMpKTsKIAotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29u
dGV4dCk7Ci19Ci0KLVRpbGVDb250cm9sbGVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
Y3JlYXRlVGlsZUNvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIpCi17Ci0gICAg
QVNTRVJUKCFtX3RpbGVDb250cm9sbGVyKTsKLSAgICBtX3RpbGVDb250cm9sbGVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaWxlQ29udHJvbGxlcj4ocm9vdExheWVyKTsKLSAgICByZXR1cm4gbV90aWxl
Q29udHJvbGxlci5nZXQoKTsKLX0KLQotVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6dGlsZWRCYWNraW5nKCkKLXsKLSAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5n
ZXQoKTsKKyAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihvd25lcigpLT5wbGF0Zm9ybUxheWVy
KCksIGNvbG9yLmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCAqQ0dDb250ZXh0
UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRS
ZWN0OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyOwogY2xhc3MgVGlsZUNvbnRyb2xsZXI7CkBAIC00
Nyw5ICs0OCw5IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbChQbGF0
Zm9ybUNBTGF5ZXIqKTsKICAgICB+UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKTsKIAotICAg
IHZvaWQgZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLSAgICB2
b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNl
dE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxh
eWVyUmVmLCBDR0NvbnRleHRSZWYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpOwogICAgIFBsYXRmb3JtQ0FMYXllciogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVy
OyB9CiAKICAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0Jik7
CkBAIC01OSwzMiArNjAsMjYgQEAgcHVibGljOgogICAgIHNpemVfdCBzdWJsYXllckNvdW50KCkg
Y29uc3Q7CiAgICAgaW50IGluZGV4T2ZTdWJsYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIHJl
ZmVyZW5jZSk7CiAKLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVl
KGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsK
ICAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgVGlsZUNvbnRyb2xs
ZXIqIGNyZWF0ZVRpbGVDb250cm9sbGVyKFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKTsKLSAg
ICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpOworICAgIHZpcnR1YWwgZmxvYXQgY29udGVu
dHNTY2FsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKTsKKworICAgIHZvaWQgZHJhd1Jl
cGFpbnRDb3VudGVycyhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZiwgQ0dSZWN0IGxheWVyQm91
bmRzLCBpbnQgZHJhd0NvdW50KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGludGVybmFsU2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCopOwogICAgIFBsYXRmb3JtQ0FMYXllciogc3VibGF5
ZXJBdEluZGV4KGludCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgdm9pZCB0aWxlRGlzcGxheUNhbGxi
YWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLQotICAgIHZvaWQgZHJhd1RpbGUoQ0FD
RkxheWVyUmVmLCBDR0NvbnRleHRSZWYpOwotICAgIENHU2l6ZSBjb25zdHJhaW5lZFNpemUoY29u
c3QgQ0dTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBhZGRUaWxlKCk7Ci0gICAgdm9pZCByZW1vdmVU
aWxlKCk7Ci0gICAgQ0FDRkxheWVyUmVmIHRpbGVBdEluZGV4KGludCk7Ci0gICAgaW50IHRpbGVD
b3VudCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlVGlsZXMoKTsKLQogICAgIFBsYXRmb3JtQ0FM
YXllciogbV9vd25lcjsKLQotICAgIENHU2l6ZSBtX3RpbGVTaXplOwotICAgIENHU2l6ZSBtX2Nv
bnN0cmFpbmVkU2l6ZTsKLSAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBtX3RpbGVQYXJlbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRpbGVDb250cm9sbGVyPiBtX3RpbGVDb250cm9sbGVyOwog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRp
bGVkQmFja2luZ0xheWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2lu
Y2x1ZGUgIlRpbGVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisjaW5j
bHVkZSA8UXVhcnR6Q29yZS9DQUNGTGF5ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dl
YlRpbGVkQmFja2luZ0xheWVyV2luOjpXZWJUaWxlZEJhY2tpbmdMYXllcldpbihQbGF0Zm9ybUNB
TGF5ZXIqIG93bmVyKQorICAgIDogUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwob3duZXIpCit7
Cit9CisKK1dlYlRpbGVkQmFja2luZ0xheWVyV2luOjp+V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4o
KQoreworfQorCitzdHJ1Y3QgRGlzcGxheU9uTWFpblRocmVhZENvbnRleHQgeworICAgIFJldGFp
blB0cjxDQUNGTGF5ZXJSZWY+IGxheWVyOworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNv
bnRleHQ7CisKKyAgICBEaXNwbGF5T25NYWluVGhyZWFkQ29udGV4dChDQUNGTGF5ZXJSZWYgY2FM
YXllciwgQ0dDb250ZXh0UmVmIGNhQ29udGV4dCkKKyAgICAgICAgOiBsYXllcihjYUxheWVyKQor
ICAgICAgICAsIGNvbnRleHQoY2FDb250ZXh0KQorICAgIHsKKyAgICB9Cit9OworCitzdGF0aWMg
dm9pZCByZWRpc3BhdGNoT25NYWluUXVldWUodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5T25NYWluVGhyZWFk
Q29udGV4dD4gcmV0YWluZWRDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8RGlzcGxheU9uTWFpblRo
cmVhZENvbnRleHQqPihjb250ZXh0KSk7CisgICAgaWYgKCFyZXRhaW5lZENvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsKiBzZWxmID0gc3Rh
dGljX2Nhc3Q8UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwqPihDQUNGTGF5ZXJHZXRVc2VyRGF0
YShyZXRhaW5lZENvbnRleHQtPmxheWVyLmdldCgpKSk7CisKKyAgICBzZWxmLT5kaXNwbGF5Q2Fs
bGJhY2socmV0YWluZWRDb250ZXh0LT5sYXllci5nZXQoKSwgcmV0YWluZWRDb250ZXh0LT5jb250
ZXh0LmdldCgpKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxheUNh
bGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jX2YoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgbmV3IERpc3BsYXlPbk1haW5UaHJlYWRDb250ZXh0KGNhTGF5
ZXIsIGNvbnRleHQpLCByZWRpc3BhdGNoT25NYWluUXVldWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmICghb3duZXIoKSB8fCAhb3duZXIoKS0+b3duZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENH
UmVjdCBsYXllckJvdW5kcyA9IG93bmVyKCktPmJvdW5kcygpOworICAgIFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlIGxheWVyVHlwZSA9IG93bmVyKCktPmxheWVyVHlwZSgpOworICAgIEFTU0VS
VChsYXllclR5cGUgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdMYXll
cik7CisKKyAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCA9IG93bmVyKCktPm93bmVy
KCk7CisgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9u
IG9yaWVudGF0aW9uID0gY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9u
KCk7CisKKyAgICBQbGF0Zm9ybUNBTGF5ZXI6OmZsaXBDb250ZXh0KGNvbnRleHQsIGxheWVyQm91
bmRzLnNpemUuaGVpZ2h0KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
Y29udGV4dCk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0
aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQorICAgIC8vIHNtYWxs
ZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKKyAgICBDR1JlY3Qg
Y2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICBJ
bnRSZWN0IGNsaXAoZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CisgICAgY2xpZW50LT5w
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKG93bmVyKCksIGdyYXBoaWNzQ29udGV4dCwgY2xp
cCk7CisKKyAgICBpZiAoY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIo
b3duZXIoKSkpIHsKKyAgICAgICAgaW50IGRyYXdDb3VudCA9IGNsaWVudC0+cGxhdGZvcm1DQUxh
eWVySW5jcmVtZW50UmVwYWludENvdW50KG93bmVyKCkpOworICAgICAgICBkcmF3UmVwYWludENv
dW50ZXJzKGNhTGF5ZXIsIGNvbnRleHQsIGxheWVyQm91bmRzLCBkcmF3Q291bnQpOworICAgIH0K
KworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBjbGllbnQtPnBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShvd25lcigpKTsKK30KKwordm9pZCBXZWJUaWxl
ZEJhY2tpbmdMYXllcldpbjo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAobV90aWxlQ29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1fdGlsZUNvbnRyb2xsZXItPnNldE5lZWRzRGlzcGxh
eSgpOworfQorCit2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgaWYgKG1fdGlsZUNvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpKTsKK30KKwordm9pZCBXZWJUaWxlZEJh
Y2tpbmdMYXllcldpbjo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzKQoreworICAg
IGlmIChDR1JlY3RFcXVhbFRvUmVjdChib3VuZHMsIG93bmVyKCktPmJvdW5kcygpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldEJvdW5kcyhi
b3VuZHMpOworCisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIG1fdGlsZUNvbnRy
b2xsZXItPnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCgpOworfQorCitib29sIFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjppc09wYXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNv
bnRyb2xsZXIgPyBtX3RpbGVDb250cm9sbGVyLT50aWxlc0FyZU9wYXF1ZSgpIDogdHJ1ZTsKK30K
Kwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0T3BhcXVlKGJvb2wgdmFsdWUpCit7
CisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9s
bGVyLT5zZXRUaWxlc09wYXF1ZSh2YWx1ZSk7Cit9CisKK2Zsb2F0IFdlYlRpbGVkQmFja2luZ0xh
eWVyV2luOjpjb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlQ29udHJv
bGxlciA/IG1fdGlsZUNvbnRyb2xsZXItPmNvbnRlbnRzU2NhbGUoKSA6IDEuMGY7Cit9CisKK3Zv
aWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGVG
YWN0b3IpCit7CisgICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBtX3Rp
bGVDb250cm9sbGVyLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlRmFjdG9yKTsKK30KKwordm9pZCBX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6c2V0Qm9yZGVyV2lkdGgoZmxvYXQgdmFsdWUpCit7Cisg
ICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVy
LT5zZXRUaWxlRGVidWdCb3JkZXJXaWR0aCh2YWx1ZSAvIDIpOworfQorCit2b2lkIFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgdmFsdWUpCit7Cisg
ICAgaWYgKG1fdGlsZUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBtX3RpbGVDb250cm9sbGVy
LT5zZXRUaWxlRGVidWdCb3JkZXJDb2xvcih2YWx1ZSk7Cit9CisKK1RpbGVDb250cm9sbGVyKiBX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6Y3JlYXRlVGlsZUNvbnRyb2xsZXIoUGxhdGZvcm1DQUxh
eWVyKiByb290TGF5ZXIpCit7CisgICAgQVNTRVJUKCFtX3RpbGVDb250cm9sbGVyKTsKKyAgICBt
X3RpbGVDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxUaWxlQ29udHJvbGxlcj4ocm9vdExh
eWVyKTsKKyAgICByZXR1cm4gbV90aWxlQ29udHJvbGxlci5nZXQoKTsKK30KKworVGlsZWRCYWNr
aW5nKiBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6dGlsZWRCYWNraW5nKCkKK3sKKyAgICByZXR1
cm4gbV90aWxlQ29udHJvbGxlci5nZXQoKTsKK30KKwordm9pZCBXZWJUaWxlZEJhY2tpbmdMYXll
cldpbjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV90aWxlQ29udHJvbGxlcik7CisgICAgbV90aWxlQ29udHJvbGxlciA9IG51bGxwdHI7
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGls
ZWRCYWNraW5nTGF5ZXJXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tp
bmdMYXllcldpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJUaWxlZEJhY2tp
bmdMYXllcldpbl9oCisjZGVmaW5lIFdlYlRpbGVkQmFja2luZ0xheWVyV2luX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4gOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWwgeworcHVibGljOgorICAgIFdlYlRpbGVkQmFja2luZ0xheWVyV2luKFBsYXRm
b3JtQ0FMYXllciopOworICAgIH5XZWJUaWxlZEJhY2tpbmdMYXllcldpbigpOworCisgICAgdm9p
ZCBkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzT3Bh
cXVlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAg
IGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldENvbnRl
bnRzU2NhbGUoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9h
dCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7CisKKyAgICAvLyBXZWJUaWxlZEJhY2tpbmdMYXllciBGZWF0dXJlcworICAgIFRpbGVD
b250cm9sbGVyKiBjcmVhdGVUaWxlQ29udHJvbGxlcihQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXll
cik7CisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKTsKKyAgICB2b2lkIGludmFsaWRh
dGUoKTsKKworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBtX3RpbGVQYXJl
bnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbGVDb250cm9sbGVyPiBtX3RpbGVDb250cm9sbGVy
OworfTsKKworfQorCisjZW5kaWYgLy8gV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW5faAo=
</data>
<flag name="review"
          id="286433"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>