<?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>116406</bug_id>
          
          <creation_ts>2013-05-18 17:58:31 -0700</creation_ts>
          <short_desc>Hoist several chunks of code at the top of RenderLayer::paintLayerContents() onto new functions</short_desc>
          <delta_ts>2013-05-19 19:26:58 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philn</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>890982</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-18 17:58:31 -0700</bug_when>
    <thetext>Hoist several chunks of code at the top of RenderLayer::paintLayerContents() onto new functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890983</commentid>
    <comment_count>1</comment_count>
      <attachid>202224</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-18 18:04:30 -0700</bug_when>
    <thetext>Created attachment 202224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890984</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-18 18:06:29 -0700</bug_when>
    <thetext>Attachment 202224 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/rendering/FilterEffectRenderer.cpp&apos;, u&apos;Source/WebCore/rendering/FilterEffectRenderer.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;, u&apos;Source/WebCore/rendering/RenderLayer.h&apos;]&quot; exit_code: 1
Source/WebCore/ChangeLog:12:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:14:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:15:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890985</commentid>
    <comment_count>3</comment_count>
      <attachid>202224</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-18 18:08:27 -0700</bug_when>
    <thetext>Comment on attachment 202224
Patch

Attachment 202224 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/494832</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890986</commentid>
    <comment_count>4</comment_count>
      <attachid>202224</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-18 18:09:20 -0700</bug_when>
    <thetext>Comment on attachment 202224
Patch

Attachment 202224 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/493800</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890987</commentid>
    <comment_count>5</comment_count>
      <attachid>202224</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-05-18 18:09:56 -0700</bug_when>
    <thetext>Comment on attachment 202224
Patch

Attachment 202224 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/494833</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890989</commentid>
    <comment_count>6</comment_count>
      <attachid>202224</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-18 18:11:48 -0700</bug_when>
    <thetext>Comment on attachment 202224
Patch

Attachment 202224 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/497538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890990</commentid>
    <comment_count>7</comment_count>
      <attachid>202224</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-05-18 18:20:21 -0700</bug_when>
    <thetext>Comment on attachment 202224
Patch

Attachment 202224 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/493804</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890991</commentid>
    <comment_count>8</comment_count>
      <attachid>202224</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-05-18 18:31:39 -0700</bug_when>
    <thetext>Comment on attachment 202224
Patch

Attachment 202224 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/486941</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890992</commentid>
    <comment_count>9</comment_count>
      <attachid>202225</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-18 18:36:05 -0700</bug_when>
    <thetext>Created attachment 202225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890993</commentid>
    <comment_count>10</comment_count>
      <attachid>202225</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-18 18:41:33 -0700</bug_when>
    <thetext>Comment on attachment 202225
Patch

Attachment 202225 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/493810</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890994</commentid>
    <comment_count>11</comment_count>
      <attachid>202225</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-05-18 18:41:41 -0700</bug_when>
    <thetext>Comment on attachment 202225
Patch

Attachment 202225 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/490871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890995</commentid>
    <comment_count>12</comment_count>
      <attachid>202226</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-18 18:45:28 -0700</bug_when>
    <thetext>Created attachment 202226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890997</commentid>
    <comment_count>13</comment_count>
      <attachid>202226</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-18 18:48:01 -0700</bug_when>
    <thetext>Comment on attachment 202226
Patch

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

r=me.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3691
&gt; +bool RenderLayer::setupFontSubpixelQuantization(GraphicsContext* context, bool &amp;didQuantizeFonts)

&amp; placement.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3725
&gt; +    if (!style)
&gt; +        return false;

This could be an assertion instead; &apos;style&apos; won&apos;t be null if the renderer has a clip path.

&gt; Source/WebCore/rendering/RenderLayer.h:939
&gt; +    bool setupFontSubpixelQuantization(GraphicsContext*, bool &amp;didQuantizeFonts);

&amp; placement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891097</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-05-19 19:26:58 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/150349</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202224</attachid>
            <date>2013-05-18 18:04:30 -0700</date>
            <delta_ts>2013-05-18 18:35:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116406-20130518180321.patch</filename>
            <type>text/plain</type>
            <size>23637</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQzMWU5NGM3ZjAwODRl
