<?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>109988</bug_id>
          
          <creation_ts>2013-02-15 16:57:51 -0800</creation_ts>
          <short_desc>[WebGL][EFL] Refactor GraphicsContext3DPrivate to add support for SharedContext.</short_desc>
          <delta_ts>2013-02-18 08:17:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          
          <blocked>106508</blocked>
    
    <blocked>109435</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>834512</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-15 16:57:51 -0800</bug_when>
    <thetext>Currently we don&apos;t have any support for shared context. This would help with sharing GL objects without having to worry about the context state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834770</commentid>
    <comment_count>1</comment_count>
      <attachid>188722</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-16 12:30:59 -0800</bug_when>
    <thetext>Created attachment 188722
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834771</commentid>
    <comment_count>2</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-16 12:40:27 -0800</bug_when>
    <thetext>Still, one pending change is to move TransportSurface management from GraphicsContext3DPrivate to GraphicsSurface. This will be done in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835286</commentid>
    <comment_count>3</comment_count>
      <attachid>188722</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-18 02:58:59 -0800</bug_when>
    <thetext>Comment on attachment 188722
patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:214
&gt; +
&gt; +        success = false;
&gt; +    }

I think return false is more clear

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.h:66
&gt; +    virtual bool initialize(GLPlatformSurface*, PlatformContext = 0);

What is PlatformContext here? Why not a pointer? (I guess it is hiding that fact)

contextToReuse?

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.h:56
&gt; +    // The handle will be null if surface doesnot support

spelling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835341</commentid>
    <comment_count>4</comment_count>
      <attachid>188722</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-18 04:37:12 -0800</bug_when>
    <thetext>Comment on attachment 188722
patch

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

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp:66
&gt; +            goto initializationFailed;

looks like a bad idea to use &apos;goto&apos; in C++ code.. Same effect can be reached using do { some breaks; } while(false).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835417</commentid>
    <comment_count>5</comment_count>
      <attachid>188869</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-18 06:12:09 -0800</bug_when>
    <thetext>Created attachment 188869
patchv2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835421</commentid>
    <comment_count>6</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-18 06:15:16 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 188722 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188722&amp;action=review
&gt; 
&gt; I think return false is more clear

oops missed this one, will update a new patch taking this into account.

&gt; What is PlatformContext here? Why not a pointer? (I guess it is hiding that fact)
&gt; 
&gt; contextToReuse?

PlatformContext is typedefed  to the respective GL context(glx, egl etc) in GLdefs.h

&gt; &gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.h:56
&gt; &gt; +    // The handle will be null if surface doesnot support
&gt; spelling

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835422</commentid>
    <comment_count>7</comment_count>
      <attachid>188869</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-18 06:16:15 -0800</bug_when>
    <thetext>Comment on attachment 188869
patchv2

marking patch as obsolete, as it missed some of the review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835423</commentid>
    <comment_count>8</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-18 06:16:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 188722 [details])
&gt; looks like a bad idea to use &apos;goto&apos; in C++ code.. Same effect can be reached using do { some breaks; } while(false).

fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835447</commentid>
    <comment_count>9</comment_count>
      <attachid>188875</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-18 06:50:17 -0800</bug_when>
    <thetext>Created attachment 188875
patchv3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835448</commentid>
    <comment_count>10</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-18 06:51:07 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 188722 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188722&amp;action=review
&gt; &gt; 
&gt; &gt; I think return false is more clear
&gt; 
&gt; oops missed this one, will update a new patch taking this into account.
&gt; 

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835500</commentid>
    <comment_count>11</comment_count>
      <attachid>188875</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 08:17:36 -0800</bug_when>
    <thetext>Comment on attachment 188875
patchv3

Clearing flags on attachment: 188875

Committed r143220: &lt;http://trac.webkit.org/changeset/143220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835501</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 08:17:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188722</attachid>
            <date>2013-02-16 12:30:59 -0800</date>
            <delta_ts>2013-02-18 06:12:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>sharedcontext.patch</filename>
            <type>text/plain</type>
            <size>40349</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGFlNDc1OWUuLjE5OTU0YjkgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEz
LTAyLTE2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbV2ViR0xdW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
IHRvIGFkZCBzdXBwb3J0IGZvciBTaGFyZWRDb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0
cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBQbGF0Zm9ybUNvbnRleHQgYW5kIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB0bworICAgICAgICBhZGQgc3VwcG9ydCBmb3IgU2hhcmVk
IENvbnRleHQuIFRoaXMgd291bGQgaGVscCBzaGFyZSBHTCByZXNvdXJjZXMKKyAgICAgICAgYmV0
d2VlbiB0cmFuc3BvcnQgc3VyZmFjZSBhbmQgb2Zmc2NyZWVuIHN1cmZhY2Ugd2l0aG91dCBoYXZp
bmcgdG8gd29ycnkKKyAgICAgICAgYWJvdXQgdGhlIGNvbnRleHQgc3RhdGUuIFNvIGZhciwgd2Ug
dXNlZCB0aGUgc2FtZSBkcmF3YWJsZSBhcyB0cmFuc3BvcnQKKyAgICAgICAgc3VyZmFjZSBhbmQg
b2Zmc2NyZWVuIHN1cmZhY2UuIEFmdGVyIHRoaXMgcGF0Y2ggd2UgdXNlIHBpeG1hcCBzdXJmYWNl
IGFzCisgICAgICAgIG9mZnNjcmVlbiBzdXJmYWNlIGFuZCB1c2Ugc2hhcmVkIGNvbnRleHQgdG8g
cmVuZGVyIHRleHR1cmUgY29udGVudCB0bworICAgICAgICB0cmFuc3BvcnQgc3VyZmFjZS4gVGhp
cyB3b3VsZCBhbHNvIGFsaWduIGFzIHRvIGhvdyBzaGFyZWQgc3VyZmFjZSBpcyBpbXBsZW1lbnRl
ZAorICAgICAgICBvbiBFRkwgYW5kIFF0IHBvcnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6Om1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAg
ICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xQ
bGF0Zm9ybUNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oOgorICAgICAgICBOZWVkZWQgY2hhbmdlcyB0byB0
YWtlIHNoYXJlZCBjb250ZXh0IGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxh
dGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3Jt
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENv
bmZpZ1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6R0xY
Q29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnZp
c3VhbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnBpeG1hcENv
bnRleHRDb25maWcpOgorICAgICAgICAoR0xYQ29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6CisgICAgICAgIEFkZGVkIHN1cHBvcnQg
dG8gcXVlcnkgY29uZmlnaXJhdGlvbiBzdXBwb3J0aW5nCisgICAgICAgIHBpeG1hcCBzdXJmYWNl
LgorCisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oOgor
ICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJh
bnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhP
ZmZTY3JlZW5TdXJmYWNlOjpHTFhPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWE9mZlNjcmVlblN1cmZhY2U6On5HTFhPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdMWE9mZlNjcmVlblN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYT2ZmU2NyZWVuU3VyZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhPZmZTY3JlZW5TdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9m
ZlNjcmVlblN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2Zm
U2NyZWVuU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICBSZW5hbWVkIEdMWFBCdWZmZXIg
c3VyZmFjZSBhcyBHTFhPZmZTY3JlZW5TdXJmYWNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDoKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1
cmZhY2UpOgorICAgICAgICAoR0xYT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WDExSGVscGVyOjpkZXN0cm95UGl4bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6CisgICAgICAgIChYMTFI
ZWxwZXIpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuZCBkZXN0cm95IHBp
eG1hcC4KKwogMjAxMy0wMi0xNSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgogCiAgICAgICAgIEFYOiBTcGxpdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzbyBj
b2RlIGNhbiBiZSBzaGFyZWQgd2l0aCBpT1MKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggMmZm
YmI3OC4uYmE0NzNhZSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTM0LDkgKzM0LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKLSAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0gICAgICAg
IHJldHVybiAwOwotCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHls
ZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6
IDA7CiB9CkBAIC02MywxOCArNjAsMTYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAs
IG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRl
KGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdywg
cmVuZGVyU3R5bGUpKSkKKyAgICAsIG1fcHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZSh0aGlzLCBob3N0V2luZG93KSkKIHsKLSAgICBpZiAoIW1fcHJpdmF0ZSB8fCAhbV9w
cml2YXRlLT5tX3BsYXRmb3JtQ29udGV4dCkgewotICAgICAgICBtX3ByaXZhdGUgPSBudWxscHRy
OworICAgIGlmICghbV9wcml2YXRlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgdmFs
aWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyT2Zmc2Ny
ZWVuKSB7CiAgICAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KLSAg
ICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fZmJvKTsKKyAgICAgICAg
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKIAogICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0
dXJlIHRvIHJlbmRlciBpbnRvLgogICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwpAQCAtMTM0LDMwICsxMjksMzggQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKIAogR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7Ci0gICAgaWYgKCFtX3ByaXZhdGUg
fHwgIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgIGlmICghbV9wcml2YXRlIHx8IChtX3JlbmRl
clN0eWxlID09IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkgfHwgIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAg
ICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworICAgIGlmIChtX2ZibykKKyAg
ICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKIAogICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgewotICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
CisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7CiAKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KQorICAgICAgICBpZiAobV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcikKICAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7CiAKLSAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgICAgIGdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKICAgICB9IGVsc2UgaWYgKG1fYXR0
cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CiAjaWYgVVNFKE9QRU5HTF9FU18yKQotICAg
ICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCiAgICAg
ICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwogCi0gICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCiAg
ICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CiAj
ZW5kaWYKLSAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIGds
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgIH0KLQot
ICAgIG1fcHJpdmF0ZS0+cmVsZWFzZVJlc291cmNlcygpOwogfQogCiBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkK
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAppbmRleCBkMTA5NTY3Li5mODgyNGM0IDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC0yOCw1OCArMjgsMTA2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKK1Bhc3NP
d25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwbGF0Zm9ybUxheWVy
ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShjb250ZXh0LCBob3N0V2lu
ZG93KSk7CisKKyAgICBpZiAocGxhdGZvcm1MYXllciAmJiBwbGF0Zm9ybUxheWVyLT5pbml0aWFs
aXplKCkpCisgICAgICAgIHJldHVybiBwbGF0Zm9ybUxheWVyLnJlbGVhc2UoKTsKKworICAgIHJl
dHVybiBudWxscHRyOworfQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2luZG93KGhv
c3RXaW5kb3cpCi0gICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogeworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKG1f
Y29udGV4dC0+bV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChtX2hvc3RX
aW5kb3cgJiYgbV9ob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgewogICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgY29kZSBwYXRoIGZvciBXZWJLaXQxLgogICAgICAgICAv
LyBHZXQgRXZhcyBvYmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGllbnQgYW5kIHNldCBFdmFzR0wg
cmVsYXRlZCBtZW1iZXJzLgotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBtX3BsYXRmb3JtQ29udGV4dCA9IEdMUGxhdGZvcm1Db250ZXh0OjpjcmVh
dGVDb250ZXh0KHJlbmRlclN0eWxlKTsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0KQotICAg
ICAgICByZXR1cm47CisgICAgbV9vZmZTY3JlZW5Db250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6
OmNyZWF0ZUNvbnRleHQobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlKTsKKyAgICBpZiAoIW1fb2Zm
U2NyZWVuQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJlbmRlclN0
eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pIHsKKyAgICBpZiAobV9j
b250ZXh0LT5tX3JlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3Jl
ZW4pIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgbV9wbGF0Zm9ybVN1cmZh
Y2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOwotI2Vsc2UK
LSAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2Zm
c2NyZWVuU3VyZmFjZSgpOworICAgICAgICBtX3NoYXJlZFN1cmZhY2UgPSBHTFBsYXRmb3JtU3Vy
ZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOworICAgICAgICBpZiAoIW1fc2hhcmVkU3Vy
ZmFjZSkKKyAgICAgICAgICAgIGdvdG8gaW5pdGlhbGl6YXRpb25GYWlsZWQ7CisKKyAgICAgICAg
bV9zaGFyZWRDb250ZXh0ID0gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQobV9jb250
ZXh0LT5tX3JlbmRlclN0eWxlKTsKKyAgICAgICAgaWYgKCFtX3NoYXJlZENvbnRleHQpCisgICAg
ICAgICAgICBnb3RvIGluaXRpYWxpemF0aW9uRmFpbGVkOwogI2VuZGlmCi0gICAgICAgIGlmICgh
bV9wbGF0Zm9ybVN1cmZhY2UpIHsKLSAgICAgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gbnVs
bHB0cjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9w
bGF0Zm9ybUNvbnRleHQtPmluaXRpYWxpemUobV9wbGF0Zm9ybVN1cmZhY2UuZ2V0KCkpIHx8ICFt
X3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9wbGF0Zm9ybVN1cmZhY2UuZ2V0KCkpKSB7
Ci0gICAgICAgICAgICByZWxlYXNlUmVzb3VyY2VzKCk7Ci0gICAgICAgICAgICBtX3BsYXRmb3Jt
Q29udGV4dCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZSA9IG51bGxw
dHI7CisgICAgICAgIG1fb2ZmU2NyZWVuU3VyZmFjZSA9IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVh
dGVPZmZTY3JlZW5TdXJmYWNlKCk7CisKKyAgICAgICAgaWYgKCFtX29mZlNjcmVlblN1cmZhY2Up
CisgICAgICAgICAgICBnb3RvIGluaXRpYWxpemF0aW9uRmFpbGVkOworCisgICAgICAgIGlmICgh
bV9vZmZTY3JlZW5Db250ZXh0LT5pbml0aWFsaXplKG1fb2ZmU2NyZWVuU3VyZmFjZS5nZXQoKSkp
CisgICAgICAgICAgICBnb3RvIGluaXRpYWxpemF0aW9uRmFpbGVkOworCiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9zdXJmYWNlSGFuZGxl
ID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4obV9wbGF0Zm9ybVN1cmZhY2UtPmhhbmRsZSgpKTsKLSNl
bHNlCi0gICAgICAgIH0KKyAgICAgICAgaWYgKCFtX3NoYXJlZENvbnRleHQtPmluaXRpYWxpemUo
bV9zaGFyZWRTdXJmYWNlLmdldCgpLCBtX29mZlNjcmVlbkNvbnRleHQtPmhhbmRsZSgpKSkKKyAg
ICAgICAgICAgIGdvdG8gaW5pdGlhbGl6YXRpb25GYWlsZWQ7CisKKyAgICAgICAgaWYgKCFtYWtl
U2hhcmVkQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIGdvdG8gaW5pdGlhbGl6YXRpb25G
YWlsZWQ7CisKKyAgICAgICAgbV9zdXJmYWNlSGFuZGxlID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4o
bV9zaGFyZWRTdXJmYWNlLT5oYW5kbGUoKSk7CiAjZW5kaWYKICAgICB9CisKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBnb3RvIGluaXRpYWxpemF0aW9uRmFpbGVkOwor
CisgICAgcmV0dXJuIHRydWU7CisKK2luaXRpYWxpemF0aW9uRmFpbGVkOgorICAgIHJlbGVhc2VS
ZXNvdXJjZXMoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7CisgICAgcmVsZWFzZVJlc291cmNl
cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVsZWFzZVJlc291cmNl
cygpCiB7CisgICAgaWYgKG1fY29udGV4dC0+bV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQorICAgICAgICByZXR1cm47CisKICAgICAv
LyBSZWxlYXNlIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIGRyYXdhYmxlIG9ubHkgYWZ0ZXIgZGVz
dHJveWluZyBhbnkgYXNzb2NpYXRlZCBnbCByZXNvdXJjZXMuCi0gICAgaWYgKG1fcGxhdGZvcm1T
dXJmYWNlKQotICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZS0+ZGVzdHJveSgpOworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIGlmIChtX3NoYXJlZENvbnRleHQgJiYgbV9zaGFyZWRDb250
ZXh0LT5oYW5kbGUoKSAmJiBtX3NoYXJlZFN1cmZhY2UpCisgICAgICAgIG1ha2VTaGFyZWRDb250
ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fc2hhcmVkU3VyZmFjZSkKKyAgICAgICAgbV9zaGFy
ZWRTdXJmYWNlLT5kZXN0cm95KCk7CisKKyAgICBpZiAobV9zaGFyZWRDb250ZXh0KSB7CisgICAg
ICAgIG1fc2hhcmVkQ29udGV4dC0+ZGVzdHJveSgpOworICAgICAgICBtX3NoYXJlZENvbnRleHQt
PnJlbGVhc2VDdXJyZW50KCk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKG1fb2ZmU2NyZWVuU3Vy
ZmFjZSkKKyAgICAgICAgbV9vZmZTY3JlZW5TdXJmYWNlLT5kZXN0cm95KCk7CiAKLSAgICBpZiAo
bV9wbGF0Zm9ybUNvbnRleHQpIHsKLSAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPmRlc3Ryb3ko
KTsKLSAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7CisgICAgaWYg
KG1fb2ZmU2NyZWVuQ29udGV4dCkgeworICAgICAgICBtX29mZlNjcmVlbkNvbnRleHQtPmRlc3Ry
b3koKTsKKyAgICAgICAgbV9vZmZTY3JlZW5Db250ZXh0LT5yZWxlYXNlQ3VycmVudCgpOwogICAg
IH0KIH0KIApAQCAtOTYsMTQgKzE0NCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dAogCiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1Db250
ZXh0LT5oYW5kbGUoKTsKKyAgICByZXR1cm4gbV9vZmZTY3JlZW5Db250ZXh0LT5oYW5kbGUoKTsK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgp
Citib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50KCkgY29u
c3QKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQo
bV9wbGF0Zm9ybVN1cmZhY2UuZ2V0KCkpOworICAgIGJvb2wgc3VjY2VzcyA9IG1fb2ZmU2NyZWVu
Q29udGV4dC0+bWFrZUN1cnJlbnQobV9vZmZTY3JlZW5TdXJmYWNlLmdldCgpKTsKIAotICAgIGlm
ICghbV9wbGF0Zm9ybUNvbnRleHQtPmlzVmFsaWQoKSkgeworICAgIGlmICghbV9vZmZTY3JlZW5D
b250ZXh0LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFJlc3RvcmUgY29udGV4dAog
ICAgICAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrKQogICAgICAgICAgICAgbV9jb250ZXh0
TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CkBAIC0xMTQsMzIgKzE2MiwxMyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1
cm4gc3VjY2VzczsKIH0KIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgRmxvYXRSZWN0JiAvKiB0YXJnZXQgKi8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgLyogb3BhY2l0eSAqLywgQml0bWFwVGV4dHVyZSogLyogbWFzayAqLykKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkaWRSZXNpemVDYW52YXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gdHJ1ZTsKLSAg
ICBtX3NpemUgPSBzaXplOwotfQotCi11aW50MzJfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cHJlcGFyZUJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dCB8fCAh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9vZmZT
Y3JlZW5Db250ZXh0IHx8ICFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAKLSAgICBpZiAo
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSkgewotICAgICAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXpl
ID0gZmFsc2U7Ci0gICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0
KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVp
Z2h0KSk7Ci0gICAgfQotCiAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsK
ICAgICAgICAgYm9vbCBlbmFibGVTY2lzc29yVGVzdCA9IGZhbHNlOwogICAgICAgICBpbnQgd2lk
dGggPSBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoOwpAQCAtMTYxLDggKzE5MCw0NiBAQCB1aW50
MzJfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiAg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKICAgICB9CiAKLSAgICBtX3BsYXRmb3JtU3VyZmFjZS0+dXBkYXRlQ29udGVudHMobV9j
b250ZXh0LT5tX3RleHR1cmUsIG1fY29udGV4dC0+bV9ib3VuZEZCTywgbV9jb250ZXh0LT5tX2Jv
dW5kVGV4dHVyZTApOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmIC8qIHRhcmdldCAqLywgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCAvKiBvcGFjaXR5ICovLCBCaXRtYXBUZXh0dXJl
KiAvKiBtYXNrICovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKIAorI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1h
a2VTaGFyZWRDb250ZXh0Q3VycmVudCgpIGNvbnN0Cit7CisgICAgYm9vbCBzdWNjZXNzID0gbV9z
aGFyZWRDb250ZXh0LT5tYWtlQ3VycmVudChtX3NoYXJlZFN1cmZhY2UuZ2V0KCkpOworCisgICAg
aWYgKCFtX3NoYXJlZENvbnRleHQtPmlzVmFsaWQoKSkgeworICAgICAgICAvLyBGSVhNRTogUmVz
dG9yZSBjb250ZXh0CisgICAgICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2spCisgICAgICAg
ICAgICBtX2NvbnRleHRMb3N0Q2FsbGJhY2stPm9uQ29udGV4dExvc3QoKTsKKworICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkaWRSZXNpemVDYW52YXMoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1fc2hhcmVkU3VyZmFjZS0+c2V0R2Vv
bWV0cnkoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Cit9
CisKK3VpbnQzMl90IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJm
YWNlKCkKK3sKKyAgICBpZiAobV9jb250ZXh0LT5tX2xheWVyQ29tcG9zaXRlZCB8fCAhcHJlcGFy
ZUJ1ZmZlcigpIHx8ICFtYWtlU2hhcmVkQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBtX3NoYXJlZFN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90
ZXh0dXJlKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgIG1fY29udGV4dC0+bV9ib3VuZEZCTyk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTE3NSw3ICsyNDIsNiBAQCBJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6cGxhdGZvcm1MYXllclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX3NpemU7CiB9Ci0K
ICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aAppbmRleCAyZWIyZjc1Li44ZTgwNjJjIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKQEAg
LTQxLDM3ICs0MSw0MiBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKICNlbmRpZgog
ewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQz
RCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gY3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiwgSG9zdFdpbmRvdyopOwogICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
KTsKIAogICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCk7CisgICAg
Ym9vbCBpbml0aWFsaXplKCk7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZXh0TG9zdENhbGxi
YWNrKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+ICBj
YWxsQmFjayk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFBsYXRmb3Jt
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgorICAgIHZvaWQgc2V0Q29udGV4
dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENh
bGxiYWNrPik7CisgICAgYm9vbCBwcmVwYXJlQnVmZmVyKCkgY29uc3Q7CiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKikg
T1ZFUlJJREU7CiAjZW5kaWYKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFs
IEludFNpemUgcGxhdGZvcm1MYXllclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVpbnQzMl90
IGNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNlVG9r
ZW4gZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgcGxh
dGZvcm1MYXllclNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGNv
cHlUb0dyYXBoaWNzU3VyZmFjZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJm
YWNlVG9rZW4gZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdCBPVkVSUklERTsKICAgICB2b2lk
IGRpZFJlc2l6ZUNhbnZhcyhjb25zdCBJbnRTaXplJik7CiAjZW5kaWYKLSAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgY29uc3Q7CiAg
ICAgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgbV9hdHRyaWJ1dGVzOworCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqKTsKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICBib29sIG1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgpIGNvbnN0OworI2Vu
ZGlmCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBIb3N0V2luZG93KiBt
X2hvc3RXaW5kb3c7Ci0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBtX3BsYXRmb3JtQ29u
dGV4dDsKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IG1fcGxhdGZvcm1TdXJmYWNlOwor
ICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9vZmZTY3JlZW5Db250ZXh0OworICAgIE93
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gbV9vZmZTY3JlZW5TdXJmYWNlOwogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9zaGFyZWRDb250
ZXh0OworICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gbV9zaGFyZWRTdXJmYWNlOwogICAg
IEdyYXBoaWNzU3VyZmFjZVRva2VuIG1fc3VyZmFjZUhhbmRsZTsKICNlbmRpZgogICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENh
bGxiYWNrOwogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLSAg
ICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNpemU7CiAgICAgSW50U2l6ZSBtX3NpemU7CiB9Owog
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxh
dGZvcm1Db250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R0xQbGF0Zm9ybUNvbnRleHQuY3BwCmluZGV4IDRkNDQwZjguLmNlZDdiYjggMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9y
bUNvbnRleHQuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgYm9vbCBHTFBsYXRmb3JtQ29udGV4dDo6
bWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCiAKICAgICBtX2N1cnJlbnRD
b250ZXh0ID0gMDsKIAotICAgIGlmICghc3VyZmFjZSB8fCAoc3VyZmFjZSAmJiAhc3VyZmFjZS0+
aGFuZGxlKCkpKQorICAgIGlmICghc3VyZmFjZSB8fCAoc3VyZmFjZSAmJiAhc3VyZmFjZS0+ZHJh
d2FibGUoKSkpCiAgICAgICAgIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsKICAgICBlbHNlIGlm
IChwbGF0Zm9ybU1ha2VDdXJyZW50KHN1cmZhY2UpKQogICAgICAgICBtX2N1cnJlbnRDb250ZXh0
ID0gdGhpczsKQEAgLTI2Miw3ICsyNjIsNyBAQCBib29sIEdMUGxhdGZvcm1Db250ZXh0Ojppc0N1
cnJlbnRDb250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHTFBsYXRm
b3JtQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSopCitib29sIEdMUGxhdGZv
cm1Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiwgUGxhdGZvcm1Db250ZXh0
KQogewogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCmluZGV4IDNlMTM2MjQu
LjJlNDFkYjMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR0xQbGF0Zm9ybUNvbnRleHQuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB+R0xQbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBp
bml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKik7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxp
emUoR0xQbGF0Zm9ybVN1cmZhY2UqLCBQbGF0Zm9ybUNvbnRleHQgPSAwKTsKIAogICAgIC8vIE1h
a2VzIHRoaXMgYW5kIHN1cmZhY2UgYXMgY3VycmVudCBjb250ZXh0IGFuZCBkcmF3YWJsZS4KICAg
ICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBubyBzdXJmYWNlIGlzIHNhbWUgYXMgY2Fs
bGluZyByZWxlYXNlQ3VycmVudC4KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKaW5kZXggN2Y3YTU2NC4u
MDcxYTgzYiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKQEAgLTQwLDEyICs0MCwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxh
dGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCkKK1Bhc3NPd25QdHI8R0xQbGF0
Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKCkK
IHsKICNpZiBVU0UoR0xYKQotICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9
IGFkb3B0UHRyKG5ldyBHTFhQQnVmZmVyKCkpOworICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFj
ZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhPZmZTY3JlZW5TdXJmYWNlKCkpOwogCi0gICAg
aWYgKHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCisgICAgaWYgKHN1
cmZhY2UtPmRyYXdhYmxlKCkpCiAgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKICNl
bmRpZgogCkBAIC01NCw3ICs1NCw2IEBAIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKCkKIAogUGFzc093blB0cjxH
TFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZh
Y2UoKQogewotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogI2lmIFVTRShHTFgpCiAgICAgT3du
UHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWFRyYW5zcG9y
dFN1cmZhY2UoKSk7CiAjZWxpZiBVU0UoRUdMKQpAQCAtNjMsMTQgKzYyLDEyIEBAIFBhc3NPd25Q
dHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRT
dXJmYWNlKCkKIAogICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZh
Y2UtPmRyYXdhYmxlKCkpCiAgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKLSNlbmRp
ZgogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEdMUGxhdGZvcm1TdXJmYWNlOjpHTFBsYXRm
b3JtU3VyZmFjZSgpCi0gICAgOiBtX3Jlc3RvcmVOZWVkZWQodHJ1ZSkKLSAgICAsIG1fZmJvSWQo
MCkKKyAgICA6IG1fZmJvSWQoMCkKICAgICAsIG1fc2hhcmVkRGlzcGxheSgwKQogICAgICwgbV9k
cmF3YWJsZSgwKQogICAgICwgbV9idWZmZXJIYW5kbGUoMCkKQEAgLTExMSwxMyArMTA4LDExIEBA
IHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi12b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1
aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBHTHVpbnQgYmluZEZib0lkLCBjb25zdCB1aW50MzJfdCBi
aW5kVGV4dHVyZSkKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0
IHVpbnQzMl90IHRleHR1cmUpCiB7CiAgICAgaWYgKCFtX2Zib0lkKQogICAgICAgICBnbEdlbkZy
YW1lYnVmZmVycygxLCAmbV9mYm9JZCk7CiAKLSAgICBtX3Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsK
LQogICAgIGludCB4ID0gMDsKICAgICBpbnQgeSA9IDA7CiAgICAgaW50IHdpZHRoID0gbV9yZWN0
LndpZHRoKCk7CkBAIC0xMzAsOSArMTI1LDYgQEAgdm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBk
YXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgR0x1aW50IGJpbmQKICAg
ICAvLyBVc2UgTkVBUkVTVCBhcyBubyBzY2FsZSBpcyBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0
LgogICAgIGdsQmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX05FQVJFU1QpOwogICAgIHN3YXBCdWZm
ZXJzKCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7Ci0gICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBiaW5kVGV4dHVyZSk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIGJpbmRGYm9JZCk7CiB9CiAKIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6
OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCkBAIC0xNDQsMTAgKzEzNiwxMiBA
QCB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCkKIHsKICAgICBtX3JlY3QgPSBJbnRS
ZWN0KCk7CiAKLSAgICBpZiAobV9mYm9JZCkKKyAgICBpZiAobV9mYm9JZCkgeworICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZt
X2Zib0lkKTsKLQotICAgIG1fZmJvSWQgPSAwOworICAgICAgICBtX2Zib0lkID0gMDsKKyAgICB9
CiB9CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR0xQbGF0Zm9ybVN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaAppbmRleCBlOGRiNDI1Li5kMzRlYjcxIDEwMDY0NAot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJm
YWNlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRm
b3JtU3VyZmFjZS5oCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIEdMUGxhdGZvcm1TdXJmYWNlIHsK
IAogcHVibGljOgogICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHVzZWQgZm9yIG9mZnNjcmVl
biByZW5kZXJpbmcuCi0gICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IGNy
ZWF0ZU9mZnNjcmVlblN1cmZhY2UoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTFBsYXRmb3Jt
U3VyZmFjZT4gY3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgpOwogCiAgICAgLy8gQ3JlYXRlcyBhIEdM
IHN1cmZhY2UgdXNlZCBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4gVGhlIHJlc3VsdHMgY2FuIGJl
IHRyYW5zcG9ydGVkCiAgICAgLy8gdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGRpc3BsYXkuCkBAIC01
Myw2ICs1Myw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRSZWN0JiBnZW9tZXRyeSgpIGNvbnN0
OwogCiAgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtIHNwZWNpZmljIGJ1ZmZlciBo
YW5kbGUuCisgICAgLy8gVGhlIGhhbmRsZSB3aWxsIGJlIG51bGwgaWYgc3VyZmFjZSBkb2Vzbm90
IHN1cHBvcnQKKyAgICAvLyBidWZmZXIgc2hhcmluZy4KICAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRs
ZSBoYW5kbGUoKSBjb25zdDsKIAogICAgIFBsYXRmb3JtRHJhd2FibGUgZHJhd2FibGUoKSBjb25z
dDsKQEAgLTYxLDEyICs2MywxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1
ZmZlcnMoKTsKIAotICAgIC8vIENvbnZlbmllbmNlIEZ1bmN0aW9uIHRvIHVwZGF0ZSBzdXJmYWNl
IGJhY2tidWZmZXIgd2l0aCB0ZXh0dXJlIGNvbnRlbnRzLCByZXN0b3JlIGN1cnJlbnQgRkJPIGFu
ZCBUZXh0dXJlLgorICAgIC8vIENvbnZlbmllbmNlIEZ1bmN0aW9uIHRvIHVwZGF0ZSBzdXJmYWNl
IGJhY2tidWZmZXIgd2l0aCB0ZXh0dXJlIGNvbnRlbnRzLgorICAgIC8vIE5vdGUgdGhhdCB0aGUg
ZnVuY3Rpb24gZG9lc25vdCB0cmFjayBvciByZXN0b3JlIGFueSBHTCBzdGF0ZXMuCiAgICAgLy8g
RnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nKGluIG9yZGVyKToKICAgICAvLyBhKSBCbGl0cyB0
ZXh0dXJlIGNvbnRlbnRzIHRvIGJhY2sgYnVmZmVyLgogICAgIC8vIGIpIENhbGxzIFN3YXAgQnVm
ZmVycy4KLSAgICAvLyBjKSBTZXRzIGN1cnJlbnQgRkJPIGFzIGJpbmRGYm9JZC4KLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgR0x1
aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KTsKIApAQCAtNzYsNyAr
NzgsNiBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBHTFBsYXRmb3JtU3VyZmFjZSgpOwot
ICAgIGJvb2wgbV9yZXN0b3JlTmVlZGVkOwogICAgIEludFJlY3QgbV9yZWN0OwogICAgIEdMdWlu
dCBtX2Zib0lkOwogICAgIFBsYXRmb3JtRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7CmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRl
eHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xD
b250ZXh0LmNwcAppbmRleCA3ODliNjliLi5jMjA4ZGNjIDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHAK
QEAgLTY3LDcgKzY3LDcgQEAgRUdMT2ZmU2NyZWVuQ29udGV4dDo6RUdMT2ZmU2NyZWVuQ29udGV4
dCgpCiB7CiB9CiAKLWJvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRm
b3JtU3VyZmFjZSogc3VyZmFjZSkKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6
ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSwgUGxhdGZvcm1Db250ZXh0IHNoYXJlZENvbnRl
eHQpCiB7CiAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04Niw3
ICs4Niw3IEBAIGJvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3Jt
U3VyZmFjZSogc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzUm9i
dXN0bmVzc0V4dFN1cHBvcnRlZChtX2Rpc3BsYXkpKQotICAgICAgICBtX2NvbnRleHRIYW5kbGUg
PSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgY29u
dGV4dFJvYnVzdG5lc3NBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWds
Q3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgc2hhcmVkQ29udGV4dCwgY29udGV4dFJv
YnVzdG5lc3NBdHRyaWJ1dGVzKTsKIAogICAgIGlmIChtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05P
X0NPTlRFWFQpIHsKICAgICAgICAgLy8gVGhlIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0
bmVzcyBzcGVjIHJlcXVpcmVzIHRoYXQgYSBjb250ZXh0IGNyZWF0ZWQgd2l0aApAQCAtMTAwLDcg
KzEwMCw3IEBAIGJvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3Jt
U3VyZmFjZSogc3VyZmFjZSkKICAgICB9CiAKICAgICBpZiAobV9jb250ZXh0SGFuZGxlID09IEVH
TF9OT19DT05URVhUKQotICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0
KG1fZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgY29udGV4dEF0dHJpYnV0ZXMpOwor
ICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29u
ZmlnLCBzaGFyZWRDb250ZXh0LCBjb250ZXh0QXR0cmlidXRlcyk7CiAKICAgICBpZiAobV9jb250
ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29u
dGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xD
b250ZXh0LmgKaW5kZXggZWUxMzJjYy4uZWMzMTkxMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKQEAgLTM3
LDcgKzM3LDcgQEAgY2xhc3MgRUdMT2ZmU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBHTFBsYXRmb3Jt
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgRUdMT2ZmU2NyZWVuQ29udGV4dCgpOwogICAgIHZpcnR1
YWwgfkVHTE9mZlNjcmVlbkNvbnRleHQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShH
TFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXpl
KEdMUGxhdGZvcm1TdXJmYWNlKiwgUGxhdGZvcm1Db250ZXh0KSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2Vs
ZWN0b3IuaAppbmRleCBlYTczOTIxLi5jMTNjMjZjIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxl
Y3Rvci5oCkBAIC00OCw4ICs0OCw4IEBAIGNsYXNzIEdMWENvbmZpZ1NlbGVjdG9yIHsKIAogcHVi
bGljOgogICAgIEdMWENvbmZpZ1NlbGVjdG9yKCkKLSAgICAgICAgOiBtX3BidWZmZXJGQkNvbmZp
ZygwKQotICAgICAgICAsIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQorICAgICAgICA6IG1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQorICAgICAgICAsIG1fcGl4bWFwQ29udGV4dEZCQ29u
ZmlnKDApCiAgICAgewogICAgIH0KIApAQCAtNTcsMzQgKzU3LDMzIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCi0gICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8oKQorICAgIFhWaXN1YWxJbmZv
KiB2aXN1YWxJbmZvKGNvbnN0IEdMWEZCQ29uZmlnJiBjb25maWcpCiAgICAgewotICAgICAgICBp
ZiAoIXN1cmZhY2VDb250ZXh0Q29uZmlnKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAg
ICAgICByZXR1cm4gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKFgxMUhlbHBlcjo6bmF0aXZlRGlz
cGxheSgpLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcpOworICAgICAgICByZXR1cm4gZ2xYR2V0
VmlzdWFsRnJvbUZCQ29uZmlnKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBjb25maWcpOwog
ICAgIH0KIAotICAgIEdMWEZCQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKKyAgICBHTFhG
QkNvbmZpZyBwaXhtYXBDb250ZXh0Q29uZmlnKCkKICAgICB7Ci0gICAgICAgIGlmICghbV9wYnVm
ZmVyRkJDb25maWcpIHsKKyAgICAgICAgaWYgKCFtX3BpeG1hcENvbnRleHRGQkNvbmZpZykgewog
ICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7CiAgICAgICAgICAg
ICAgICAgR0xYX0xFVkVMLCAwLAotICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBH
TFhfUEJVRkZFUl9CSVQsCisgICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9Q
SVhNQVBfQklULAogICAgICAgICAgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9C
SVQsCiAgICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCiAgICAgICAgICAgICAg
ICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCiAgICAgICAgICAgICAgICAgR0xYX0JMVUVfU0laRSwg
ICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCiAgICAgICAgICAg
ICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIEdMX0ZBTFNFLAogICAgICAgICAgICAgICAgIE5vbmUK
ICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gZmluZE1h
dGNoaW5nQ29uZmlnKGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgbV9waXhtYXBDb250ZXh0RkJD
b25maWcgPSBmaW5kTWF0Y2hpbmdDb25maWcoYXR0cmlidXRlcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICByZXR1cm4gbV9wYnVmZmVyRkJDb25maWc7CisgICAgICAgIHJldHVybiBtX3BpeG1hcENv
bnRleHRGQkNvbmZpZzsKICAgICB9CiAKKwogICAgIEdMWEZCQ29uZmlnIHN1cmZhY2VDb250ZXh0
Q29uZmlnKCkKICAgICB7CiAgICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQpA
QCAtMTAzLDggKzEwMiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSAg
ICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSAwOwogICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJD
b25maWcgPSAwOworICAgICAgICBtX3BpeG1hcENvbnRleHRGQkNvbmZpZyA9IDA7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMTU5LDggKzE1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0
ZW1wWzBdOwogICAgIH0KIAotICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAg
IEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKKyAgICBHTFhGQkNvbmZpZyBt
X3BpeG1hcENvbnRleHRGQkNvbmZpZzsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCmluZGV4
IDhmNDA0NjMuLjE5ZDRiN2IgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcApAQCAtNTYsNyArNTYsNyBA
QCBHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KCkKIHsKIH0KIAotYm9v
bCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJm
YWNlKQorYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJm
YWNlKiBzdXJmYWNlLCBQbGF0Zm9ybUNvbnRleHQgc2hhcmVkQ29udGV4dCkKIHsKICAgICBpZiAo
IXN1cmZhY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBH
TFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNl
KQogICAgICAgICBpbml0aWFsaXplQVJCRXh0ZW5zaW9ucygpOwogCiAgICAgICAgIGlmIChnbFhD
cmVhdGVDb250ZXh0QXR0cmlic0FSQikKLSAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGds
WENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKHgxMURpc3BsYXksIGNvbmZpZywgMCwgdHJ1ZSwgQXR0
cmlicyk7CisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVDb250ZXh0QXR0
cmlic0FSQih4MTFEaXNwbGF5LCBjb25maWcsIHNoYXJlZENvbnRleHQsIHRydWUsIEF0dHJpYnMp
OwogCiAgICAgICAgIGlmIChtX2NvbnRleHRIYW5kbGUpIHsKICAgICAgICAgICAgIC8vIFRoZSBH
TFhfQVJCX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3Mgc3BlYyByZXF1aXJlcyB0aGF0IGEgY29u
dGV4dCBjcmVhdGVkIHdpdGgKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250
ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFtX2NvbnRleHRIYW5kbGUpCi0gICAgICAgICAgICBtX2NvbnRleHRIYW5k
bGUgPSBnbFhDcmVhdGVOZXdDb250ZXh0KHgxMURpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQ
RSwgMCwgdHJ1ZSk7CisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdD
b250ZXh0KHgxMURpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgc2hhcmVkQ29udGV4dCwg
dHJ1ZSk7CiAKICAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aXND
dXJyZW50Q29udGV4dCgpIGNvbnN0CiAKIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZv
cm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKIHsKLSAgICByZXR1cm4g
Z2xYTWFrZUN1cnJlbnQoc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpLCBzdXJmYWNlLT5oYW5kbGUo
KSwgbV9jb250ZXh0SGFuZGxlKTsKKyAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoc3VyZmFjZS0+
c2hhcmVkRGlzcGxheSgpLCBzdXJmYWNlLT5kcmF3YWJsZSgpLCBtX2NvbnRleHRIYW5kbGUpOwog
fQogCiB2b2lkIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKQpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWENvbnRleHQuaAppbmRleCA0NDRlN2YyLi4zY2M0M2JjIDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaApA
QCAtMzcsNyArMzcsNyBAQCBjbGFzcyBHTFhPZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdMUGxh
dGZvcm1Db250ZXh0IHsKIHB1YmxpYzoKICAgICBHTFhPZmZTY3JlZW5Db250ZXh0KCk7CiAgICAg
dmlydHVhbCB+R0xYT2ZmU2NyZWVuQ29udGV4dCgpOwotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFs
aXplKEdMUGxhdGZvcm1TdXJmYWNlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGluaXRp
YWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqLCBQbGF0Zm9ybUNvbnRleHQpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5j
cHAKaW5kZXggYzAzYzNkMC4uZWJkMzBmMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCkBAIC0zMiwx
MyArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50IHBidWZm
ZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlH
SFQsIDEsIDAgfTsKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogR0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgpCiB7
CiAgICAgbV9zaGFyZWREaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7CiAgICAg
bV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsKLSAg
ICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHZpc0luZm8obV9jb25maWdTZWxlY3Rvci0+dmlzdWFs
SW5mbygpKTsKKyAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHZpc0luZm8obV9jb25maWdTZWxl
Y3Rvci0+dmlzdWFsSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygp
KSk7CiAKICAgICBpZiAoIXZpc0luZm8uZ2V0KCkpIHsKICAgICAgICAgZGVzdHJveSgpOwpAQCAt
NzcsMTQgKzc2LDcgQEAgdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiAg
ICAgaWYgKCFtX2RyYXdhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZXN0b3Jl
TmVlZGVkKSB7Ci0gICAgICAgIEdMaW50IG9sZEZCTzsKLSAgICAgICAgZ2xHZXRJbnRlZ2VydihH
TF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmb2xkRkJPKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWREaXNw
bGF5KCksIG1fZHJhd2FibGUpOwotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgb2xkRkJPKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVk
RGlzcGxheSgpLCBtX2RyYXdhYmxlKTsKKyAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5
KCksIG1fZHJhd2FibGUpOwogfQogCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3ko
KQpAQCAtMTAwLDY3ICs5Miw3MyBAQCB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3ko
KQogICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogfQogCi0jZW5kaWYKLQotR0xYUEJ1
ZmZlcjo6R0xYUEJ1ZmZlcigpCitHTFhPZmZTY3JlZW5TdXJmYWNlOjpHTFhPZmZTY3JlZW5TdXJm
YWNlKCkKICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKKyAgICAsIG1fcGl4bWFwKDApCisgICAg
LCBtX2dseFBpeG1hcCgwKQogewogICAgIGluaXRpYWxpemUoKTsKIH0KIAotR0xYUEJ1ZmZlcjo6
fkdMWFBCdWZmZXIoKQorR0xYT2ZmU2NyZWVuU3VyZmFjZTo6fkdMWE9mZlNjcmVlblN1cmZhY2Uo
KQogewogfQogCi12b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQordm9pZCBHTFhPZmZTY3Jl
ZW5TdXJmYWNlOjppbml0aWFsaXplKCkKIHsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBYMTFIZWxw
ZXI6Om5hdGl2ZURpc3BsYXkoKTsKIAogICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihu
ZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7Ci0gICAgR0xYRkJDb25maWcgY29uZmlnID0gbV9jb25m
aWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKIAotICAgIGlmICghY29uZmlnKSB7
CisgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXN1YWxJbmZvKG1fY29uZmlnU2VsZWN0b3It
PnZpc3VhbEluZm8obV9jb25maWdTZWxlY3Rvci0+cGl4bWFwQ29udGV4dENvbmZpZygpKSk7Cisg
ICAgWDExSGVscGVyOjpjcmVhdGVQaXhtYXAoJm1fcGl4bWFwLCAqdmlzdWFsSW5mby5nZXQoKSk7
CisKKyAgICBpZiAoIW1fcGl4bWFwKSB7CiAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fZHJhd2FibGUgPSBnbFhDcmVhdGVQYnVmZmVyKG1fc2hhcmVk
RGlzcGxheSwgY29uZmlnLCBwYnVmZmVyQXR0cmlidXRlcyk7CisgICAgbV9nbHhQaXhtYXAgPSBn
bFhDcmVhdGVHTFhQaXhtYXAobV9zaGFyZWREaXNwbGF5LCB2aXN1YWxJbmZvLmdldCgpLCBtX3Bp
eG1hcCk7CiAKLSAgICBpZiAoIW1fZHJhd2FibGUpIHsKKyAgICBpZiAoIW1fZ2x4UGl4bWFwKSB7
CiAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYnVm
ZmVySGFuZGxlID0gbV9kcmF3YWJsZTsKKyAgICBtX2RyYXdhYmxlID0gbV9nbHhQaXhtYXA7CiB9
CiAKLVBsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhQQnVmZmVyOjpjb25maWd1cmF0aW9uKCkKK1Bs
YXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhPZmZTY3JlZW5TdXJmYWNlOjpjb25maWd1cmF0aW9uKCkK
IHsKLSAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsK
KyAgICByZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+cGl4bWFwQ29udGV4dENvbmZpZygpOwogfQog
Ci12b2lkIEdMWFBCdWZmZXI6OmRlc3Ryb3koKQordm9pZCBHTFhPZmZTY3JlZW5TdXJmYWNlOjpk
ZXN0cm95KCkKIHsKICAgICBmcmVlUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgR0xYUEJ1ZmZlcjo6
ZnJlZVJlc291cmNlcygpCit2b2lkIEdMWE9mZlNjcmVlblN1cmZhY2U6OmZyZWVSZXNvdXJjZXMo
KQogewogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CiAgICAgRGlzcGxheSogZGlz
cGxheSA9IHNoYXJlZERpc3BsYXkoKTsKIAotICAgIGlmIChtX2RyYXdhYmxlICYmIGRpc3BsYXkp
IHsKLSAgICAgICAgZ2xYRGVzdHJveVBidWZmZXIoZGlzcGxheSwgbV9kcmF3YWJsZSk7Ci0gICAg
ICAgIG1fZHJhd2FibGUgPSAwOwotICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CisgICAgaWYg
KCFkaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9nbHhQaXhtYXApIHsKKyAg
ICAgICAgZ2xYRGVzdHJveUdMWFBpeG1hcChkaXNwbGF5LCBtX2dseFBpeG1hcCk7CisgICAgICAg
IGdsWFdhaXRHTCgpOworICAgICAgICBtX2dseFBpeG1hcCA9IDA7CiAgICAgfQogCi0gICAgbV9j
b25maWdTZWxlY3RvciA9IG51bGxwdHI7Ci19CisgICAgaWYgKG1fcGl4bWFwKSB7CisgICAgICAg
IFgxMUhlbHBlcjo6ZGVzdHJveVBpeG1hcChtX3BpeG1hcCk7CisgICAgICAgIG1fcGl4bWFwID0g
MDsKKyAgICB9CiAKLXZvaWQgR0xYUEJ1ZmZlcjo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYg
bmV3UmVjdCkKLXsKLSAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7
CisgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CisgICAgbV9kcmF3YWJsZSA9IDA7CiB9
CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmgKaW5kZXggOWU3NzMyYS4uNDMwZmU1MSAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmgKQEAgLTM0LDcgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCiBjbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdM
UGxhdGZvcm1TdXJmYWNlIHsKIAogcHVibGljOgpAQCAtNDksMjEgKzQ4LDIxIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBt
X2NvbmZpZ1NlbGVjdG9yOwogfTsKLSNlbmRpZgogCi1jbGFzcyBHTFhQQnVmZmVyIDogcHVibGlj
IEdMUGxhdGZvcm1TdXJmYWNlIHsKK2NsYXNzIEdMWE9mZlNjcmVlblN1cmZhY2UgOiBwdWJsaWMg
R0xQbGF0Zm9ybVN1cmZhY2UgewogCiBwdWJsaWM6Ci0gICAgR0xYUEJ1ZmZlcigpOwotICAgIHZp
cnR1YWwgfkdMWFBCdWZmZXIoKTsKKyAgICBHTFhPZmZTY3JlZW5TdXJmYWNlKCk7CisgICAgdmly
dHVhbCB+R0xYT2ZmU2NyZWVuU3VyZmFjZSgpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNl
Q29uZmlnIGNvbmZpZ3VyYXRpb24oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0R2Vv
bWV0cnkoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
KCkgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgdm9p
ZCBmcmVlUmVzb3VyY2VzKCk7CiAgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZp
Z1NlbGVjdG9yOworICAgIFBpeG1hcCBtX3BpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXht
YXA7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKaW5kZXggNjg2
NzhjYS4uNWUxOGE1OSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcApAQCAt
MTIzLDcgKzEyMyw4IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAg
aWYgKCFkaXNwbGF5KCkgfHwgIW1fY29uZmlnU2VsZWN0b3IpCiAgICAgICAgICAgICByZXR1cm4g
MDsKIAotICAgICAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHZpc0luZm8obV9jb25maWdTZWxl
Y3Rvci0+dmlzdWFsSW5mbygpKTsKKyAgICAgICAgR0xYRkJDb25maWcgY29uZmlnID0gbV9jb25m
aWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKKyAgICAgICAgT3duUHRyWDExPFhW
aXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbEluZm8oY29uZmlnKSk7
CiAKICAgICAgICAgaWYgKCF2aXNJbmZvLmdldCgpKSB7CiAgICAgICAgICAgICBjbGVhcigpOwpA
QCAtMTM3LDcgKzEzOCw3IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xY
Q3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRD
b25maWcoKSwgbV9zdXJmYWNlLCAwKTsKKyAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xYQ3JlYXRl
V2luZG93KGRpc3BsYXkoKSwgY29uZmlnLCBtX3N1cmZhY2UsIDApOwogICAgICAgICByZXR1cm4g
bV9zdXJmYWNlOwogICAgIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwCmluZGV4IDEwMGJiMmUuLjI0NzI3
NGEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExSGVscGVyLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAKQEAgLTE0MCw2ICsxNDAsNDcgQEAgdm9pZCBYMTFIZWxw
ZXI6OnJlc2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiBuZXdSZWN0LCBjb25zdCB1aW50MzJfdCB3
aW5kb3dJZCkKICAgICBYRmx1c2gobmF0aXZlRGlzcGxheSgpKTsKIH0KIAordm9pZCBYMTFIZWxw
ZXI6OmNyZWF0ZVBpeG1hcChQaXhtYXAqIGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlz
dWFsSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
bmF0aXZlRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCF2aXN1YWxJbmZvLnZpc3VhbCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBmaW5kIHZhbGlkIFhWaXN1YWwuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBX
aW5kb3cgeFdpbmRvdyA9IG9mZnNjcmVlblJvb3RXaW5kb3coKTsKKyAgICBpZiAoIXhXaW5kb3cp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdp
bmRvdy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBpeG1hcCB0ZW1wSGFuZGxl
SWQgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIHhXaW5kb3csIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgdmlzdWFsSW5mby5kZXB0aCk7CisKKyAgICBpZiAoIXRlbXBIYW5kbGVJZCkgewor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHBpeG1hcC4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsK
KyAgICBYU3luYyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgZmFsc2UpOworfQorCit2b2lk
IFgxMUhlbHBlcjo6ZGVzdHJveVBpeG1hcChjb25zdCB1aW50MzJfdCBwaXhtYXBJZCkKK3sKKyAg
ICBpZiAoIXBpeG1hcElkKQorICAgICAgICByZXR1cm47CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gbmF0aXZlRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgWEZyZWVQaXhtYXAoZGlzcGxheSwgcGl4bWFwSWQpOworICAgIFhTeW5jKFgxMUhlbHBl
cjo6bmF0aXZlRGlzcGxheSgpLCBmYWxzZSk7Cit9CisKIHZvaWQgWDExSGVscGVyOjpjcmVhdGVP
ZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlz
SW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
QEAgLTE2Miw4ICsyMDMsNyBAQCB2b2lkIFgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93
KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpcwogICAgIGF0dHJpYnV0
ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5j
b2xvcm1hcCA9IGNtYXA7CiAgICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBSZXNpemVSZWRpcmVj
dE1hc2s7Ci0gICAgdWludDMyX3QgdGVtcEhhbmRsZUlkOwotICAgIHRlbXBIYW5kbGVJZCA9IFhD
cmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby52aXN1YWwsIENX
QmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworICAg
IHVpbnQzMl90IHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywg
MCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1
dE91dHB1dCwgdmlzSW5mby52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENX
Q29sb3JtYXAsICZhdHRyaWJ1dGUpOwogCiAgICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiB3aW5kb3cuIik7CmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhl
bHBlci5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFI
ZWxwZXIuaAppbmRleCA2ZTdhNjgyLi42OGM3NWRkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmgKQEAgLTQ2LDEx
ICs0NiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBYMTFIZWxwZXIgewogCiBwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlUGl4bWFwKFBpeG1hcCosIGNvbnN0IFhWaXN1YWxJ
bmZvJiwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKICAgICBzdGF0aWMgdm9pZCBj
cmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBYVmlzdWFsSW5mbyYsIGNvbnN0
IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7CiAjaWYgVVNFKEVHTCkKICAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBFR0xpbnQsIGNvbnN0IElu
dFNpemUmID0gSW50U2l6ZSgxLCAxKSk7CiAjZW5kaWYKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
V2luZG93KGNvbnN0IHVpbnQzMl90KTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95UGl4bWFwKGNv
bnN0IHVpbnQzMl90KTsKICAgICBzdGF0aWMgdm9pZCByZXNpemVXaW5kb3coY29uc3QgSW50UmVj
dCYsIGNvbnN0IHVpbnQzMl90KTsKICAgICBzdGF0aWMgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25T
dXBwb3J0ZWQoKTsKICAgICBzdGF0aWMgRGlzcGxheSogbmF0aXZlRGlzcGxheSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188869</attachid>
            <date>2013-02-18 06:12:09 -0800</date>
            <delta_ts>2013-02-18 06:16:13 -0800</delta_ts>
            <desc>patchv2</desc>
            <filename>reviewsharedcontext3d.patch</filename>
            <type>text/plain</type>
            <size>40794</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDhkMDM4OTYuLmFhOGRlZDIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEz
LTAyLTE4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbV2ViR0xdW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
IHRvIGFkZCBzdXBwb3J0IGZvciBTaGFyZWRDb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0
cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBQbGF0Zm9ybUNvbnRleHQgYW5kIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB0bworICAgICAgICBhZGQgc3VwcG9ydCBmb3IgU2hhcmVk
IENvbnRleHQuIFRoaXMgd291bGQgaGVscCBzaGFyZSBHTCByZXNvdXJjZXMKKyAgICAgICAgYmV0
d2VlbiB0cmFuc3BvcnQgc3VyZmFjZSBhbmQgb2Zmc2NyZWVuIHN1cmZhY2Ugd2l0aG91dCBoYXZp
bmcgdG8gd29ycnkKKyAgICAgICAgYWJvdXQgdGhlIGNvbnRleHQgc3RhdGUuIFNvIGZhciwgd2Ug
dXNlZCB0aGUgc2FtZSBkcmF3YWJsZSBhcyB0cmFuc3BvcnQKKyAgICAgICAgc3VyZmFjZSBhbmQg
b2Zmc2NyZWVuIHN1cmZhY2UuIEFmdGVyIHRoaXMgcGF0Y2ggd2UgdXNlIHBpeG1hcCBzdXJmYWNl
IGFzCisgICAgICAgIG9mZnNjcmVlbiBzdXJmYWNlIGFuZCB1c2Ugc2hhcmVkIGNvbnRleHQgdG8g
cmVuZGVyIHRleHR1cmUgY29udGVudCB0bworICAgICAgICB0cmFuc3BvcnQgc3VyZmFjZS4gVGhp
cyB3b3VsZCBhbHNvIGFsaWduIGFzIHRvIGhvdyBzaGFyZWQgc3VyZmFjZSBpcyBpbXBsZW1lbnRl
ZAorICAgICAgICBvbiBFRkwgYW5kIFF0IHBvcnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6Om1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAg
ICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xQ
bGF0Zm9ybUNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oOgorICAgICAgICBOZWVkZWQgY2hhbmdlcyB0byB0
YWtlIHNoYXJlZCBjb250ZXh0IGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxh
dGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3Jt
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENv
bmZpZ1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6R0xY
Q29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnZp
c3VhbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnBpeG1hcENv
bnRleHRDb25maWcpOgorICAgICAgICAoR0xYQ29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6CisgICAgICAgIEFkZGVkIHN1cHBvcnQg
dG8gcXVlcnkgY29uZmlnaXJhdGlvbiBzdXBwb3J0aW5nCisgICAgICAgIHBpeG1hcCBzdXJmYWNl
LgorCisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oOgor
ICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJh
bnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhP
ZmZTY3JlZW5TdXJmYWNlOjpHTFhPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWE9mZlNjcmVlblN1cmZhY2U6On5HTFhPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdMWE9mZlNjcmVlblN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYT2ZmU2NyZWVuU3VyZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhPZmZTY3JlZW5TdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9m
ZlNjcmVlblN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2Zm
U2NyZWVuU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICBSZW5hbWVkIEdMWFBCdWZmZXIg
c3VyZmFjZSBhcyBHTFhPZmZTY3JlZW5TdXJmYWNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDoKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1
cmZhY2UpOgorICAgICAgICAoR0xYT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WDExSGVscGVyOjpkZXN0cm95UGl4bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6CisgICAgICAgIChYMTFI
ZWxwZXIpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuZCBkZXN0cm95IHBp
eG1hcC4KKwogMjAxMy0wMi0xOCAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxdIFVuaWZpZWQgdGV4dCBjaGVja2VyIGlt
cGxlbWVudGF0aW9uCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IDJmZmJiNzguLmJhNDczYWUg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3ND
b250ZXh0M0RFZmwuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0zNCw5ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgaWYgKHJlbmRlclN0
eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gMDsKLQog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFw
aGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1
cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQpAQCAtNjMs
MTggKzYwLDE2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxl
RkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKLSAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkp
CisgICAgLCBtX3ByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGUodGhpcywg
aG9zdFdpbmRvdykpCiB7Ci0gICAgaWYgKCFtX3ByaXZhdGUgfHwgIW1fcHJpdmF0ZS0+bV9wbGF0
Zm9ybUNvbnRleHQpIHsKLSAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKKyAgICBpZiAoIW1f
cHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwogCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlck9mZnNjcmVlbikgewogICAgICAg
ICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsR2VuRnJh
bWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7CisgICAgICAgIGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX2Zibyk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIg
aW50by4KICAgICAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKQEAgLTEzNCwzMCAr
MTI5LDM4IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+
R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIGlmICghbV9wcml2YXRlIHx8ICFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICBpZiAoIW1fcHJpdmF0ZSB8fCAobV9yZW5kZXJTdHlsZSA9PSBSZW5k
ZXJUb0N1cnJlbnRHTENvbnRleHQpIHx8ICFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCAwKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyAgICBpZiAobV9mYm8pCisgICAgICAgIGdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CiAKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
LSAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKQorICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogCi0g
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgaWYg
KG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpCiAgICAgICAgICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwogCi0gICAg
ICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
aWYgKG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgfSBlbHNlIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkgewogI2lmIFVTRShPUEVOR0xfRVNfMikKLSAgICAgICAgaWYgKG1fYXR0
cnMuZGVwdGgpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQogICAgICAgICAgICAgZ2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKIAotICAgICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKQorICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQogICAgICAgICAgICAgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwogI2VuZGlmCi0gICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICB9Ci0KLSAgICBtX3ByaXZhdGUt
PnJlbGVhc2VSZXNvdXJjZXMoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFw
aGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5jcHAKaW5kZXggZDEwOTU2Ny4uYmE0ZDg5YiAxMDA2NDQKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw1OCArMjgsMTAyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
K1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwbGF0Zm9y
bUxheWVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShjb250ZXh0LCBo
b3N0V2luZG93KSk7CisKKyAgICBpZiAocGxhdGZvcm1MYXllciAmJiBwbGF0Zm9ybUxheWVyLT5p
bml0aWFsaXplKCkpCisgICAgICAgIHJldHVybiBwbGF0Zm9ybUxheWVyLnJlbGVhc2UoKTsKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2lu
ZG93KGhvc3RXaW5kb3cpCi0gICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogewor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAg
aWYgKG1fY29udGV4dC0+bV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICht
X2hvc3RXaW5kb3cgJiYgbV9ob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgewogICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgY29kZSBwYXRoIGZvciBXZWJLaXQxLgogICAg
ICAgICAvLyBHZXQgRXZhcyBvYmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGllbnQgYW5kIHNldCBF
dmFzR0wgcmVsYXRlZCBtZW1iZXJzLgotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBtX3BsYXRmb3JtQ29udGV4dCA9IEdMUGxhdGZvcm1Db250ZXh0
OjpjcmVhdGVDb250ZXh0KHJlbmRlclN0eWxlKTsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0
KQotICAgICAgICByZXR1cm47CisgICAgbV9vZmZTY3JlZW5Db250ZXh0ID0gR0xQbGF0Zm9ybUNv
bnRleHQ6OmNyZWF0ZUNvbnRleHQobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlKTsKKyAgICBpZiAo
IW1fb2ZmU2NyZWVuQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJl
bmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pIHsKKyAgICBp
ZiAobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJP
ZmZzY3JlZW4pIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgbV9wbGF0Zm9y
bVN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOwot
I2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3Jl
YXRlT2Zmc2NyZWVuU3VyZmFjZSgpOworICAgICAgICBtX3NoYXJlZFN1cmZhY2UgPSBHTFBsYXRm
b3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOworICAgICAgICBpZiAoIW1fc2hh
cmVkU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3NoYXJl
ZENvbnRleHQgPSBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChtX2NvbnRleHQtPm1f
cmVuZGVyU3R5bGUpOworICAgICAgICBpZiAoIW1fc2hhcmVkQ29udGV4dCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgICAgICBpZiAoIW1fcGxhdGZvcm1TdXJmYWNlKSB7
Ci0gICAgICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LT5pbml0
aWFsaXplKG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSB8fCAhbV9wbGF0Zm9ybUNvbnRleHQtPm1h
a2VDdXJyZW50KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSkgewotICAgICAgICAgICAgcmVsZWFz
ZVJlc291cmNlcygpOwotICAgICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBudWxscHRyOwot
ICAgICAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBudWxscHRyOworICAgICAgICBtX29mZlNj
cmVlblN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgp
OworCisgICAgICAgIGlmICghbV9vZmZTY3JlZW5TdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICghbV9vZmZTY3JlZW5Db250ZXh0LT5pbml0aWFsaXplKG1f
b2ZmU2NyZWVuU3VyZmFjZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3N1
cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbihtX3BsYXRmb3JtU3VyZmFjZS0+aGFu
ZGxlKCkpOwotI2Vsc2UKLSAgICAgICAgfQorICAgICAgICBpZiAoIW1fc2hhcmVkQ29udGV4dC0+
aW5pdGlhbGl6ZShtX3NoYXJlZFN1cmZhY2UuZ2V0KCksIG1fb2ZmU2NyZWVuQ29udGV4dC0+aGFu
ZGxlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghbWFrZVNo
YXJlZENvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgbV9zdXJmYWNlSGFuZGxlID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4obV9zaGFyZWRTdXJmYWNl
LT5oYW5kbGUoKSk7CiAjZW5kaWYKICAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKIHsKKyAg
ICByZWxlYXNlUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpyZWxlYXNlUmVzb3VyY2VzKCkKIHsKKyAgICBpZiAobV9jb250ZXh0LT5tX3JlbmRlclN0eWxl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCisgICAgICAg
IHJldHVybjsKKwogICAgIC8vIFJlbGVhc2UgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2Fi
bGUgb25seSBhZnRlciBkZXN0cm95aW5nIGFueSBhc3NvY2lhdGVkIGdsIHJlc291cmNlcy4KLSAg
ICBpZiAobV9wbGF0Zm9ybVN1cmZhY2UpCi0gICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5kZXN0
cm95KCk7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKG1fc2hhcmVkQ29udGV4
dCAmJiBtX3NoYXJlZENvbnRleHQtPmhhbmRsZSgpICYmIG1fc2hhcmVkU3VyZmFjZSkKKyAgICAg
ICAgbWFrZVNoYXJlZENvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV9zaGFyZWRTdXJmYWNl
KQorICAgICAgICBtX3NoYXJlZFN1cmZhY2UtPmRlc3Ryb3koKTsKIAotICAgIGlmIChtX3BsYXRm
b3JtQ29udGV4dCkgewotICAgICAgICBtX3BsYXRmb3JtQ29udGV4dC0+ZGVzdHJveSgpOwotICAg
ICAgICBtX3BsYXRmb3JtQ29udGV4dC0+cmVsZWFzZUN1cnJlbnQoKTsKKyAgICBpZiAobV9zaGFy
ZWRDb250ZXh0KSB7CisgICAgICAgIG1fc2hhcmVkQ29udGV4dC0+ZGVzdHJveSgpOworICAgICAg
ICBtX3NoYXJlZENvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7CisgICAgfQorI2VuZGlmCisgICAg
aWYgKG1fb2ZmU2NyZWVuU3VyZmFjZSkKKyAgICAgICAgbV9vZmZTY3JlZW5TdXJmYWNlLT5kZXN0
cm95KCk7CisKKyAgICBpZiAobV9vZmZTY3JlZW5Db250ZXh0KSB7CisgICAgICAgIG1fb2ZmU2Ny
ZWVuQ29udGV4dC0+ZGVzdHJveSgpOworICAgICAgICBtX29mZlNjcmVlbkNvbnRleHQtPnJlbGVh
c2VDdXJyZW50KCk7CiAgICAgfQogfQogCkBAIC05Niw1MCArMTQwLDMxIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9wbGF0Zm9ybUNvbnRleHQtPmhhbmRsZSgpOworICAgIHJldHVybiBtX29mZlNjcmVlbkNv
bnRleHQtPmhhbmRsZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29u
dGV4dEN1cnJlbnQoKSBjb25zdAogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fcGxhdGZvcm1Db250
ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSk7CisgICAgYm9vbCBzdWNj
ZXNzID0gbV9vZmZTY3JlZW5Db250ZXh0LT5tYWtlQ3VycmVudChtX29mZlNjcmVlblN1cmZhY2Uu
Z2V0KCkpOwogCi0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC0+aXNWYWxpZCgpKSB7CisgICAg
aWYgKCFtX29mZlNjcmVlbkNvbnRleHQtPmlzVmFsaWQoKSkgewogICAgICAgICAvLyBGSVhNRTog
UmVzdG9yZSBjb250ZXh0CiAgICAgICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2spCiAgICAg
ICAgICAgICBtX2NvbnRleHRMb3N0Q2FsbGJhY2stPm9uQ29udGV4dExvc3QoKTsKIAotICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiwgY29uc3QgRmxvYXRSZWN0JiAvKiB0YXJnZXQgKi8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgLyogb3BhY2l0eSAqLywgQml0bWFwVGV4dHVyZSogLyogbWFzayAqLykKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlQnVmZmVyKCkgY29uc3QKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkaWRSZXNpemVDYW52YXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gdHJ1ZTsKLSAg
ICBtX3NpemUgPSBzaXplOwotfQotCi11aW50MzJfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dCB8
fCAhbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fY29udGV4
dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwogCi0gICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNp
emUpIHsKLSAgICAgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IGZhbHNlOwotICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZS0+c2V0R2VvbWV0cnkoSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1f
Y3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwotICAgIH0KLQogICAg
IGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7CiAgICAgICAgIGJvb2wgZW5hYmxl
U2Npc3NvclRlc3QgPSBmYWxzZTsKICAgICAgICAgaW50IHdpZHRoID0gbV9jb250ZXh0LT5tX2N1
cnJlbnRXaWR0aDsKQEAgLTE2MSw4ICsxODYsNDYgQEAgdWludDMyX3QgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UoKQogICAgICAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQogCi0gICAg
bV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBt
X2NvbnRleHQtPm1fYm91bmRGQk8sIG1fY29udGV4dC0+bV9ib3VuZFRleHR1cmUwKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgRmxvYXRSZWN0JiAvKiB0YXJnZXQgKi8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgLyogb3BhY2l0eSAqLywgQml0bWFwVGV4dHVyZSogLyogbWFzayAqLykKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlU2hhcmVkQ29udGV4dEN1cnJl
bnQoKSBjb25zdAoreworICAgIGJvb2wgc3VjY2VzcyA9IG1fc2hhcmVkQ29udGV4dC0+bWFrZUN1
cnJlbnQobV9zaGFyZWRTdXJmYWNlLmdldCgpKTsKKworICAgIGlmICghbV9zaGFyZWRDb250ZXh0
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFJlc3RvcmUgY29udGV4dAorICAgICAg
ICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrKQorICAgICAgICAgICAgbV9jb250ZXh0TG9zdENh
bGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiBzdWNjZXNzOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6ZGlkUmVzaXplQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXpl
ID0gc2l6ZTsKKyAgICBtX3NoYXJlZFN1cmZhY2UtPnNldEdlb21ldHJ5KEludFJlY3QoMCwgMCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworfQorCit1aW50MzJfdCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCit7CisgICAgaWYgKG1f
Y29udGV4dC0+bV9sYXllckNvbXBvc2l0ZWQgfHwgIXByZXBhcmVCdWZmZXIoKSB8fCAhbWFrZVNo
YXJlZENvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9zaGFyZWRT
dXJmYWNlLT51cGRhdGVDb250ZW50cyhtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsICBt
X2NvbnRleHQtPm1fYm91bmRGQk8pOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzUsNyArMjM4
LDYgQEAgSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtTGF5ZXJTaXpl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaXplOwogfQotCiAjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXggMmViMmY3NS4uYjMw
MDk2YSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTQxLDM3ICs0MSw0MiBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKICNlbmRpZgog
ewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQz
RCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gY3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiwgSG9zdFdpbmRvdyopOwogICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
KTsKIAogICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCk7CiAgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3JhcGhpY3ND
b250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+ICBjYWxsQmFjayk7Ci0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKLSNlbmRpZgorICAgIHZvaWQgc2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPik7CiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0
dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKikg
T1ZFUlJJREU7CiAjZW5kaWYKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFs
IEludFNpemUgcGxhdGZvcm1MYXllclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVpbnQzMl90
IGNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNlVG9r
ZW4gZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgcGxh
dGZvcm1MYXllclNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGNv
cHlUb0dyYXBoaWNzU3VyZmFjZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJm
YWNlVG9rZW4gZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdCBPVkVSUklERTsKICAgICB2b2lk
IGRpZFJlc2l6ZUNhbnZhcyhjb25zdCBJbnRTaXplJik7CiAjZW5kaWYKLSAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNE
KiwgSG9zdFdpbmRvdyopOworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworICAgIGJvb2wgcHJlcGFy
ZUJ1ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygpOwotICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICBib29sIG1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgpIGNvbnN0OworI2Vu
ZGlmCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBIb3N0V2luZG93KiBt
X2hvc3RXaW5kb3c7Ci0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBtX3BsYXRmb3JtQ29u
dGV4dDsKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IG1fcGxhdGZvcm1TdXJmYWNlOwor
ICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9vZmZTY3JlZW5Db250ZXh0OworICAgIE93
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gbV9vZmZTY3JlZW5TdXJmYWNlOwogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9zaGFyZWRDb250
ZXh0OworICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gbV9zaGFyZWRTdXJmYWNlOwogICAg
IEdyYXBoaWNzU3VyZmFjZVRva2VuIG1fc3VyZmFjZUhhbmRsZTsKICNlbmRpZgogICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENh
bGxiYWNrOwogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLSAg
ICBib29sIG1fcGVuZGluZ1N1cmZhY2VSZXNpemU7CiAgICAgSW50U2l6ZSBtX3NpemU7CiB9Owog
CkBAIC04MCwzICs4NSw0IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjZW5kaWYKKwpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4
dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1D
b250ZXh0LmNwcAppbmRleCA0ZDQ0MGY4Li5jZWQ3YmI4IDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNw
cApAQCAtMjA3LDcgKzIwNyw3IEBAIGJvb2wgR0xQbGF0Zm9ybUNvbnRleHQ6Om1ha2VDdXJyZW50
KEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogCiAgICAgbV9jdXJyZW50Q29udGV4dCA9IDA7
CiAKLSAgICBpZiAoIXN1cmZhY2UgfHwgKHN1cmZhY2UgJiYgIXN1cmZhY2UtPmhhbmRsZSgpKSkK
KyAgICBpZiAoIXN1cmZhY2UgfHwgKHN1cmZhY2UgJiYgIXN1cmZhY2UtPmRyYXdhYmxlKCkpKQog
ICAgICAgICBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CiAgICAgZWxzZSBpZiAocGxhdGZvcm1N
YWtlQ3VycmVudChzdXJmYWNlKSkKICAgICAgICAgbV9jdXJyZW50Q29udGV4dCA9IHRoaXM7CkBA
IC0yNjIsNyArMjYyLDcgQEAgYm9vbCBHTFBsYXRmb3JtQ29udGV4dDo6aXNDdXJyZW50Q29udGV4
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR0xQbGF0Zm9ybUNvbnRleHQ6
OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKQorYm9vbCBHTFBsYXRmb3JtQ29udGV4dDo6
aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSosIFBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAppbmRleCAzZTEzNjI0Li4yZTQxZGIzIDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1Db250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
TFBsYXRmb3JtQ29udGV4dC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgfkdMUGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShH
TFBsYXRmb3JtU3VyZmFjZSopOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZv
cm1TdXJmYWNlKiwgUGxhdGZvcm1Db250ZXh0ID0gMCk7CiAKICAgICAvLyBNYWtlcyB0aGlzIGFu
ZCBzdXJmYWNlIGFzIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2FibGUuCiAgICAgLy8gQ2FsbGlu
ZyB0aGlzIGZ1bmN0aW9uIHdpdGggbm8gc3VyZmFjZSBpcyBzYW1lIGFzIGNhbGxpbmcgcmVsZWFz
ZUN1cnJlbnQuCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdmN2E1NjQuLjA3MWE4M2IgMTAw
NjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9y
bVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC00MCwxMiArNDAsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFj
ZTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZSgpCitQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNl
PiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgpCiB7CiAjaWYgVVNF
KEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihu
ZXcgR0xYUEJ1ZmZlcigpKTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2Ug
PSBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZSgpKTsKIAotICAgIGlmIChzdXJmYWNl
LT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQorICAgIGlmIChzdXJmYWNlLT5kcmF3
YWJsZSgpKQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiAjZW5kaWYKIApAQCAt
NTQsNyArNTQsNiBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3Vy
ZmFjZTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZSgpCiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1
cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKIHsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICNpZiBVU0UoR0xYKQogICAgIE93blB0cjxHTFBsYXRm
b3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKCkp
OwogI2VsaWYgVVNFKEVHTCkKQEAgLTYzLDE0ICs2MiwxMiBAQCBQYXNzT3duUHRyPEdMUGxhdGZv
cm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCiAK
ICAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJs
ZSgpKQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7Ci0jZW5kaWYKIAogICAgIHJl
dHVybiBudWxscHRyOwogfQogCiBHTFBsYXRmb3JtU3VyZmFjZTo6R0xQbGF0Zm9ybVN1cmZhY2Uo
KQotICAgIDogbV9yZXN0b3JlTmVlZGVkKHRydWUpCi0gICAgLCBtX2Zib0lkKDApCisgICAgOiBt
X2Zib0lkKDApCiAgICAgLCBtX3NoYXJlZERpc3BsYXkoMCkKICAgICAsIG1fZHJhd2FibGUoMCkK
ICAgICAsIG1fYnVmZmVySGFuZGxlKDApCkBAIC0xMTEsMTMgKzEwOCwxMSBAQCB2b2lkIEdMUGxh
dGZvcm1TdXJmYWNlOjpzd2FwQnVmZmVycygpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4
dHVyZSwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUp
Cit2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0
ZXh0dXJlKQogewogICAgIGlmICghbV9mYm9JZCkKICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJm1fZmJvSWQpOwogCi0gICAgbV9yZXN0b3JlTmVlZGVkID0gZmFsc2U7Ci0KICAgICBpbnQg
eCA9IDA7CiAgICAgaW50IHkgPSAwOwogICAgIGludCB3aWR0aCA9IG1fcmVjdC53aWR0aCgpOwpA
QCAtMTMwLDkgKzEyNSw2IEBAIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRz
KGNvbnN0IHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEdMdWludCBiaW5kCiAgICAgLy8gVXNlIE5F
QVJFU1QgYXMgbm8gc2NhbGUgaXMgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KICAgICBnbEJs
aXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9ORUFSRVNUKTsKICAgICBzd2FwQnVmZmVycygpOwotICAg
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRU
QUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgYmluZFRleHR1cmUpOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBiaW5kRmJvSWQpOwogfQogCiB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRy
eShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQpAQCAtMTQ0LDEwICsxMzYsMTIgQEAgdm9pZCBHTFBs
YXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpCiB7CiAgICAgbV9yZWN0ID0gSW50UmVjdCgpOwogCi0g
ICAgaWYgKG1fZmJvSWQpCisgICAgaWYgKG1fZmJvSWQpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOwogICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7Ci0K
LSAgICBtX2Zib0lkID0gMDsKKyAgICAgICAgbV9mYm9JZCA9IDA7CisgICAgfQogfQogCiB9CmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxh
dGZvcm1TdXJmYWNlLmgKaW5kZXggZThkYjQyNS4uMDBkZDdjOSAxMDA2NDQKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2Uu
aApAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBHTFBsYXRmb3JtU3VyZmFjZSB7CiAKIHB1YmxpYzoK
ICAgICAvLyBDcmVhdGVzIGEgR0wgc3VyZmFjZSB1c2VkIGZvciBvZmZzY3JlZW4gcmVuZGVyaW5n
LgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVhdGVPZmZzY3Jl
ZW5TdXJmYWNlKCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IGNy
ZWF0ZU9mZlNjcmVlblN1cmZhY2UoKTsKIAogICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHVz
ZWQgZm9yIG9mZnNjcmVlbiByZW5kZXJpbmcuIFRoZSByZXN1bHRzIGNhbiBiZSB0cmFuc3BvcnRl
ZAogICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBkaXNwbGF5LgpAQCAtNTMsNiArNTMsOCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgZ2VvbWV0cnkoKSBjb25zdDsKIAogICAgIC8v
IEdldCB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBzcGVjaWZpYyBidWZmZXIgaGFuZGxlLgorICAg
IC8vIFRoZSBoYW5kbGUgd2lsbCBiZSBudWxsIGlmIHN1cmZhY2UgZG9lc24ndCBzdXBwb3J0Cisg
ICAgLy8gYnVmZmVyIHNoYXJpbmcuCiAgICAgUGxhdGZvcm1CdWZmZXJIYW5kbGUgaGFuZGxlKCkg
Y29uc3Q7CiAKICAgICBQbGF0Zm9ybURyYXdhYmxlIGRyYXdhYmxlKCkgY29uc3Q7CkBAIC02MSwx
MiArNjMsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCk7CiAK
LSAgICAvLyBDb252ZW5pZW5jZSBGdW5jdGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVy
IHdpdGggdGV4dHVyZSBjb250ZW50cywgcmVzdG9yZSBjdXJyZW50IEZCTyBhbmQgVGV4dHVyZS4K
KyAgICAvLyBDb252ZW5pZW5jZSBGdW5jdGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVy
IHdpdGggdGV4dHVyZSBjb250ZW50cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGRv
ZXNuJ3QgdHJhY2sgb3IgcmVzdG9yZSBhbnkgR0wgc3RhdGVzLgogICAgIC8vIEZ1bmN0aW9uIGRv
ZXMgdGhlIGZvbGxvd2luZyhpbiBvcmRlcik6CiAgICAgLy8gYSkgQmxpdHMgdGV4dHVyZSBjb250
ZW50cyB0byBiYWNrIGJ1ZmZlci4KICAgICAvLyBiKSBDYWxscyBTd2FwIEJ1ZmZlcnMuCi0gICAg
Ly8gYykgU2V0cyBjdXJyZW50IEZCTyBhcyBiaW5kRmJvSWQuCi0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEdMdWludCBiaW5kRmJv
SWQsIGNvbnN0IHVpbnQzMl90IGJpbmRUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCk7CiAKQEAgLTc2LDcgKzc4LDYgQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2UoKTsKLSAgICBib29sIG1f
cmVzdG9yZU5lZWRlZDsKICAgICBJbnRSZWN0IG1fcmVjdDsKICAgICBHTHVpbnQgbV9mYm9JZDsK
ICAgICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OwpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHAK
aW5kZXggNzg5YjY5Yi4uYzIwOGRjYyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCkBAIC02Nyw3ICs2
Nyw3IEBAIEVHTE9mZlNjcmVlbkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQoKQogewogfQog
Ci1ib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2Uq
IHN1cmZhY2UpCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9y
bVN1cmZhY2UqIHN1cmZhY2UsIFBsYXRmb3JtQ29udGV4dCBzaGFyZWRDb250ZXh0KQogewogICAg
IGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODYsNyArODYsNyBAQCBi
b29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1
cmZhY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc1JvYnVzdG5lc3NFeHRT
dXBwb3J0ZWQobV9kaXNwbGF5KSkKLSAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWdsQ3JlYXRl
Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRSb2J1c3Ru
ZXNzQXR0cmlidXRlcyk7CisgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVnbENyZWF0ZUNvbnRl
eHQobV9kaXNwbGF5LCBjb25maWcsIHNoYXJlZENvbnRleHQsIGNvbnRleHRSb2J1c3RuZXNzQXR0
cmlidXRlcyk7CiAKICAgICBpZiAobV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKSB7
CiAgICAgICAgIC8vIFRoZSBFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3Mgc3BlYyBy
ZXF1aXJlcyB0aGF0IGEgY29udGV4dCBjcmVhdGVkIHdpdGgKQEAgLTEwMCw3ICsxMDAsNyBAQCBi
b29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1
cmZhY2UpCiAgICAgfQogCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSA9PSBFR0xfTk9fQ09OVEVY
VCkKLSAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXks
IGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9j
b250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgc2hhcmVk
Q29udGV4dCwgY29udGV4dEF0dHJpYnV0ZXMpOwogCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSAh
PSBFR0xfTk9fQ09OVEVYVCkKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuaCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCmlu
ZGV4IGVlMTMyY2MuLmVjMzE5MTMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIEVHTE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgewog
cHVibGljOgogICAgIEVHTE9mZlNjcmVlbkNvbnRleHQoKTsKICAgICB2aXJ0dWFsIH5FR0xPZmZT
Y3JlZW5Db250ZXh0KCk7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1
cmZhY2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRmb3Jt
U3VyZmFjZSosIFBsYXRmb3JtQ29udGV4dCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHBs
YXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmggU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKaW5k
ZXggZWE3MzkyMS4uYzEzYzI2YyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaApAQCAt
NDgsOCArNDgsOCBAQCBjbGFzcyBHTFhDb25maWdTZWxlY3RvciB7CiAKIHB1YmxpYzoKICAgICBH
TFhDb25maWdTZWxlY3RvcigpCi0gICAgICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKLSAgICAg
ICAgLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKKyAgICAgICAgOiBtX3N1cmZhY2VDb250
ZXh0RkJDb25maWcoMCkKKyAgICAgICAgLCBtX3BpeG1hcENvbnRleHRGQkNvbmZpZygwKQogICAg
IHsKICAgICB9CiAKQEAgLTU3LDM0ICs1NywzMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5m
byhjb25zdCBHTFhGQkNvbmZpZyYgY29uZmlnKQogICAgIHsKLSAgICAgICAgaWYgKCFzdXJmYWNl
Q29udGV4dENvbmZpZygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJu
IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgbV9z
dXJmYWNlQ29udGV4dEZCQ29uZmlnKTsKKyAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgY29uZmlnKTsKICAgICB9CiAKLSAg
ICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCisgICAgR0xYRkJDb25maWcgcGl4
bWFwQ29udGV4dENvbmZpZygpCiAgICAgewotICAgICAgICBpZiAoIW1fcGJ1ZmZlckZCQ29uZmln
KSB7CisgICAgICAgIGlmICghbV9waXhtYXBDb250ZXh0RkJDb25maWcpIHsKICAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgYXR0cmlidXRlc1tdID0gewogICAgICAgICAgICAgICAgIEdMWF9M
RVZFTCwgMCwKLSAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJf
QklULAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUElYTUFQX0JJVCwK
ICAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAogICAgICAg
ICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAogICAgICAgICAgICAgICAgIEdMWF9HUkVF
Tl9TSVpFLCAgICAxLAogICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAg
ICAgICAgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAogICAgICAgICAgICAgICAgIEdMWF9E
T1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKICAgICAgICAgICAgICAgICBOb25lCiAgICAgICAgICAg
ICB9OwogCi0gICAgICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGZpbmRNYXRjaGluZ0NvbmZp
ZyhhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIG1fcGl4bWFwQ29udGV4dEZCQ29uZmlnID0gZmlu
ZE1hdGNoaW5nQ29uZmlnKGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJu
IG1fcGJ1ZmZlckZCQ29uZmlnOworICAgICAgICByZXR1cm4gbV9waXhtYXBDb250ZXh0RkJDb25m
aWc7CiAgICAgfQogCisKICAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpCiAg
ICAgewogICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykKQEAgLTEwMyw4ICsx
MDIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0gICAgICAgIG1fcGJ1
ZmZlckZCQ29uZmlnID0gMDsKICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gMDsK
KyAgICAgICAgbV9waXhtYXBDb250ZXh0RkJDb25maWcgPSAwOwogICAgIH0KIAogcHJpdmF0ZToK
QEAgLTE1OSw4ICsxNTgsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdGVtcFswXTsKICAg
ICB9CiAKLSAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJGQkNvbmZpZzsKICAgICBHTFhGQkNvbmZp
ZyBtX3N1cmZhY2VDb250ZXh0RkJDb25maWc7CisgICAgR0xYRkJDb25maWcgbV9waXhtYXBDb250
ZXh0RkJDb25maWc7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAppbmRleCA4ZjQwNDYzLi4x
OWQ0YjdiIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgR0xYT2ZmU2Ny
ZWVuQ29udGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCgpCiB7CiB9CiAKLWJvb2wgR0xYT2ZmU2Ny
ZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKK2Jvb2wg
R0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFj
ZSwgUGxhdGZvcm1Db250ZXh0IHNoYXJlZENvbnRleHQpCiB7CiAgICAgaWYgKCFzdXJmYWNlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgR0xYT2ZmU2NyZWVu
Q29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKICAgICAgICAg
aW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKTsKIAogICAgICAgICBpZiAoZ2xYQ3JlYXRlQ29udGV4
dEF0dHJpYnNBUkIpCi0gICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVDb250
ZXh0QXR0cmlic0FSQih4MTFEaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMpOworICAg
ICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIoeDEx
RGlzcGxheSwgY29uZmlnLCBzaGFyZWRDb250ZXh0LCB0cnVlLCBBdHRyaWJzKTsKIAogICAgICAg
ICBpZiAobV9jb250ZXh0SGFuZGxlKSB7CiAgICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVh
dGVfY29udGV4dF9yb2J1c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRl
ZCB3aXRoCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlh
bGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghbV9jb250ZXh0SGFuZGxlKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3Jl
YXRlTmV3Q29udGV4dCh4MTFEaXNwbGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUp
OworICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dCh4MTFE
aXNwbGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIHNoYXJlZENvbnRleHQsIHRydWUpOwogCiAg
ICAgICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTEwNSw3ICsxMDUsNyBAQCBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmlzQ3VycmVudENvbnRl
eHQoKSBjb25zdAogCiBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJl
bnQoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCiB7Ci0gICAgcmV0dXJuIGdsWE1ha2VDdXJy
ZW50KHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKSwgc3VyZmFjZS0+aGFuZGxlKCksIG1fY29udGV4
dEhhbmRsZSk7CisgICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50KHN1cmZhY2UtPnNoYXJlZERpc3Bs
YXkoKSwgc3VyZmFjZS0+ZHJhd2FibGUoKSwgbV9jb250ZXh0SGFuZGxlKTsKIH0KIAogdm9pZCBH
TFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5o
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0
LmgKaW5kZXggNDQ0ZTdmMi4uM2NjNDNiYyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKQEAgLTM3LDcgKzM3
LDcgQEAgY2xhc3MgR0xYT2ZmU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBHTFBsYXRmb3JtQ29udGV4
dCB7CiBwdWJsaWM6CiAgICAgR0xYT2ZmU2NyZWVuQ29udGV4dCgpOwogICAgIHZpcnR1YWwgfkdM
WE9mZlNjcmVlbkNvbnRleHQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRm
b3JtU3VyZmFjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEdMUGxh
dGZvcm1TdXJmYWNlKiwgUGxhdGZvcm1Db250ZXh0KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IGMw
M2MzZDAuLmViZDMwZjMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMzIsMTMgKzMyLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRl
c1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07
CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRy
YW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQogewogICAgIG1fc2hh
cmVkRGlzcGxheSA9IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOwogICAgIG1fY29uZmlnU2Vs
ZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7Ci0gICAgT3duUHRyWDEx
PFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbEluZm8oKSk7Cisg
ICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3Vh
bEluZm8obV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSkpOwogCiAgICAg
aWYgKCF2aXNJbmZvLmdldCgpKSB7CiAgICAgICAgIGRlc3Ryb3koKTsKQEAgLTc3LDE0ICs3Niw3
IEBAIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQogICAgIGlmICghbV9k
cmF3YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVzdG9yZU5lZWRlZCkgewot
ICAgICAgICBHTGludCBvbGRGQk87Ci0gICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZG
RVJfQklORElORywgJm9sZEZCTyk7Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCAwKTsKLSAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2Ry
YXdhYmxlKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG9sZEZC
Tyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXkoKSwg
bV9kcmF3YWJsZSk7CisgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdh
YmxlKTsKIH0KIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKQEAgLTEwMCw2
NyArOTIsNzMgQEAgdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKICAgICBtX2Nv
bmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKIH0KIAotI2VuZGlmCi0KLUdMWFBCdWZmZXI6OkdMWFBC
dWZmZXIoKQorR0xYT2ZmU2NyZWVuU3VyZmFjZTo6R0xYT2ZmU2NyZWVuU3VyZmFjZSgpCiAgICAg
OiBHTFBsYXRmb3JtU3VyZmFjZSgpCisgICAgLCBtX3BpeG1hcCgwKQorICAgICwgbV9nbHhQaXht
YXAoMCkKIHsKICAgICBpbml0aWFsaXplKCk7CiB9CiAKLUdMWFBCdWZmZXI6On5HTFhQQnVmZmVy
KCkKK0dMWE9mZlNjcmVlblN1cmZhY2U6On5HTFhPZmZTY3JlZW5TdXJmYWNlKCkKIHsKIH0KIAot
dm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKK3ZvaWQgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6
aW5pdGlhbGl6ZSgpCiB7CiAgICAgbV9zaGFyZWREaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVE
aXNwbGF5KCk7CiAKICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZp
Z1NlbGVjdG9yKCkpOwotICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3It
PnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CiAKLSAgICBpZiAoIWNvbmZpZykgeworICAgIE93blB0
clgxMTxYVmlzdWFsSW5mbz4gdmlzdWFsSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZv
KG1fY29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKSkpOworICAgIFgxMUhlbHBl
cjo6Y3JlYXRlUGl4bWFwKCZtX3BpeG1hcCwgKnZpc3VhbEluZm8uZ2V0KCkpOworCisgICAgaWYg
KCFtX3BpeG1hcCkgewogICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihtX3NoYXJlZERpc3BsYXksIGNv
bmZpZywgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlR0xY
UGl4bWFwKG1fc2hhcmVkRGlzcGxheSwgdmlzdWFsSW5mby5nZXQoKSwgbV9waXhtYXApOwogCi0g
ICAgaWYgKCFtX2RyYXdhYmxlKSB7CisgICAgaWYgKCFtX2dseFBpeG1hcCkgewogICAgICAgICBk
ZXN0cm95KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2J1ZmZlckhhbmRsZSA9
IG1fZHJhd2FibGU7CisgICAgbV9kcmF3YWJsZSA9IG1fZ2x4UGl4bWFwOwogfQogCi1QbGF0Zm9y
bVN1cmZhY2VDb25maWcgR0xYUEJ1ZmZlcjo6Y29uZmlndXJhdGlvbigpCitQbGF0Zm9ybVN1cmZh
Y2VDb25maWcgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB7Ci0gICAgcmV0
dXJuIG1fY29uZmlnU2VsZWN0b3ItPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAgcmV0dXJu
IG1fY29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKTsKIH0KIAotdm9pZCBHTFhQ
QnVmZmVyOjpkZXN0cm95KCkKK3ZvaWQgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6ZGVzdHJveSgpCiB7
CiAgICAgZnJlZVJlc291cmNlcygpOwogfQogCi12b2lkIEdMWFBCdWZmZXI6OmZyZWVSZXNvdXJj
ZXMoKQordm9pZCBHTFhPZmZTY3JlZW5TdXJmYWNlOjpmcmVlUmVzb3VyY2VzKCkKIHsKICAgICBH
TFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOwogICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFy
ZWREaXNwbGF5KCk7CiAKLSAgICBpZiAobV9kcmF3YWJsZSAmJiBkaXNwbGF5KSB7Ci0gICAgICAg
IGdsWERlc3Ryb3lQYnVmZmVyKGRpc3BsYXksIG1fZHJhd2FibGUpOwotICAgICAgICBtX2RyYXdh
YmxlID0gMDsKLSAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOworICAgIGlmICghZGlzcGxheSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAgIGdsWERl
c3Ryb3lHTFhQaXhtYXAoZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAgICBnbFhXYWl0R0wo
KTsKKyAgICAgICAgbV9nbHhQaXhtYXAgPSAwOwogICAgIH0KIAotICAgIG1fY29uZmlnU2VsZWN0
b3IgPSBudWxscHRyOwotfQorICAgIGlmIChtX3BpeG1hcCkgeworICAgICAgICBYMTFIZWxwZXI6
OmRlc3Ryb3lQaXhtYXAobV9waXhtYXApOworICAgICAgICBtX3BpeG1hcCA9IDA7CisgICAgfQog
Ci12b2lkIEdMWFBCdWZmZXI6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCi17
Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOworICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBudWxscHRyOworICAgIG1fZHJhd2FibGUgPSAwOwogfQogCiB9CmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1
cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
U3VyZmFjZS5oCmluZGV4IDllNzczMmEuLjQzMGZlNTEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC0z
NCw3ICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogY2xhc3MgR0xYVHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3Vy
ZmFjZSB7CiAKIHB1YmxpYzoKQEAgLTQ5LDIxICs0OCwyMSBAQCBwcml2YXRlOgogICAgIHZvaWQg
aW5pdGlhbGl6ZSgpOwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxl
Y3RvcjsKIH07Ci0jZW5kaWYKIAotY2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBHTFBsYXRmb3Jt
U3VyZmFjZSB7CitjbGFzcyBHTFhPZmZTY3JlZW5TdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1T
dXJmYWNlIHsKIAogcHVibGljOgotICAgIEdMWFBCdWZmZXIoKTsKLSAgICB2aXJ0dWFsIH5HTFhQ
QnVmZmVyKCk7CisgICAgR0xYT2ZmU2NyZWVuU3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkdMWE9m
ZlNjcmVlblN1cmZhY2UoKTsKICAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25m
aWd1cmF0aW9uKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0
IEludFJlY3QmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURF
OwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgZnJlZVJlc291
cmNlcygpOwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsK
KyAgICBQaXhtYXAgbV9waXhtYXA7CisgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwogfTsKIAog
fQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HcmFwaGljc1N1cmZhY2VHTFguY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCmluZGV4IDY4Njc4Y2EuLjVlMThh
NTkgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKQEAgLTEyMyw3ICsxMjMs
OCBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIGlmICghZGlzcGxh
eSgpIHx8ICFtX2NvbmZpZ1NlbGVjdG9yKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAg
ICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3Vh
bEluZm8oKSk7CisgICAgICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3It
PnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CisgICAgICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4g
dmlzSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKGNvbmZpZykpOwogCiAgICAgICAg
IGlmICghdmlzSW5mby5nZXQoKSkgewogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTEzNyw3ICsx
MzgsNyBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRv
dyhkaXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIG1f
c3VyZmFjZSwgMCk7CisgICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhkaXNw
bGF5KCksIGNvbmZpZywgbV9zdXJmYWNlLCAwKTsKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExSGVscGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcAppbmRleCAxMDBiYjJlLi4yNDcyNzRhIDEwMDY0NAot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBl
ci5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9Y
MTFIZWxwZXIuY3BwCkBAIC0xNDAsNiArMTQwLDQ3IEBAIHZvaWQgWDExSGVscGVyOjpyZXNpemVX
aW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCiAg
ICAgWEZsdXNoKG5hdGl2ZURpc3BsYXkoKSk7CiB9CiAKK3ZvaWQgWDExSGVscGVyOjpjcmVhdGVQ
aXhtYXAoUGl4bWFwKiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpc3VhbEluZm8sIGNv
bnN0IEludFNpemUmIHNpemUpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3Bs
YXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdmlz
dWFsSW5mby52aXN1YWwpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZmluZCB2YWxp
ZCBYVmlzdWFsLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2luZG93IHhXaW5k
b3cgPSBvZmZzY3JlZW5Sb290V2luZG93KCk7CisgICAgaWYgKCF4V2luZG93KSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gcm9vdCB3aW5kb3cuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQaXhtYXAgdGVtcEhhbmRsZUlkID0gWENyZWF0
ZVBpeG1hcChkaXNwbGF5LCB4V2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHZp
c3VhbEluZm8uZGVwdGgpOworCisgICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiBwaXhtYXAuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAqaGFuZGxlSWQgPSB0ZW1wSGFuZGxlSWQ7CisgICAgWFN5bmMo
WDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIGZhbHNlKTsKK30KKwordm9pZCBYMTFIZWxwZXI6
OmRlc3Ryb3lQaXhtYXAoY29uc3QgdWludDMyX3QgcGl4bWFwSWQpCit7CisgICAgaWYgKCFwaXht
YXBJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURp
c3BsYXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVl
UGl4bWFwKGRpc3BsYXksIHBpeG1hcElkKTsKKyAgICBYU3luYyhYMTFIZWxwZXI6Om5hdGl2ZURp
c3BsYXkoKSwgZmFsc2UpOworfQorCiB2b2lkIFgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2lu
ZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpc0luZm8sIGNvbnN0
IEludFNpemUmIHNpemUpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC0xNjIsOCAr
MjAzLDcgQEAgdm9pZCBYMTFIZWxwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCog
aGFuZGxlSWQsIGNvbnN0IFhWaXN1YWxJbmZvJiB2aXMKICAgICBhdHRyaWJ1dGUuYm9yZGVyX3Bp
eGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKICAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBj
bWFwOwogICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJlY3RNYXNrOwotICAg
IHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKLSAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93
KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwg
dmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8
IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKyAgICB1aW50MzJfdCB0
ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZp
c0luZm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAm
YXR0cmlidXRlKTsKIAogICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOwpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmgKaW5k
ZXggNmU3YTY4Mi4uNjhjNzVkZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oCkBAIC00NiwxMSArNDYsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgWDExSGVscGVyIHsKIAogcHVibGljOgorICAgIHN0
YXRpYyB2b2lkIGNyZWF0ZVBpeG1hcChQaXhtYXAqLCBjb25zdCBYVmlzdWFsSW5mbyYsIGNvbnN0
IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8mLCBjb25zdCBJbnRTaXplJiA9
IEludFNpemUoMSwgMSkpOwogI2lmIFVTRShFR0wpCiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2Zm
U2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgRUdMaW50LCBjb25zdCBJbnRTaXplJiA9IElu
dFNpemUoMSwgMSkpOwogI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveVdpbmRvdyhjb25z
dCB1aW50MzJfdCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveVBpeG1hcChjb25zdCB1aW50MzJf
dCk7CiAgICAgc3RhdGljIHZvaWQgcmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmLCBjb25zdCB1
aW50MzJfdCk7CiAgICAgc3RhdGljIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7
CiAgICAgc3RhdGljIERpc3BsYXkqIG5hdGl2ZURpc3BsYXkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188875</attachid>
            <date>2013-02-18 06:50:17 -0800</date>
            <delta_ts>2013-02-18 08:17:36 -0800</delta_ts>
            <desc>patchv3</desc>
            <filename>reviewcontext3dchanges2.patch</filename>
            <type>text/plain</type>
            <size>40791</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDhkMDM4OTYuLmFhOGRlZDIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDEz
LTAyLTE4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbV2ViR0xdW0VGTF0gUmVmYWN0b3IgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
IHRvIGFkZCBzdXBwb3J0IGZvciBTaGFyZWRDb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0
cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBQbGF0Zm9ybUNvbnRleHQgYW5kIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB0bworICAgICAgICBhZGQgc3VwcG9ydCBmb3IgU2hhcmVk
IENvbnRleHQuIFRoaXMgd291bGQgaGVscCBzaGFyZSBHTCByZXNvdXJjZXMKKyAgICAgICAgYmV0
d2VlbiB0cmFuc3BvcnQgc3VyZmFjZSBhbmQgb2Zmc2NyZWVuIHN1cmZhY2Ugd2l0aG91dCBoYXZp
bmcgdG8gd29ycnkKKyAgICAgICAgYWJvdXQgdGhlIGNvbnRleHQgc3RhdGUuIFNvIGZhciwgd2Ug
dXNlZCB0aGUgc2FtZSBkcmF3YWJsZSBhcyB0cmFuc3BvcnQKKyAgICAgICAgc3VyZmFjZSBhbmQg
b2Zmc2NyZWVuIHN1cmZhY2UuIEFmdGVyIHRoaXMgcGF0Y2ggd2UgdXNlIHBpeG1hcCBzdXJmYWNl
IGFzCisgICAgICAgIG9mZnNjcmVlbiBzdXJmYWNlIGFuZCB1c2Ugc2hhcmVkIGNvbnRleHQgdG8g
cmVuZGVyIHRleHR1cmUgY29udGVudCB0bworICAgICAgICB0cmFuc3BvcnQgc3VyZmFjZS4gVGhp
cyB3b3VsZCBhbHNvIGFsaWduIGFzIHRvIGhvdyBzaGFyZWQgc3VyZmFjZSBpcyBpbXBsZW1lbnRl
ZAorICAgICAgICBvbiBFRkwgYW5kIFF0IHBvcnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6Om1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOgorICAg
ICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xQ
bGF0Zm9ybUNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oOgorICAgICAgICBOZWVkZWQgY2hhbmdlcyB0byB0
YWtlIHNoYXJlZCBjb250ZXh0IGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxh
dGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3Jt
U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENv
bmZpZ1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6R0xY
Q29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnZp
c3VhbEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnBpeG1hcENv
bnRleHRDb25maWcpOgorICAgICAgICAoR0xYQ29uZmlnU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6CisgICAgICAgIEFkZGVkIHN1cHBvcnQg
dG8gcXVlcnkgY29uZmlnaXJhdGlvbiBzdXBwb3J0aW5nCisgICAgICAgIHBpeG1hcCBzdXJmYWNl
LgorCisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oOgor
ICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJh
bnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
TFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHTFhP
ZmZTY3JlZW5TdXJmYWNlOjpHTFhPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdMWE9mZlNjcmVlblN1cmZhY2U6On5HTFhPZmZTY3JlZW5TdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdMWE9mZlNjcmVlblN1cmZhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0xYT2ZmU2NyZWVuU3VyZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhPZmZTY3JlZW5TdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9m
ZlNjcmVlblN1cmZhY2U6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2Zm
U2NyZWVuU3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICBSZW5hbWVkIEdMWFBCdWZmZXIg
c3VyZmFjZSBhcyBHTFhPZmZTY3JlZW5TdXJmYWNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDoKKyAgICAgICAgKEdMWFRyYW5zcG9ydFN1
cmZhY2UpOgorICAgICAgICAoR0xYT2ZmU2NyZWVuU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WDExSGVscGVyOjpkZXN0cm95UGl4bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6CisgICAgICAgIChYMTFI
ZWxwZXIpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuZCBkZXN0cm95IHBp
eG1hcC4KKwogMjAxMy0wMi0xOCAgR3J6ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxdIFVuaWZpZWQgdGV4dCBjaGVja2VyIGlt
cGxlbWVudGF0aW9uCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IDJmZmJiNzguLmJhNDczYWUg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3ND
b250ZXh0M0RFZmwuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0zNCw5ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgaWYgKHJlbmRlclN0
eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gMDsKLQog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFw
aGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1
cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQpAQCAtNjMs
MTggKzYwLDE2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxl
RkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKLSAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkp
CisgICAgLCBtX3ByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGUodGhpcywg
aG9zdFdpbmRvdykpCiB7Ci0gICAgaWYgKCFtX3ByaXZhdGUgfHwgIW1fcHJpdmF0ZS0+bV9wbGF0
Zm9ybUNvbnRleHQpIHsKLSAgICAgICAgbV9wcml2YXRlID0gbnVsbHB0cjsKKyAgICBpZiAoIW1f
cHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwogCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlck9mZnNjcmVlbikgewogICAgICAg
ICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsR2VuRnJh
bWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7CisgICAgICAgIGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX2Zibyk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIg
aW50by4KICAgICAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKQEAgLTEzNCwzMCAr
MTI5LDM4IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAKIEdyYXBoaWNzQ29udGV4dDNEOjp+
R3JhcGhpY3NDb250ZXh0M0QoKQogewotICAgIGlmICghbV9wcml2YXRlIHx8ICFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICBpZiAoIW1fcHJpdmF0ZSB8fCAobV9yZW5kZXJTdHlsZSA9PSBSZW5k
ZXJUb0N1cnJlbnRHTENvbnRleHQpIHx8ICFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCAwKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyAgICBpZiAobV9mYm8pCisgICAgICAgIGdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CiAKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
LSAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOworICAgICAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKQorICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogCi0g
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgaWYg
KG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpCiAgICAgICAgICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwogCi0gICAg
ICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
aWYgKG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgfSBlbHNlIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkgewogI2lmIFVTRShPUEVOR0xfRVNfMikKLSAgICAgICAgaWYgKG1fYXR0
cnMuZGVwdGgpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQogICAgICAgICAgICAgZ2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKIAotICAgICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKQorICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQogICAgICAgICAgICAgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwogI2VuZGlmCi0gICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICB9Ci0KLSAgICBtX3ByaXZhdGUt
PnJlbGVhc2VSZXNvdXJjZXMoKTsKIH0KIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFw
aGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5jcHAKaW5kZXggZDEwOTU2Ny4uM2Q2MDFmZSAxMDA2NDQKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw1OCArMjgsMTAyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
K1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwbGF0Zm9y
bUxheWVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShjb250ZXh0LCBo
b3N0V2luZG93KSk7CisKKyAgICBpZiAocGxhdGZvcm1MYXllciAmJiBwbGF0Zm9ybUxheWVyLT5p
bml0aWFsaXplKCkpCisgICAgICAgIHJldHVybiBwbGF0Zm9ybUxheWVyLnJlbGVhc2UoKTsKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2lu
ZG93KGhvc3RXaW5kb3cpCi0gICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogewor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAg
aWYgKG1fY29udGV4dC0+bV9yZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICht
X2hvc3RXaW5kb3cgJiYgbV9ob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgewogICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgY29kZSBwYXRoIGZvciBXZWJLaXQxLgogICAg
ICAgICAvLyBHZXQgRXZhcyBvYmplY3QgZnJvbSBwbGF0Zm9ybVBhZ2VDbGllbnQgYW5kIHNldCBF
dmFzR0wgcmVsYXRlZCBtZW1iZXJzLgotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBtX3BsYXRmb3JtQ29udGV4dCA9IEdMUGxhdGZvcm1Db250ZXh0
OjpjcmVhdGVDb250ZXh0KHJlbmRlclN0eWxlKTsKLSAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0
KQotICAgICAgICByZXR1cm47CisgICAgbV9vZmZTY3JlZW5Db250ZXh0ID0gR0xQbGF0Zm9ybUNv
bnRleHQ6OmNyZWF0ZUNvbnRleHQobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlKTsKKyAgICBpZiAo
IW1fb2ZmU2NyZWVuQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJl
bmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW4pIHsKKyAgICBp
ZiAobV9jb250ZXh0LT5tX3JlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJP
ZmZzY3JlZW4pIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgbV9wbGF0Zm9y
bVN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOwot
I2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3Jl
YXRlT2Zmc2NyZWVuU3VyZmFjZSgpOworICAgICAgICBtX3NoYXJlZFN1cmZhY2UgPSBHTFBsYXRm
b3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpOworICAgICAgICBpZiAoIW1fc2hh
cmVkU3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3NoYXJl
ZENvbnRleHQgPSBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChtX2NvbnRleHQtPm1f
cmVuZGVyU3R5bGUpOworICAgICAgICBpZiAoIW1fc2hhcmVkQ29udGV4dCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgICAgICBpZiAoIW1fcGxhdGZvcm1TdXJmYWNlKSB7
Ci0gICAgICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LT5pbml0
aWFsaXplKG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSB8fCAhbV9wbGF0Zm9ybUNvbnRleHQtPm1h
a2VDdXJyZW50KG1fcGxhdGZvcm1TdXJmYWNlLmdldCgpKSkgewotICAgICAgICAgICAgcmVsZWFz
ZVJlc291cmNlcygpOwotICAgICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBudWxscHRyOwot
ICAgICAgICAgICAgbV9wbGF0Zm9ybVN1cmZhY2UgPSBudWxscHRyOworICAgICAgICBtX29mZlNj
cmVlblN1cmZhY2UgPSBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgp
OworCisgICAgICAgIGlmICghbV9vZmZTY3JlZW5TdXJmYWNlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICghbV9vZmZTY3JlZW5Db250ZXh0LT5pbml0aWFsaXplKG1f
b2ZmU2NyZWVuU3VyZmFjZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3N1
cmZhY2VIYW5kbGUgPSBHcmFwaGljc1N1cmZhY2VUb2tlbihtX3BsYXRmb3JtU3VyZmFjZS0+aGFu
ZGxlKCkpOwotI2Vsc2UKLSAgICAgICAgfQorICAgICAgICBpZiAoIW1fc2hhcmVkQ29udGV4dC0+
aW5pdGlhbGl6ZShtX3NoYXJlZFN1cmZhY2UuZ2V0KCksIG1fb2ZmU2NyZWVuQ29udGV4dC0+aGFu
ZGxlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghbWFrZVNo
YXJlZENvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgbV9zdXJmYWNlSGFuZGxlID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4obV9zaGFyZWRTdXJmYWNl
LT5oYW5kbGUoKSk7CiAjZW5kaWYKICAgICB9CisKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKIHsKKyAg
ICByZWxlYXNlUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpyZWxlYXNlUmVzb3VyY2VzKCkKIHsKKyAgICBpZiAobV9jb250ZXh0LT5tX3JlbmRlclN0eWxl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCisgICAgICAg
IHJldHVybjsKKwogICAgIC8vIFJlbGVhc2UgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2Fi
bGUgb25seSBhZnRlciBkZXN0cm95aW5nIGFueSBhc3NvY2lhdGVkIGdsIHJlc291cmNlcy4KLSAg
ICBpZiAobV9wbGF0Zm9ybVN1cmZhY2UpCi0gICAgICAgIG1fcGxhdGZvcm1TdXJmYWNlLT5kZXN0
cm95KCk7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKG1fc2hhcmVkQ29udGV4
dCAmJiBtX3NoYXJlZENvbnRleHQtPmhhbmRsZSgpICYmIG1fc2hhcmVkU3VyZmFjZSkKKyAgICAg
ICAgbWFrZVNoYXJlZENvbnRleHRDdXJyZW50KCk7CiAKLSAgICBpZiAobV9wbGF0Zm9ybUNvbnRl
eHQpIHsKLSAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPmRlc3Ryb3koKTsKLSAgICAgICAgbV9w
bGF0Zm9ybUNvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7CisgICAgaWYgKG1fc2hhcmVkU3VyZmFj
ZSkKKyAgICAgICAgbV9zaGFyZWRTdXJmYWNlLT5kZXN0cm95KCk7CisKKyAgICBpZiAobV9zaGFy
ZWRDb250ZXh0KSB7CisgICAgICAgIG1fc2hhcmVkQ29udGV4dC0+ZGVzdHJveSgpOworICAgICAg
ICBtX3NoYXJlZENvbnRleHQtPnJlbGVhc2VDdXJyZW50KCk7CisgICAgfQorI2VuZGlmCisgICAg
aWYgKG1fb2ZmU2NyZWVuU3VyZmFjZSkKKyAgICAgICAgbV9vZmZTY3JlZW5TdXJmYWNlLT5kZXN0
cm95KCk7CisKKyAgICBpZiAobV9vZmZTY3JlZW5Db250ZXh0KSB7CisgICAgICAgIG1fb2ZmU2Ny
ZWVuQ29udGV4dC0+ZGVzdHJveSgpOworICAgICAgICBtX29mZlNjcmVlbkNvbnRleHQtPnJlbGVh
c2VDdXJyZW50KCk7CiAgICAgfQogfQogCkBAIC05Niw1MCArMTQwLDMxIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0CiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9wbGF0Zm9ybUNvbnRleHQtPmhhbmRsZSgpOworICAgIHJldHVybiBtX29mZlNjcmVlbkNv
bnRleHQtPmhhbmRsZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29u
dGV4dEN1cnJlbnQoKSBjb25zdAogewotICAgIGJvb2wgc3VjY2VzcyA9IG1fcGxhdGZvcm1Db250
ZXh0LT5tYWtlQ3VycmVudChtX3BsYXRmb3JtU3VyZmFjZS5nZXQoKSk7CisgICAgYm9vbCBzdWNj
ZXNzID0gbV9vZmZTY3JlZW5Db250ZXh0LT5tYWtlQ3VycmVudChtX29mZlNjcmVlblN1cmZhY2Uu
Z2V0KCkpOwogCi0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC0+aXNWYWxpZCgpKSB7CisgICAg
aWYgKCFtX29mZlNjcmVlbkNvbnRleHQtPmlzVmFsaWQoKSkgewogICAgICAgICAvLyBGSVhNRTog
UmVzdG9yZSBjb250ZXh0CiAgICAgICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2spCiAgICAg
ICAgICAgICBtX2NvbnRleHRMb3N0Q2FsbGJhY2stPm9uQ29udGV4dExvc3QoKTsKIAotICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
KiwgY29uc3QgRmxvYXRSZWN0JiAvKiB0YXJnZXQgKi8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgLyogb3BhY2l0eSAqLywgQml0bWFwVGV4dHVyZSogLyogbWFzayAqLykKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlQnVmZmVyKCkgY29uc3QKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpkaWRSZXNpemVDYW52YXMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3BlbmRpbmdTdXJmYWNlUmVzaXplID0gdHJ1ZTsKLSAg
ICBtX3NpemUgPSBzaXplOwotfQotCi11aW50MzJfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dCB8
fCAhbWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fY29udGV4
dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwogCi0gICAgaWYgKG1fcGVuZGluZ1N1cmZhY2VSZXNp
emUpIHsKLSAgICAgICAgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZSA9IGZhbHNlOwotICAgICAgICBt
X3BsYXRmb3JtU3VyZmFjZS0+c2V0R2VvbWV0cnkoSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1f
Y3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwotICAgIH0KLQogICAg
IGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7CiAgICAgICAgIGJvb2wgZW5hYmxl
U2Npc3NvclRlc3QgPSBmYWxzZTsKICAgICAgICAgaW50IHdpZHRoID0gbV9jb250ZXh0LT5tX2N1
cnJlbnRXaWR0aDsKQEAgLTE2MSw4ICsxODYsNDYgQEAgdWludDMyX3QgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UoKQogICAgICAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQogCi0gICAg
bV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBt
X2NvbnRleHQtPm1fYm91bmRGQk8sIG1fY29udGV4dC0+bV9ib3VuZFRleHR1cmUwKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KIAorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgRmxvYXRSZWN0JiAvKiB0YXJnZXQgKi8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgLyogb3BhY2l0eSAqLywgQml0bWFwVGV4dHVyZSogLyogbWFzayAqLykKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlU2hhcmVkQ29udGV4dEN1cnJl
bnQoKSBjb25zdAoreworICAgIGJvb2wgc3VjY2VzcyA9IG1fc2hhcmVkQ29udGV4dC0+bWFrZUN1
cnJlbnQobV9zaGFyZWRTdXJmYWNlLmdldCgpKTsKKworICAgIGlmICghbV9zaGFyZWRDb250ZXh0
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFJlc3RvcmUgY29udGV4dAorICAgICAg
ICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrKQorICAgICAgICAgICAgbV9jb250ZXh0TG9zdENh
bGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZGlkUmVzaXplQ2FudmFzKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0g
c2l6ZTsKKyAgICBtX3NoYXJlZFN1cmZhY2UtPnNldEdlb21ldHJ5KEludFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworfQorCit1aW50MzJfdCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCit7CisgICAgaWYgKG1fY29u
dGV4dC0+bV9sYXllckNvbXBvc2l0ZWQgfHwgIXByZXBhcmVCdWZmZXIoKSB8fCAhbWFrZVNoYXJl
ZENvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9zaGFyZWRTdXJm
YWNlLT51cGRhdGVDb250ZW50cyhtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsICBtX2Nv
bnRleHQtPm1fYm91bmRGQk8pOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzUsNyArMjM4LDYg
QEAgSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtTGF5ZXJTaXplKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zaXplOwogfQotCiAjZW5kaWYKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXggMmViMmY3NS4uYjMwMDk2
YSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQx
LDM3ICs0MSw0MiBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKICNlbmRpZgogewog
cHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCos
IEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gY3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgSG9zdFdpbmRvdyopOwogICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsK
IAogICAgIGJvb2wgY3JlYXRlU3VyZmFjZShQYWdlQ2xpZW50RWZsKiwgYm9vbCk7CiAgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+ICBjYWxsQmFjayk7Ci0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dDsKLSNlbmRpZgorICAgIHZvaWQgc2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPik7CiAjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzayk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKikgT1ZF
UlJJREU7CiAjZW5kaWYKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIElu
dFNpemUgcGxhdGZvcm1MYXllclNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVpbnQzMl90IGNv
cHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgcGxhdGZv
cm1MYXllclNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IGNvcHlU
b0dyYXBoaWNzU3VyZmFjZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNl
VG9rZW4gZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdCBPVkVSUklERTsKICAgICB2b2lkIGRp
ZFJlc2l6ZUNhbnZhcyhjb25zdCBJbnRTaXplJik7CiAjZW5kaWYKLSAgICBib29sIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwg
SG9zdFdpbmRvdyopOworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworICAgIGJvb2wgcHJlcGFyZUJ1
ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgcmVsZWFzZVJlc291cmNlcygpOwotICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKyAgICBib29sIG1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgpIGNvbnN0OworI2VuZGlm
CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBIb3N0V2luZG93KiBtX2hv
c3RXaW5kb3c7Ci0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBtX3BsYXRmb3JtQ29udGV4
dDsKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IG1fcGxhdGZvcm1TdXJmYWNlOworICAg
IE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9vZmZTY3JlZW5Db250ZXh0OworICAgIE93blB0
cjxHTFBsYXRmb3JtU3VyZmFjZT4gbV9vZmZTY3JlZW5TdXJmYWNlOwogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gbV9zaGFyZWRDb250ZXh0
OworICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gbV9zaGFyZWRTdXJmYWNlOwogICAgIEdy
YXBoaWNzU3VyZmFjZVRva2VuIG1fc3VyZmFjZUhhbmRsZTsKICNlbmRpZgogICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENhbGxi
YWNrOwogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLSAgICBi
b29sIG1fcGVuZGluZ1N1cmZhY2VSZXNpemU7CiAgICAgSW50U2l6ZSBtX3NpemU7CiB9OwogCkBA
IC04MCwzICs4NSw0IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjZW5kaWYKKwpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5j
cHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250
ZXh0LmNwcAppbmRleCA0ZDQ0MGY4Li5jZWQ3YmI4IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcApA
QCAtMjA3LDcgKzIwNyw3IEBAIGJvb2wgR0xQbGF0Zm9ybUNvbnRleHQ6Om1ha2VDdXJyZW50KEdM
UGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogCiAgICAgbV9jdXJyZW50Q29udGV4dCA9IDA7CiAK
LSAgICBpZiAoIXN1cmZhY2UgfHwgKHN1cmZhY2UgJiYgIXN1cmZhY2UtPmhhbmRsZSgpKSkKKyAg
ICBpZiAoIXN1cmZhY2UgfHwgKHN1cmZhY2UgJiYgIXN1cmZhY2UtPmRyYXdhYmxlKCkpKQogICAg
ICAgICBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CiAgICAgZWxzZSBpZiAocGxhdGZvcm1NYWtl
Q3VycmVudChzdXJmYWNlKSkKICAgICAgICAgbV9jdXJyZW50Q29udGV4dCA9IHRoaXM7CkBAIC0y
NjIsNyArMjYyLDcgQEAgYm9vbCBHTFBsYXRmb3JtQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgp
IGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR0xQbGF0Zm9ybUNvbnRleHQ6Omlu
aXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKQorYm9vbCBHTFBsYXRmb3JtQ29udGV4dDo6aW5p
dGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSosIFBsYXRmb3JtQ29udGV4dCkKIHsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAppbmRleCAzZTEzNjI0Li4yZTQxZGIzIDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1D
b250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBs
YXRmb3JtQ29udGV4dC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fkdMUGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBs
YXRmb3JtU3VyZmFjZSopOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZvcm1T
dXJmYWNlKiwgUGxhdGZvcm1Db250ZXh0ID0gMCk7CiAKICAgICAvLyBNYWtlcyB0aGlzIGFuZCBz
dXJmYWNlIGFzIGN1cnJlbnQgY29udGV4dCBhbmQgZHJhd2FibGUuCiAgICAgLy8gQ2FsbGluZyB0
aGlzIGZ1bmN0aW9uIHdpdGggbm8gc3VyZmFjZSBpcyBzYW1lIGFzIGNhbGxpbmcgcmVsZWFzZUN1
cnJlbnQuCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdmN2E1NjQuLjA3MWE4M2IgMTAwNjQ0
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1
cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQ
bGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC00MCwxMiArNDAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6
Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZSgpCitQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBH
TFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZSgpCiB7CiAjaWYgVVNFKEdM
WCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcg
R0xYUEJ1ZmZlcigpKTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBh
ZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuU3VyZmFjZSgpKTsKIAotICAgIGlmIChzdXJmYWNlLT5o
YW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQorICAgIGlmIChzdXJmYWNlLT5kcmF3YWJs
ZSgpKQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiAjZW5kaWYKIApAQCAtNTQs
NyArNTQsNiBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFj
ZTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmFjZSgpCiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZh
Y2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKIHsKLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKICNpZiBVU0UoR0xYKQogICAgIE93blB0cjxHTFBsYXRmb3Jt
U3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKCkpOwog
I2VsaWYgVVNFKEVHTCkKQEAgLTYzLDE0ICs2MiwxMiBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1T
dXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCiAKICAg
ICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgp
KQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7Ci0jZW5kaWYKIAogICAgIHJldHVy
biBudWxscHRyOwogfQogCiBHTFBsYXRmb3JtU3VyZmFjZTo6R0xQbGF0Zm9ybVN1cmZhY2UoKQot
ICAgIDogbV9yZXN0b3JlTmVlZGVkKHRydWUpCi0gICAgLCBtX2Zib0lkKDApCisgICAgOiBtX2Zi
b0lkKDApCiAgICAgLCBtX3NoYXJlZERpc3BsYXkoMCkKICAgICAsIG1fZHJhd2FibGUoMCkKICAg
ICAsIG1fYnVmZmVySGFuZGxlKDApCkBAIC0xMTEsMTMgKzEwOCwxMSBAQCB2b2lkIEdMUGxhdGZv
cm1TdXJmYWNlOjpzd2FwQnVmZmVycygpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVy
ZSwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpCit2
b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0
dXJlKQogewogICAgIGlmICghbV9mYm9JZCkKICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fZmJvSWQpOwogCi0gICAgbV9yZXN0b3JlTmVlZGVkID0gZmFsc2U7Ci0KICAgICBpbnQgeCA9
IDA7CiAgICAgaW50IHkgPSAwOwogICAgIGludCB3aWR0aCA9IG1fcmVjdC53aWR0aCgpOwpAQCAt
MTMwLDkgKzEyNSw2IEBAIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKGNv
bnN0IHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEdMdWludCBiaW5kCiAgICAgLy8gVXNlIE5FQVJF
U1QgYXMgbm8gc2NhbGUgaXMgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KICAgICBnbEJsaXRG
cmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9D
T0xPUl9CVUZGRVJfQklULCBHTF9ORUFSRVNUKTsKICAgICBzd2FwQnVmZmVycygpOwotICAgIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgYmluZFRleHR1cmUpOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBiaW5kRmJvSWQpOwogfQogCiB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShj
b25zdCBJbnRSZWN0JiBuZXdSZWN0KQpAQCAtMTQ0LDEwICsxMzYsMTIgQEAgdm9pZCBHTFBsYXRm
b3JtU3VyZmFjZTo6ZGVzdHJveSgpCiB7CiAgICAgbV9yZWN0ID0gSW50UmVjdCgpOwogCi0gICAg
aWYgKG1fZmJvSWQpCisgICAgaWYgKG1fZmJvSWQpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOwogICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7Ci0KLSAg
ICBtX2Zib0lkID0gMDsKKyAgICAgICAgbV9mYm9JZCA9IDA7CisgICAgfQogfQogCiB9CmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1T
dXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmgKaW5kZXggZThkYjQyNS4uMDBkZDdjOSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApA
QCAtNDIsNyArNDIsNyBAQCBjbGFzcyBHTFBsYXRmb3JtU3VyZmFjZSB7CiAKIHB1YmxpYzoKICAg
ICAvLyBDcmVhdGVzIGEgR0wgc3VyZmFjZSB1c2VkIGZvciBvZmZzY3JlZW4gcmVuZGVyaW5nLgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBjcmVhdGVPZmZzY3JlZW5T
dXJmYWNlKCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IGNyZWF0
ZU9mZlNjcmVlblN1cmZhY2UoKTsKIAogICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJmYWNlIHVzZWQg
Zm9yIG9mZnNjcmVlbiByZW5kZXJpbmcuIFRoZSByZXN1bHRzIGNhbiBiZSB0cmFuc3BvcnRlZAog
ICAgIC8vIHRvIHRoZSBVSSBwcm9jZXNzIGZvciBkaXNwbGF5LgpAQCAtNTMsNiArNTMsOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgZ2VvbWV0cnkoKSBjb25zdDsKIAogICAgIC8vIEdl
dCB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBzcGVjaWZpYyBidWZmZXIgaGFuZGxlLgorICAgIC8v
IFRoZSBoYW5kbGUgd2lsbCBiZSBudWxsIGlmIHN1cmZhY2UgZG9lc24ndCBzdXBwb3J0CisgICAg
Ly8gYnVmZmVyIHNoYXJpbmcuCiAgICAgUGxhdGZvcm1CdWZmZXJIYW5kbGUgaGFuZGxlKCkgY29u
c3Q7CiAKICAgICBQbGF0Zm9ybURyYXdhYmxlIGRyYXdhYmxlKCkgY29uc3Q7CkBAIC02MSwxMiAr
NjMsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCk7CiAKLSAg
ICAvLyBDb252ZW5pZW5jZSBGdW5jdGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVyIHdp
dGggdGV4dHVyZSBjb250ZW50cywgcmVzdG9yZSBjdXJyZW50IEZCTyBhbmQgVGV4dHVyZS4KKyAg
ICAvLyBDb252ZW5pZW5jZSBGdW5jdGlvbiB0byB1cGRhdGUgc3VyZmFjZSBiYWNrYnVmZmVyIHdp
dGggdGV4dHVyZSBjb250ZW50cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXNu
J3QgdHJhY2sgb3IgcmVzdG9yZSBhbnkgR0wgc3RhdGVzLgogICAgIC8vIEZ1bmN0aW9uIGRvZXMg
dGhlIGZvbGxvd2luZyhpbiBvcmRlcik6CiAgICAgLy8gYSkgQmxpdHMgdGV4dHVyZSBjb250ZW50
cyB0byBiYWNrIGJ1ZmZlci4KICAgICAvLyBiKSBDYWxscyBTd2FwIEJ1ZmZlcnMuCi0gICAgLy8g
YykgU2V0cyBjdXJyZW50IEZCTyBhcyBiaW5kRmJvSWQuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEdMdWludCBiaW5kRmJvSWQs
IGNvbnN0IHVpbnQzMl90IGJpbmRUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0R2Vv
bWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCk7CiAKQEAgLTc2LDcgKzc4LDYgQEAgcHVibGlj
OgogCiBwcm90ZWN0ZWQ6CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2UoKTsKLSAgICBib29sIG1fcmVz
dG9yZU5lZWRlZDsKICAgICBJbnRSZWN0IG1fcmVjdDsKICAgICBHTHVpbnQgbV9mYm9JZDsKICAg
ICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHAKaW5k
ZXggNzg5YjY5Yi4uYzIwOGRjYyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCkBAIC02Nyw3ICs2Nyw3
IEBAIEVHTE9mZlNjcmVlbkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQoKQogewogfQogCi1i
b29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1
cmZhY2UpCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1
cmZhY2UqIHN1cmZhY2UsIFBsYXRmb3JtQ29udGV4dCBzaGFyZWRDb250ZXh0KQogewogICAgIGlm
ICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODYsNyArODYsNyBAQCBib29s
IEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZh
Y2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc1JvYnVzdG5lc3NFeHRTdXBw
b3J0ZWQobV9kaXNwbGF5KSkKLSAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29u
dGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRSb2J1c3RuZXNz
QXR0cmlidXRlcyk7CisgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVnbENyZWF0ZUNvbnRleHQo
bV9kaXNwbGF5LCBjb25maWcsIHNoYXJlZENvbnRleHQsIGNvbnRleHRSb2J1c3RuZXNzQXR0cmli
dXRlcyk7CiAKICAgICBpZiAobV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKSB7CiAg
ICAgICAgIC8vIFRoZSBFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3Mgc3BlYyByZXF1
aXJlcyB0aGF0IGEgY29udGV4dCBjcmVhdGVkIHdpdGgKQEAgLTEwMCw3ICsxMDAsNyBAQCBib29s
IEVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZh
Y2UpCiAgICAgfQogCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSA9PSBFR0xfTk9fQ09OVEVYVCkK
LSAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNv
bmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9jb250
ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgc2hhcmVkQ29u
dGV4dCwgY29udGV4dEF0dHJpYnV0ZXMpOwogCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSAhPSBF
R0xfTk9fQ09OVEVYVCkKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCmluZGV4
IGVlMTMyY2MuLmVjMzE5MTMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCkBAIC0zNyw3ICszNyw3IEBAIGNs
YXNzIEVHTE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgewogcHVi
bGljOgogICAgIEVHTE9mZlNjcmVlbkNvbnRleHQoKTsKICAgICB2aXJ0dWFsIH5FR0xPZmZTY3Jl
ZW5Db250ZXh0KCk7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZh
Y2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRmb3JtU3Vy
ZmFjZSosIFBsYXRmb3JtQ29udGV4dCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHBsYXRm
b3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqKSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmggU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKaW5kZXgg
ZWE3MzkyMS4uYzEzYzI2YyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaApAQCAtNDgs
OCArNDgsOCBAQCBjbGFzcyBHTFhDb25maWdTZWxlY3RvciB7CiAKIHB1YmxpYzoKICAgICBHTFhD
b25maWdTZWxlY3RvcigpCi0gICAgICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKLSAgICAgICAg
LCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKKyAgICAgICAgOiBtX3N1cmZhY2VDb250ZXh0
RkJDb25maWcoMCkKKyAgICAgICAgLCBtX3BpeG1hcENvbnRleHRGQkNvbmZpZygwKQogICAgIHsK
ICAgICB9CiAKQEAgLTU3LDM0ICs1NywzMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyhj
b25zdCBHTFhGQkNvbmZpZyYgY29uZmlnKQogICAgIHsKLSAgICAgICAgaWYgKCFzdXJmYWNlQ29u
dGV4dENvbmZpZygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIGds
WEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgbV9zdXJm
YWNlQ29udGV4dEZCQ29uZmlnKTsKKyAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZyb21GQkNv
bmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgY29uZmlnKTsKICAgICB9CiAKLSAgICBH
TFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCisgICAgR0xYRkJDb25maWcgcGl4bWFw
Q29udGV4dENvbmZpZygpCiAgICAgewotICAgICAgICBpZiAoIW1fcGJ1ZmZlckZCQ29uZmlnKSB7
CisgICAgICAgIGlmICghbV9waXhtYXBDb250ZXh0RkJDb25maWcpIHsKICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgYXR0cmlidXRlc1tdID0gewogICAgICAgICAgICAgICAgIEdMWF9MRVZF
TCwgMCwKLSAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklU
LAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUElYTUFQX0JJVCwKICAg
ICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAogICAgICAgICAg
ICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAogICAgICAgICAgICAgICAgIEdMWF9HUkVFTl9T
SVpFLCAgICAxLAogICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAgICAg
ICAgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAogICAgICAgICAgICAgICAgIEdMWF9ET1VC
TEVCVUZGRVIsICBHTF9GQUxTRSwKICAgICAgICAgICAgICAgICBOb25lCiAgICAgICAgICAgICB9
OwogCi0gICAgICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGZpbmRNYXRjaGluZ0NvbmZpZyhh
dHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIG1fcGl4bWFwQ29udGV4dEZCQ29uZmlnID0gZmluZE1h
dGNoaW5nQ29uZmlnKGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1f
cGJ1ZmZlckZCQ29uZmlnOworICAgICAgICByZXR1cm4gbV9waXhtYXBDb250ZXh0RkJDb25maWc7
CiAgICAgfQogCisKICAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpCiAgICAg
ewogICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykKQEAgLTEwMyw4ICsxMDIs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0gICAgICAgIG1fcGJ1ZmZl
ckZCQ29uZmlnID0gMDsKICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gMDsKKyAg
ICAgICAgbV9waXhtYXBDb250ZXh0RkJDb25maWcgPSAwOwogICAgIH0KIAogcHJpdmF0ZToKQEAg
LTE1OSw4ICsxNTgsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdGVtcFswXTsKICAgICB9
CiAKLSAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJGQkNvbmZpZzsKICAgICBHTFhGQkNvbmZpZyBt
X3N1cmZhY2VDb250ZXh0RkJDb25maWc7CisgICAgR0xYRkJDb25maWcgbV9waXhtYXBDb250ZXh0
RkJDb25maWc7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAppbmRleCA4ZjQwNDYzLi4xOWQ0
YjdiIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgR0xYT2ZmU2NyZWVu
Q29udGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCgpCiB7CiB9CiAKLWJvb2wgR0xYT2ZmU2NyZWVu
Q29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKK2Jvb2wgR0xY
T2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSwg
UGxhdGZvcm1Db250ZXh0IHNoYXJlZENvbnRleHQpCiB7CiAgICAgaWYgKCFzdXJmYWNlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29u
dGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKICAgICAgICAgaW5p
dGlhbGl6ZUFSQkV4dGVuc2lvbnMoKTsKIAogICAgICAgICBpZiAoZ2xYQ3JlYXRlQ29udGV4dEF0
dHJpYnNBUkIpCi0gICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVDb250ZXh0
QXR0cmlic0FSQih4MTFEaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMpOworICAgICAg
ICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIoeDExRGlz
cGxheSwgY29uZmlnLCBzaGFyZWRDb250ZXh0LCB0cnVlLCBBdHRyaWJzKTsKIAogICAgICAgICBp
ZiAobV9jb250ZXh0SGFuZGxlKSB7CiAgICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVhdGVf
Y29udGV4dF9yb2J1c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRlZCB3
aXRoCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6
ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
bV9jb250ZXh0SGFuZGxlKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRl
TmV3Q29udGV4dCh4MTFEaXNwbGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUpOwor
ICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dCh4MTFEaXNw
bGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIHNoYXJlZENvbnRleHQsIHRydWUpOwogCiAgICAg
ICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEw
NSw3ICsxMDUsNyBAQCBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmlzQ3VycmVudENvbnRleHQo
KSBjb25zdAogCiBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQo
R0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCiB7Ci0gICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50
KHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKSwgc3VyZmFjZS0+aGFuZGxlKCksIG1fY29udGV4dEhh
bmRsZSk7CisgICAgcmV0dXJuIGdsWE1ha2VDdXJyZW50KHN1cmZhY2UtPnNoYXJlZERpc3BsYXko
KSwgc3VyZmFjZS0+ZHJhd2FibGUoKSwgbV9jb250ZXh0SGFuZGxlKTsKIH0KIAogdm9pZCBHTFhP
ZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgK
aW5kZXggNDQ0ZTdmMi4uM2NjNDNiYyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKQEAgLTM3LDcgKzM3LDcg
QEAgY2xhc3MgR0xYT2ZmU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBHTFBsYXRmb3JtQ29udGV4dCB7
CiBwdWJsaWM6CiAgICAgR0xYT2ZmU2NyZWVuQ29udGV4dCgpOwogICAgIHZpcnR1YWwgfkdMWE9m
ZlNjcmVlbkNvbnRleHQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRmb3Jt
U3VyZmFjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZv
cm1TdXJmYWNlKiwgUGxhdGZvcm1Db250ZXh0KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wg
cGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IGMwM2Mz
ZDAuLmViZDMwZjMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMzIsMTMgKzMyLDEyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1td
ID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CiAK
LSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5z
cG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQogewogICAgIG1fc2hhcmVk
RGlzcGxheSA9IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOwogICAgIG1fY29uZmlnU2VsZWN0
b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7Ci0gICAgT3duUHRyWDExPFhW
aXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbEluZm8oKSk7CisgICAg
T3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbElu
Zm8obV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSkpOwogCiAgICAgaWYg
KCF2aXNJbmZvLmdldCgpKSB7CiAgICAgICAgIGRlc3Ryb3koKTsKQEAgLTc3LDE0ICs3Niw3IEBA
IHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQogICAgIGlmICghbV9kcmF3
YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVzdG9yZU5lZWRlZCkgewotICAg
ICAgICBHTGludCBvbGRGQk87Ci0gICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJf
QklORElORywgJm9sZEZCTyk7Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCAwKTsKLSAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdh
YmxlKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG9sZEZCTyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXkoKSwgbV9k
cmF3YWJsZSk7CisgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxl
KTsKIH0KIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKQEAgLTEwMCw2NyAr
OTIsNzMgQEAgdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKICAgICBtX2NvbmZp
Z1NlbGVjdG9yID0gbnVsbHB0cjsKIH0KIAotI2VuZGlmCi0KLUdMWFBCdWZmZXI6OkdMWFBCdWZm
ZXIoKQorR0xYT2ZmU2NyZWVuU3VyZmFjZTo6R0xYT2ZmU2NyZWVuU3VyZmFjZSgpCiAgICAgOiBH
TFBsYXRmb3JtU3VyZmFjZSgpCisgICAgLCBtX3BpeG1hcCgwKQorICAgICwgbV9nbHhQaXhtYXAo
MCkKIHsKICAgICBpbml0aWFsaXplKCk7CiB9CiAKLUdMWFBCdWZmZXI6On5HTFhQQnVmZmVyKCkK
K0dMWE9mZlNjcmVlblN1cmZhY2U6On5HTFhPZmZTY3JlZW5TdXJmYWNlKCkKIHsKIH0KIAotdm9p
ZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKK3ZvaWQgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6aW5p
dGlhbGl6ZSgpCiB7CiAgICAgbV9zaGFyZWREaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVEaXNw
bGF5KCk7CiAKICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1Nl
bGVjdG9yKCkpOwotICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3ItPnBC
dWZmZXJDb250ZXh0Q29uZmlnKCk7CiAKLSAgICBpZiAoIWNvbmZpZykgeworICAgIE93blB0clgx
MTxYVmlzdWFsSW5mbz4gdmlzdWFsSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKG1f
Y29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKSkpOworICAgIFgxMUhlbHBlcjo6
Y3JlYXRlUGl4bWFwKCZtX3BpeG1hcCwgKnZpc3VhbEluZm8uZ2V0KCkpOworCisgICAgaWYgKCFt
X3BpeG1hcCkgewogICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihtX3NoYXJlZERpc3BsYXksIGNvbmZp
ZywgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlR0xYUGl4
bWFwKG1fc2hhcmVkRGlzcGxheSwgdmlzdWFsSW5mby5nZXQoKSwgbV9waXhtYXApOwogCi0gICAg
aWYgKCFtX2RyYXdhYmxlKSB7CisgICAgaWYgKCFtX2dseFBpeG1hcCkgewogICAgICAgICBkZXN0
cm95KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2J1ZmZlckhhbmRsZSA9IG1f
ZHJhd2FibGU7CisgICAgbV9kcmF3YWJsZSA9IG1fZ2x4UGl4bWFwOwogfQogCi1QbGF0Zm9ybVN1
cmZhY2VDb25maWcgR0xYUEJ1ZmZlcjo6Y29uZmlndXJhdGlvbigpCitQbGF0Zm9ybVN1cmZhY2VD
b25maWcgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB7Ci0gICAgcmV0dXJu
IG1fY29uZmlnU2VsZWN0b3ItPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAgcmV0dXJuIG1f
Y29uZmlnU2VsZWN0b3ItPnBpeG1hcENvbnRleHRDb25maWcoKTsKIH0KIAotdm9pZCBHTFhQQnVm
ZmVyOjpkZXN0cm95KCkKK3ZvaWQgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6ZGVzdHJveSgpCiB7CiAg
ICAgZnJlZVJlc291cmNlcygpOwogfQogCi12b2lkIEdMWFBCdWZmZXI6OmZyZWVSZXNvdXJjZXMo
KQordm9pZCBHTFhPZmZTY3JlZW5TdXJmYWNlOjpmcmVlUmVzb3VyY2VzKCkKIHsKICAgICBHTFBs
YXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOwogICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWRE
aXNwbGF5KCk7CiAKLSAgICBpZiAobV9kcmF3YWJsZSAmJiBkaXNwbGF5KSB7Ci0gICAgICAgIGds
WERlc3Ryb3lQYnVmZmVyKGRpc3BsYXksIG1fZHJhd2FibGUpOwotICAgICAgICBtX2RyYXdhYmxl
ID0gMDsKLSAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOworICAgIGlmICghZGlzcGxheSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAgIGdsWERlc3Ry
b3lHTFhQaXhtYXAoZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAgICBnbFhXYWl0R0woKTsK
KyAgICAgICAgbV9nbHhQaXhtYXAgPSAwOwogICAgIH0KIAotICAgIG1fY29uZmlnU2VsZWN0b3Ig
PSBudWxscHRyOwotfQorICAgIGlmIChtX3BpeG1hcCkgeworICAgICAgICBYMTFIZWxwZXI6OmRl
c3Ryb3lQaXhtYXAobV9waXhtYXApOworICAgICAgICBtX3BpeG1hcCA9IDA7CisgICAgfQogCi12
b2lkIEdMWFBCdWZmZXI6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCi17Ci0g
ICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOworICAgIG1fY29uZmln
U2VsZWN0b3IgPSBudWxscHRyOworICAgIG1fZHJhd2FibGUgPSAwOwogfQogCiB9CmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZh
Y2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3Vy
ZmFjZS5oCmluZGV4IDllNzczMmEuLjQzMGZlNTEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC0zNCw3
ICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQogY2xhc3MgR0xYVHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFj
ZSB7CiAKIHB1YmxpYzoKQEAgLTQ5LDIxICs0OCwyMSBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5p
dGlhbGl6ZSgpOwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3Rv
cjsKIH07Ci0jZW5kaWYKIAotY2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBHTFBsYXRmb3JtU3Vy
ZmFjZSB7CitjbGFzcyBHTFhPZmZTY3JlZW5TdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJm
YWNlIHsKIAogcHVibGljOgotICAgIEdMWFBCdWZmZXIoKTsKLSAgICB2aXJ0dWFsIH5HTFhQQnVm
ZmVyKCk7CisgICAgR0xYT2ZmU2NyZWVuU3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkdMWE9mZlNj
cmVlblN1cmZhY2UoKTsKICAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1
cmF0aW9uKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IElu
dFJlY3QmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOwog
CiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgZnJlZVJlc291cmNl
cygpOwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKKyAg
ICBQaXhtYXAgbV9waXhtYXA7CisgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwogfTsKIAogfQpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
cmFwaGljc1N1cmZhY2VHTFguY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCmluZGV4IDY4Njc4Y2EuLjVlMThhNTkg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R3JhcGhpY3NTdXJmYWNlR0xYLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKQEAgLTEyMyw3ICsxMjMsOCBA
QCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIGlmICghZGlzcGxheSgp
IHx8ICFtX2NvbmZpZ1NlbGVjdG9yKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
T3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbElu
Zm8oKSk7CisgICAgICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3ItPnN1
cmZhY2VDb250ZXh0Q29uZmlnKCk7CisgICAgICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gdmlz
SW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKGNvbmZpZykpOwogCiAgICAgICAgIGlm
ICghdmlzSW5mby5nZXQoKSkgewogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTEzNyw3ICsxMzgs
NyBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQogCi0gICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhk
aXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIG1fc3Vy
ZmFjZSwgMCk7CisgICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhkaXNwbGF5
KCksIGNvbmZpZywgbV9zdXJmYWNlLCAwKTsKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExSGVscGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExSGVscGVyLmNwcAppbmRleCAxMDBiYjJlLi4yNDcyNzRhIDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5j
cHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFI
ZWxwZXIuY3BwCkBAIC0xNDAsNiArMTQwLDQ3IEBAIHZvaWQgWDExSGVscGVyOjpyZXNpemVXaW5k
b3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCiAgICAg
WEZsdXNoKG5hdGl2ZURpc3BsYXkoKSk7CiB9CiAKK3ZvaWQgWDExSGVscGVyOjpjcmVhdGVQaXht
YXAoUGl4bWFwKiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpc3VhbEluZm8sIGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXko
KTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdmlzdWFs
SW5mby52aXN1YWwpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZmluZCB2YWxpZCBY
VmlzdWFsLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2luZG93IHhXaW5kb3cg
PSBvZmZzY3JlZW5Sb290V2luZG93KCk7CisgICAgaWYgKCF4V2luZG93KSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gcm9vdCB3aW5kb3cuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQaXhtYXAgdGVtcEhhbmRsZUlkID0gWENyZWF0ZVBp
eG1hcChkaXNwbGF5LCB4V2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHZpc3Vh
bEluZm8uZGVwdGgpOworCisgICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiBwaXhtYXAuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAqaGFuZGxlSWQgPSB0ZW1wSGFuZGxlSWQ7CisgICAgWFN5bmMoWDEx
SGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIGZhbHNlKTsKK30KKwordm9pZCBYMTFIZWxwZXI6OmRl
c3Ryb3lQaXhtYXAoY29uc3QgdWludDMyX3QgcGl4bWFwSWQpCit7CisgICAgaWYgKCFwaXhtYXBJ
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3Bs
YXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4
bWFwKGRpc3BsYXksIHBpeG1hcElkKTsKKyAgICBYU3luYyhYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkoKSwgZmFsc2UpOworfQorCiB2b2lkIFgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93
KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpc0luZm8sIGNvbnN0IElu
dFNpemUmIHNpemUpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC0xNjIsOCArMjAz
LDcgQEAgdm9pZCBYMTFIZWxwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCogaGFu
ZGxlSWQsIGNvbnN0IFhWaXN1YWxJbmZvJiB2aXMKICAgICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVs
ID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKICAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFw
OwogICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJlY3RNYXNrOwotICAgIHVp
bnQzMl90IHRlbXBIYW5kbGVJZDsKLSAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRp
c3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlz
SW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8IENX
Qm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKyAgICB1aW50MzJfdCB0ZW1w
SGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0lu
Zm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0
cmlidXRlKTsKIAogICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CiAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOwpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmgKaW5kZXgg
NmU3YTY4Mi4uNjhjNzVkZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oCkBAIC00NiwxMSArNDYsMTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgWDExSGVscGVyIHsKIAogcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIGNyZWF0ZVBpeG1hcChQaXhtYXAqLCBjb25zdCBYVmlzdWFsSW5mbyYsIGNvbnN0IElu
dFNpemUmID0gSW50U2l6ZSgxLCAxKSk7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2NyZWVu
V2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8mLCBjb25zdCBJbnRTaXplJiA9IElu
dFNpemUoMSwgMSkpOwogI2lmIFVTRShFR0wpCiAgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgRUdMaW50LCBjb25zdCBJbnRTaXplJiA9IEludFNp
emUoMSwgMSkpOwogI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1
aW50MzJfdCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveVBpeG1hcChjb25zdCB1aW50MzJfdCk7
CiAgICAgc3RhdGljIHZvaWQgcmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmLCBjb25zdCB1aW50
MzJfdCk7CiAgICAgc3RhdGljIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7CiAg
ICAgc3RhdGljIERpc3BsYXkqIG5hdGl2ZURpc3BsYXkoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>