NTViMDU4MDVhYTA2NjMzMzA5OTRmMzI5OC4uODUzZDZiNjI1OWM4MjBmY2E1Y2UyZDYwNDIxZGEy
OTk3NDc5NjgyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTA1LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEhvaXN0IHNldmVy
YWwgY2h1bmtzIG9mIGNvZGUgYXQgdGhlIHRvcCBvZiBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNv
bnRlbnRzKCkgb250byBuZXcgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMoKSB3YXMgZ2V0dGluZyBwb2xsdXRlZCB3aXRoIGNvZGUgcmVsYXRlZCB0byBmaWx0ZXJzLAor
ICAgICAgICBjbGlwcGluZyBhbmQgZm9udCBzdWJwaXhlbCBxdWFudGl6YXRpb24sIGFuZCBoYXJk
IHRvIGZvbGxvdy4KKyAgICAgICAgCisgICAgICAgIE1vdmUgdGhyZWUgaHVua3Mgb2YgY29kZSBp
bnRvIG5ldyBmdW5jdGlvbnM6CisgICAgICAgICogc2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRp
b24oKSBub3cgY29udGFpbnMgdGhlIGNvZGUgcmVsYXRlZCB0byB3aGV0aGVyIHdlIGRpc2FibGUK
KyAgICAgICAgZm9udCBzdWJwaXhlbCBxdWFudGl6YXRpb24gb24gdGhlIGNvbnRleHQuCisgICAg
ICAgICogc2V0dXBDbGlwUGF0aCgpIG5vdyBjb250YWlucyBjb2RlIHJlbGF0ZWQgdG8gY2xpcHBp
bmcgdG8gc2hhcGVzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICAqIHNldHVwRmlsdGVycygpIGFu
ZCBhcHBseUZpbHRlcnMoKSBjb250YWluIGNvZGUgcmVsYXRlZCB0byBDU1MgZmlsdGVycy4KKyAg
ICAgICAgCisgICAgICAgIEFzIHBhcnQgb2YgdGhpcywgdGhlIGludGVyYWN0aW9uIHdpdGggRmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIgd2FzIHNpbXBsaWZpZWQuCisgICAgICAgIEl0IHdhcyBj
b252ZW5pZW50IGZvciBzZXR1cEZpbHRlcnMoKSB0byByZXR1cm4gYSBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlciBvYmplY3QKKyAgICAgICAgaWYgc3VjY2Vzc2Z1bCwgc28gd2UgdXNlIGFuIE93
blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gbm93LiBJbiBhZGRpdGlvbiwKKyAgICAg
ICAgdGhlIEdyYXBoaWNzQ29udGV4dCBzd2FwcGluZyB3YXMgbW92ZWQgZnJvbSBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckhlbHBlciBjb2RlIGludG8gUmVuZGVyTGF5ZXIKKyAgICAgICAgdG8gbWFrZSBp
dCBlYXNpZXIgdG8gZm9sbG93LiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBubyBsb25nZXIg
aG9sZHMgb24gdG8KKyAgICAgICAgdGhlIG9sZCBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAg
Tm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVy
OjpmaWx0ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3RSZW5kZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJIZWxwZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpoYXNTdGFydGVkRmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNl
dHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzZXR1cENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1
cEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmFwcGx5RmlsdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAxMy0wNS0xNyAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBHYXJiYWdlIG9uIHBhZ2Ug
YmFja2dyb3VuZCB3aGlsZSBodHRwOi8vY2FuYmVycmFiYWxsb29ucy5jb20uYXUgaXMgbG9hZGlu
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5j
cHAKaW5kZXggYTc4MzViYmI4MDZjZmZhOTRjMmM2NDA1YmE3MGYyMWFmNWM3MzI5Yy4uOWYxNjhj
OGJiMDFjN2ZmOThjYmMzY2ViZWMwNzQzODIzNGE4OWRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC00NzAsOCArNDcwLDE3
IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OnByZXBhcmVGaWx0ZXJFZmZlY3Qo
UmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBjCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQot
ICAgCi1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZp
bHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQqIG9sZENvbnRleHQpCisKK0dyYXBoaWNzQ29udGV4
dCogRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmZpbHRlckNvbnRleHQoKSBjb25zdAorewor
ICAgIGlmICghbV9oYXZlRmlsdGVyRWZmZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZp
bHRlckVmZmVjdFJlbmRlcmVyKiBmaWx0ZXIgPSBtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJl
cigpOworICAgIHJldHVybiBmaWx0ZXItPmlucHV0Q29udGV4dCgpOworfQorCitib29sIEZpbHRl
ckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCgpCiB7CiAgICAgQVNTRVJU
KG1fcmVuZGVyTGF5ZXIpOwogICAgIApAQCAtNDgyLDIxICs0OTEsMjAgQEAgR3JhcGhpY3NDb250
ZXh0KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0KgogICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8ICFpc0ZpbHRlclNp
emVWYWxpZChmaWx0ZXItPmZpbHRlclJlZ2lvbigpKSkgewogICAgICAgICAvLyBEaXNhYmxlIHRo
ZSBmaWx0ZXJzIGFuZCBjb250aW51ZS4KICAgICAgICAgbV9oYXZlRmlsdGVyRWZmZWN0ID0gZmFs
c2U7Ci0gICAgICAgIHJldHVybiBvbGRDb250ZXh0OworICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIG1fc2F2ZWRHcmFwaGljc0NvbnRleHQgPSBvbGRDb250ZXh0OwotICAg
IAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBjb250ZW50cyBvZiB0
aGUgbGF5ZXIgaXMgY2FwdHV0ZXJkIGluIHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KICAg
ICBzb3VyY2VHcmFwaGljc0NvbnRleHQtPnNhdmUoKTsKICAgICBzb3VyY2VHcmFwaGljc0NvbnRl
eHQtPnRyYW5zbGF0ZSgtbV9wYWludE9mZnNldC54KCksIC1tX3BhaW50T2Zmc2V0LnkoKSk7CiAg
ICAgc291cmNlR3JhcGhpY3NDb250ZXh0LT5jbGVhclJlY3QobV9yZXBhaW50UmVjdCk7CiAgICAg
c291cmNlR3JhcGhpY3NDb250ZXh0LT5jbGlwKG1fcmVwYWludFJlY3QpOwotICAgIAotICAgIHJl
dHVybiBzb3VyY2VHcmFwaGljc0NvbnRleHQ7CisKKyAgICBtX3N0YXJ0ZWRGaWx0ZXJFZmZlY3Qg
PSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVm
ZmVjdFJlbmRlcmVySGVscGVyOjphcHBseUZpbHRlckVmZmVjdCgpCit2b2lkIEZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQqIGRlc3Rp
bmF0aW9uQ29udGV4dCkKIHsKICAgICBBU1NFUlQobV9oYXZlRmlsdGVyRWZmZWN0ICYmIG1fcmVu
ZGVyTGF5ZXItPmZpbHRlclJlbmRlcmVyKCkpOwogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKiBm
aWx0ZXIgPSBtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpOwpAQCAtNTA4LDExICs1MTYs
OSBAQCBHcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjphcHBseUZp
bHRlckVmZmVjdCgpCiAgICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci0+b3V0cHV0UmVj
dCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQu
eSgpKTsKICAgICAKLSAgICBtX3NhdmVkR3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
ZmlsdGVyLT5vdXRwdXQoKSwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29s
b3JTcGFjZSgpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRlc3RSZWN0KSwgQ29tcG9zaXRlU291cmNl
T3Zlcik7CisgICAgZGVzdGluYXRpb25Db250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5v
dXRwdXQoKSwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgp
LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRlc3RSZWN0KSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CiAg
ICAgCiAgICAgZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICAKLSAgICBy
ZXR1cm4gbV9zYXZlZEdyYXBoaWNzQ29udGV4dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApp
bmRleCA1MzVhODdhYzA0NTdjNjEyOGI3MWFkNzQ2ODEyY2RhZjE5MWY1YjEzLi4wZDNhYzQwMTcx
NjJhYmE1ZThkOWY2NzlkZTRkYTc5MjNkNmFiMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApAQCAtNTYsMjYgKzU2LDI4IEBAIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsKIHB1Ymxp
YzoKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3Qp
Ci0gICAgICAgIDogbV9zYXZlZEdyYXBoaWNzQ29udGV4dCgwKQotICAgICAgICAsIG1fcmVuZGVy
TGF5ZXIoMCkKKyAgICAgICAgOiBtX3JlbmRlckxheWVyKDApCiAgICAgICAgICwgbV9oYXZlRmls
dGVyRWZmZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgICAgICwgbV9zdGFydGVkRmlsdGVyRWZm
ZWN0KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXZlRmlsdGVyRWZmZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9oYXZlRmlsdGVyRWZmZWN0OyB9Ci0gICAgYm9vbCBoYXNTdGFy
dGVkRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zYXZlZEdyYXBoaWNzQ29udGV4dDsg
fQorICAgIGJvb2wgaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRlZEZpbHRlckVmZmVjdDsgfQogCiAgICAgYm9vbCBwcmVwYXJlRmlsdGVyRWZmZWN0KFJlbmRl
ckxheWVyKiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKLSAgICBH
cmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCogb2xkQ29u
dGV4dCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBhcHBseUZpbHRlckVmZmVjdCgpOworICAgIGJv
b2wgYmVnaW5GaWx0ZXJFZmZlY3QoKTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCogZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGZpbHRlckNvbnRleHQoKSBjb25zdDsKIAogICAgIGNvbnN0IExheW91dFJlY3QmIHJlcGFp
bnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogcHJpdmF0ZToKLSAgICBH
cmFwaGljc0NvbnRleHQqIG1fc2F2ZWRHcmFwaGljc0NvbnRleHQ7Ci0gICAgUmVuZGVyTGF5ZXIq
IG1fcmVuZGVyTGF5ZXI7CisgICAgUmVuZGVyTGF5ZXIqIG1fcmVuZGVyTGF5ZXI7IC8vIEZJWE1F
OiB0aGlzIGlzIG1haW5seSB1c2VkIHRvIGdldCB0aGUgRmlsdGVyRWZmZWN0UmVuZGVyZXIuIEZp
bHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExh
eW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0Owog
ICAgIGJvb2wgbV9oYXZlRmlsdGVyRWZmZWN0OworICAgIGJvb2wgbV9zdGFydGVkRmlsdGVyRWZm
ZWN0OwogfTsKIAogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgOiBwdWJsaWMgRmlsdGVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwMWI1ZjFiZjZhMjky
MzgzYjliMGVmNDUyNzc4MWJjNmMzNDQ1ZjAwLi4yOGE5ZTM4NGFhMDIwNjVhYTZjODkwMjg0MGVm
ZTA4YTgyMGE4NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTM2ODgsNiArMzY4OCwxMzQgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRl
bnRzQW5kUmVmbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnMKICAgICBwYWlu
dExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwog
fQogCitib29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGJvb2wgJmRpZFF1YW50aXplRm9udHMpCit7CisgICAgaWYg
KGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYm9vbCBzY3JvbGxpbmdPbk1haW5UaHJlYWQgPSB0cnVlOworICAgIEZyYW1lKiBmcmFtZSA9
IHJlbmRlcmVyKCktPmZyYW1lKCk7CisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAg
ICBpZiAoZnJhbWUpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7
CisgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdPbk1haW5UaHJlYWQgPSBzY3JvbGxpbmdDb29yZGluYXRvci0+c2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOworICAgICAgICB9CisgICAgfQorI2VuZGlm
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBx
dWFudGl6YXRpb24gZm9yIG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9s
bCB0aG9zZQorICAgIC8vIHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICBib29s
IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKGZyYW1lICYmIGZyYW1lLT5vd25l
ckVsZW1lbnQoKSk7CisgICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Nj
cm9sbEJ5UGFpbnRpbmcpIHsKKyAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQtPnNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpOworICAgICAgICBjb250ZXh0LT5zZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRo
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50
aW5nSW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBJbnRSZWN0JiByb290
UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKQoreworICAg
IGlmICghcmVuZGVyZXIoKS0+aGFzQ2xpcFBhdGgoKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQVNTRVJUKHN0eWxlLT5jbGlwUGF0aCgpKTsKKyAgICBpZiAoc3R5bGUtPmNs
aXBQYXRoKCktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6U0hBUEUp
IHsKKyAgICAgICAgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBhdGggPSBzdGF0aWNfY2Fz
dDxTaGFwZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOworCisgICAgICAg
IGlmICghcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpIHsKKyAgICAgICAgICAgIHJvb3RSZWxh
dGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIs
ICZvZmZzZXRGcm9tUm9vdCwgMCk7CisgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21w
dXRlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAg
ICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLT5wYXRoKHJvb3RSZWxhdGl2ZUJvdW5kcyks
IGNsaXBQYXRoLT53aW5kUnVsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisj
aWYgRU5BQkxFKFNWRykKKyAgICBpZiAoc3R5bGUtPmNsaXBQYXRoKCktPmdldE9wZXJhdGlvblR5
cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CisgICAgICAgIFJlZmVyZW5j
ZUNsaXBQYXRoT3BlcmF0aW9uKiByZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbiA9IHN0YXRpY19j
YXN0PFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOworICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQo
cmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb24tPmZyYWdtZW50KCkpIDogMDsKKyAgICAgICAgaWYg
KGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Y2xpcFBhdGhUYWcpICYm
IGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcm9vdFJlbGF0aXZlQm91
bmRzQ29tcHV0ZWQpIHsKKyAgICAgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxj
dWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3Qs
IDApOworICAgICAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBh
IHNhZmVyIGNhc3Qgc3VjaCBhcyB0b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkuCisgICAg
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZG8gYSBjb250ZXh0LT5zYXZlKCkgYW5kIHJl
dHVybiB0cnVlIHNvIHdlIHJlc3RvcmUgdGhlIGNvbnRleHQ/CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqPihlbGVtZW50LT5yZW5kZXJlcigpKS0+YXBw
bHlDbGlwcGluZ1RvQ29udGV4dChyZW5kZXJlcigpLCByb290UmVsYXRpdmVCb3VuZHMsIHBhaW50
aW5nSW5mby5wYWludERpcnR5UmVjdCwgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK1Bh
c3NPd25QdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZp
bHRlcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRp
bmdJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0RnJvbVJvb3QsIEludFJlY3QmIHJvb3RS
ZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCit7CisgICAg
aWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBib29sIGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJSZW5kZXJlcigpICYmIHBhaW50c1dpdGhG
aWx0ZXJzKCk7CisgICAgaWYgKCFoYXNQYWludGVkRmlsdGVyKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIE93blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gZmlsdGVyUGFpbnRlciA9
IGFkb3B0UHRyKG5ldyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcihoYXNQYWludGVkRmlsdGVy
KSk7CisgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmlsdGVyRWZmZWN0KCkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIFJlbmRlckxheWVyRmlsdGVySW5mbyogZmlsdGVySW5mbyA9
IHRoaXMtPmZpbHRlckluZm8oKTsKKyAgICBBU1NFUlQoZmlsdGVySW5mbyk7CisgICAgTGF5b3V0
UmVjdCBmaWx0ZXJSZXBhaW50UmVjdCA9IGZpbHRlckluZm8tPmRpcnR5U291cmNlUmVjdCgpOwor
ICAgIGZpbHRlclJlcGFpbnRSZWN0Lm1vdmUob2Zmc2V0RnJvbVJvb3QueCgpLCBvZmZzZXRGcm9t
Um9vdC55KCkpOworCisgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgeworICAg
ICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0lu
Zm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOworICAgICAgICByb290UmVsYXRpdmVC
b3VuZHNDb21wdXRlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGZpbHRlclBhaW50ZXItPnBy
ZXBhcmVGaWx0ZXJFZmZlY3QodGhpcywgcm9vdFJlbGF0aXZlQm91bmRzLCBwYWludGluZ0luZm8u
cGFpbnREaXJ0eVJlY3QsIGZpbHRlclJlcGFpbnRSZWN0KSkgeworICAgICAgICAvLyBOb3cgd2Ug
a25vdyBmb3Igc3VyZSwgdGhhdCB0aGUgc291cmNlIGltYWdlIHdpbGwgYmUgdXBkYXRlZCwgc28g
d2UgY2FuIHJldmVydCBvdXIgdHJhY2tpbmcgcmVwYWludCByZWN0IGJhY2sgdG8gemVyby4KKyAg
ICAgICAgZmlsdGVySW5mby0+cmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKKworICAgICAgICBpZiAo
IWZpbHRlclBhaW50ZXItPmJlZ2luRmlsdGVyRWZmZWN0KCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBmYWlsIHRvIGFsbG9jYXRlIHRo
ZSBncmFwaGljcyBjb250ZXh0IGZvciB0aGUgb2Zmc2NyZWVuIGJ1ZmZlci4KKyAgICAgICAgQVNT
RVJUKGZpbHRlclBhaW50ZXItPmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSk7CisKKyAgICAgICAg
cGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0ID0gZmlsdGVyUGFpbnRlci0+cmVwYWludFJlY3Qo
KTsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBuZWVkcyB0aGUgZnVsbCBzb3VyY2UgaW1hZ2Us
IHdlIG5lZWQgdG8gYXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdGFuZ2xlcy4KKyAgICAgICAgLy8g
T3RoZXJ3aXNlLCBpZiBmb3IgZXhhbXBsZSB0aGlzIGxheWVyIGhhcyBvdmVyZmxvdzpoaWRkZW4s
IGEgZHJvcCBzaGFkb3cgd2lsbCBub3QgY29tcHV0ZSBjb3JyZWN0bHkuCisgICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSB3aWxsIHN0aWxsIGFwcGx5IHRoZSBjbGlwcGluZyBvbiB0aGUgZmluYWwgcmVu
ZGVyaW5nIG9mIHRoZSBmaWx0ZXIuCisgICAgICAgIHBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJl
Y3QgPSAhZmlsdGVyUmVuZGVyZXIoKS0+aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAg
ICAgIHJldHVybiBmaWx0ZXJQYWludGVyLnJlbGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXI6OmFwcGx5RmlsdGVycyhGaWx0ZXJF
ZmZlY3RSZW5kZXJlckhlbHBlciogZmlsdGVyUGFpbnRlciwgR3JhcGhpY3NDb250ZXh0KiBvcmln
aW5hbENvbnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIExheWVyRnJhZ21l
bnRzJiBsYXllckZyYWdtZW50cykKK3sKKyAgICBBU1NFUlQoZmlsdGVyUGFpbnRlci0+aGFzU3Rh
cnRlZEZpbHRlckVmZmVjdCgpKTsKKyAgICAvLyBBcHBseSB0aGUgY29ycmVjdCBjbGlwcGluZyAo
aWUuIG92ZXJmbG93OiBoaWRkZW4pLgorICAgIC8vIEZJWE1FOiBJdCBpcyBpbmNvcnJlY3QgdG8g
anVzdCBjbGlwIHRvIHRoZSBkYW1hZ2VSZWN0IGhlcmUgb25jZSBtdWx0aXBsZSBmcmFnbWVudHMg
YXJlIGludm9sdmVkLgorICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXJGcmFnbWVu
dHMuaXNFbXB0eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVyRnJhZ21lbnRzWzBdLmJhY2tncm91bmRS
ZWN0OworICAgIGNsaXBUb1JlY3QocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb3JpZ2luYWxDb250
ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGJhY2tncm91bmRSZWN0KTsKKyAgICBm
aWx0ZXJQYWludGVyLT5hcHBseUZpbHRlckVmZmVjdChvcmlnaW5hbENvbnRleHQpOworICAgIHJl
c3RvcmVDbGlwKG9yaWdpbmFsQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBi
YWNrZ3JvdW5kUmVjdCk7CisgICAgcmV0dXJuIG9yaWdpbmFsQ29udGV4dDsKK30KKyNlbmRpZgor
CiB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVy
RmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8
IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKQEAgLTM3MTEsOCArMzgzOSw2IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgIHx8ICghaXNQYWludGluZ1Njcm9sbGlu
Z0NvbnRlbnQgJiYgaXNQYWludGluZ0NvbXBvc2l0ZWRGb3JlZ3JvdW5kKSk7CiAgICAgYm9vbCBz
aG91bGRQYWludENvbnRlbnQgPSBtX2hhc1Zpc2libGVDb250ZW50ICYmIGlzU2VsZlBhaW50aW5n
TGF5ZXIgJiYgIWlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFyczsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID0gY29udGV4dDsKLSAgICAKICAgICBpZiAo
bG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5ICYm
ICFyZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSAmJiAhcmVuZGVyZXIoKS0+aXNSb290KCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzcyNSwxMDEgKzM4NTEsMjYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGkKICAgICBJbnRSZWN0IHJvb3RSZWxhdGl2ZUJvdW5kczsKICAgICBib29sIHJvb3RS
ZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFsc2U7CiAKLSAgICBib29sIGRpZFF1YW50aXplRm9u
dHMgPSB0cnVlOwotICAgIGJvb2wgc2Nyb2xsaW5nT25NYWluVGhyZWFkID0gdHJ1ZTsKLSAgICBG
cmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpOwotI2lmIEVOQUJMRShUSFJFQURFRF9T
Q1JPTExJTkcpCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nT25NYWluVGhyZWFkID0gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKLSAgICAgICAgfQot
ICAgIH0KLSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2Fi
bGUgc3VicGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMg
b25jZSB3ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJl
YWQuCi0gICAgYm9vbCBuZWVkVG9BZGp1c3RTdWJwaXhlbFF1YW50aXphdGlvbiA9IHNjcm9sbGlu
Z09uTWFpblRocmVhZCB8fCAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpIHx8IChmcmFtZSAmJiBmcmFtZS0+b3duZXJFbGVtZW50KCkp
OwotICAgIGlmIChuZWVkVG9BZGp1c3RTdWJwaXhlbFF1YW50aXphdGlvbikgewotICAgICAgICBk
aWRRdWFudGl6ZUZvbnRzID0gY29udGV4dC0+c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7
Ci0gICAgICAgIGNvbnRleHQtPnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhmYWxzZSk7
Ci0gICAgfQorICAgIGJvb2wgZGlkUXVhbnRpemVGb250cyA9IHRydWU7CisgICAgYm9vbCBuZWVk
VG9BZGp1c3RTdWJwaXhlbFF1YW50aXphdGlvbiA9IHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0
aW9uKGNvbnRleHQsIGRpZFF1YW50aXplRm9udHMpOwogCiAgICAgLy8gQXBwbHkgY2xpcC1wYXRo
IHRvIGNvbnRleHQuCi0gICAgYm9vbCBoYXNDbGlwUGF0aCA9IGZhbHNlOwotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCktPmhh
c0NsaXBQYXRoKCkgJiYgIWNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSAmJiBzdHlsZSkgewot
ICAgICAgICBBU1NFUlQoc3R5bGUtPmNsaXBQYXRoKCkpOwotICAgICAgICBpZiAoc3R5bGUtPmNs
aXBQYXRoKCktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6U0hBUEUp
IHsKLSAgICAgICAgICAgIGhhc0NsaXBQYXRoID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNhdmUoKTsKLSAgICAgICAgICAgIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQYXRoID0g
c3RhdGljX2Nhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbio+KHN0eWxlLT5jbGlwUGF0aCgpKTsK
LQotICAgICAgICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAgICAg
ICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50
aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9vdCwgMCk7Ci0gICAgICAgICAgICAgICAg
cm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlwUGF0aC0+cGF0aChyb290UmVsYXRpdmVCb3Vu
ZHMpLCBjbGlwUGF0aC0+d2luZFJ1bGUoKSk7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQot
ICAgICAgICBlbHNlIGlmIChzdHlsZS0+Y2xpcFBhdGgoKS0+Z2V0T3BlcmF0aW9uVHlwZSgpID09
IENsaXBQYXRoT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgIFJlZmVyZW5jZUNs
aXBQYXRoT3BlcmF0aW9uKiByZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0
PFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOwotICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBmb3J3YXJkIG9yIGV4dGVybmFs
IFNWRyByZWZlcmVuY2VzIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA0MDUpCi0gICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQgPyBkb2N1bWVu
dC0+Z2V0RWxlbWVudEJ5SWQocmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb24tPmZyYWdtZW50KCkp
IDogMDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmNsaXBQYXRoVGFnKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAgICAgICAgICAgICAg
ICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0lu
Zm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOwotICAgICAgICAgICAgICAgICAgICBy
b290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIHNhZmVyIGNhc3Qgc3Vj
aCBhcyB0b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkuCi0gICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKj4oZWxlbWVudC0+cmVuZGVyZXIoKSkt
PmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQocmVuZGVyZXIoKSwgcm9vdFJlbGF0aXZlQm91bmRzLCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNvbnRleHQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICB9CisgICAgYm9vbCBoYXNDbGlwUGF0aCA9IHNldHVwQ2xpcFBh
dGgoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91
bmRzLCByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCk7CiAKICAgICBMYXllclBhaW50aW5nSW5m
byBsb2NhbFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8pOwotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBmaWx0ZXJQYWludGVyKGZpbHRlclJl
bmRlcmVyKCkgJiYgcGFpbnRzV2l0aEZpbHRlcnMoKSk7Ci0gICAgaWYgKGZpbHRlclBhaW50ZXIu
aGF2ZUZpbHRlckVmZmVjdCgpICYmICFjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpIHsKLSAg
ICAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBmaWx0ZXJJbmZvID0gdGhpcy0+ZmlsdGVySW5m
bygpOwotICAgICAgICBBU1NFUlQoZmlsdGVySW5mbyk7Ci0gICAgICAgIExheW91dFJlY3QgZmls
dGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKLSAgICAgICAg
ZmlsdGVyUmVwYWludFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdC54KCksIG9mZnNldEZyb21Sb290
LnkoKSk7CiAKLSAgICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAg
ICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290LCAwKTsKLSAgICAgICAgICAgIHJvb3RS
ZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChm
aWx0ZXJQYWludGVyLnByZXBhcmVGaWx0ZXJFZmZlY3QodGhpcywgcm9vdFJlbGF0aXZlQm91bmRz
LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZpbHRlclJlcGFpbnRSZWN0KSkgewotICAg
ICAgICAgICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUsIHRoYXQgdGhlIHNvdXJjZSBpbWFnZSB3
aWxsIGJlIHVwZGF0ZWQsIHNvIHdlIGNhbiByZXZlcnQgb3VyIHRyYWNraW5nIHJlcGFpbnQgcmVj
dCBiYWNrIHRvIHplcm8uCi0gICAgICAgICAgICBmaWx0ZXJJbmZvLT5yZXNldERpcnR5U291cmNl
UmVjdCgpOwotCi0gICAgICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250ZXh0IHRvIGEgbWVt
b3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVudHMgb2YgdGhlIGxh
eWVyLgotICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBjb250ZXh0IGluIHRo
ZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwgdG8gYmUgYWJsZSB0
byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdp
bmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0
ZXIgZWFjaCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAotICAgICAg
ICAgICAgLy8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmds
ZSBsYXp5IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNl
IGluIHRoaXMgbWV0aG9kLgotICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVn
aW5GaWx0ZXJFZmZlY3QoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
ZGlkbid0IGZhaWwgdG8gYWxsb2NhdGUgdGhlIGdyYXBoaWNzIGNvbnRleHQgZm9yIHRoZSBvZmZz
Y3JlZW4gYnVmZmVyLgotICAgICAgICAgICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRlZEZp
bHRlckVmZmVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QgPSBmaWx0ZXJQYWludGVyLnJlcGFpbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIGZpbHRlciBuZWVkcyB0aGUgZnVsbCBzb3VyY2UgaW1hZ2UsIHdlIG5lZWQgdG8g
YXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdGFuZ2xlcy4KLSAgICAgICAgICAgICAgICAvLyBPdGhl
cndpc2UsIGlmIGZvciBleGFtcGxlIHRoaXMgbGF5ZXIgaGFzIG92ZXJmbG93OmhpZGRlbiwgYSBk
cm9wIHNoYWRvdyB3aWxsIG5vdCBjb21wdXRlIGNvcnJlY3RseS4KLSAgICAgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgd2Ugd2lsbCBzdGlsbCBhcHBseSB0aGUgY2xpcHBpbmcgb24gdGhlIGZpbmFs
IHJlbmRlcmluZyBvZiB0aGUgZmlsdGVyLgotICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJ
bmZvLmNsaXBUb0RpcnR5UmVjdCA9ICFmaWx0ZXJSZW5kZXJlcigpLT5oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMoKTsKLSAgICAgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
R3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQgPSBjb250ZXh0OworICAg
IE93blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gZmlsdGVyUGFpbnRlciA9IHNldHVw
RmlsdGVycyhjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgb2Zmc2V0RnJvbVJvb3QsIHJvb3RS
ZWxhdGl2ZUJvdW5kcywgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpOworICAgIGlmIChmaWx0
ZXJQYWludGVyKSB7CisgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLT5maWx0ZXJDb250
ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0ICE9IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCAm
JiBoYXZlVHJhbnNwYXJlbmN5KSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5j
eSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0
cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgICAgIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9v
dExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50QmVoYXZpb3IpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKGZpbHRlclBhaW50ZXIu
aGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2Vy
bHkgc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNo
aWxkIGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAg
ICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxv
Y2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgIH0KICNlbmRpZgogCiAgICAgLy8g
SWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5nUm9vdCwg
d2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKQEAgLTM4ODQsMTMgKzM5MzUsOSBAQCB2
b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVk
RmlsdGVyRWZmZWN0KCkpIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcg
KGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAgLy8gRklYTUU6IEl0IGlzIGluY29ycmVj
dCB0byBqdXN0IGNsaXAgdG8gdGhlIGRhbWFnZVJlY3QgaGVyZSBvbmNlIG11bHRpcGxlIGZyYWdt
ZW50cyBhcmUgaW52b2x2ZWQuCi0gICAgICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5
ZXJGcmFnbWVudHMuaXNFbXB0eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVyRnJhZ21lbnRzWzBdLmJh
Y2tncm91bmRSZWN0OwotICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERp
cnR5UmVjdCwgYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRl
ci5hcHBseUZpbHRlckVmZmVjdCgpOwotICAgICAgICByZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lM
YXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5k
UmVjdCk7CisgICAgaWYgKGZpbHRlclBhaW50ZXIpIHsKKyAgICAgICAgY29udGV4dCA9IGFwcGx5
RmlsdGVycyhmaWx0ZXJQYWludGVyLmdldCgpLCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLCBsYXllckZyYWdtZW50cyk7CisgICAgICAgIGZpbHRlclBhaW50ZXIu
Y2xlYXIoKTsKICAgICB9CiAjZW5kaWYKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKaW5kZXggOTI1YWIwMDEzZDQ2ZjJlYzAyYTY5NDI3OGMzMWZmNTgxZGFjMjMyMS4u
ZjJmYzZjZDY4OTJmMjI0OTFlZjBlZTYzMjBiMTVjNDZjNmM0MjNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUzLDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVy
ZXI7CitjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjsKIGNsYXNzIEZpbHRlck9wZXJh
dGlvbnM7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlckluZm87CiAjZW5kaWYKQEAgLTkzNCw3ICs5
MzUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yOwog
ICAgICAgICBib29sIGNsaXBUb0RpcnR5UmVjdDsKICAgICB9OwotICAgICAgICAKKworICAgIGJv
b2wgc2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0KiwgYm9vbCAm
ZGlkUXVhbnRpemVGb250cyk7CisgICAgYm9vbCBzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZy
b21Sb290LCBJbnRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJv
dW5kc0NvbXB1dGVkKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgUGFzc093blB0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCos
IExheWVyUGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBJ
bnRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1
dGVkKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGFwcGx5RmlsdGVycyhGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlciosIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0LCBMYXllclBhaW50
aW5nSW5mbyYsIExheWVyRnJhZ21lbnRzJik7CisjZW5kaWYKKwogICAgIHZvaWQgcGFpbnRMYXll
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJG
bGFncyk7CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAg
ICB2b2lkIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBjb25zdCBMYXlvdXRQb2lu
dCYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2ludCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202225</attachid>
            <date>2013-05-18 18:36:05 -0700</date>
            <delta_ts>2013-05-18 18:45:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116406-20130518183456.patch</filename>
            <type>text/plain</type>
            <size>23631</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQzMWU5NGM3ZjAwODRl
NTViMDU4MDVhYTA2NjMzMzA5OTRmMzI5OC4uN2Q0OGE3NDJlMWE5NDgzMzI0ZjJlNDdmY2ZmZGFh
Y2QzNGNlM2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTA1LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEhvaXN0IHNldmVy
YWwgY2h1bmtzIG9mIGNvZGUgYXQgdGhlIHRvcCBvZiBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNv
bnRlbnRzKCkgb250byBuZXcgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMoKSB3YXMgZ2V0dGluZyBwb2xsdXRlZCB3aXRoIGNvZGUgcmVsYXRlZCB0byBmaWx0ZXJzLAor
ICAgICAgICBjbGlwcGluZyBhbmQgZm9udCBzdWJwaXhlbCBxdWFudGl6YXRpb24sIGFuZCBoYXJk
IHRvIGZvbGxvdy4KKyAgICAgICAgCisgICAgICAgIE1vdmUgdGhyZWUgaHVua3Mgb2YgY29kZSBp
bnRvIG5ldyBmdW5jdGlvbnM6CisgICAgICAgIHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9u
KCkgbm93IGNvbnRhaW5zIHRoZSBjb2RlIHJlbGF0ZWQgdG8gd2hldGhlciB3ZSBkaXNhYmxlCisg
ICAgICAgIGZvbnQgc3VicGl4ZWwgcXVhbnRpemF0aW9uIG9uIHRoZSBjb250ZXh0LgorICAgICAg
ICBzZXR1cENsaXBQYXRoKCkgbm93IGNvbnRhaW5zIGNvZGUgcmVsYXRlZCB0byBjbGlwcGluZyB0
byBzaGFwZXMgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgIHNldHVwRmlsdGVycygpIGFuZCBhcHBs
eUZpbHRlcnMoKSBjb250YWluIGNvZGUgcmVsYXRlZCB0byBDU1MgZmlsdGVycy4KKyAgICAgICAg
CisgICAgICAgIEFzIHBhcnQgb2YgdGhpcywgdGhlIGludGVyYWN0aW9uIHdpdGggRmlsdGVyRWZm
ZWN0UmVuZGVyZXJIZWxwZXIgd2FzIHNpbXBsaWZpZWQuCisgICAgICAgIEl0IHdhcyBjb252ZW5p
ZW50IGZvciBzZXR1cEZpbHRlcnMoKSB0byByZXR1cm4gYSBGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlciBvYmplY3QKKyAgICAgICAgaWYgc3VjY2Vzc2Z1bCwgc28gd2UgdXNlIGFuIE93blB0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gbm93LiBJbiBhZGRpdGlvbiwKKyAgICAgICAgdGhl
IEdyYXBoaWNzQ29udGV4dCBzd2FwcGluZyB3YXMgbW92ZWQgZnJvbSBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlciBjb2RlIGludG8gUmVuZGVyTGF5ZXIKKyAgICAgICAgdG8gbWFrZSBpdCBlYXNp
ZXIgdG8gZm9sbG93LiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBubyBsb25nZXIgaG9sZHMg
b24gdG8KKyAgICAgICAgdGhlIG9sZCBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgTm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpmaWx0
ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVy
OjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXJIZWxwZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpoYXNTdGFydGVkRmlsdGVyRWZmZWN0KToKKyAg
ICAgICAgKEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRm9u
dFN1YnBpeGVsUXVhbnRpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXR1cENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmFwcGx5RmlsdGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAxMy0wNS0xNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBHYXJiYWdlIG9uIHBhZ2UgYmFja2dy
b3VuZCB3aGlsZSBodHRwOi8vY2FuYmVycmFiYWxsb29ucy5jb20uYXUgaXMgbG9hZGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5k
ZXggYTc4MzViYmI4MDZjZmZhOTRjMmM2NDA1YmE3MGYyMWFmNWM3MzI5Yy4uOWYxNjhjOGJiMDFj
N2ZmOThjYmMzY2ViZWMwNzQzODIzNGE4OWRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC00NzAsOCArNDcwLDE3IEBAIGJv
b2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OnByZXBhcmVGaWx0ZXJFZmZlY3QoUmVuZGVy
TGF5ZXIqIHJlbmRlckxheWVyLCBjCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotICAgCi1H
cmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVm
ZmVjdChHcmFwaGljc0NvbnRleHQqIG9sZENvbnRleHQpCisKK0dyYXBoaWNzQ29udGV4dCogRmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmZpbHRlckNvbnRleHQoKSBjb25zdAoreworICAgIGlm
ICghbV9oYXZlRmlsdGVyRWZmZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZpbHRlckVm
ZmVjdFJlbmRlcmVyKiBmaWx0ZXIgPSBtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpOwor
ICAgIHJldHVybiBmaWx0ZXItPmlucHV0Q29udGV4dCgpOworfQorCitib29sIEZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCgpCiB7CiAgICAgQVNTRVJUKG1fcmVu
ZGVyTGF5ZXIpOwogICAgIApAQCAtNDgyLDIxICs0OTEsMjAgQEAgR3JhcGhpY3NDb250ZXh0KiBG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250
ZXh0KgogICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8ICFpc0ZpbHRlclNpemVWYWxp
ZChmaWx0ZXItPmZpbHRlclJlZ2lvbigpKSkgewogICAgICAgICAvLyBEaXNhYmxlIHRoZSBmaWx0
ZXJzIGFuZCBjb250aW51ZS4KICAgICAgICAgbV9oYXZlRmlsdGVyRWZmZWN0ID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiBvbGRDb250ZXh0OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIG1fc2F2ZWRHcmFwaGljc0NvbnRleHQgPSBvbGRDb250ZXh0OwotICAgIAogICAg
IC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5
ZXIgaXMgY2FwdHV0ZXJkIGluIHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KICAgICBzb3Vy
Y2VHcmFwaGljc0NvbnRleHQtPnNhdmUoKTsKICAgICBzb3VyY2VHcmFwaGljc0NvbnRleHQtPnRy
YW5zbGF0ZSgtbV9wYWludE9mZnNldC54KCksIC1tX3BhaW50T2Zmc2V0LnkoKSk7CiAgICAgc291
cmNlR3JhcGhpY3NDb250ZXh0LT5jbGVhclJlY3QobV9yZXBhaW50UmVjdCk7CiAgICAgc291cmNl
R3JhcGhpY3NDb250ZXh0LT5jbGlwKG1fcmVwYWludFJlY3QpOwotICAgIAotICAgIHJldHVybiBz
b3VyY2VHcmFwaGljc0NvbnRleHQ7CisKKyAgICBtX3N0YXJ0ZWRGaWx0ZXJFZmZlY3QgPSB0cnVl
OworICAgIHJldHVybiB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyOjphcHBseUZpbHRlckVmZmVjdCgpCit2b2lkIEZpbHRlckVmZmVjdFJlbmRl
cmVySGVscGVyOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQqIGRlc3RpbmF0aW9u
Q29udGV4dCkKIHsKICAgICBBU1NFUlQobV9oYXZlRmlsdGVyRWZmZWN0ICYmIG1fcmVuZGVyTGF5
ZXItPmZpbHRlclJlbmRlcmVyKCkpOwogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKiBmaWx0ZXIg
PSBtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpOwpAQCAtNTA4LDExICs1MTYsOSBAQCBH
cmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjphcHBseUZpbHRlckVm
ZmVjdCgpCiAgICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci0+b3V0cHV0UmVjdCgpOwog
ICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsK
ICAgICAKLSAgICBtX3NhdmVkR3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVy
LT5vdXRwdXQoKSwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRlc3RSZWN0KSwgQ29tcG9zaXRlU291cmNlT3Zlcik7
CisgICAgZGVzdGluYXRpb25Db250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5vdXRwdXQo
KSwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGRlc3RSZWN0KSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgCiAg
ICAgZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICAKLSAgICByZXR1cm4g
bV9zYXZlZEdyYXBoaWNzQ29udGV4dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAppbmRleCA1
MzVhODdhYzA0NTdjNjEyOGI3MWFkNzQ2ODEyY2RhZjE5MWY1YjEzLi4wZDNhYzQwMTcxNjJhYmE1
ZThkOWY2NzlkZTRkYTc5MjNkNmFiMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApAQCAtNTYsMjYgKzU2LDI4IEBAIGNsYXNzIFJlbmRl
ck9iamVjdDsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsKIHB1YmxpYzoKICAg
ICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAg
ICAgIDogbV9zYXZlZEdyYXBoaWNzQ29udGV4dCgwKQotICAgICAgICAsIG1fcmVuZGVyTGF5ZXIo
MCkKKyAgICAgICAgOiBtX3JlbmRlckxheWVyKDApCiAgICAgICAgICwgbV9oYXZlRmlsdGVyRWZm
ZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgICAgICwgbV9zdGFydGVkRmlsdGVyRWZmZWN0KGZh
bHNlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXZlRmlsdGVyRWZmZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9oYXZlRmlsdGVyRWZmZWN0OyB9Ci0gICAgYm9vbCBoYXNTdGFydGVkRmls
dGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zYXZlZEdyYXBoaWNzQ29udGV4dDsgfQorICAg
IGJvb2wgaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRlZEZp
bHRlckVmZmVjdDsgfQogCiAgICAgYm9vbCBwcmVwYXJlRmlsdGVyRWZmZWN0KFJlbmRlckxheWVy
KiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGly
dHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCogb2xkQ29udGV4dCk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBhcHBseUZpbHRlckVmZmVjdCgpOworICAgIGJvb2wgYmVn
aW5GaWx0ZXJFZmZlY3QoKTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCogZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQqIGZp
bHRlckNvbnRleHQoKSBjb25zdDsKIAogICAgIGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogcHJpdmF0ZToKLSAgICBHcmFwaGlj
c0NvbnRleHQqIG1fc2F2ZWRHcmFwaGljc0NvbnRleHQ7Ci0gICAgUmVuZGVyTGF5ZXIqIG1fcmVu
ZGVyTGF5ZXI7CisgICAgUmVuZGVyTGF5ZXIqIG1fcmVuZGVyTGF5ZXI7IC8vIEZJWE1FOiB0aGlz
IGlzIG1haW5seSB1c2VkIHRvIGdldCB0aGUgRmlsdGVyRWZmZWN0UmVuZGVyZXIuIEZpbHRlckVm
ZmVjdFJlbmRlcmVySGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBv
aW50IG1fcGFpbnRPZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OwogICAgIGJv
b2wgbV9oYXZlRmlsdGVyRWZmZWN0OworICAgIGJvb2wgbV9zdGFydGVkRmlsdGVyRWZmZWN0Owog
fTsKIAogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgOiBwdWJsaWMgRmlsdGVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwMWI1ZjFiZjZhMjkyMzgzYjli
MGVmNDUyNzc4MWJjNmMzNDQ1ZjAwLi43MWI2YTIyODhjMmNjMDIzNjU4ZTY4MTNiMWFkMGMwNmRh
NDI2MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM2
ODgsNiArMzY4OCwxMzQgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzQW5k
UmVmbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnMKICAgICBwYWludExheWVy
Q29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogfQogCiti
b29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGJvb2wgJmRpZFF1YW50aXplRm9udHMpCit7CisgICAgaWYgKGNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCBzY3JvbGxpbmdPbk1haW5UaHJlYWQgPSB0cnVlOworICAgIEZyYW1lKiBmcmFtZSA9IHJlbmRl
cmVyKCktPmZyYW1lKCk7CisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICBpZiAo
ZnJhbWUpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAg
ICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
cGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdP
bk1haW5UaHJlYWQgPSBzY3JvbGxpbmdDb29yZGluYXRvci0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6
YXRpb24gZm9yIG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9z
ZQorICAgIC8vIHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICBib29sIGNvbnRl
bnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAh
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1l
bnQoKSk7CisgICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5
UGFpbnRpbmcpIHsKKyAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQtPnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cygpOworICAgICAgICBjb250ZXh0LT5zZXRTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBJbnRSZWN0JiByb290UmVsYXRp
dmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKQoreworICAgIGlmICgh
cmVuZGVyZXIoKS0+aGFzQ2xpcFBhdGgoKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
cmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQVNTRVJUKHN0eWxlLT5jbGlwUGF0aCgpKTsKKyAgICBpZiAoc3R5bGUtPmNsaXBQYXRo
KCktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6U0hBUEUpIHsKKyAg
ICAgICAgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBhdGggPSBzdGF0aWNfY2FzdDxTaGFw
ZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOworCisgICAgICAgIGlmICgh
cm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpIHsKKyAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJv
dW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZz
ZXRGcm9tUm9vdCwgMCk7CisgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNv
bnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLT5wYXRoKHJvb3RSZWxhdGl2ZUJvdW5kcyksIGNsaXBQ
YXRoLT53aW5kUnVsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisjaWYgRU5B
QkxFKFNWRykKKyAgICBpZiAoc3R5bGUtPmNsaXBQYXRoKCktPmdldE9wZXJhdGlvblR5cGUoKSA9
PSBDbGlwUGF0aE9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CisgICAgICAgIFJlZmVyZW5jZUNsaXBQ
YXRoT3BlcmF0aW9uKiByZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFJl
ZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQocmVmZXJl
bmNlQ2xpcFBhdGhPcGVyYXRpb24tPmZyYWdtZW50KCkpIDogMDsKKyAgICAgICAgaWYgKGVsZW1l
bnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Y2xpcFBhdGhUYWcpICYmIGVsZW1l
bnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcm9vdFJlbGF0aXZlQm91bmRzQ29t
cHV0ZWQpIHsKKyAgICAgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVM
YXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOwor
ICAgICAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIHNhZmVy
IGNhc3Qgc3VjaCBhcyB0b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkuCisgICAgICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZG8gYSBjb250ZXh0LT5zYXZlKCkgYW5kIHJldHVybiB0
cnVlIHNvIHdlIHJlc3RvcmUgdGhlIGNvbnRleHQ/CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqPihlbGVtZW50LT5yZW5kZXJlcigpKS0+YXBwbHlDbGlw
cGluZ1RvQ29udGV4dChyZW5kZXJlcigpLCByb290UmVsYXRpdmVCb3VuZHMsIHBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK1Bhc3NPd25Q
dHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0RnJvbVJvb3QsIEludFJlY3QmIHJvb3RSZWxhdGl2
ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCit7CisgICAgaWYgKGNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29s
IGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJSZW5kZXJlcigpICYmIHBhaW50c1dpdGhGaWx0ZXJz
KCk7CisgICAgaWYgKCFoYXNQYWludGVkRmlsdGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IE93blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gZmlsdGVyUGFpbnRlciA9IGFkb3B0
UHRyKG5ldyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcihoYXNQYWludGVkRmlsdGVyKSk7Cisg
ICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIFJlbmRlckxheWVyRmlsdGVySW5mbyogZmlsdGVySW5mbyA9IHRoaXMt
PmZpbHRlckluZm8oKTsKKyAgICBBU1NFUlQoZmlsdGVySW5mbyk7CisgICAgTGF5b3V0UmVjdCBm
aWx0ZXJSZXBhaW50UmVjdCA9IGZpbHRlckluZm8tPmRpcnR5U291cmNlUmVjdCgpOworICAgIGZp
bHRlclJlcGFpbnRSZWN0Lm1vdmUob2Zmc2V0RnJvbVJvb3QueCgpLCBvZmZzZXRGcm9tUm9vdC55
KCkpOworCisgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgeworICAgICAgICBy
b290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9v
dExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOworICAgICAgICByb290UmVsYXRpdmVCb3VuZHND
b21wdXRlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGZpbHRlclBhaW50ZXItPnByZXBhcmVG
aWx0ZXJFZmZlY3QodGhpcywgcm9vdFJlbGF0aXZlQm91bmRzLCBwYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QsIGZpbHRlclJlcGFpbnRSZWN0KSkgeworICAgICAgICAvLyBOb3cgd2Uga25vdyBm
b3Igc3VyZSwgdGhhdCB0aGUgc291cmNlIGltYWdlIHdpbGwgYmUgdXBkYXRlZCwgc28gd2UgY2Fu
IHJldmVydCBvdXIgdHJhY2tpbmcgcmVwYWludCByZWN0IGJhY2sgdG8gemVyby4KKyAgICAgICAg
ZmlsdGVySW5mby0+cmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKKworICAgICAgICBpZiAoIWZpbHRl
clBhaW50ZXItPmJlZ2luRmlsdGVyRWZmZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBmYWlsIHRvIGFsbG9jYXRlIHRoZSBncmFw
aGljcyBjb250ZXh0IGZvciB0aGUgb2Zmc2NyZWVuIGJ1ZmZlci4KKyAgICAgICAgQVNTRVJUKGZp
bHRlclBhaW50ZXItPmhhc1N0YXJ0ZWRGaWx0ZXJFZmZlY3QoKSk7CisKKyAgICAgICAgcGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0ID0gZmlsdGVyUGFpbnRlci0+cmVwYWludFJlY3QoKTsKKyAg
ICAgICAgLy8gSWYgdGhlIGZpbHRlciBuZWVkcyB0aGUgZnVsbCBzb3VyY2UgaW1hZ2UsIHdlIG5l
ZWQgdG8gYXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdGFuZ2xlcy4KKyAgICAgICAgLy8gT3RoZXJ3
aXNlLCBpZiBmb3IgZXhhbXBsZSB0aGlzIGxheWVyIGhhcyBvdmVyZmxvdzpoaWRkZW4sIGEgZHJv
cCBzaGFkb3cgd2lsbCBub3QgY29tcHV0ZSBjb3JyZWN0bHkuCisgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSB3aWxsIHN0aWxsIGFwcGx5IHRoZSBjbGlwcGluZyBvbiB0aGUgZmluYWwgcmVuZGVyaW5n
IG9mIHRoZSBmaWx0ZXIuCisgICAgICAgIHBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgPSAh
ZmlsdGVyUmVuZGVyZXIoKS0+aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgICAgIHJl
dHVybiBmaWx0ZXJQYWludGVyLnJlbGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXI6OmFwcGx5RmlsdGVycyhGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlciogZmlsdGVyUGFpbnRlciwgR3JhcGhpY3NDb250ZXh0KiBvcmlnaW5hbENv
bnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIExheWVyRnJhZ21lbnRzJiBs
YXllckZyYWdtZW50cykKK3sKKyAgICBBU1NFUlQoZmlsdGVyUGFpbnRlci0+aGFzU3RhcnRlZEZp
bHRlckVmZmVjdCgpKTsKKyAgICAvLyBBcHBseSB0aGUgY29ycmVjdCBjbGlwcGluZyAoaWUuIG92
ZXJmbG93OiBoaWRkZW4pLgorICAgIC8vIEZJWE1FOiBJdCBpcyBpbmNvcnJlY3QgdG8ganVzdCBj
bGlwIHRvIHRoZSBkYW1hZ2VSZWN0IGhlcmUgb25jZSBtdWx0aXBsZSBmcmFnbWVudHMgYXJlIGlu
dm9sdmVkLgorICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXJGcmFnbWVudHMuaXNF
bXB0eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVyRnJhZ21lbnRzWzBdLmJhY2tncm91bmRSZWN0Owor
ICAgIGNsaXBUb1JlY3QocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb3JpZ2luYWxDb250ZXh0LCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGJhY2tncm91bmRSZWN0KTsKKyAgICBmaWx0ZXJQ
YWludGVyLT5hcHBseUZpbHRlckVmZmVjdChvcmlnaW5hbENvbnRleHQpOworICAgIHJlc3RvcmVD
bGlwKG9yaWdpbmFsQ29udGV4dCwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3Jv
dW5kUmVjdCk7CisgICAgcmV0dXJuIG9yaWdpbmFsQ29udGV4dDsKK30KKyNlbmRpZgorCiB2b2lk
IFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3Mg
cGFpbnRGbGFncykKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1Nl
bGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKTsKQEAgLTM3MTEsOCArMzgzOSw2IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgIHx8ICghaXNQYWludGluZ1Njcm9sbGluZ0NvbnRl
bnQgJiYgaXNQYWludGluZ0NvbXBvc2l0ZWRGb3JlZ3JvdW5kKSk7CiAgICAgYm9vbCBzaG91bGRQ
YWludENvbnRlbnQgPSBtX2hhc1Zpc2libGVDb250ZW50ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIg
JiYgIWlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFyczsKIAotICAgIEdyYXBoaWNzQ29udGV4dCog
dHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID0gY29udGV4dDsKLSAgICAKICAgICBpZiAobG9jYWxQ
YWludEZsYWdzICYgUGFpbnRMYXllclBhaW50aW5nUm9vdEJhY2tncm91bmRPbmx5ICYmICFyZW5k
ZXJlcigpLT5pc1JlbmRlclZpZXcoKSAmJiAhcmVuZGVyZXIoKS0+aXNSb290KCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMzcyNSwxMDEgKzM4NTEsMjYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGkKICAgICBJbnRSZWN0IHJvb3RSZWxhdGl2ZUJvdW5kczsKICAgICBib29sIHJvb3RSZWxhdGl2
ZUJvdW5kc0NvbXB1dGVkID0gZmFsc2U7CiAKLSAgICBib29sIGRpZFF1YW50aXplRm9udHMgPSB0
cnVlOwotICAgIGJvb2wgc2Nyb2xsaW5nT25NYWluVGhyZWFkID0gdHJ1ZTsKLSAgICBGcmFtZSog
ZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpOwotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkgewotICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nT25NYWluVGhyZWFkID0gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3Vi
cGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3
ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0g
ICAgYm9vbCBuZWVkVG9BZGp1c3RTdWJwaXhlbFF1YW50aXphdGlvbiA9IHNjcm9sbGluZ09uTWFp
blRocmVhZCB8fCAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpIHx8IChmcmFtZSAmJiBmcmFtZS0+b3duZXJFbGVtZW50KCkpOwotICAg
IGlmIChuZWVkVG9BZGp1c3RTdWJwaXhlbFF1YW50aXphdGlvbikgewotICAgICAgICBkaWRRdWFu
dGl6ZUZvbnRzID0gY29udGV4dC0+c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7Ci0gICAg
ICAgIGNvbnRleHQtPnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhmYWxzZSk7Ci0gICAg
fQorICAgIGJvb2wgZGlkUXVhbnRpemVGb250cyA9IHRydWU7CisgICAgYm9vbCBuZWVkVG9BZGp1
c3RTdWJwaXhlbFF1YW50aXphdGlvbiA9IHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKGNv
bnRleHQsIGRpZFF1YW50aXplRm9udHMpOwogCiAgICAgLy8gQXBwbHkgY2xpcC1wYXRoIHRvIGNv
bnRleHQuCi0gICAgYm9vbCBoYXNDbGlwUGF0aCA9IGZhbHNlOwotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgaWYgKHJlbmRlcmVyKCktPmhhc0NsaXBQ
YXRoKCkgJiYgIWNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSAmJiBzdHlsZSkgewotICAgICAg
ICBBU1NFUlQoc3R5bGUtPmNsaXBQYXRoKCkpOwotICAgICAgICBpZiAoc3R5bGUtPmNsaXBQYXRo
KCktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6U0hBUEUpIHsKLSAg
ICAgICAgICAgIGhhc0NsaXBQYXRoID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNhdmUo
KTsKLSAgICAgICAgICAgIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQYXRoID0gc3RhdGlj
X2Nhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbio+KHN0eWxlLT5jbGlwUGF0aCgpKTsKLQotICAg
ICAgICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAgICAgICAgICAg
ICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5m
by5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9vdCwgMCk7Ci0gICAgICAgICAgICAgICAgcm9vdFJl
bGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBjb250ZXh0LT5jbGlwUGF0aChjbGlwUGF0aC0+cGF0aChyb290UmVsYXRpdmVCb3VuZHMpLCBj
bGlwUGF0aC0+d2luZFJ1bGUoKSk7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQotICAgICAg
ICBlbHNlIGlmIChzdHlsZS0+Y2xpcFBhdGgoKS0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IENsaXBQ
YXRoT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgIFJlZmVyZW5jZUNsaXBQYXRo
T3BlcmF0aW9uKiByZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFJlZmVy
ZW5jZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOwotICAgICAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBmb3J3YXJkIG9yIGV4dGVybmFsIFNWRyBy
ZWZlcmVuY2VzIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUp
Ci0gICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+Z2V0
RWxlbWVudEJ5SWQocmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb24tPmZyYWdtZW50KCkpIDogMDsK
LSAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmNsaXBQYXRoVGFnKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAgICAgICAgICAgICAgICAgICBy
b290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9v
dExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOwotICAgICAgICAgICAgICAgICAgICByb290UmVs
YXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIHNhZmVyIGNhc3Qgc3VjaCBhcyB0
b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkuCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKj4oZWxlbWVudC0+cmVuZGVyZXIoKSktPmFwcGx5
Q2xpcHBpbmdUb0NvbnRleHQocmVuZGVyZXIoKSwgcm9vdFJlbGF0aXZlQm91bmRzLCBwYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0jZW5kaWYKLSAgICB9CisgICAgYm9vbCBoYXNDbGlwUGF0aCA9IHNldHVwQ2xpcFBhdGgoY29u
dGV4dCwgcGFpbnRpbmdJbmZvLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91bmRzLCBy
b290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCk7CiAKICAgICBMYXllclBhaW50aW5nSW5mbyBsb2Nh
bFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8pOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBmaWx0ZXJQYWludGVyKGZpbHRlclJlbmRlcmVy
KCkgJiYgcGFpbnRzV2l0aEZpbHRlcnMoKSk7Ci0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGF2ZUZp
bHRlckVmZmVjdCgpICYmICFjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpIHsKLSAgICAgICAg
UmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBmaWx0ZXJJbmZvID0gdGhpcy0+ZmlsdGVySW5mbygpOwot
ICAgICAgICBBU1NFUlQoZmlsdGVySW5mbyk7Ci0gICAgICAgIExheW91dFJlY3QgZmlsdGVyUmVw
YWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKLSAgICAgICAgZmlsdGVy
UmVwYWludFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdC54KCksIG9mZnNldEZyb21Sb290LnkoKSk7
CiAKLSAgICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAgICAgICAg
ICAgcm9vdFJlbGF0aXZlQm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290LCAwKTsKLSAgICAgICAgICAgIHJvb3RSZWxhdGl2
ZUJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaWx0ZXJQ
YWludGVyLnByZXBhcmVGaWx0ZXJFZmZlY3QodGhpcywgcm9vdFJlbGF0aXZlQm91bmRzLCBwYWlu
dGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZpbHRlclJlcGFpbnRSZWN0KSkgewotICAgICAgICAg
ICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUsIHRoYXQgdGhlIHNvdXJjZSBpbWFnZSB3aWxsIGJl
IHVwZGF0ZWQsIHNvIHdlIGNhbiByZXZlcnQgb3VyIHRyYWNraW5nIHJlcGFpbnQgcmVjdCBiYWNr
IHRvIHplcm8uCi0gICAgICAgICAgICBmaWx0ZXJJbmZvLT5yZXNldERpcnR5U291cmNlUmVjdCgp
OwotCi0gICAgICAgICAgICAvLyBSZXdpcmUgdGhlIG9sZCBjb250ZXh0IHRvIGEgbWVtb3J5IGJ1
ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVyZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyLgot
ICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2ZWQgdGhlIG9sZCBjb250ZXh0IGluIHRoZSAidHJh
bnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2NhbCB2YXJpYWJsZSwgdG8gYmUgYWJsZSB0byBzdGFy
dCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAgICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNv
bnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5nICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFj
aCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4gQWxzbywgbm90ZSB0aGF0IAotICAgICAgICAgICAg
Ly8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMgd2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5
IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRo
aXMgbWV0aG9kLgotICAgICAgICAgICAgY29udGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0
ZXJFZmZlY3QoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0
IGZhaWwgdG8gYWxsb2NhdGUgdGhlIGdyYXBoaWNzIGNvbnRleHQgZm9yIHRoZSBvZmZzY3JlZW4g
YnVmZmVyLgotICAgICAgICAgICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVm
ZmVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QgPSBmaWx0ZXJQYWludGVyLnJlcGFpbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGZpbHRlciBuZWVkcyB0aGUgZnVsbCBzb3VyY2UgaW1hZ2UsIHdlIG5lZWQgdG8gYXZvaWQg
dXNpbmcgdGhlIGNsaXAgcmVjdGFuZ2xlcy4KLSAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Us
IGlmIGZvciBleGFtcGxlIHRoaXMgbGF5ZXIgaGFzIG92ZXJmbG93OmhpZGRlbiwgYSBkcm9wIHNo
YWRvdyB3aWxsIG5vdCBjb21wdXRlIGNvcnJlY3RseS4KLSAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgd2Ugd2lsbCBzdGlsbCBhcHBseSB0aGUgY2xpcHBpbmcgb24gdGhlIGZpbmFsIHJlbmRl
cmluZyBvZiB0aGUgZmlsdGVyLgotICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLmNs
aXBUb0RpcnR5UmVjdCA9ICFmaWx0ZXJSZW5kZXJlcigpLT5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMoKTsKLSAgICAgICAgICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxh
eWVyQ29udGV4dCA9IGNvbnRleHQ7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIE93blB0
cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gZmlsdGVyUGFpbnRlciA9IHNldHVwRmlsdGVy
cyhjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgb2Zmc2V0RnJvbVJvb3QsIHJvb3RSZWxhdGl2
ZUJvdW5kcywgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpOworICAgIGlmIChmaWx0ZXJQYWlu
dGVyKSB7CisgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJQYWludGVyLT5maWx0ZXJDb250ZXh0KCk7
CisgICAgICAgIGlmIChjb250ZXh0ICE9IHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCAmJiBoYXZl
VHJhbnNwYXJlbmN5KSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGFuZCB0
cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFnZXJseSBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXll
ciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEgY2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0cyBvbmUg
d2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAgICAgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVy
LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3Rh
cnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVUcmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8gSWYg
d2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNwYXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkgc3Rh
cnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVyZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxkIGxh
eWVyIGxhemlseSBzdGFydHMgb25lIHdpdGggdGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAgIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWlu
dGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFp
bnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwotICAgIH0KICNlbmRpZgogCiAgICAgLy8gSWYgdGhp
cyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hpbGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2UgcmVu
ZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gKQEAgLTM4ODQsMTMgKzM5MzUsOSBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aQogICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVy
RWZmZWN0KCkpIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBv
dmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAgLy8gRklYTUU6IEl0IGlzIGluY29ycmVjdCB0byBq
dXN0IGNsaXAgdG8gdGhlIGRhbWFnZVJlY3QgaGVyZSBvbmNlIG11bHRpcGxlIGZyYWdtZW50cyBh
cmUgaW52b2x2ZWQuCi0gICAgICAgIENsaXBSZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXJGcmFn
bWVudHMuaXNFbXB0eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVyRnJhZ21lbnRzWzBdLmJhY2tncm91
bmRSZWN0OwotICAgICAgICBjbGlwVG9SZWN0KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
dHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVj
dCwgYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5hcHBs
eUZpbHRlckVmZmVjdCgpOwotICAgICAgICByZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lMYXllckNv
bnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7
CisgICAgaWYgKGZpbHRlclBhaW50ZXIpIHsKKyAgICAgICAgY29udGV4dCA9IGFwcGx5RmlsdGVy
cyhmaWx0ZXJQYWludGVyLmdldCgpLCB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLCBsYXllckZyYWdtZW50cyk7CisgICAgICAgIGZpbHRlclBhaW50ZXIuY2xlYXIo
KTsKICAgICB9CiAjZW5kaWYKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKaW5kZXggOTI1YWIwMDEzZDQ2ZjJlYzAyYTY5NDI3OGMzMWZmNTgxZGFjMjMyMS4uZjJmYzZj
ZDY4OTJmMjI0OTFlZjBlZTYzMjBiMTVjNDZjNmM0MjNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTUzLDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7Citj
bGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7
CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlckluZm87CiAjZW5kaWYKQEAgLTkzNCw3ICs5MzUsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yOwogICAgICAg
ICBib29sIGNsaXBUb0RpcnR5UmVjdDsKICAgICB9OwotICAgICAgICAKKworICAgIGJvb2wgc2V0
dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0KiwgYm9vbCAmZGlkUXVh
bnRpemVGb250cyk7CisgICAgYm9vbCBzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290
LCBJbnRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0Nv
bXB1dGVkKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgUGFzc093blB0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlckhlbHBlcj4gc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCosIExheWVy
UGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBJbnRSZWN0
JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKTsK
KyAgICBHcmFwaGljc0NvbnRleHQqIGFwcGx5RmlsdGVycyhGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlciosIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0LCBMYXllclBhaW50aW5nSW5m
byYsIExheWVyRnJhZ21lbnRzJik7CisjZW5kaWYKKwogICAgIHZvaWQgcGFpbnRMYXllcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7
CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHNBbmRSZWZsZWN0aW9uKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lk
IHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBjb25zdCBMYXlvdXRQb2ludCYgdHJh
bnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2ludCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202226</attachid>
            <date>2013-05-18 18:45:28 -0700</date>
            <delta_ts>2013-05-18 18:48:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116406-20130518184420.patch</filename>
            <type>text/plain</type>
            <size>23661</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwMzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQzMWU5NGM3ZjAwODRl
NTViMDU4MDVhYTA2NjMzMzA5OTRmMzI5OC4uN2Q0OGE3NDJlMWE5NDgzMzI0ZjJlNDdmY2ZmZGFh
Y2QzNGNlM2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTA1LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEhvaXN0IHNldmVy
YWwgY2h1bmtzIG9mIGNvZGUgYXQgdGhlIHRvcCBvZiBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNv
bnRlbnRzKCkgb250byBuZXcgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMoKSB3YXMgZ2V0dGluZyBwb2xsdXRlZCB3aXRoIGNvZGUgcmVsYXRlZCB0byBmaWx0ZXJzLAor
ICAgICAgICBjbGlwcGluZyBhbmQgZm9udCBzdWJwaXhlbCBxdWFudGl6YXRpb24sIGFuZCBoYXJk
IHRvIGZvbGxvdy4KKyAgICAgICAgCisgICAgICAgIE1vdmUgdGhyZWUgaHVua3Mgb2YgY29kZSBp
bnRvIG5ldyBmdW5jdGlvbnM6CisgICAgICAgIHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9u
KCkgbm93IGNvbnRhaW5zIHRoZSBjb2RlIHJlbGF0ZWQgdG8gd2hldGhlciB3ZSBkaXNhYmxlCisg
ICAgICAgIGZvbnQgc3VicGl4ZWwgcXVhbnRpemF0aW9uIG9uIHRoZSBjb250ZXh0LgorICAgICAg
ICBzZXR1cENsaXBQYXRoKCkgbm93IGNvbnRhaW5zIGNvZGUgcmVsYXRlZCB0byBjbGlwcGluZyB0
byBzaGFwZXMgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgIHNldHVwRmlsdGVycygpIGFuZCBhcHBs
eUZpbHRlcnMoKSBjb250YWluIGNvZGUgcmVsYXRlZCB0byBDU1MgZmlsdGVycy4KKyAgICAgICAg
CisgICAgICAgIEFzIHBhcnQgb2YgdGhpcywgdGhlIGludGVyYWN0aW9uIHdpdGggRmlsdGVyRWZm
ZWN0UmVuZGVyZXJIZWxwZXIgd2FzIHNpbXBsaWZpZWQuCisgICAgICAgIEl0IHdhcyBjb252ZW5p
ZW50IGZvciBzZXR1cEZpbHRlcnMoKSB0byByZXR1cm4gYSBGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlciBvYmplY3QKKyAgICAgICAgaWYgc3VjY2Vzc2Z1bCwgc28gd2UgdXNlIGFuIE93blB0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gbm93LiBJbiBhZGRpdGlvbiwKKyAgICAgICAgdGhl
IEdyYXBoaWNzQ29udGV4dCBzd2FwcGluZyB3YXMgbW92ZWQgZnJvbSBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlciBjb2RlIGludG8gUmVuZGVyTGF5ZXIKKyAgICAgICAgdG8gbWFrZSBpdCBlYXNp
ZXIgdG8gZm9sbG93LiBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciBubyBsb25nZXIgaG9sZHMg
b24gdG8KKyAgICAgICAgdGhlIG9sZCBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgTm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpmaWx0
ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVy
OjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlcjo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXJIZWxwZXI6OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpoYXNTdGFydGVkRmlsdGVyRWZmZWN0KToKKyAg
ICAgICAgKEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRm9u
dFN1YnBpeGVsUXVhbnRpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXR1cENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmFwcGx5RmlsdGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAxMy0wNS0xNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBHYXJiYWdlIG9uIHBhZ2UgYmFja2dy
b3VuZCB3aGlsZSBodHRwOi8vY2FuYmVycmFiYWxsb29ucy5jb20uYXUgaXMgbG9hZGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5k
ZXggYTc4MzViYmI4MDZjZmZhOTRjMmM2NDA1YmE3MGYyMWFmNWM3MzI5Yy4uOWYxNjhjOGJiMDFj
N2ZmOThjYmMzY2ViZWMwNzQzODIzNGE4OWRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC00NzAsOCArNDcwLDE3IEBAIGJv
b2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OnByZXBhcmVGaWx0ZXJFZmZlY3QoUmVuZGVy
TGF5ZXIqIHJlbmRlckxheWVyLCBjCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotICAgCi1H
cmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVm
ZmVjdChHcmFwaGljc0NvbnRleHQqIG9sZENvbnRleHQpCisKK0dyYXBoaWNzQ29udGV4dCogRmls
dGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI6OmZpbHRlckNvbnRleHQoKSBjb25zdAoreworICAgIGlm
ICghbV9oYXZlRmlsdGVyRWZmZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZpbHRlckVm
ZmVjdFJlbmRlcmVyKiBmaWx0ZXIgPSBtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpOwor
ICAgIHJldHVybiBmaWx0ZXItPmlucHV0Q29udGV4dCgpOworfQorCitib29sIEZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyOjpiZWdpbkZpbHRlckVmZmVjdCgpCiB7CiAgICAgQVNTRVJUKG1fcmVu
ZGVyTGF5ZXIpOwogICAgIApAQCAtNDgyLDIxICs0OTEsMjAgQEAgR3JhcGhpY3NDb250ZXh0KiBG
aWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcjo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250
ZXh0KgogICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8ICFpc0ZpbHRlclNpemVWYWxp
ZChmaWx0ZXItPmZpbHRlclJlZ2lvbigpKSkgewogICAgICAgICAvLyBEaXNhYmxlIHRoZSBmaWx0
ZXJzIGFuZCBjb250aW51ZS4KICAgICAgICAgbV9oYXZlRmlsdGVyRWZmZWN0ID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiBvbGRDb250ZXh0OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIG1fc2F2ZWRHcmFwaGljc0NvbnRleHQgPSBvbGRDb250ZXh0OwotICAgIAogICAg
IC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5
ZXIgaXMgY2FwdHV0ZXJkIGluIHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KICAgICBzb3Vy
Y2VHcmFwaGljc0NvbnRleHQtPnNhdmUoKTsKICAgICBzb3VyY2VHcmFwaGljc0NvbnRleHQtPnRy
YW5zbGF0ZSgtbV9wYWludE9mZnNldC54KCksIC1tX3BhaW50T2Zmc2V0LnkoKSk7CiAgICAgc291
cmNlR3JhcGhpY3NDb250ZXh0LT5jbGVhclJlY3QobV9yZXBhaW50UmVjdCk7CiAgICAgc291cmNl
R3JhcGhpY3NDb250ZXh0LT5jbGlwKG1fcmVwYWludFJlY3QpOwotICAgIAotICAgIHJldHVybiBz
b3VyY2VHcmFwaGljc0NvbnRleHQ7CisKKyAgICBtX3N0YXJ0ZWRGaWx0ZXJFZmZlY3QgPSB0cnVl
OworICAgIHJldHVybiB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJl
bmRlcmVySGVscGVyOjphcHBseUZpbHRlckVmZmVjdCgpCit2b2lkIEZpbHRlckVmZmVjdFJlbmRl
cmVySGVscGVyOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQqIGRlc3RpbmF0aW9u
Q29udGV4dCkKIHsKICAgICBBU1NFUlQobV9oYXZlRmlsdGVyRWZmZWN0ICYmIG1fcmVuZGVyTGF5
ZXItPmZpbHRlclJlbmRlcmVyKCkpOwogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKiBmaWx0ZXIg
PSBtX3JlbmRlckxheWVyLT5maWx0ZXJSZW5kZXJlcigpOwpAQCAtNTA4LDExICs1MTYsOSBAQCBH
cmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyOjphcHBseUZpbHRlckVm
ZmVjdCgpCiAgICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci0+b3V0cHV0UmVjdCgpOwog
ICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsK
ICAgICAKLSAgICBtX3NhdmVkR3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVy
LT5vdXRwdXQoKSwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGRlc3RSZWN0KSwgQ29tcG9zaXRlU291cmNlT3Zlcik7
CisgICAgZGVzdGluYXRpb25Db250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyLT5vdXRwdXQo
KSwgbV9yZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGRlc3RSZWN0KSwgQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgCiAg
ICAgZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICAKLSAgICByZXR1cm4g
bV9zYXZlZEdyYXBoaWNzQ29udGV4dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAppbmRleCA1
MzVhODdhYzA0NTdjNjEyOGI3MWFkNzQ2ODEyY2RhZjE5MWY1YjEzLi4wZDNhYzQwMTcxNjJhYmE1
ZThkOWY2NzlkZTRkYTc5MjNkNmFiMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApAQCAtNTYsMjYgKzU2LDI4IEBAIGNsYXNzIFJlbmRl
ck9iamVjdDsKIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyIHsKIHB1YmxpYzoKICAg
ICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcihib29sIGhhdmVGaWx0ZXJFZmZlY3QpCi0gICAg
ICAgIDogbV9zYXZlZEdyYXBoaWNzQ29udGV4dCgwKQotICAgICAgICAsIG1fcmVuZGVyTGF5ZXIo
MCkKKyAgICAgICAgOiBtX3JlbmRlckxheWVyKDApCiAgICAgICAgICwgbV9oYXZlRmlsdGVyRWZm
ZWN0KGhhdmVGaWx0ZXJFZmZlY3QpCisgICAgICAgICwgbV9zdGFydGVkRmlsdGVyRWZmZWN0KGZh
bHNlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXZlRmlsdGVyRWZmZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9oYXZlRmlsdGVyRWZmZWN0OyB9Ci0gICAgYm9vbCBoYXNTdGFydGVkRmls
dGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zYXZlZEdyYXBoaWNzQ29udGV4dDsgfQorICAg
IGJvb2wgaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRlZEZp
bHRlckVmZmVjdDsgfQogCiAgICAgYm9vbCBwcmVwYXJlRmlsdGVyRWZmZWN0KFJlbmRlckxheWVy
KiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGly
dHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCogb2xkQ29udGV4dCk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBhcHBseUZpbHRlckVmZmVjdCgpOworICAgIGJvb2wgYmVn
aW5GaWx0ZXJFZmZlY3QoKTsKKyAgICB2b2lkIGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCogZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQqIGZp
bHRlckNvbnRleHQoKSBjb25zdDsKIAogICAgIGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogcHJpdmF0ZToKLSAgICBHcmFwaGlj
c0NvbnRleHQqIG1fc2F2ZWRHcmFwaGljc0NvbnRleHQ7Ci0gICAgUmVuZGVyTGF5ZXIqIG1fcmVu
ZGVyTGF5ZXI7CisgICAgUmVuZGVyTGF5ZXIqIG1fcmVuZGVyTGF5ZXI7IC8vIEZJWE1FOiB0aGlz
IGlzIG1haW5seSB1c2VkIHRvIGdldCB0aGUgRmlsdGVyRWZmZWN0UmVuZGVyZXIuIEZpbHRlckVm
ZmVjdFJlbmRlcmVySGVscGVyIHNob3VsZCBiZSB3ZWFuZWQgb2ZmIGl0LgogICAgIExheW91dFBv
aW50IG1fcGFpbnRPZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0OwogICAgIGJv
b2wgbV9oYXZlRmlsdGVyRWZmZWN0OworICAgIGJvb2wgbV9zdGFydGVkRmlsdGVyRWZmZWN0Owog
fTsKIAogY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgOiBwdWJsaWMgRmlsdGVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwMWI1ZjFiZjZhMjkyMzgzYjli
MGVmNDUyNzc4MWJjNmMzNDQ1ZjAwLi5lZmIxMzI0NGY2ZDE5ZTJmZDgyMGU2OTFmNmQ3OThmZThj
NjA0NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM2
ODgsNiArMzY4OCwxMzQgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzQW5k
UmVmbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnMKICAgICBwYWludExheWVy
Q29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogfQogCiti
b29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGJvb2wgJmRpZFF1YW50aXplRm9udHMpCit7CisgICAgaWYgKGNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCBzY3JvbGxpbmdPbk1haW5UaHJlYWQgPSB0cnVlOworICAgIEZyYW1lKiBmcmFtZSA9IHJlbmRl
cmVyKCktPmZyYW1lKCk7CisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICBpZiAo
ZnJhbWUpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAg
ICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
cGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdP
bk1haW5UaHJlYWQgPSBzY3JvbGxpbmdDb29yZGluYXRvci0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6
YXRpb24gZm9yIG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9z
ZQorICAgIC8vIHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICBib29sIGNvbnRl
bnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAh
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKGZyYW1lICYmIGZyYW1lLT5vd25lckVsZW1l
bnQoKSk7CisgICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5
UGFpbnRpbmcpIHsKKyAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQtPnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cygpOworICAgICAgICBjb250ZXh0LT5zZXRTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBJbnRSZWN0JiByb290UmVsYXRp
dmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKQoreworICAgIGlmICgh
cmVuZGVyZXIoKS0+aGFzQ2xpcFBhdGgoKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
cmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQVNTRVJUKHN0eWxlLT5jbGlwUGF0aCgpKTsKKyAgICBpZiAoc3R5bGUtPmNsaXBQYXRo
KCktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6U0hBUEUpIHsKKyAg
ICAgICAgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBhdGggPSBzdGF0aWNfY2FzdDxTaGFw
ZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOworCisgICAgICAgIGlmICgh
cm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpIHsKKyAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJv
dW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZz
ZXRGcm9tUm9vdCwgMCk7CisgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNv
bnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLT5wYXRoKHJvb3RSZWxhdGl2ZUJvdW5kcyksIGNsaXBQ
YXRoLT53aW5kUnVsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisjaWYgRU5B
QkxFKFNWRykKKyAgICBpZiAoc3R5bGUtPmNsaXBQYXRoKCktPmdldE9wZXJhdGlvblR5cGUoKSA9
PSBDbGlwUGF0aE9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CisgICAgICAgIFJlZmVyZW5jZUNsaXBQ
YXRoT3BlcmF0aW9uKiByZWZlcmVuY2VDbGlwUGF0aE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFJl
ZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5bGUtPmNsaXBQYXRoKCkpOworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQocmVmZXJl
bmNlQ2xpcFBhdGhPcGVyYXRpb24tPmZyYWdtZW50KCkpIDogMDsKKyAgICAgICAgaWYgKGVsZW1l
bnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Y2xpcFBhdGhUYWcpICYmIGVsZW1l
bnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcm9vdFJlbGF0aXZlQm91bmRzQ29t
cHV0ZWQpIHsKKyAgICAgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVM
YXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOwor
ICAgICAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIHNhZmVy
IGNhc3Qgc3VjaCBhcyB0b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkuCisgICAgICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZG8gYSBjb250ZXh0LT5zYXZlKCkgYW5kIHJldHVybiB0
cnVlIHNvIHdlIHJlc3RvcmUgdGhlIGNvbnRleHQ/CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqPihlbGVtZW50LT5yZW5kZXJlcigpKS0+YXBwbHlDbGlw
cGluZ1RvQ29udGV4dChyZW5kZXJlcigpLCByb290UmVsYXRpdmVCb3VuZHMsIHBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK1Bhc3NPd25Q
dHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0RnJvbVJvb3QsIEludFJlY3QmIHJvb3RSZWxhdGl2
ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCit7CisgICAgaWYgKGNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBib29sIGhhc1BhaW50ZWRGaWx0ZXIgPSBmaWx0ZXJSZW5kZXJlcigpICYmIHBhaW50c1dpdGhG
aWx0ZXJzKCk7CisgICAgaWYgKCFoYXNQYWludGVkRmlsdGVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIE93blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gZmlsdGVyUGFp
bnRlciA9IGFkb3B0UHRyKG5ldyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcihoYXNQYWludGVk
RmlsdGVyKSk7CisgICAgaWYgKCFmaWx0ZXJQYWludGVyLT5oYXZlRmlsdGVyRWZmZWN0KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIFJlbmRlckxheWVyRmlsdGVySW5mbyog
ZmlsdGVySW5mbyA9IHRoaXMtPmZpbHRlckluZm8oKTsKKyAgICBBU1NFUlQoZmlsdGVySW5mbyk7
CisgICAgTGF5b3V0UmVjdCBmaWx0ZXJSZXBhaW50UmVjdCA9IGZpbHRlckluZm8tPmRpcnR5U291
cmNlUmVjdCgpOworICAgIGZpbHRlclJlcGFpbnRSZWN0Lm1vdmUob2Zmc2V0RnJvbVJvb3QueCgp
LCBvZmZzZXRGcm9tUm9vdC55KCkpOworCisgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21w
dXRlZCkgeworICAgICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5k
cyhwYWludGluZ0luZm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOworICAgICAgICBy
b290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGZpbHRl
clBhaW50ZXItPnByZXBhcmVGaWx0ZXJFZmZlY3QodGhpcywgcm9vdFJlbGF0aXZlQm91bmRzLCBw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZpbHRlclJlcGFpbnRSZWN0KSkgeworICAgICAg
ICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSwgdGhhdCB0aGUgc291cmNlIGltYWdlIHdpbGwgYmUg
dXBkYXRlZCwgc28gd2UgY2FuIHJldmVydCBvdXIgdHJhY2tpbmcgcmVwYWludCByZWN0IGJhY2sg
dG8gemVyby4KKyAgICAgICAgZmlsdGVySW5mby0+cmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKKwor
ICAgICAgICBpZiAoIWZpbHRlclBhaW50ZXItPmJlZ2luRmlsdGVyRWZmZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBm
YWlsIHRvIGFsbG9jYXRlIHRoZSBncmFwaGljcyBjb250ZXh0IGZvciB0aGUgb2Zmc2NyZWVuIGJ1
ZmZlci4KKyAgICAgICAgQVNTRVJUKGZpbHRlclBhaW50ZXItPmhhc1N0YXJ0ZWRGaWx0ZXJFZmZl
Y3QoKSk7CisKKyAgICAgICAgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0ID0gZmlsdGVyUGFp
bnRlci0+cmVwYWludFJlY3QoKTsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBuZWVkcyB0aGUg
ZnVsbCBzb3VyY2UgaW1hZ2UsIHdlIG5lZWQgdG8gYXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdGFu
Z2xlcy4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBmb3IgZXhhbXBsZSB0aGlzIGxheWVyIGhh
cyBvdmVyZmxvdzpoaWRkZW4sIGEgZHJvcCBzaGFkb3cgd2lsbCBub3QgY29tcHV0ZSBjb3JyZWN0
bHkuCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSB3aWxsIHN0aWxsIGFwcGx5IHRoZSBjbGlwcGlu
ZyBvbiB0aGUgZmluYWwgcmVuZGVyaW5nIG9mIHRoZSBmaWx0ZXIuCisgICAgICAgIHBhaW50aW5n
SW5mby5jbGlwVG9EaXJ0eVJlY3QgPSAhZmlsdGVyUmVuZGVyZXIoKS0+aGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCk7CisgICAgICAgIHJldHVybiBmaWx0ZXJQYWludGVyLnJlbGVhc2UoKTsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5
ZXI6OmFwcGx5RmlsdGVycyhGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciogZmlsdGVyUGFpbnRl
ciwgR3JhcGhpY3NDb250ZXh0KiBvcmlnaW5hbENvbnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiBw
YWludGluZ0luZm8sIExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cykKK3sKKyAgICBBU1NF
UlQoZmlsdGVyUGFpbnRlci0+aGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpKTsKKyAgICAvLyBBcHBs
eSB0aGUgY29ycmVjdCBjbGlwcGluZyAoaWUuIG92ZXJmbG93OiBoaWRkZW4pLgorICAgIC8vIEZJ
WE1FOiBJdCBpcyBpbmNvcnJlY3QgdG8ganVzdCBjbGlwIHRvIHRoZSBkYW1hZ2VSZWN0IGhlcmUg
b25jZSBtdWx0aXBsZSBmcmFnbWVudHMgYXJlIGludm9sdmVkLgorICAgIENsaXBSZWN0IGJhY2tn
cm91bmRSZWN0ID0gbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpID8gQ2xpcFJlY3QoKSA6IGxheWVy
RnJhZ21lbnRzWzBdLmJhY2tncm91bmRSZWN0OworICAgIGNsaXBUb1JlY3QocGFpbnRpbmdJbmZv
LnJvb3RMYXllciwgb3JpZ2luYWxDb250ZXh0LCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qs
IGJhY2tncm91bmRSZWN0KTsKKyAgICBmaWx0ZXJQYWludGVyLT5hcHBseUZpbHRlckVmZmVjdChv
cmlnaW5hbENvbnRleHQpOworICAgIHJlc3RvcmVDbGlwKG9yaWdpbmFsQ29udGV4dCwgcGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CisgICAgcmV0dXJuIG9yaWdp
bmFsQ29udGV4dDsKK30KKyNlbmRpZgorCiB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYg
cGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICBBU1NFUlQo
aXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgp
KTsKQEAgLTM3MTEsOCArMzgzOSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250
ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAg
IHx8ICghaXNQYWludGluZ1Njcm9sbGluZ0NvbnRlbnQgJiYgaXNQYWludGluZ0NvbXBvc2l0ZWRG
b3JlZ3JvdW5kKSk7CiAgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQgPSBtX2hhc1Zpc2libGVD
b250ZW50ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIgJiYgIWlzUGFpbnRpbmdPdmVybGF5U2Nyb2xs
YmFyczsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0ID0g
Y29udGV4dDsKLSAgICAKICAgICBpZiAobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50
aW5nUm9vdEJhY2tncm91bmRPbmx5ICYmICFyZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSAmJiAh
cmVuZGVyZXIoKS0+aXNSb290KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzcyNSwxMDEgKzM4
NTEsMjYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICBJbnRSZWN0IHJvb3RSZWxhdGl2
ZUJvdW5kczsKICAgICBib29sIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFsc2U7CiAK
LSAgICBib29sIGRpZFF1YW50aXplRm9udHMgPSB0cnVlOwotICAgIGJvb2wgc2Nyb2xsaW5nT25N
YWluVGhyZWFkID0gdHJ1ZTsKLSAgICBGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgp
OwotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgewotICAgICAgICAgICAgaWYgKFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nT25NYWluVGhyZWFkID0g
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3VicGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVy
ZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGlu
Z3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0gICAgYm9vbCBuZWVkVG9BZGp1c3RTdWJwaXhl
bFF1YW50aXphdGlvbiA9IHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCAocmVuZGVyZXIoKS0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHx8IChmcmFtZSAm
JiBmcmFtZS0+b3duZXJFbGVtZW50KCkpOwotICAgIGlmIChuZWVkVG9BZGp1c3RTdWJwaXhlbFF1
YW50aXphdGlvbikgewotICAgICAgICBkaWRRdWFudGl6ZUZvbnRzID0gY29udGV4dC0+c2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7Ci0gICAgICAgIGNvbnRleHQtPnNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhmYWxzZSk7Ci0gICAgfQorICAgIGJvb2wgZGlkUXVhbnRpemVGb250
cyA9IHRydWU7CisgICAgYm9vbCBuZWVkVG9BZGp1c3RTdWJwaXhlbFF1YW50aXphdGlvbiA9IHNl
dHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKGNvbnRleHQsIGRpZFF1YW50aXplRm9udHMpOwog
CiAgICAgLy8gQXBwbHkgY2xpcC1wYXRoIHRvIGNvbnRleHQuCi0gICAgYm9vbCBoYXNDbGlwUGF0
aCA9IGZhbHNlOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7
Ci0gICAgaWYgKHJlbmRlcmVyKCktPmhhc0NsaXBQYXRoKCkgJiYgIWNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSAmJiBzdHlsZSkgewotICAgICAgICBBU1NFUlQoc3R5bGUtPmNsaXBQYXRoKCkp
OwotICAgICAgICBpZiAoc3R5bGUtPmNsaXBQYXRoKCktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBD
bGlwUGF0aE9wZXJhdGlvbjo6U0hBUEUpIHsKLSAgICAgICAgICAgIGhhc0NsaXBQYXRoID0gdHJ1
ZTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgIFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb24qIGNsaXBQYXRoID0gc3RhdGljX2Nhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlv
bio+KHN0eWxlLT5jbGlwUGF0aCgpKTsKLQotICAgICAgICAgICAgaWYgKCFyb290UmVsYXRpdmVC
b3VuZHNDb21wdXRlZCkgewotICAgICAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNh
bGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9v
dCwgMCk7Ci0gICAgICAgICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlwUGF0
aC0+cGF0aChyb290UmVsYXRpdmVCb3VuZHMpLCBjbGlwUGF0aC0+d2luZFJ1bGUoKSk7Ci0gICAg
ICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBlbHNlIGlmIChzdHlsZS0+Y2xpcFBhdGgo
KS0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IENsaXBQYXRoT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
LSAgICAgICAgICAgIFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKiByZWZlcmVuY2VDbGlwUGF0
aE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKj4oc3R5
bGUtPmNsaXBQYXRoKCkpOwotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsg
d2l0aCBmb3J3YXJkIG9yIGV4dGVybmFsIFNWRyByZWZlcmVuY2VzIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAgICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQocmVmZXJlbmNlQ2xpcFBh
dGhPcGVyYXRpb24tPmZyYWdtZW50KCkpIDogMDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmNsaXBQYXRoVGFnKSAmJiBlbGVtZW50LT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21w
dXRlZCkgewotICAgICAgICAgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxh
dGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDAp
OwotICAgICAgICAgICAgICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBhIHNhZmVyIGNhc3Qgc3VjaCBhcyB0b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
KCkuCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
Kj4oZWxlbWVudC0+cmVuZGVyZXIoKSktPmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQocmVuZGVyZXIo
KSwgcm9vdFJlbGF0aXZlQm91bmRzLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGNvbnRl
eHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9CisgICAgYm9vbCBo
YXNDbGlwUGF0aCA9IHNldHVwQ2xpcFBhdGgoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBvZmZzZXRG
cm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91bmRzLCByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCk7
CiAKICAgICBMYXllclBhaW50aW5nSW5mbyBsb2NhbFBhaW50aW5nSW5mbyhwYWludGluZ0luZm8p
OwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBl
ciBmaWx0ZXJQYWludGVyKGZpbHRlclJlbmRlcmVyKCkgJiYgcGFpbnRzV2l0aEZpbHRlcnMoKSk7
Ci0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGF2ZUZpbHRlckVmZmVjdCgpICYmICFjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvKiBmaWx0
ZXJJbmZvID0gdGhpcy0+ZmlsdGVySW5mbygpOwotICAgICAgICBBU1NFUlQoZmlsdGVySW5mbyk7
Ci0gICAgICAgIExheW91dFJlY3QgZmlsdGVyUmVwYWludFJlY3QgPSBmaWx0ZXJJbmZvLT5kaXJ0
eVNvdXJjZVJlY3QoKTsKLSAgICAgICAgZmlsdGVyUmVwYWludFJlY3QubW92ZShvZmZzZXRGcm9t
Um9vdC54KCksIG9mZnNldEZyb21Sb290LnkoKSk7Ci0KLSAgICAgICAgaWYgKCFyb290UmVsYXRp
dmVCb3VuZHNDb21wdXRlZCkgewotICAgICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzID0gY2Fs
Y3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290
LCAwKTsKLSAgICAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQogCi0gICAgICAgIGlmIChmaWx0ZXJQYWludGVyLnByZXBhcmVGaWx0ZXJFZmZlY3Qo
dGhpcywgcm9vdFJlbGF0aXZlQm91bmRzLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIGZp
bHRlclJlcGFpbnRSZWN0KSkgewotICAgICAgICAgICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUs
IHRoYXQgdGhlIHNvdXJjZSBpbWFnZSB3aWxsIGJlIHVwZGF0ZWQsIHNvIHdlIGNhbiByZXZlcnQg
b3VyIHRyYWNraW5nIHJlcGFpbnQgcmVjdCBiYWNrIHRvIHplcm8uCi0gICAgICAgICAgICBmaWx0
ZXJJbmZvLT5yZXNldERpcnR5U291cmNlUmVjdCgpOwotCi0gICAgICAgICAgICAvLyBSZXdpcmUg
dGhlIG9sZCBjb250ZXh0IHRvIGEgbWVtb3J5IGJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4gY2FwdHVy
ZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyLgotICAgICAgICAgICAgLy8gTk9URTogV2Ugc2F2
ZWQgdGhlIG9sZCBjb250ZXh0IGluIHRoZSAidHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0IiBsb2Nh
bCB2YXJpYWJsZSwgdG8gYmUgYWJsZSB0byBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllcgotICAg
ICAgICAgICAgLy8gb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgYW5kIGF2b2lkIGR1cGxpY2F0aW5n
ICJiZWdpbkZpbHRlckVmZmVjdCIgYWZ0ZXIgZWFjaCB0cmFuc3BhcmVuY3kgbGF5ZXIgY2FsbC4g
QWxzbywgbm90ZSB0aGF0IAotICAgICAgICAgICAgLy8gYmVnaW5UcmFuc3BhcmVuY3lMYXllcnMg
d2lsbCBvbmx5IGNyZWF0ZSBhIHNpbmdsZSBsYXp5IHRyYW5zcGFyZW5jeSBsYXllciwgZXZlbiB0
aG91Z2ggaXQgaXMgY2FsbGVkIHR3aWNlIGluIHRoaXMgbWV0aG9kLgotICAgICAgICAgICAgY29u
dGV4dCA9IGZpbHRlclBhaW50ZXIuYmVnaW5GaWx0ZXJFZmZlY3QoY29udGV4dCk7Ci0KLSAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGZhaWwgdG8gYWxsb2NhdGUgdGhlIGdyYXBo
aWNzIGNvbnRleHQgZm9yIHRoZSBvZmZzY3JlZW4gYnVmZmVyLgotICAgICAgICAgICAgaWYgKGZp
bHRlclBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpKSB7Ci0gICAgICAgICAgICAgICAg
bG9jYWxQYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QgPSBmaWx0ZXJQYWludGVyLnJlcGFpbnRS
ZWN0KCk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBuZWVkcyB0aGUgZnVsbCBz
b3VyY2UgaW1hZ2UsIHdlIG5lZWQgdG8gYXZvaWQgdXNpbmcgdGhlIGNsaXAgcmVjdGFuZ2xlcy4K
LSAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGZvciBleGFtcGxlIHRoaXMgbGF5ZXIg
aGFzIG92ZXJmbG93OmhpZGRlbiwgYSBkcm9wIHNoYWRvdyB3aWxsIG5vdCBjb21wdXRlIGNvcnJl
Y3RseS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugd2lsbCBzdGlsbCBhcHBseSB0
aGUgY2xpcHBpbmcgb24gdGhlIGZpbmFsIHJlbmRlcmluZyBvZiB0aGUgZmlsdGVyLgotICAgICAg
ICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVjdCA9ICFmaWx0ZXJSZW5k
ZXJlcigpLT5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICAgICAgICAgIH0KKyAgICBH
cmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCA9IGNvbnRleHQ7CisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorICAgIE93blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBl
cj4gZmlsdGVyUGFpbnRlciA9IHNldHVwRmlsdGVycyhjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
bywgb2Zmc2V0RnJvbVJvb3QsIHJvb3RSZWxhdGl2ZUJvdW5kcywgcm9vdFJlbGF0aXZlQm91bmRz
Q29tcHV0ZWQpOworICAgIGlmIChmaWx0ZXJQYWludGVyKSB7CisgICAgICAgIGNvbnRleHQgPSBm
aWx0ZXJQYWludGVyLT5maWx0ZXJDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0ICE9IHRy
YW5zcGFyZW5jeUxheWVyQ29udGV4dCAmJiBoYXZlVHJhbnNwYXJlbmN5KSB7CisgICAgICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGFuZCB0cmFuc3BhcmVuY3ksIHdlIGhhdmUgdG8gZWFn
ZXJseSBzdGFydCBhIHRyYW5zcGFyZW5jeSBsYXllciBoZXJlLCByYXRoZXIgdGhhbiByaXNrIGEg
Y2hpbGQgbGF5ZXIgbGF6aWx5IHN0YXJ0cyBvbmUgd2l0aCB0aGUgd3JvbmcgY29udGV4dC4KKyAg
ICAgICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5zcGFyZW5jeUxheWVyQ29udGV4
dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJl
Y3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwogICAgICAgICB9CiAgICAgfQot
Ci0gICAgaWYgKGZpbHRlclBhaW50ZXIuaGFzU3RhcnRlZEZpbHRlckVmZmVjdCgpICYmIGhhdmVU
cmFuc3BhcmVuY3kpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGZpbHRlciBhbmQgdHJhbnNw
YXJlbmN5LCB3ZSBoYXZlIHRvIGVhZ2VybHkgc3RhcnQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaGVy
ZSwgcmF0aGVyIHRoYW4gcmlzayBhIGNoaWxkIGxheWVyIGxhemlseSBzdGFydHMgb25lIHdpdGgg
dGhlIHdyb25nIGNvbnRleHQuCi0gICAgICAgIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKHRyYW5z
cGFyZW5jeUxheWVyQ29udGV4dCwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCBwYWludGlu
Z0luZm8ucGFpbnREaXJ0eVJlY3QsIGxvY2FsUGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpOwot
ICAgIH0KICNlbmRpZgogCiAgICAgLy8gSWYgdGhpcyBsYXllcidzIHJlbmRlcmVyIGlzIGEgY2hp
bGQgb2YgdGhlIHBhaW50aW5nUm9vdCwgd2UgcmVuZGVyIHVuY29uZGl0aW9uYWxseSwgd2hpY2gK
QEAgLTM4ODQsMTMgKzM5MzUsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICBw
YWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAo
ZmlsdGVyUGFpbnRlci5oYXNTdGFydGVkRmlsdGVyRWZmZWN0KCkpIHsKLSAgICAgICAgLy8gQXBw
bHkgdGhlIGNvcnJlY3QgY2xpcHBpbmcgKGllLiBvdmVyZmxvdzogaGlkZGVuKS4KLSAgICAgICAg
Ly8gRklYTUU6IEl0IGlzIGluY29ycmVjdCB0byBqdXN0IGNsaXAgdG8gdGhlIGRhbWFnZVJlY3Qg
aGVyZSBvbmNlIG11bHRpcGxlIGZyYWdtZW50cyBhcmUgaW52b2x2ZWQuCi0gICAgICAgIENsaXBS
ZWN0IGJhY2tncm91bmRSZWN0ID0gbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpID8gQ2xpcFJlY3Qo
KSA6IGxheWVyRnJhZ21lbnRzWzBdLmJhY2tncm91bmRSZWN0OwotICAgICAgICBjbGlwVG9SZWN0
KGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCwgYmFja2dyb3VuZFJlY3QpOwotICAgICAg
ICBjb250ZXh0ID0gZmlsdGVyUGFpbnRlci5hcHBseUZpbHRlckVmZmVjdCgpOwotICAgICAgICBy
ZXN0b3JlQ2xpcCh0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0LCBiYWNrZ3JvdW5kUmVjdCk7CisgICAgaWYgKGZpbHRlclBhaW50ZXIpIHsK
KyAgICAgICAgY29udGV4dCA9IGFwcGx5RmlsdGVycyhmaWx0ZXJQYWludGVyLmdldCgpLCB0cmFu
c3BhcmVuY3lMYXllckNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsYXllckZyYWdtZW50cyk7
CisgICAgICAgIGZpbHRlclBhaW50ZXIuY2xlYXIoKTsKICAgICB9CiAjZW5kaWYKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggOTI1YWIwMDEzZDQ2ZjJlYzAy
YTY5NDI3OGMzMWZmNTgxZGFjMjMyMS4uZjJmYzZjZDY4OTJmMjI0OTFlZjBlZTYzMjBiMTVjNDZj
NmM0MjNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUzLDYg
KzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
Y2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7CitjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckhl
bHBlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcklu
Zm87CiAjZW5kaWYKQEAgLTkzNCw3ICs5MzUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgUGFpbnRC
ZWhhdmlvciBwYWludEJlaGF2aW9yOwogICAgICAgICBib29sIGNsaXBUb0RpcnR5UmVjdDsKICAg
ICB9OwotICAgICAgICAKKworICAgIGJvb2wgc2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24o
R3JhcGhpY3NDb250ZXh0KiwgYm9vbCAmZGlkUXVhbnRpemVGb250cyk7CisgICAgYm9vbCBzZXR1
cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBJbnRSZWN0JiByb290UmVsYXRpdmVCb3Vu
ZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgUGFzc093blB0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gc2V0dXBG
aWx0ZXJzKEdyYXBoaWNzQ29udGV4dCosIExheWVyUGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmIG9mZnNldEZyb21Sb290LCBJbnRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wm
IHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGFwcGx5
RmlsdGVycyhGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciosIEdyYXBoaWNzQ29udGV4dCogb3Jp
Z2luYWxDb250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIExheWVyRnJhZ21lbnRzJik7CisjZW5k
aWYKKwogICAgIHZvaWQgcGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExheWVyQ29udGVu
dHNBbmRSZWZsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNm
b3JtKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXll
ckZsYWdzLCBjb25zdCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRQb2lu
dCgpKTsK
</data>
<flag name="review"
          id="223644"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>