<?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>105825</bug_id>
          
          <creation_ts>2012-12-28 03:34:18 -0800</creation_ts>
          <short_desc>[EFL][WebGL] Refactor GLXImplementation.</short_desc>
          <delta_ts>2012-12-29 10:13:16 -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>105286</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dino</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>797842</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-28 03:34:18 -0800</bug_when>
    <thetext>Decouple native window management and logic to find surface configuration. This would align GLX implementation with EGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797847</commentid>
    <comment_count>1</comment_count>
      <attachid>180862</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-28 04:41:52 -0800</bug_when>
    <thetext>Created attachment 180862
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797855</commentid>
    <comment_count>2</comment_count>
      <attachid>180862</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-28 04:56:48 -0800</bug_when>
    <thetext>Comment on attachment 180862
patch

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

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:81
&gt; +    GLXFBConfig surfaceContextConfig(bool supportsXRenderExtension)

wouldn&apos;t an enum be better?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:111
&gt; +    {
&gt; +        if (m_pbufferFBConfig)
&gt; +            m_pbufferFBConfig = 0;
&gt; +
&gt; +        if (m_surfaceContextFBConfig)
&gt; +            m_surfaceContextFBConfig = 0;
&gt; +    }

why not just set them always to 0

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:51
&gt; +    OwnPtr&lt;GLXConfigHelper&gt; m_ConfigHelper;

m_conf... not uppercase C</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797859</commentid>
    <comment_count>3</comment_count>
      <attachid>180865</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-28 05:27:42 -0800</bug_when>
    <thetext>Created attachment 180865
patchv2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797860</commentid>
    <comment_count>4</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-28 05:30:47 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 180862 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180862&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:81
&gt; &gt; +    GLXFBConfig surfaceContextConfig(bool supportsXRenderExtension)
&gt; 
&gt; wouldn&apos;t an enum be better?
I made changes so that the value is passed during construction of confighelper, as this value doesn&apos;t change during run time. We could probably go for enum in future if we  need to track more than one extension support. Any thoughts ??

&gt; why not just set them always to 0
done

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.h:51
&gt; &gt; +    OwnPtr&lt;GLXConfigHelper&gt; m_ConfigHelper;
&gt; 
&gt; m_conf... not uppercase C

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798122</commentid>
    <comment_count>5</comment_count>
      <attachid>180865</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-29 05:16:40 -0800</bug_when>
    <thetext>Comment on attachment 180865
patchv2

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

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:35
&gt; +class GLXConfigHelper {

Helper is a bad name... it makes it difficult to understand what its responsibility is

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:42
&gt; +        , m_VisualInfo(0)

no, not uppercase V! We should fix the style checker to catch this, can you file a bug for that?

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:51
&gt; +    virtual ~GLXConfigHelper()
&gt; +    {
&gt; +        reset();
&gt; +    }

reset() doesnt seem needed... it is the dtor!

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:72
&gt; +            int numReturned;

numConfigurations would make more sense, or numAvailableConfigs

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:114
&gt; +        int numReturned;

same

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:139
&gt; +                }
&gt; +            } else if (m_VisualInfo-&gt;depth == 32) {
&gt; +#else
&gt; +            if (m_VisualInfo-&gt;depth == 32) {
&gt; +#endif

something is wrong with indentation here!

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXSurface.cpp:41
&gt; +    m_sharedDisplay = m_nativeResource-&gt;nativeSharedDisplay();
&gt; +    if (!m_sharedDisplay)

newline before if</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798131</commentid>
    <comment_count>6</comment_count>
      <attachid>180939</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-29 07:50:37 -0800</bug_when>
    <thetext>Created attachment 180939
patchv3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798132</commentid>
    <comment_count>7</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-29 07:55:13 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 180865 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180865&amp;action=review
&gt;  
&gt; Helper is a bad name... it makes it difficult to understand what its responsibility is

changed it to GLXConfigSelector

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:42
&gt; &gt; +        , m_VisualInfo(0)
&gt; 
&gt; no, not uppercase V! We should fix the style checker to catch this, can you file a bug for that?

fixed, k I will file a bug for it.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:51
&gt; &gt; +    virtual ~GLXConfigHelper()
&gt; &gt; +    {
&gt; &gt; +        reset();
&gt; &gt; +    }
&gt; 
&gt; reset() doesnt seem needed... it is the dtor!
ya, removed it.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigHelper.h:72
&gt; &gt; +            int numReturned; 
&gt; same

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798147</commentid>
    <comment_count>8</comment_count>
      <attachid>180939</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-29 10:13:12 -0800</bug_when>
    <thetext>Comment on attachment 180939
patchv3

Clearing flags on attachment: 180939

Committed r138567: &lt;http://trac.webkit.org/changeset/138567&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798148</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-29 10:13:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180862</attachid>
            <date>2012-12-28 04:41:52 -0800</date>
            <delta_ts>2012-12-28 05:27:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>glxrefactor.patch</filename>
            <type>text/plain</type>
            <size>28515</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDFlMzc3MWYuLjI4OGYwNzggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEy
LTEyLTI4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXZWJHTF0gUmVmYWN0b3IgR0xYSW1wbGVtZW50YXRpb24uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4MjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRl
Y291cGxlcyBuYXRpdmUgd2luZG93IG1hbmFnZW1lbnQgYW5kIGxvZ2ljIHRvIGZpbmQgc3VyZmFj
ZSBjb25maWd1cmF0aW9uIGluIEdMWCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnSGVscGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdMWENvbmZpZ0hlbHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpHTFhDb25maWdIZWxwZXI6OkdMWENvbmZpZ0hlbHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdIZWxwZXI6On5HTFhDb25maWdIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xYQ29uZmlnSGVscGVyOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WENvbmZpZ0hlbHBlcjo6cEJ1ZmZlckNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6
R0xYQ29uZmlnSGVscGVyOjpzdXJmYWNlQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhDb25maWdIZWxwZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ0hl
bHBlcjo6Y3JlYXRlQ29uZmlnKToKKworICAgICAgICBIZWxwZXIgY2xhc3MgdG8gZmluZCBzdXJm
YWNlIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29udGV4dC5oOgorICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHTFhQ
QnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmNvbmZp
Z3VyYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6CisgICAgICAgIChHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFBC
dWZmZXIpOgorCisgICAgICAgIEluaGVyaXRhbmNlIGNoYW5nZWQgZnJvbSBYMTFPZmZTY3JlZW5X
aW5kb3cgdG8gR0xQbGF0Zm9ybVN1cmZhY2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpYMTFPZmZTY3JlZW5XaW5k
b3cpOgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6bmF0aXZlU2hhcmVk
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpYMTFPZmZTY3JlZW5XaW5kb3c6OnNldFZpc3Vh
bEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93Ojppc1hSZW5kZXJF
eHRlbnNpb25TdXBwb3J0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJl
c291cmNlczo6Y3JlYXRlKToKKyAgICAgICAgKFNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAg
IChYMTFPZmZTY3JlZW5XaW5kb3cpOgorCisgICAgICAgICBSZW1vdmVkIGNvZGUgcmVsYXRlZCB0
byBzdXJmYWNlIGNvbmZpZ2lyYXRpb24uCisKIDIwMTItMTItMjcgIEtvbmRhcGFsbHkgS2FseWFu
ICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dlYkdMXSBB
ZGQgc3VwcG9ydCBmb3IgR0xFUzIgaW4gR3JhcGhpY3NDb250ZXh0M0RFZmwuCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAppbmRleCA1NmVhYjVlLi42
NTlkMjQ5IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMRGVmcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xE
ZWZzLmgKQEAgLTQxLDcgKzQxLDkgQEAKICNpbmNsdWRlIDxHTC9nbC5oPgogI2luY2x1ZGUgPEdM
L2dsZXh0Lmg+CiAjaWYgVVNFKEdMWCkKKyNkZWZpbmUgR0xYX0dMWEVYVF9QUk9UT1RZUEVTIDEK
ICNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRlIDxHTC9nbHhleHQuaD4KICNlbmRpZgogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29uZmlnSGVscGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbmZpZ0hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmVmMTIwYjcKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ0hlbHBlci5oCkBAIC0wLDAgKzEsMTY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWENvbmZpZ0hlbHBlcl9oCisjZGVm
aW5lIEdMWENvbmZpZ0hlbHBlcl9oCisKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKEdMWCkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHTFhDb25maWdIZWxwZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEdMWENvbmZpZ0hlbHBlcik7CisKK3B1YmxpYzoKKyAgICBHTFhDb25maWdIZWxw
ZXIoRGlzcGxheSogeERpc3BsYXkpCisgICAgICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKKyAg
ICAgICAgLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKKyAgICAgICAgLCBtX1Zpc3VhbElu
Zm8oMCkKKyAgICAgICAgLCBtX3NoYXJlZERpc3BsYXkoeERpc3BsYXkpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgfkdMWENvbmZpZ0hlbHBlcigpCisgICAgeworICAgICAgICByZXNldCgp
OworICAgIH0KKworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX1Zpc3VhbEluZm87CisgICAgfQorCisgICAgR0xYRkJDb25maWcgcEJ1
ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BidWZmZXJGQkNvbmZp
ZykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7CisgICAg
ICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9U
WVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAg
IEdMWF9SR0JBX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKKyAg
ICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhf
QkxVRV9TSVpFLCAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgR0xf
RkFMU0UsCisgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgaW50IG51bVJldHVybmVkOworICAgICAgICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBnbFhD
aG9vc2VGQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIERlZmF1bHRTY3JlZW4obV9zaGFyZWREaXNw
bGF5KSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKKyAgICAgICAgICAgIGlmIChudW1SZXR1
cm5lZCkKKyAgICAgICAgICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IHRlbXBbMF07CisgICAg
ICAgICAgICBYRnJlZSh0ZW1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3BidWZm
ZXJGQkNvbmZpZzsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZp
Zyhib29sIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIGlmICghbV9z
dXJmYWNlQ29udGV4dEZCQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0aWMgaW50IGF0dHJpYnV0
ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisgICAgICAgICAgICAgICAg
R0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAorICAgICAgICAgICAgICAgIEdMWF9S
RU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpF
LCAgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCisgICAgICAg
ICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0FMUEhB
X1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCisgICAg
ICAgICAgICAgICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAorICAgICAgICAg
ICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAorICAgICAgICAgICAgICAgIE5vbmUKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IGNy
ZWF0ZUNvbmZpZyhhdHRyaWJ1dGVzLCBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKKyAgICB9CisK
KyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIGlmIChtX3BidWZmZXJGQkNvbmZpZykK
KyAgICAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9zdXJm
YWNlQ29udGV4dEZCQ29uZmlnKQorICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmln
ID0gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR0xYRkJDb25maWcgY3JlYXRlQ29uZmlnKGNv
bnN0IGludCBhdHRyaWJ1dGVzW10sIGJvb2wgc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKQorICAg
IHsKKyAgICAgICAgaW50IG51bVJldHVybmVkOworICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwor
ICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlz
cGxheSwgRGVmYXVsdFNjcmVlbihtX3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0
dXJuZWQpOworCisgICAgICAgIGlmICghbnVtUmV0dXJuZWQpCisgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICBHTFhGQkNvbmZpZyBzZWxlY3RlZENvbmZpZyA9IDA7CisgICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJldHVy
bmVkOyArK2kpIHsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgaWYgKCFtX1Zp
c3VhbEluZm8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7CisgICAg
ICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFs
Rm9ybWF0KG1fc2hhcmVkRGlzcGxheSwgbV9WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAg
ICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07CisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRoID09
IDMyKSB7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIp
IHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBEaWQgbm90IGZpbmQgYW55IHZpc3VhbCBzdXBwb3J0aW5nIGFscGhhLCBzZWxl
Y3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcuCisgICAgICAgIGlmICghZm91bmQpIHsKKyAg
ICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIG1fVmlzdWFs
SW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbMF0p
OworICAgICAgICB9CisKKyAgICAgICAgWEZyZWUodGVtcCk7CisKKyAgICAgICAgcmV0dXJuIHNl
bGVjdGVkQ29uZmlnOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmln
OworICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKKyAgICBYVmlzdWFs
SW5mbyogbV9WaXN1YWxJbmZvOworICAgIERpc3BsYXkqIG1fc2hhcmVkRGlzcGxheTsKK307CisK
K30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaAppbmRleCA0M2E1MmRjLi43NzUw
MmYwIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWENvbnRleHQuaApAQCAtMzMsNyArMzMsNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIgOiBwdWJsaWMgR0xQbGF0Zm9y
bUNvbnRleHQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWEN1cnJlbnRDb250ZXh0V3Jh
cHBlcik7CiAKIHB1YmxpYzoKICAgICBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKQpAQCAtNDYs
MTYgKzQ1LDE1IEBAIHB1YmxpYzoKIH07CiAKIGNsYXNzIEdMWE9mZlNjcmVlbkNvbnRleHQgOiBw
dWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWE9m
ZlNjcmVlbkNvbnRleHQpOwogCiBwdWJsaWM6CiAgICAgR0xYT2ZmU2NyZWVuQ29udGV4dCgpOwog
ICAgIHZpcnR1YWwgfkdMWE9mZlNjcmVlbkNvbnRleHQoKTsKLSAgICBib29sIGluaXRpYWxpemUo
R0xQbGF0Zm9ybVN1cmZhY2UqKTsKLSAgICBib29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0
Zm9ybVN1cmZhY2UqKTsKLSAgICB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKTsKLSAgICB2
b2lkIGRlc3Ryb3koKTsKLSAgICBib29sIGlzQ3VycmVudENvbnRleHQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBmcmVlUmVzb3VyY2VzKCk7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAppbmRleCBjOWNkOGQyLi4yNzYw
MWQ3IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTM0LDkgKzM0LDI5IEBAIHN0YXRpYyBjb25z
dCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9Q
QlVGRkVSX0hFSUdICiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKIEdMWFRyYW5zcG9ydFN1
cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQotICAgIDogWDExT2ZmU2NyZWVuV2luZG93KCkK
KyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKIHsKLSAgICBjcmVhdGVPZmZzY3JlZW5XaW5kb3co
Jm1fYnVmZmVySGFuZGxlKTsKKyAgICBtX25hdGl2ZVJlc291cmNlID0gYWRvcHRQdHIobmV3IFgx
MU9mZlNjcmVlbldpbmRvdygpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX25hdGl2ZVJlc291
cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCk7CisgICAgaWYgKCFtX3NoYXJlZERpc3BsYXkpCisg
ICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOworCisgICAgbV9Db25maWdIZWxwZXIg
PSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnSGVscGVyKG1fc2hhcmVkRGlzcGxheSkpOworCisgICAg
aWYgKCFjb25maWd1cmF0aW9uKCkpIHsKKyAgICAgICAgbV9uYXRpdmVSZXNvdXJjZSA9IG51bGxw
dHI7CisgICAgICAgIG1fQ29uZmlnSGVscGVyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fbmF0aXZlUmVzb3VyY2UtPnNldFZpc3VhbEluZm8obV9Db25maWdIZWxw
ZXItPnZpc3VhbEluZm8oKSk7CisgICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2Zmc2NyZWVu
V2luZG93KCZtX2J1ZmZlckhhbmRsZSk7CisKKyAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7Cisg
ICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG1fZHJhd2Fi
bGUgPSBtX2J1ZmZlckhhbmRsZTsKIH0KIApAQCAtNDYsMTMgKzY2LDEzIEBAIEdMWFRyYW5zcG9y
dFN1cmZhY2U6On5HTFhUcmFuc3BvcnRTdXJmYWNlKCkKIAogUGxhdGZvcm1TdXJmYWNlQ29uZmln
IEdMWFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQogewotICAgIHJldHVybiBtX3No
YXJlZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKKyAgICByZXR1cm4gbV9Db25m
aWdIZWxwZXItPnN1cmZhY2VDb250ZXh0Q29uZmlnKG1fbmF0aXZlUmVzb3VyY2UtPmlzWFJlbmRl
ckV4dGVuc2lvblN1cHBvcnRlZCgpKTsKIH0KIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogewogICAgIEdMUGxhdGZvcm1TdXJm
YWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsKLSAgICByZVNpemVXaW5kb3cobmV3UmVjdCwgbV9k
cmF3YWJsZSk7CisgICAgbV9uYXRpdmVSZXNvdXJjZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1f
ZHJhd2FibGUpOwogfQogCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkK
QEAgLTcyLDE0ICs5MiwxNiBAQCB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJz
KCkKIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKIHsKLSAgICBkZXN0cm95
V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBtX25hdGl2ZVJlc291cmNlLT5kZXN0cm95V2lu
ZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAg
ICBtX0NvbmZpZ0hlbHBlciA9IG51bGxwdHI7CiAgICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQog
CiAjZW5kaWYKIAogR0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcigpCi0gICAgOiBYMTFPZmZTY3JlZW5X
aW5kb3coKQorICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQogewogICAgIGluaXRpYWxpemUoKTsK
IH0KQEAgLTkwLDE4ICsxMTIsMTggQEAgR0xYUEJ1ZmZlcjo6fkdMWFBCdWZmZXIoKQogCiB2b2lk
IEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFy
ZWREaXNwbGF5KCk7Ci0gICAgR0xYRkJDb25maWcgY29uZmlnID0gbV9zaGFyZWRSZXNvdXJjZXMt
PnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gbV9uYXRpdmVS
ZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpOworICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9
IG1fQ29uZmlnSGVscGVyLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwogICAgIGlmICghY29uZmln
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihk
aXNwbGF5LCBjb25maWcsIHBidWZmZXJBdHRyaWJ1dGVzKTsKKyAgICBtX2RyYXdhYmxlID0gZ2xY
Q3JlYXRlUGJ1ZmZlcihtX3NoYXJlZERpc3BsYXksIGNvbmZpZywgcGJ1ZmZlckF0dHJpYnV0ZXMp
OwogICAgIG1fYnVmZmVySGFuZGxlID0gbV9kcmF3YWJsZTsKIH0KIAogUGxhdGZvcm1TdXJmYWNl
Q29uZmlnIEdMWFBCdWZmZXI6OmNvbmZpZ3VyYXRpb24oKQogewotICAgIHJldHVybiBtX3NoYXJl
ZFJlc291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKKyAgICByZXR1cm4gbV9Db25maWdI
ZWxwZXItPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CiB9CiAKIHZvaWQgR0xYUEJ1ZmZlcjo6ZGVz
dHJveSgpCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDBkODRjMzQuLjQ3MTNmNTkgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3Vy
ZmFjZS5oCkBAIC0yOCw0MiArMjgsNDQgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKEdMWCkKIAotI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNlcy5oIgotCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2Uu
aCIKKyNpbmNsdWRlICJHTFhDb25maWdIZWxwZXIuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNv
dXJjZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi1jbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIFgxMU9mZlNjcmVlbldpbmRv
dyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYVHJhbnNwb3J0U3VyZmFjZSk7CitjbGFz
cyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKIAogcHVi
bGljOgogICAgIEdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKICAgICB2aXJ0dWFsIH5HTFhUcmFuc3Bv
cnRTdXJmYWNlKCk7Ci0gICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsK
LSAgICB2b2lkIHN3YXBCdWZmZXJzKCk7Ci0gICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VD
b25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVm
ZmVycygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKIAog
cHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBPd25QdHI8WDExT2ZmU2NyZWVu
V2luZG93PiBtX25hdGl2ZVJlc291cmNlOworICAgIE93blB0cjxHTFhDb25maWdIZWxwZXI+IG1f
Q29uZmlnSGVscGVyOwogfTsKICNlbmRpZgogCi1jbGFzcyBHTFhQQnVmZmVyIDogcHVibGljIFgx
MU9mZlNjcmVlbldpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYUEJ1ZmZlcik7
CitjbGFzcyBHTFhQQnVmZmVyIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKIAogcHVibGlj
OgogICAgIEdMWFBCdWZmZXIoKTsKICAgICB2aXJ0dWFsIH5HTFhQQnVmZmVyKCk7Ci0gICAgUGxh
dGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKLSAgICB2b2lkIHNldEdlb21ldHJ5
KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIFBsYXRm
b3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpIE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgp
OwogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworICAgIE93blB0cjxYMTFPZmZTY3JlZW5XaW5k
b3c+IG1fbmF0aXZlUmVzb3VyY2U7CisgICAgT3duUHRyPEdMWENvbmZpZ0hlbHBlcj4gbV9Db25m
aWdIZWxwZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmY2MzOS4uMDAwMDAwMAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgR0xYV2luZG93UmVzb3VyY2VzX2gKLSNkZWZpbmUgR0xYV2luZG93UmVzb3VyY2VzX2gKLQot
I2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoR0xYKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNo
YXJlZEdMWFJlc291cmNlcyA6IHB1YmxpYyBTaGFyZWRYMTFSZXNvdXJjZXMgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNoYXJlZEdMWFJlc291cmNlcyk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRHTFhSZXNvdXJjZXM+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICBpZiAoIW1fc3RhdGljU2hhcmVkUmVzb3VyY2UpCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJl
ZFJlc291cmNlID0gbmV3IFNoYXJlZEdMWFJlc291cmNlcygpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKLQotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1E
aXNwbGF5IG5hdGl2ZURpc3BsYXkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNoYXJlZFgxMVJl
c291cmNlczo6eDExRGlzcGxheSgpOwotICAgIH0KLQotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJ
bmZvKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQotICAgICAgICAgICAgc3Vy
ZmFjZUNvbnRleHRDb25maWcoKTsKLQotICAgICAgICByZXR1cm4gbV9WaXN1YWxJbmZvOwotICAg
IH0KLQotICAgIHZpcnR1YWwgR0xYRkJDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX3BidWZmZXJmYkNvbmZpZykgewotICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAw
LAotICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCi0g
ICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKLSAgICAgICAg
ICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfR1JFRU5f
U0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKLSAgICAg
ICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgR0xfRkFMU0UsCi0gICAgICAgICAgICAgICAg
Tm9uZQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgaW50IG51bVJldHVybmVkOwotICAg
ICAgICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBnbFhDaG9vc2VGQkNvbmZpZyhuYXRpdmVEaXNw
bGF5KCksIERlZmF1bHRTY3JlZW4obmF0aXZlRGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJl
dHVybmVkKTsKLSAgICAgICAgICAgIGlmIChudW1SZXR1cm5lZCkKLSAgICAgICAgICAgICAgICBt
X3BidWZmZXJmYkNvbmZpZyA9IHRlbXBbMF07Ci0gICAgICAgICAgICBYRnJlZSh0ZW1wKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3BidWZmZXJmYkNvbmZpZzsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIEdMWEZCQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKSB7Ci0gICAgICAgICAgICBzdGF0aWMg
aW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCi0gICAg
ICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAotICAgICAgICAg
ICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgICAgICAgICAgICAg
R0xYX1JFRF9TSVpFLCAgICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAg
IDEsCi0gICAgICAgICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCi0gICAgICAgICAgICAg
ICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUs
ICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9S
LAotICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAotICAgICAgICAgICAg
ICAgIE5vbmUKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRm
YkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgU2hhcmVkR0xYUmVzb3VyY2VzKCkKLSAgICAgICAgOiBTaGFyZWRYMTFSZXNvdXJjZXMoKQot
ICAgICAgICAsIG1fcGJ1ZmZlcmZiQ29uZmlnKDApCi0gICAgICAgICwgbV9zdXJmYWNlQ29udGV4
dGZiQ29uZmlnKDApCi0gICAgICAgICwgbV9WaXN1YWxJbmZvKDApCi0gICAgewotICAgIH0KLQot
ICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQotICAg
IHsKLSAgICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwot
ICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG5hdGl2ZURpc3Bs
YXkoKSwgRGVmYXVsdFNjcmVlbihuYXRpdmVEaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0
dXJuZWQpOwotCi0gICAgICAgIGlmICghbnVtUmV0dXJuZWQpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLQotICAgICAgICBHTFhGQkNvbmZpZyBzZWxlY3RlZENvbmZpZyA9IDA7Ci0gICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJldHVy
bmVkOyArK2kpIHsKLSAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhuYXRpdmVEaXNwbGF5KCksIHRlbXBbaV0pOwotICAgICAgICAgICAgaWYgKCFtX1Zp
c3VhbEluZm8pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0jaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi0gICAgICAgICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pIHsKLSAg
ICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1
YWxGb3JtYXQobmF0aXZlRGlzcGxheSgpLCBtX1Zpc3VhbEluZm8tPnZpc3VhbCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKLSAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fVmlzdWFsSW5mby0+ZGVwdGgg
PT0gMzIpIHsKLSNlbHNlCi0gICAgICAgICAgICBpZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAz
MikgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOwot
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNl
bGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZpZy4KLSAgICAgICAgaWYgKCFmb3VuZCkgewot
ICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wWzBdOwotICAgICAgICAgICAgbV9WaXN1
YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKG1fZGlzcGxheSwgdGVtcFswXSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBYRnJlZSh0ZW1wKTsKLQotICAgICAgICByZXR1cm4gc2VsZWN0
ZWRDb25maWc7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+U2hhcmVkR0xYUmVzb3VyY2VzKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9kaXNwbGF5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmIChtX3BidWZmZXJmYkNvbmZpZykKLSAgICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmln
ID0gMDsKLQotICAgICAgICBpZiAobV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQotICAgICAgICAg
ICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gMDsKLQotICAgICAgICBpZiAobV9WaXN1YWxJ
bmZvKSB7Ci0gICAgICAgICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOwotICAgICAgICAgICAgbV9W
aXN1YWxJbmZvID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMWEZCQ29uZmlnIG1fcGJ1
ZmZlcmZiQ29uZmlnOwotICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsK
LSAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZvOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKaW5kZXggNThmNzU1OC4uNTQ1
M2Y0YSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcApAQCAtMjgsMjUgKzI4
LDE1IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpZiBVU0UoR0xY
KQotI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNlcy5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6
bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CitTaGFyZWRYMTFSZXNvdXJjZXMqIFNoYXJlZFgx
MVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CiAKIFgxMU9mZlNjcmVlbldp
bmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KCkKLSAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKLSAg
ICAsIG1fc2hhcmVkUmVzb3VyY2VzKDApCisgICAgOiBtX3NoYXJlZFJlc291cmNlcygwKQogICAg
ICwgbV9jb25maWdWaXN1YWxJbmZvKDApCiB7Ci0gICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBQbGF0
Zm9ybVNoYXJlZFJlc291cmNlczo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fc2hhcmVkUmVzb3Vy
Y2VzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJl
c291cmNlcy0+eDExRGlzcGxheSgpOworICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkWDEx
UmVzb3VyY2VzOjpjcmVhdGUoKTsKIH0KIAogWDExT2ZmU2NyZWVuV2luZG93Ojp+WDExT2ZmU2Ny
ZWVuV2luZG93KCkKQEAgLTU3LDEyICs0NywxMiBAQCBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFP
ZmZTY3JlZW5XaW5kb3coKQogICAgIH0KIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnJl
U2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiBuZXdSZWN0LCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3
aW5kb3dJZCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50
UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCiB7CiAgICAgWFJlc2l6ZVdp
bmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53
aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6
OmNyZWF0ZU9mZnNjcmVlbldpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSogaGFuZGxlSWQpCit2
b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KHVpbnQzMl90KiBo
YW5kbGVJZCkKIHsKICAgICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47
CkBAIC03MSwxNCArNjEsOCBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2Ny
ZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKiBoYW5kbGVJZCkKICAgICBpZiAoIWRpc3Bs
YXkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVTRShHTFgpCi0gICAgWFZpc3VhbEluZm8qIHZp
c0luZm8gPSBtX3NoYXJlZFJlc291cmNlcy0+dmlzdWFsSW5mbygpOwotI2Vsc2UKLSAgICBYVmlz
dWFsSW5mbyogdmlzSW5mbyA9IG1fY29uZmlnVmlzdWFsSW5mbzsKLSNlbmRpZgotCi0gICAgaWYg
KCF2aXNJbmZvKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZp
c3VhbCIpOworICAgIGlmICghbV9jb25maWdWaXN1YWxJbmZvKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtODYsMzUgKzcwLDMzIEBAIHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVP
ZmZzY3JlZW5XaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUqIGhhbmRsZUlkKQogICAgIGlmICgh
eFdpbmRvdykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVD
b2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7Cisg
ICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCBtX2Nv
bmZpZ1Zpc3VhbEluZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsKICAgICBYU2V0V2luZG93QXR0cmli
dXRlcyBhdHRyaWJ1dGU7CiAgICAgYXR0cmlidXRlLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBp
eGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVs
KGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNtYXA7Ci0gICAgUGxhdGZv
cm1CdWZmZXJIYW5kbGUgdGVtcEhhbmRsZUlkOwotICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVX
aW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElu
cHV0T3V0cHV0LCB2aXNJbmZvLT52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8
IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKKyAg
ICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIDEs
IDEsIDAsIG1fY29uZmlnVmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCBtX2NvbmZpZ1Zp
c3VhbEluZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1h
cCwgJmF0dHJpYnV0ZSk7CiAKICAgICBpZiAoIXRlbXBIYW5kbGVJZCkgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdpbmRvdyIpOworICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdpbmRvdy4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIHRl
bXBIYW5kbGVJZCwgMCk7CiAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIHRl
bXBIYW5kbGVJZCwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOwogICAgICpoYW5kbGVJZCA9IHRl
bXBIYW5kbGVJZDsKLSAgICBtX2J1ZmZlckhhbmRsZSA9IHRlbXBIYW5kbGVJZDsKIAogICAgIGlm
IChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpCiAgICAg
ICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkKTsKIAogfQogCi12b2lkIFgxMU9m
ZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJ
ZCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90
IHdpbmRvd0lkKQogewogICAgIGlmICghd2luZG93SWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CiAgICAgRGlzcGxheSogZGlzcGxheSA9IG1f
c2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7CiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAg
ICByZXR1cm47CkBAIC0xMjIsNyArMTA0LDcgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRl
c3Ryb3lXaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUgd2luZG93SWQpCiAgICAgWERlc3Ryb3lX
aW5kb3coZGlzcGxheSwgd2luZG93SWQpOwogfQogCi1EaXNwbGF5KiBYMTFPZmZTY3JlZW5XaW5k
b3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKQorRGlzcGxheSogWDExT2ZmU2NyZWVuV2luZG93Ojpu
YXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJj
ZXMtPngxMURpc3BsYXkoKTsKIH0KQEAgLTE4MSw2ICsxNjMsMTYgQEAgYm9vbCBYMTFPZmZTY3Jl
ZW5XaW5kb3c6OnNldFZpc3VhbElkKGNvbnN0IEVHTGludCBpZCkKIH0KICNlbmRpZgogCit2b2lk
IFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0VmlzdWFsSW5mbyhYVmlzdWFsSW5mbyogdmlzSW5mbykK
K3sKKyAgICBtX2NvbmZpZ1Zpc3VhbEluZm8gPSB2aXNJbmZvOworfQorCitib29sIFgxMU9mZlNj
cmVlbldpbmRvdzo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOwor
fQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKaW5kZXggOWMw
ODBjMy4uYTM5ODY1ZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCkBAIC0yOCw0
MSArMjgsMzMgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1
ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVk
ZSA8b3BlbmdsL0dMRGVmcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQogI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3Np
dGUuaD4KICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CiAjZW5kaWYKIAotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVTRShHTFgpCi1jbGFzcyBTaGFyZWRHTFhSZXNv
dXJjZXM7Ci10eXBlZGVmIFNoYXJlZEdMWFJlc291cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNl
czsKLSNlbGlmIFVTRShFR0wpCi1jbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXM7Ci10eXBlZGVmIFNo
YXJlZFgxMVJlc291cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKLSNlbmRpZgotCiBjbGFz
cyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKIAogcHVibGljOgotI2lm
IFVTRShFR0wpCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM+
IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBjcmVh
dGUoKQogICAgIHsKICAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQotICAgICAg
ICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBQbGF0Zm9ybVNoYXJlZFJlc291cmNl
cygpOworICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFS
ZXNvdXJjZXMoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNv
dXJjZS0+cmVmKCk7CiAKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVz
b3VyY2UpOwogICAgIH0KLSNlbmRpZgogCiAgICAgdm9pZCBkZXJlZigpCiAgICAgewpAQCAtMTAz
LDcgKzk1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93
KTsKIAogICAgICAgICAgICAgaWYgKCFtX3dpbmRvdykgewotICAgICAgICAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBTaW1wbGVXaW5kb3ciKTsKKyAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHJvb3Qgd2luZG93LiIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTEs
NyArMTAzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV93aW5kb3c7CiAgICAgfQogCi0g
ICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKQorICAgIGJvb2wgaXNYUmVuZGVy
RXh0ZW5zaW9uU3VwcG9ydGVkKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N1cHBv
cnRzWFJlbmRlckV4dGVuc2lvbjsKICAgICB9CkBAIC0xMzksMjggKzEzMSwzMCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIG1fZGlzcGxheSA9IDA7CiAgICAgfQogCi0gICAgc3RhdGljIFBsYXRmb3Jt
U2hhcmVkUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJlc291cmNlOworICAgIHN0YXRpYyBTaGFy
ZWRYMTFSZXNvdXJjZXMqIG1fc3RhdGljU2hhcmVkUmVzb3VyY2U7CiAgICAgYm9vbCBtX3N1cHBv
cnRzWFJlbmRlckV4dGVuc2lvbjsKICAgICBXaW5kb3cgbV93aW5kb3c7CiAgICAgRGlzcGxheSog
bV9kaXNwbGF5OwogfTsKIAotY2xhc3MgWDExT2ZmU2NyZWVuV2luZG93IDogcHVibGljIEdMUGxh
dGZvcm1TdXJmYWNlIHsKK2NsYXNzIFgxMU9mZlNjcmVlbldpbmRvdyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoWDExT2ZmU2NyZWVuV2luZG93KTsKIAogcHVibGljOgogICAgIFgxMU9mZlNj
cmVlbldpbmRvdygpOwogICAgIHZpcnR1YWwgflgxMU9mZlNjcmVlbldpbmRvdygpOwotICAgIHZv
aWQgY3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKik7Ci0gICAgdm9p
ZCBkZXN0cm95V2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKTsKLSAgICB2b2lkIHJlU2l6ZVdp
bmRvdyhjb25zdCBJbnRSZWN0JiwgUGxhdGZvcm1CdWZmZXJIYW5kbGUpOwotICAgIERpc3BsYXkq
IG5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKKyAgICB2b2lkIGNyZWF0ZU9mZnNjcmVlbldpbmRvdyh1
aW50MzJfdCopOworICAgIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCk7CisgICAg
dm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYsIGNvbnN0IHVpbnQzMl90KTsKKyAgICBE
aXNwbGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3Q7CiAjaWYgVVNFKEVHTCkKICAgICBi
b29sIHNldFZpc3VhbElkKGNvbnN0IEVHTGludCk7CiAjZW5kaWYKKyAgICB2b2lkIHNldFZpc3Vh
bEluZm8oWFZpc3VhbEluZm8qKTsKKyAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCgpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPFBsYXRmb3JtU2hhcmVkUmVzb3Vy
Y2VzPiBtX3NoYXJlZFJlc291cmNlczsKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNoYXJlZFgxMVJl
c291cmNlcz4gbV9zaGFyZWRSZXNvdXJjZXM7CiAgICAgWFZpc3VhbEluZm8qIG1fY29uZmlnVmlz
dWFsSW5mbzsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180865</attachid>
            <date>2012-12-28 05:27:42 -0800</date>
            <delta_ts>2012-12-29 07:50:37 -0800</delta_ts>
            <desc>patchv2</desc>
            <filename>glxrefactor.patch</filename>
            <type>text/plain</type>
            <size>28485</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDFlMzc3MWYuLjI4OGYwNzggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEy
LTEyLTI4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXZWJHTF0gUmVmYWN0b3IgR0xYSW1wbGVtZW50YXRpb24uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4MjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRl
Y291cGxlcyBuYXRpdmUgd2luZG93IG1hbmFnZW1lbnQgYW5kIGxvZ2ljIHRvIGZpbmQgc3VyZmFj
ZSBjb25maWd1cmF0aW9uIGluIEdMWCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnSGVscGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdMWENvbmZpZ0hlbHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpHTFhDb25maWdIZWxwZXI6OkdMWENvbmZpZ0hlbHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdIZWxwZXI6On5HTFhDb25maWdIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xYQ29uZmlnSGVscGVyOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
WENvbmZpZ0hlbHBlcjo6cEJ1ZmZlckNvbnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6
R0xYQ29uZmlnSGVscGVyOjpzdXJmYWNlQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHTFhDb25maWdIZWxwZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ0hl
bHBlcjo6Y3JlYXRlQ29uZmlnKToKKworICAgICAgICBIZWxwZXIgY2xhc3MgdG8gZmluZCBzdXJm
YWNlIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29udGV4dC5oOgorICAgICAgICAoR0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYUEJ1ZmZlcjo6R0xYUEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHTFhQ
QnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OmNvbmZp
Z3VyYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmg6CisgICAgICAgIChHTFhUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKEdMWFBC
dWZmZXIpOgorCisgICAgICAgIEluaGVyaXRhbmNlIGNoYW5nZWQgZnJvbSBYMTFPZmZTY3JlZW5X
aW5kb3cgdG8gR0xQbGF0Zm9ybVN1cmZhY2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpYMTFPZmZTY3JlZW5XaW5k
b3cpOgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6bmF0aXZlU2hhcmVk
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpYMTFPZmZTY3JlZW5XaW5kb3c6OnNldFZpc3Vh
bEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6WDExT2ZmU2NyZWVuV2luZG93Ojppc1hSZW5kZXJF
eHRlbnNpb25TdXBwb3J0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFgxMVJl
c291cmNlczo6Y3JlYXRlKToKKyAgICAgICAgKFNoYXJlZFgxMVJlc291cmNlcyk6CisgICAgICAg
IChYMTFPZmZTY3JlZW5XaW5kb3cpOgorCisgICAgICAgICBSZW1vdmVkIGNvZGUgcmVsYXRlZCB0
byBzdXJmYWNlIGNvbmZpZ2lyYXRpb24uCisKIDIwMTItMTItMjcgIEtvbmRhcGFsbHkgS2FseWFu
ICA8a2FseWFuLmtvbmRhcGFsbHlAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dlYkdMXSBB
ZGQgc3VwcG9ydCBmb3IgR0xFUzIgaW4gR3JhcGhpY3NDb250ZXh0M0RFZmwuCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAppbmRleCA1NmVhYjVlLi42
NTlkMjQ5IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMRGVmcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xE
ZWZzLmgKQEAgLTQxLDcgKzQxLDkgQEAKICNpbmNsdWRlIDxHTC9nbC5oPgogI2luY2x1ZGUgPEdM
L2dsZXh0Lmg+CiAjaWYgVVNFKEdMWCkKKyNkZWZpbmUgR0xYX0dMWEVYVF9QUk9UT1RZUEVTIDEK
ICNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRlIDxHTC9nbHhleHQuaD4KICNlbmRpZgogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29uZmlnSGVscGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbmZpZ0hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjE4ZTQyOTUKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ0hlbHBlci5oCkBAIC0wLDAgKzEsMTY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMWENvbmZpZ0hlbHBlcl9oCisjZGVm
aW5lIEdMWENvbmZpZ0hlbHBlcl9oCisKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKEdMWCkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHTFhDb25maWdIZWxwZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEdMWENvbmZpZ0hlbHBlcik7CisKK3B1YmxpYzoKKyAgICBHTFhDb25maWdIZWxw
ZXIoRGlzcGxheSogeERpc3BsYXksIGJvb2wgc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKQorICAg
ICAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDApCisgICAgICAgICwgbV9zdXJmYWNlQ29udGV4dEZC
Q29uZmlnKDApCisgICAgICAgICwgbV9WaXN1YWxJbmZvKDApCisgICAgICAgICwgbV9zaGFyZWRE
aXNwbGF5KHhEaXNwbGF5KQorICAgICAgICAsIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKHN1
cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R0xY
Q29uZmlnSGVscGVyKCkKKyAgICB7CisgICAgICAgIHJlc2V0KCk7CisgICAgfQorCisgICAgWFZp
c3VhbEluZm8qIHZpc3VhbEluZm8oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fVmlz
dWFsSW5mbzsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygp
CisgICAgeworICAgICAgICBpZiAoIW1fcGJ1ZmZlckZCQ29uZmlnKSB7CisgICAgICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVW
RUwsIDAsCisgICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJ
VCwKKyAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAorICAg
ICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9H
UkVFTl9TSVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAor
ICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKKyAgICAgICAgICAg
ICAgICBOb25lCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7
CisgICAgICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG1fc2hh
cmVkRGlzcGxheSwgRGVmYXVsdFNjcmVlbihtX3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAm
bnVtUmV0dXJuZWQpOworICAgICAgICAgICAgaWYgKG51bVJldHVybmVkKQorICAgICAgICAgICAg
ICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIFhGcmVlKHRlbXAp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fcGJ1ZmZlckZCQ29uZmlnOworICAgIH0K
KworICAgIEdMWEZCQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAg
IGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKSB7CisgICAgICAgICAgICBzdGF0aWMgaW50
IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAgICAgICBHTFhfTEVWRUwsIDAsCisgICAgICAg
ICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAorICAgICAgICAgICAg
ICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCisgICAgICAgICAgICAgICAgR0xY
X1JFRF9TSVpFLCAgICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEs
CisgICAgICAgICAgICAgICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCisgICAgICAgICAgICAgICAg
R0xYX0FMUEhBX1NJWkUsICAgIDEsCisgICAgICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUsICAg
IDEsCisgICAgICAgICAgICAgICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAor
ICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAorICAgICAgICAgICAgICAg
IE5vbmUKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNv
bmZpZyA9IGNyZWF0ZUNvbmZpZyhhdHRyaWJ1dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBtX3N1cmZhY2VDb250ZXh0RkJDb25maWc7CisgICAgfQorCisgICAgdm9pZCByZXNldCgp
CisgICAgeworICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IDA7CisgICAgICAgIG1fc3VyZmFj
ZUNvbnRleHRGQkNvbmZpZyA9IDA7CisgICAgfQorCitwcml2YXRlOgorICAgIEdMWEZCQ29uZmln
IGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQorICAgIHsKKyAgICAgICAgaW50
IG51bVJldHVybmVkOworICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOworICAgICAgICBHTFhGQkNv
bmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNj
cmVlbihtX3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOworCisgICAg
ICAgIGlmICghbnVtUmV0dXJuZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBH
TFhGQkNvbmZpZyBzZWxlY3RlZENvbmZpZyA9IDA7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJldHVybmVkOyArK2kpIHsKKyAg
ICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJl
ZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAg
ICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pIHsKKyAgICAgICAgICAgICAgICBY
UmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobV9zaGFy
ZWREaXNwbGF5LCBtX1Zpc3VhbEluZm8tPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZv
cm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKKyNlbHNl
CisgICAgICAgICAgICBpZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworI2VuZGlmCisg
ICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOworICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERp
ZCBub3QgZmluZCBhbnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3Qg
YXZhaWxhYmxlIGNvbmZpZy4KKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgc2Vs
ZWN0ZWRDb25maWcgPSB0ZW1wWzBdOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0
VmlzdWFsRnJvbUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgdGVtcFswXSk7CisgICAgICAgIH0K
KworICAgICAgICBYRnJlZSh0ZW1wKTsKKworICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7
CisgICAgfQorCisgICAgR0xYRkJDb25maWcgbV9wYnVmZmVyRkJDb25maWc7CisgICAgR0xYRkJD
b25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOworICAgIFhWaXN1YWxJbmZvKiBtX1Zpc3Vh
bEluZm87CisgICAgRGlzcGxheSogbV9zaGFyZWREaXNwbGF5OworICAgIGJvb2wgbV9zdXBwb3J0
c1hSZW5kZXJFeHRlbnNpb247Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4
dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250
ZXh0LmgKaW5kZXggNDNhNTJkYy4uNzc1MDJmMCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKQEAgLTMzLDcg
KzMzLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR0xYQ3VycmVudENvbnRleHRX
cmFwcGVyIDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIpOwogCiBwdWJsaWM6CiAgICAgR0xYQ3VycmVu
dENvbnRleHRXcmFwcGVyKCkKQEAgLTQ2LDE2ICs0NSwxNSBAQCBwdWJsaWM6CiB9OwogCiBjbGFz
cyBHTFhPZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHTFhPZmZTY3JlZW5Db250ZXh0KTsKIAogcHVibGljOgogICAg
IEdMWE9mZlNjcmVlbkNvbnRleHQoKTsKICAgICB2aXJ0dWFsIH5HTFhPZmZTY3JlZW5Db250ZXh0
KCk7Ci0gICAgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKik7Ci0gICAgYm9vbCBw
bGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bVJlbGVhc2VDdXJyZW50KCk7Ci0gICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgYm9vbCBpc0N1cnJl
bnRDb250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9y
bVN1cmZhY2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVu
dChHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bVJlbGVhc2VDdXJyZW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0IE9WRVJS
SURFOwogCiBwcml2YXRlOgogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNw
cCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5jcHAKaW5kZXggYzljZDhkMi4uMzRiMmVhNyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCkBAIC0z
NCw5ICszNCwyOSBAQCBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdM
WF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSAogCiAjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCiBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKLSAg
ICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCisgICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgpCiB7Ci0g
ICAgY3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSk7CisgICAgbV9uYXRpdmVS
ZXNvdXJjZSA9IGFkb3B0UHRyKG5ldyBYMTFPZmZTY3JlZW5XaW5kb3coKSk7CisgICAgbV9zaGFy
ZWREaXNwbGF5ID0gbV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpOworICAg
IGlmICghbV9zaGFyZWREaXNwbGF5KQorICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0
cjsKKworICAgIG1fY29uZmlnSGVscGVyID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ0hlbHBlciht
X3NoYXJlZERpc3BsYXksIG1fbmF0aXZlUmVzb3VyY2UtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBv
cnRlZCgpKSk7CisKKyAgICBpZiAoIWNvbmZpZ3VyYXRpb24oKSkgeworICAgICAgICBtX25hdGl2
ZVJlc291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgbV9jb25maWdIZWxwZXIgPSBudWxscHRyOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9uYXRpdmVSZXNvdXJjZS0+c2V0VmlzdWFs
SW5mbyhtX2NvbmZpZ0hlbHBlci0+dmlzdWFsSW5mbygpKTsKKyAgICBtX25hdGl2ZVJlc291cmNl
LT5jcmVhdGVPZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlKTsKKworICAgIGlmICghbV9i
dWZmZXJIYW5kbGUpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgbV9kcmF3YWJsZSA9IG1fYnVmZmVySGFuZGxlOwogfQogCkBAIC00NiwxMyArNjYs
MTMgQEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogCiBQbGF0
Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB7
Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwor
ICAgIHJldHVybiBtX2NvbmZpZ0hlbHBlci0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKIH0KIAog
dm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KQogewogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsKLSAg
ICByZVNpemVXaW5kb3cobmV3UmVjdCwgbV9kcmF3YWJsZSk7CisgICAgbV9uYXRpdmVSZXNvdXJj
ZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1fZHJhd2FibGUpOwogfQogCiB2b2lkIEdMWFRyYW5z
cG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKQEAgLTcyLDE0ICs5MiwxNiBAQCB2b2lkIEdMWFRy
YW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNl
OjpkZXN0cm95KCkKIHsKLSAgICBkZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBt
X25hdGl2ZVJlc291cmNlLT5kZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBtX25h
dGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAgICBtX2NvbmZpZ0hlbHBlciA9IG51bGxwdHI7CiAg
ICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQogCiAjZW5kaWYKIAogR0xYUEJ1ZmZlcjo6R0xYUEJ1
ZmZlcigpCi0gICAgOiBYMTFPZmZTY3JlZW5XaW5kb3coKQorICAgIDogR0xQbGF0Zm9ybVN1cmZh
Y2UoKQogewogICAgIGluaXRpYWxpemUoKTsKIH0KQEAgLTkwLDE4ICsxMTIsMTggQEAgR0xYUEJ1
ZmZlcjo6fkdMWFBCdWZmZXIoKQogCiB2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewot
ICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7Ci0gICAgR0xYRkJDb25maWcg
Y29uZmlnID0gbV9zaGFyZWRSZXNvdXJjZXMtPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAg
bV9zaGFyZWREaXNwbGF5ID0gbV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgp
OworICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmlnSGVscGVyLT5wQnVmZmVyQ29udGV4
dENvbmZpZygpOwogICAgIGlmICghY29uZmlnKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Ry
YXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihkaXNwbGF5LCBjb25maWcsIHBidWZmZXJBdHRyaWJ1
dGVzKTsKKyAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlcihtX3NoYXJlZERpc3BsYXks
IGNvbmZpZywgcGJ1ZmZlckF0dHJpYnV0ZXMpOwogICAgIG1fYnVmZmVySGFuZGxlID0gbV9kcmF3
YWJsZTsKIH0KIAogUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFBCdWZmZXI6OmNvbmZpZ3VyYXRp
b24oKQogewotICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25m
aWcoKTsKKyAgICByZXR1cm4gbV9jb25maWdIZWxwZXItPnBCdWZmZXJDb250ZXh0Q29uZmlnKCk7
CiB9CiAKIHZvaWQgR0xYUEJ1ZmZlcjo6ZGVzdHJveSgpCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDBk
ODRjMzQuLjhkMjdjZWEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC0yOCw0MiArMjgsNDQgQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKEdMWCkKIAotI2luY2x1ZGUg
IkdMWFdpbmRvd1Jlc291cmNlcy5oIgotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKKyNpbmNsdWRlICJHTFhDb25maWdIZWxwZXIu
aCIKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi1jbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNl
IDogcHVibGljIFgxMU9mZlNjcmVlbldpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R0xYVHJhbnNwb3J0U3VyZmFjZSk7CitjbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGlj
IEdMUGxhdGZvcm1TdXJmYWNlIHsKIAogcHVibGljOgogICAgIEdMWFRyYW5zcG9ydFN1cmZhY2Uo
KTsKICAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJmYWNlKCk7Ci0gICAgUGxhdGZvcm1TdXJm
YWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzKCk7Ci0gICAg
dm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBkZXN0cm95KCk7Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUo
KTsKKyAgICBPd25QdHI8WDExT2ZmU2NyZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNlOworICAg
IE93blB0cjxHTFhDb25maWdIZWxwZXI+IG1fY29uZmlnSGVscGVyOwogfTsKICNlbmRpZgogCi1j
bGFzcyBHTFhQQnVmZmVyIDogcHVibGljIFgxMU9mZlNjcmVlbldpbmRvdyB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoR0xYUEJ1ZmZlcik7CitjbGFzcyBHTFhQQnVmZmVyIDogcHVibGljIEdM
UGxhdGZvcm1TdXJmYWNlIHsKIAogcHVibGljOgogICAgIEdMWFBCdWZmZXIoKTsKICAgICB2aXJ0
dWFsIH5HTFhQQnVmZmVyKCk7Ci0gICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRp
b24oKTsKLSAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRl
c3Ryb3koKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9u
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3Qm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURFOwogCiBwcml2
YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwor
ICAgIE93blB0cjxYMTFPZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CisgICAgT3du
UHRyPEdMWENvbmZpZ0hlbHBlcj4gbV9jb25maWdIZWxwZXI7CiB9OwogCiB9CmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jl
c291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhXaW5kb3dSZXNvdXJjZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmY2Mz
OS4uMDAwMDAwMAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR0xYV2luZG93UmVzb3VyY2VzX2gKLSNkZWZp
bmUgR0xYV2luZG93UmVzb3VyY2VzX2gKLQotI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5o
IgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoR0xYKQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZEdMWFJlc291cmNlcyA6IHB1YmxpYyBTaGFy
ZWRYMTFSZXNvdXJjZXMgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZEdMWFJlc291
cmNlcyk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTFhSZXNvdXJj
ZXM+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkUmVzb3VyY2Up
Ci0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3IFNoYXJlZEdMWFJlc291
cmNlcygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNl
LT5yZWYoKTsKLQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJj
ZSk7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1EaXNwbGF5IG5hdGl2ZURpc3BsYXkoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFNoYXJlZFgxMVJlc291cmNlczo6eDExRGlzcGxheSgpOwotICAgIH0K
LQotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9W
aXN1YWxJbmZvKQotICAgICAgICAgICAgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKLQotICAgICAg
ICByZXR1cm4gbV9WaXN1YWxJbmZvOwotICAgIH0KLQotICAgIHZpcnR1YWwgR0xYRkJDb25maWcg
cEJ1ZmZlckNvbnRleHRDb25maWcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3BidWZmZXJmYkNv
bmZpZykgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7Ci0g
ICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAotICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJM
RV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCi0gICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBF
LCAgIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwK
LSAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBH
TFhfQkxVRV9TSVpFLCAgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAg
R0xfRkFMU0UsCi0gICAgICAgICAgICAgICAgTm9uZQotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICAgICAgR0xYRkJDb25maWcqIHRlbXAgPSBn
bFhDaG9vc2VGQkNvbmZpZyhuYXRpdmVEaXNwbGF5KCksIERlZmF1bHRTY3JlZW4obmF0aXZlRGlz
cGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKLSAgICAgICAgICAgIGlmIChudW1S
ZXR1cm5lZCkKLSAgICAgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IHRlbXBbMF07Ci0g
ICAgICAgICAgICBYRnJlZSh0ZW1wKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3Bi
dWZmZXJmYkNvbmZpZzsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIEdMWEZCQ29uZmlnIHN1cmZhY2VD
b250ZXh0Q29uZmlnKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dGZiQ29u
ZmlnKSB7Ci0gICAgICAgICAgICBzdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAg
ICAgICAgICBHTFhfTEVWRUwsIDAsCi0gICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUs
IEdMWF9XSU5ET1dfQklULAotICAgICAgICAgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhf
UkdCQV9CSVQsCi0gICAgICAgICAgICAgICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0JMVUVf
U0laRSwgICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCi0gICAg
ICAgICAgICAgICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0gICAgICAgICAgICAgICAgR0xYX1hf
VklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVC
VUZGRVIsICBUcnVlLAotICAgICAgICAgICAgICAgIE5vbmUKLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhhdHRyaWJ1
dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3N1cmZhY2VDb250ZXh0ZmJDb25m
aWc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU2hhcmVkR0xYUmVzb3VyY2VzKCkKLSAgICAg
ICAgOiBTaGFyZWRYMTFSZXNvdXJjZXMoKQotICAgICAgICAsIG1fcGJ1ZmZlcmZiQ29uZmlnKDAp
Ci0gICAgICAgICwgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKDApCi0gICAgICAgICwgbV9WaXN1
YWxJbmZvKDApCi0gICAgewotICAgIH0KLQotICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZpZyhj
b25zdCBpbnQgYXR0cmlidXRlc1tdKQotICAgIHsKLSAgICAgICAgaW50IG51bVJldHVybmVkOwot
ICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwotICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGds
WENob29zZUZCQ29uZmlnKG5hdGl2ZURpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihuYXRpdmVEaXNw
bGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOwotCi0gICAgICAgIGlmICghbnVtUmV0
dXJuZWQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBHTFhGQkNvbmZpZyBzZWxl
Y3RlZENvbmZpZyA9IDA7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bVJldHVybmVkOyArK2kpIHsKLSAgICAgICAgICAgIG1fVmlz
dWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhuYXRpdmVEaXNwbGF5KCksIHRlbXBb
aV0pOwotICAgICAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgICAgICAgICBpZiAobV9zdXBw
b3J0c1hSZW5kZXJFeHRlbnNpb24pIHsKLSAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1h
dCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobmF0aXZlRGlzcGxheSgpLCBtX1Zp
c3VhbEluZm8tPnZpc3VhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQt
PmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29u
ZmlnID0gdGVtcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKLSNlbHNlCi0gICAgICAgICAgICBp
ZiAobV9WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgewotI2VuZGlmCi0gICAgICAgICAgICAgICAg
c2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkg
dmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZp
Zy4KLSAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0
ZW1wWzBdOwotICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29u
ZmlnKG1fZGlzcGxheSwgdGVtcFswXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBYRnJlZSh0ZW1w
KTsKLQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB+U2hhcmVkR0xYUmVzb3VyY2VzKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaXNwbGF5KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX3BidWZmZXJmYkNvbmZpZykKLSAg
ICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gMDsKLQotICAgICAgICBpZiAobV9zdXJmYWNl
Q29udGV4dGZiQ29uZmlnKQotICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0g
MDsKLQotICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7Ci0gICAgICAgICAgICBYRnJlZShtX1Zp
c3VhbEluZm8pOwotICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlcmZiQ29uZmlnOwotICAgIEdMWEZCQ29uZmln
IG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKLSAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZv
OwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291
cmNlcy5jcHAKaW5kZXggNThmNzU1OC4uNTQ1M2Y0YSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93
UmVzb3VyY2VzLmNwcApAQCAtMjgsMjUgKzI4LDE1IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAKLSNpZiBVU0UoR0xYKQotI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNl
cy5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGxhdGZvcm1TaGFyZWRSZXNv
dXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CitT
aGFyZWRYMTFSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNv
dXJjZSA9IDA7CiAKIFgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KCkKLSAg
ICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKLSAgICAsIG1fc2hhcmVkUmVzb3VyY2VzKDApCisgICAg
OiBtX3NoYXJlZFJlc291cmNlcygwKQogICAgICwgbV9jb25maWdWaXN1YWxJbmZvKDApCiB7Ci0g
ICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczo6Y3JlYXRlKCk7
Ci0KLSAgICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpOworICAgIG1f
c2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkWDExUmVzb3VyY2VzOjpjcmVhdGUoKTsKIH0KIAogWDEx
T2ZmU2NyZWVuV2luZG93Ojp+WDExT2ZmU2NyZWVuV2luZG93KCkKQEAgLTU3LDEyICs0NywxMiBA
QCBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5XaW5kb3coKQogICAgIH0KIH0KIAot
dm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnJlU2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0LCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJZCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2lu
ZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qg
d2luZG93SWQpCiB7CiAgICAgWFJlc2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlz
cGxheSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKIH0K
IAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdyhQbGF0Zm9y
bUJ1ZmZlckhhbmRsZSogaGFuZGxlSWQpCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRl
T2Zmc2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCkKIHsKICAgICBpZiAoIW1fc2hhcmVk
UmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CkBAIC03MSwxNCArNjEsOCBAQCB2b2lkIFgxMU9m
ZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxl
KiBoYW5kbGVJZCkKICAgICBpZiAoIWRpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVT
RShHTFgpCi0gICAgWFZpc3VhbEluZm8qIHZpc0luZm8gPSBtX3NoYXJlZFJlc291cmNlcy0+dmlz
dWFsSW5mbygpOwotI2Vsc2UKLSAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IG1fY29uZmlnVmlz
dWFsSW5mbzsKLSNlbmRpZgotCi0gICAgaWYgKCF2aXNJbmZvKSB7Ci0gICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbCIpOworICAgIGlmICghbV9jb25maWdWaXN1
YWxJbmZvKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3Vh
bC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODYsMzUgKzcwLDMzIEBAIHZvaWQg
WDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3coUGxhdGZvcm1CdWZmZXJI
YW5kbGUqIGhhbmRsZUlkKQogICAgIGlmICgheFdpbmRvdykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJ
bmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7CisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xv
cm1hcChkaXNwbGF5LCB4V2luZG93LCBtX2NvbmZpZ1Zpc3VhbEluZm8tPnZpc3VhbCwgQWxsb2NO
b25lKTsKICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7CiAgICAgYXR0cmlidXRl
LmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0
ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5j
b2xvcm1hcCA9IGNtYXA7Ci0gICAgUGxhdGZvcm1CdWZmZXJIYW5kbGUgdGVtcEhhbmRsZUlkOwot
ICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwg
MSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXNJbmZvLT52aXN1YWwsIENX
QmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworICAg
IHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKKyAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93
KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIDEsIDEsIDAsIG1fY29uZmlnVmlzdWFsSW5mby0+ZGVw
dGgsIElucHV0T3V0cHV0LCBtX2NvbmZpZ1Zpc3VhbEluZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwg
fCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7CiAKICAgICBpZiAoIXRl
bXBIYW5kbGVJZCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2Ny
ZWVuIHdpbmRvdyIpOworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2Ny
ZWVuIHdpbmRvdy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFhTZXRXaW5kb3dC
YWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIHRlbXBIYW5kbGVJZCwgMCk7CiAgICAgWENvbXBvc2l0
ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCwgQ29tcG9zaXRlUmVkaXJlY3RN
YW51YWwpOwogICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKLSAgICBtX2J1ZmZlckhhbmRs
ZSA9IHRlbXBIYW5kbGVJZDsKIAogICAgIGlmIChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVy
RXh0ZW5zaW9uU3VwcG9ydGVkKCkpCiAgICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhh
bmRsZUlkKTsKIAogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhQ
bGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJZCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93Ojpk
ZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90IHdpbmRvd0lkKQogewogICAgIGlmICghd2luZG93
SWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7
CiAgICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7
CiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm47CkBAIC0xMjIsNyArMTA0LDcgQEAg
dm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5k
bGUgd2luZG93SWQpCiAgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgd2luZG93SWQpOwogfQog
Ci1EaXNwbGF5KiBYMTFPZmZTY3JlZW5XaW5kb3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKQorRGlz
cGxheSogWDExT2ZmU2NyZWVuV2luZG93OjpuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKIH0KQEAgLTE4MSw2
ICsxNjMsMTYgQEAgYm9vbCBYMTFPZmZTY3JlZW5XaW5kb3c6OnNldFZpc3VhbElkKGNvbnN0IEVH
TGludCBpZCkKIH0KICNlbmRpZgogCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0VmlzdWFs
SW5mbyhYVmlzdWFsSW5mbyogdmlzSW5mbykKK3sKKyAgICBtX2NvbmZpZ1Zpc3VhbEluZm8gPSB2
aXNJbmZvOworfQorCitib29sIFgxMU9mZlNjcmVlbldpbmRvdzo6aXNYUmVuZGVyRXh0ZW5zaW9u
U3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJl
bmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmgKaW5kZXggOWMwODBjMy4uYTM5ODY1ZCAxMDA2NDQKLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJj
ZXMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gx
MVdpbmRvd1Jlc291cmNlcy5oCkBAIC0yOCw0MSArMjgsMzMgQEAKIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogI2luY2x1
ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9u
cy9YcmVuZGVyLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFVT
RShHTFgpCi1jbGFzcyBTaGFyZWRHTFhSZXNvdXJjZXM7Ci10eXBlZGVmIFNoYXJlZEdMWFJlc291
cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKLSNlbGlmIFVTRShFR0wpCi1jbGFzcyBTaGFy
ZWRYMTFSZXNvdXJjZXM7Ci10eXBlZGVmIFNoYXJlZFgxMVJlc291cmNlcyBQbGF0Zm9ybVNoYXJl
ZFJlc291cmNlczsKLSNlbmRpZgotCiBjbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMg
V1RGOjpSZWZDb3VudGVkQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkWDEx
UmVzb3VyY2VzKTsKIAogcHVibGljOgotI2lmIFVTRShFR0wpCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVkWDExUmVzb3VyY2VzPiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgaWYgKCFtX3N0
YXRpY1NoYXJlZFJlc291cmNlKQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9
IG5ldyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlcygpOworICAgICAgICAgICAgbV9zdGF0aWNTaGFy
ZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFSZXNvdXJjZXMoKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7CiAKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOwogICAgIH0KLSNlbmRpZgogCiAgICAg
dm9pZCBkZXJlZigpCiAgICAgewpAQCAtMTAzLDcgKzk1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93KTsKIAogICAgICAgICAgICAgaWYgKCFtX3dpbmRv
dykgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBTaW1wbGVX
aW5kb3ciKTsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zm
c2NyZWVuIHJvb3Qgd2luZG93LiIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xMTEsNyArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV93aW5kb3c7CiAgICAgfQogCi0gICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBw
b3J0ZWQoKQorICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKICAgICB9CkBA
IC0xMzksMjggKzEzMSwzMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fZGlzcGxheSA9IDA7CiAg
ICAgfQogCi0gICAgc3RhdGljIFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJl
ZFJlc291cmNlOworICAgIHN0YXRpYyBTaGFyZWRYMTFSZXNvdXJjZXMqIG1fc3RhdGljU2hhcmVk
UmVzb3VyY2U7CiAgICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKICAgICBXaW5k
b3cgbV93aW5kb3c7CiAgICAgRGlzcGxheSogbV9kaXNwbGF5OwogfTsKIAotY2xhc3MgWDExT2Zm
U2NyZWVuV2luZG93IDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKK2NsYXNzIFgxMU9mZlNj
cmVlbldpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWDExT2ZmU2NyZWVuV2luZG93
KTsKIAogcHVibGljOgogICAgIFgxMU9mZlNjcmVlbldpbmRvdygpOwogICAgIHZpcnR1YWwgflgx
MU9mZlNjcmVlbldpbmRvdygpOwotICAgIHZvaWQgY3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRm
b3JtQnVmZmVySGFuZGxlKik7Ci0gICAgdm9pZCBkZXN0cm95V2luZG93KFBsYXRmb3JtQnVmZmVy
SGFuZGxlKTsKLSAgICB2b2lkIHJlU2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgUGxhdGZvcm1C
dWZmZXJIYW5kbGUpOwotICAgIERpc3BsYXkqIG5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKKyAgICB2
b2lkIGNyZWF0ZU9mZnNjcmVlbldpbmRvdyh1aW50MzJfdCopOworICAgIHZvaWQgZGVzdHJveVdp
bmRvdyhjb25zdCB1aW50MzJfdCk7CisgICAgdm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVj
dCYsIGNvbnN0IHVpbnQzMl90KTsKKyAgICBEaXNwbGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5KCkg
Y29uc3Q7CiAjaWYgVVNFKEVHTCkKICAgICBib29sIHNldFZpc3VhbElkKGNvbnN0IEVHTGludCk7
CiAjZW5kaWYKKyAgICB2b2lkIHNldFZpc3VhbEluZm8oWFZpc3VhbEluZm8qKTsKKyAgICBib29s
IGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKK3ByaXZh
dGU6CisgICAgUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gbV9zaGFyZWRSZXNvdXJjZXM7CiAg
ICAgWFZpc3VhbEluZm8qIG1fY29uZmlnVmlzdWFsSW5mbzsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180939</attachid>
            <date>2012-12-29 07:50:37 -0800</date>
            <delta_ts>2012-12-29 10:13:11 -0800</delta_ts>
            <desc>patchv3</desc>
            <filename>reviewglxchanges.patch</filename>
            <type>text/plain</type>
            <size>29660</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDFlMzc3MWYuLmU2ZjI3NGEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEy
LTEyLTI4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtXZWJHTF0gUmVmYWN0b3IgR0xYSW1wbGVtZW50YXRpb24uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4MjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRl
Y291cGxlcyBuYXRpdmUgd2luZG93IG1hbmFnZW1lbnQgYW5kIGxvZ2ljIHRvIGZpbmQgc3VyZmFj
ZSBjb25maWd1cmF0aW9uIGluIEdMWCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMu
aC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR0xYQ29uZmlnU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp+R0xYQ29uZmlnU2VsZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnZpc3VhbEluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnBCdWZmZXJDb250ZXh0Q29uZmlnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpzdXJmYWNlQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6cmVzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyk6CisKKyAgICAgICAgSGVs
cGVyIGNsYXNzIHRvIGZpbmQgc3VyZmFjZSBjb25maWd1cmF0aW9uLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9m
ZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6
OkdMWFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJm
YWNlOjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNl
OjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFBCdWZmZXI6OkdMWFBCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHTFhQQnVmZmVyOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKworICAgICAgICBJbmhlcml0YW5jZSBjaGFu
Z2VkIGZyb20gWDExT2ZmU2NyZWVuV2luZG93IHRvIEdMUGxhdGZvcm1TdXJmYWNlLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldp
bmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVl
bldpbmRvdzo6cmVTaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldp
bmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNj
cmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpYMTFPZmZTY3Jl
ZW5XaW5kb3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6WDExT2Zm
U2NyZWVuV2luZG93OjpzZXRWaXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNj
cmVlbldpbmRvdzo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmg6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSk6CisgICAgICAgIChTaGFyZWRY
MTFSZXNvdXJjZXMpOgorICAgICAgICAoWDExT2ZmU2NyZWVuV2luZG93KToKKworICAgICAgICAg
UmVtb3ZlZCBjb2RlIHJlbGF0ZWQgdG8gc3VyZmFjZSBjb25maWdpcmF0aW9uLgorCiAyMDEyLTEy
LTI3ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KIAog
ICAgICAgICBbRUZMXVtXZWJHTF0gQWRkIHN1cHBvcnQgZm9yIEdMRVMyIGluIEdyYXBoaWNzQ29u
dGV4dDNERWZsLgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTERlZnMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xE
ZWZzLmgKaW5kZXggNTZlYWI1ZS4uNjU5ZDI0OSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oCkBAIC00MSw3ICs0MSw5IEBACiAjaW5jbHVkZSA8
R0wvZ2wuaD4KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgogI2lmIFVTRShHTFgpCisjZGVmaW5lIEdM
WF9HTFhFWFRfUFJPVE9UWVBFUyAxCiAjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8R0wv
Z2x4ZXh0Lmg+CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmggU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiMTRiZQotLS0gL2Rldi9udWxs
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
ZmlnU2VsZWN0b3IuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBHTFhDb25maWdTZWxlY3Rvcl9oCisjZGVmaW5lIEdMWENvbmZpZ1NlbGVjdG9yX2gKKwor
I2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoR0xYKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdM
WENvbmZpZ1NlbGVjdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhDb25maWdTZWxl
Y3Rvcik7CisKK3B1YmxpYzoKKyAgICBHTFhDb25maWdTZWxlY3RvcihEaXNwbGF5KiB4RGlzcGxh
eSwgYm9vbCBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pCisgICAgICAgIDogbV9wYnVmZmVyRkJD
b25maWcoMCkKKyAgICAgICAgLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKKyAgICAgICAg
LCBtX3Zpc3VhbEluZm8oMCkKKyAgICAgICAgLCBtX3NoYXJlZERpc3BsYXkoeERpc3BsYXkpCisg
ICAgICAgICwgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oc3VwcG9ydHNYUmVuZGVyRXh0ZW5z
aW9uKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HTFhDb25maWdTZWxlY3RvcigpCisg
ICAgeworICAgIH0KKworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3Zpc3VhbEluZm87CisgICAgfQorCisgICAgR0xYRkJDb25maWcg
cEJ1ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BidWZmZXJGQkNv
bmZpZykgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBhdHRyaWJ1dGVzW10gPSB7Cisg
ICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdMWF9EUkFXQUJM
RV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQsCisgICAgICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBF
LCAgIEdMWF9SR0JBX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwK
KyAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwKKyAgICAgICAgICAgICAgICBH
TFhfQkxVRV9TSVpFLCAgICAgMSwKKyAgICAgICAgICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCAg
R0xfRkFMU0UsCisgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7CisgICAgICAgICAgICBHTFhGQkNvbmZpZyog
dGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVlbiht
X3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncyk7CisgICAg
ICAgICAgICBpZiAobnVtQXZhaWxhYmxlQ29uZmlncykKKyAgICAgICAgICAgICAgICBtX3BidWZm
ZXJGQkNvbmZpZyA9IHRlbXBbMF07CisgICAgICAgICAgICBYRnJlZSh0ZW1wKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtX3BidWZmZXJGQkNvbmZpZzsKKyAgICB9CisKKyAgICBHTFhG
QkNvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICBpZiAoIW1fc3Vy
ZmFjZUNvbnRleHRGQkNvbmZpZykgeworICAgICAgICAgICAgc3RhdGljIGludCBhdHRyaWJ1dGVz
W10gPSB7CisgICAgICAgICAgICAgICAgR0xYX0xFVkVMLCAwLAorICAgICAgICAgICAgICAgIEdM
WF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKKyAgICAgICAgICAgICAgICBHTFhfUkVO
REVSX1RZUEUsICAgR0xYX1JHQkFfQklULAorICAgICAgICAgICAgICAgIEdMWF9SRURfU0laRSwg
ICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAorICAgICAgICAg
ICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9BTFBIQV9T
SVpFLCAgICAxLAorICAgICAgICAgICAgICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAorICAgICAg
ICAgICAgICAgIEdMWF9YX1ZJU1VBTF9UWVBFLCBHTFhfVFJVRV9DT0xPUiwKKyAgICAgICAgICAg
ICAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKKyAgICAgICAgICAgICAgICBOb25lCisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVh
dGVDb25maWcoYXR0cmlidXRlcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdXJm
YWNlQ29udGV4dEZCQ29uZmlnOworICAgIH0KKworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAg
ICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSAwOworICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJD
b25maWcgPSAwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHTFhGQkNvbmZpZyBjcmVhdGVDb25m
aWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKKyAgICB7CisgICAgICAgIGludCBudW1BdmFpbGFi
bGVDb25maWdzOworICAgICAgICBtX3Zpc3VhbEluZm8gPSAwOworICAgICAgICBHTFhGQkNvbmZp
ZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVl
bihtX3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncyk7CisK
KyAgICAgICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAgICAgR0xYRkJDb25maWcgc2VsZWN0ZWRDb25maWcgPSAwOworICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdmFpbGFi
bGVDb25maWdzOyArK2kpIHsKKyAgICAgICAgICAgIG1fdmlzdWFsSW5mbyA9IGdsWEdldFZpc3Vh
bEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgaWYg
KCFtX3Zpc3VhbEluZm8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCisgICAgICAgICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24p
IHsKKyAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZp
bmRWaXN1YWxGb3JtYXQobV9zaGFyZWREaXNwbGF5LCBtX3Zpc3VhbEluZm8tPnZpc3VhbCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAw
KSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmlzdWFsSW5mby0+
ZGVwdGggPT0gMzIpIHsKKyNlbHNlCisgICAgICAgICAgICBpZiAobV92aXN1YWxJbmZvLT5kZXB0
aCA9PSAzMikgeworI2VuZGlmCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1w
W2ldOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxw
aGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZpZy4KKyAgICAgICAgaWYgKCFmb3Vu
ZCkgeworICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wWzBdOworICAgICAgICAgICAg
bV92aXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwg
dGVtcFswXSk7CisgICAgICAgIH0KKworICAgICAgICBYRnJlZSh0ZW1wKTsKKworICAgICAgICBy
ZXR1cm4gc2VsZWN0ZWRDb25maWc7CisgICAgfQorCisgICAgR0xYRkJDb25maWcgbV9wYnVmZmVy
RkJDb25maWc7CisgICAgR0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOworICAg
IFhWaXN1YWxJbmZvKiBtX3Zpc3VhbEluZm87CisgICAgRGlzcGxheSogbV9zaGFyZWREaXNwbGF5
OworICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Cit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKaW5kZXggNDNhNTJkYy4uNzc1MDJmMCAxMDA2NDQK
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250
ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhDb250ZXh0LmgKQEAgLTMzLDcgKzMzLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyIDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIpOwogCiBw
dWJsaWM6CiAgICAgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkKQEAgLTQ2LDE2ICs0NSwxNSBA
QCBwdWJsaWM6CiB9OwogCiBjbGFzcyBHTFhPZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdMUGxh
dGZvcm1Db250ZXh0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhPZmZTY3JlZW5Db250
ZXh0KTsKIAogcHVibGljOgogICAgIEdMWE9mZlNjcmVlbkNvbnRleHQoKTsKICAgICB2aXJ0dWFs
IH5HTFhPZmZTY3JlZW5Db250ZXh0KCk7Ci0gICAgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZvcm1T
dXJmYWNlKik7Ci0gICAgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNl
Kik7Ci0gICAgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7Ci0gICAgdm9pZCBkZXN0cm95
KCk7Ci0gICAgYm9vbCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50
Q29udGV4dCgpIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIHZvaWQgZnJlZVJlc291
cmNlcygpOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKaW5kZXggYzljZDhkMi4uMGM3NzQ2ZSAxMDA2NDQK
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuY3BwCkBAIC0zNCw5ICszNCwzMSBAQCBzdGF0aWMgY29uc3QgaW50IHBidWZm
ZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlH
SAogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhU
cmFuc3BvcnRTdXJmYWNlKCkKLSAgICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCisgICAgOiBHTFBs
YXRmb3JtU3VyZmFjZSgpCiB7Ci0gICAgY3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1ZmZlckhh
bmRsZSk7CisgICAgbV9uYXRpdmVSZXNvdXJjZSA9IGFkb3B0UHRyKG5ldyBYMTFPZmZTY3JlZW5X
aW5kb3coKSk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gbV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZl
U2hhcmVkRGlzcGxheSgpOworCisgICAgaWYgKCFtX3NoYXJlZERpc3BsYXkpIHsKKyAgICAgICAg
bV9uYXRpdmVSZXNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1NlbGVjdG9yKG1fc2hh
cmVkRGlzcGxheSwgbV9uYXRpdmVSZXNvdXJjZS0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVk
KCkpKTsKKworICAgIGlmICghY29uZmlndXJhdGlvbigpKSB7CisgICAgICAgIGRlc3Ryb3koKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbmF0aXZlUmVzb3VyY2UtPnNldFZpc3Vh
bEluZm8obV9jb25maWdTZWxlY3Rvci0+dmlzdWFsSW5mbygpKTsKKyAgICBtX25hdGl2ZVJlc291
cmNlLT5jcmVhdGVPZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlKTsKKworICAgIGlmICgh
bV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgbV9kcmF3YWJsZSA9IG1fYnVmZmVySGFuZGxlOwogfQogCkBAIC00NiwxMyAr
NjgsMTMgQEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogCiBQ
bGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigp
CiB7Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygp
OworICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwog
fQogCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3Qm
IG5ld1JlY3QpCiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3Qp
OwotICAgIHJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2RyYXdhYmxlKTsKKyAgICBtX25hdGl2ZVJl
c291cmNlLT5yZVNpemVXaW5kb3cobmV3UmVjdCwgbV9kcmF3YWJsZSk7CiB9CiAKIHZvaWQgR0xY
VHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQpAQCAtNzIsMTQgKzk0LDIwIEBAIHZvaWQg
R0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQogCiB2b2lkIEdMWFRyYW5zcG9ydFN1
cmZhY2U6OmRlc3Ryb3koKQogewotICAgIGRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwot
ICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKyAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKKyAgICAg
ICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CisgICAg
ICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbV9kcmF3YWJsZSA9IDA7CisgICAgfQor
CisgICAgbV9uYXRpdmVSZXNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9jb25maWdTZWxlY3RvciA9
IG51bGxwdHI7CiB9CiAKICNlbmRpZgogCiBHTFhQQnVmZmVyOjpHTFhQQnVmZmVyKCkKLSAgICA6
IFgxMU9mZlNjcmVlbldpbmRvdygpCisgICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgpCiB7CiAgICAg
aW5pdGlhbGl6ZSgpOwogfQpAQCAtOTAsMTggKzExOCwzNSBAQCBHTFhQQnVmZmVyOjp+R0xYUEJ1
ZmZlcigpCiAKIHZvaWQgR0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgRGlzcGxheSog
ZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKLSAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBtX3No
YXJlZFJlc291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKLSAgICBpZiAoIWNvbmZpZykK
KyAgICBtX25hdGl2ZVJlc291cmNlID0gYWRvcHRQdHIobmV3IFgxMU9mZlNjcmVlbldpbmRvdygp
KTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWRE
aXNwbGF5KCk7CisKKyAgICBpZiAoIW1fc2hhcmVkRGlzcGxheSkgeworICAgICAgICBtX25hdGl2
ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNw
bGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOwor
ICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3ItPnBCdWZmZXJDb250ZXh0
Q29uZmlnKCk7CisKKyAgICBpZiAoIWNvbmZpZykgeworICAgICAgICBkZXN0cm95KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RyYXdhYmxlID0gZ2xYQ3JlYXRlUGJ1ZmZlciht
X3NoYXJlZERpc3BsYXksIGNvbmZpZywgcGJ1ZmZlckF0dHJpYnV0ZXMpOworCisgICAgaWYgKCFt
X2RyYXdhYmxlKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIG1fZHJhd2FibGUgPSBnbFhDcmVhdGVQYnVmZmVyKGRpc3BsYXksIGNvbmZpZywgcGJ1
ZmZlckF0dHJpYnV0ZXMpOwogICAgIG1fYnVmZmVySGFuZGxlID0gbV9kcmF3YWJsZTsKIH0KIAog
UGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdMWFBCdWZmZXI6OmNvbmZpZ3VyYXRpb24oKQogewotICAg
IHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKKyAgICBy
ZXR1cm4gbV9jb25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKIH0KIAogdm9p
ZCBHTFhQQnVmZmVyOjpkZXN0cm95KCkKQEAgLTExMSwxNyArMTU2LDE3IEBAIHZvaWQgR0xYUEJ1
ZmZlcjo6ZGVzdHJveSgpCiAKIHZvaWQgR0xYUEJ1ZmZlcjo6ZnJlZVJlc291cmNlcygpCiB7Ci0g
ICAgaWYgKCFtX2RyYXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KICAgICBHTFBsYXRmb3JtU3Vy
ZmFjZTo6ZGVzdHJveSgpOwogICAgIERpc3BsYXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7
Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1cm47CiAKLSAgICBnbFhEZXN0cm95UGJ1
ZmZlcihkaXNwbGF5LCBtX2RyYXdhYmxlKTsKLSAgICBtX2RyYXdhYmxlID0gMDsKLSAgICBtX2J1
ZmZlckhhbmRsZSA9IDA7CisgICAgaWYgKG1fZHJhd2FibGUgJiYgZGlzcGxheSkgeworICAgICAg
ICBnbFhEZXN0cm95UGJ1ZmZlcihkaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAgICAgICAgbV9kcmF3
YWJsZSA9IDA7CisgICAgICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBtX2Nv
bmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKKyAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsK
IH0KIAogdm9pZCBHTFhQQnVmZmVyOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0
KQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuaAppbmRleCAwZDg0YzM0Li44NDcxNWMxIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2Uu
aApAQCAtMjgsNDIgKzI4LDQ0IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShHTFgpCiAKLSNpbmNsdWRlICJHTFhXaW5kb3dSZXNvdXJjZXMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCisj
aW5jbHVkZSAiR0xYQ29uZmlnU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJj
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci1jbGFzcyBHTFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIFgxMU9mZlNjcmVlbldpbmRvdyB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYVHJhbnNwb3J0U3VyZmFjZSk7CitjbGFzcyBH
TFhUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKIAogcHVibGlj
OgogICAgIEdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKICAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRT
dXJmYWNlKCk7Ci0gICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKLSAg
ICB2b2lkIHN3YXBCdWZmZXJzKCk7Ci0gICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25m
aWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVy
cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKIAogcHJp
dmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBPd25QdHI8WDExT2ZmU2NyZWVuV2lu
ZG93PiBtX25hdGl2ZVJlc291cmNlOworICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9j
b25maWdTZWxlY3RvcjsKIH07CiAjZW5kaWYKIAotY2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBY
MTFPZmZTY3JlZW5XaW5kb3cgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMWFBCdWZmZXIp
OworY2xhc3MgR0xYUEJ1ZmZlciA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CiAKIHB1Ymxp
YzoKICAgICBHTFhQQnVmZmVyKCk7CiAgICAgdmlydHVhbCB+R0xYUEJ1ZmZlcigpOwotICAgIFBs
YXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7Ci0gICAgdm9pZCBzZXRHZW9tZXRy
eShjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCBQbGF0
Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUo
KTsKICAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBPd25QdHI8WDExT2ZmU2NyZWVuV2lu
ZG93PiBtX25hdGl2ZVJlc291cmNlOworICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9j
b25maWdTZWxlY3RvcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmggU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmZjYzM5Li4wMDAwMDAwCi0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2Vz
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBHTFhXaW5kb3dSZXNvdXJjZXNfaAotI2RlZmluZSBHTFhXaW5kb3dSZXNvdXJjZXNf
aAotCi0jaW5jbHVkZSAiWDExV2luZG93UmVzb3VyY2VzLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShHTFgpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU2hhcmVkR0xYUmVzb3VyY2VzIDogcHVibGljIFNoYXJlZFgxMVJlc291cmNlcyB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkR0xYUmVzb3VyY2VzKTsKLQotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMWFJlc291cmNlcz4gY3JlYXRlKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgICAgIG1fc3RhdGlj
U2hhcmVkUmVzb3VyY2UgPSBuZXcgU2hhcmVkR0xYUmVzb3VyY2VzKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJlZigpOwotCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsKLSAgICB9Ci0KLSAgICBQbGF0
Zm9ybURpc3BsYXkgbmF0aXZlRGlzcGxheSgpCi0gICAgewotICAgICAgICByZXR1cm4gU2hhcmVk
WDExUmVzb3VyY2VzOjp4MTFEaXNwbGF5KCk7Ci0gICAgfQotCi0gICAgWFZpc3VhbEluZm8qIHZp
c3VhbEluZm8oKQotICAgIHsKLSAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCi0gICAgICAgICAg
ICBzdXJmYWNlQ29udGV4dENvbmZpZygpOwotCi0gICAgICAgIHJldHVybiBtX1Zpc3VhbEluZm87
Ci0gICAgfQotCi0gICAgdmlydHVhbCBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygp
Ci0gICAgewotICAgICAgICBpZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7Ci0gICAgICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgICAgICAgICBHTFhfTEVW
RUwsIDAsCi0gICAgICAgICAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJ
VCwKLSAgICAgICAgICAgICAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAotICAg
ICAgICAgICAgICAgIEdMWF9SRURfU0laRSwgICAgICAxLAotICAgICAgICAgICAgICAgIEdMWF9H
UkVFTl9TSVpFLCAgICAxLAotICAgICAgICAgICAgICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAot
ICAgICAgICAgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsICBHTF9GQUxTRSwKLSAgICAgICAgICAg
ICAgICBOb25lCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7
Ci0gICAgICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZCQ29uZmlnKG5hdGl2
ZURpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihuYXRpdmVEaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAm
bnVtUmV0dXJuZWQpOwotICAgICAgICAgICAgaWYgKG51bVJldHVybmVkKQotICAgICAgICAgICAg
ICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gdGVtcFswXTsKLSAgICAgICAgICAgIFhGcmVlKHRlbXAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOwotICAgIH0K
LQotICAgIHZpcnR1YWwgR0xYRkJDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKQotICAgIHsK
LSAgICAgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpIHsKLSAgICAgICAgICAgIHN0
YXRpYyBpbnQgYXR0cmlidXRlc1tdID0gewotICAgICAgICAgICAgICAgIEdMWF9MRVZFTCwgMCwK
LSAgICAgICAgICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1dJTkRPV19CSVQsCi0gICAg
ICAgICAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgICAg
ICAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfR1JFRU5fU0la
RSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKLSAgICAgICAg
ICAgICAgICBHTFhfQUxQSEFfU0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfREVQVEhf
U0laRSwgICAgMSwKLSAgICAgICAgICAgICAgICBHTFhfWF9WSVNVQUxfVFlQRSwgR0xYX1RSVUVf
Q09MT1IsCi0gICAgICAgICAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgIFRydWUsCi0gICAgICAg
ICAgICAgICAgTm9uZQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgbV9zdXJmYWNlQ29u
dGV4dGZiQ29uZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKLSAgICB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBTaGFyZWRHTFhSZXNvdXJjZXMoKQotICAgICAgICA6IFNoYXJlZFgxMVJlc291cmNl
cygpCi0gICAgICAgICwgbV9wYnVmZmVyZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3N1cmZhY2VD
b250ZXh0ZmJDb25maWcoMCkKLSAgICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgR0xYRkJDb25maWcgY3JlYXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVzW10p
Ci0gICAgewotICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7Ci0gICAgICAgIG1fVmlzdWFsSW5mbyA9
IDA7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25maWcobmF0aXZl
RGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKG5hdGl2ZURpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZu
dW1SZXR1cm5lZCk7Ci0KLSAgICAgICAgaWYgKCFudW1SZXR1cm5lZCkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotCi0gICAgICAgIEdMWEZCQ29uZmlnIHNlbGVjdGVkQ29uZmlnID0gMDsKLSAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UmV0dXJuZWQ7ICsraSkgewotICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFs
RnJvbUZCQ29uZmlnKG5hdGl2ZURpc3BsYXkoKSwgdGVtcFtpXSk7Ci0gICAgICAgICAgICBpZiAo
IW1fVmlzdWFsSW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKLSAgICAgICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikg
ewotICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmlu
ZFZpc3VhbEZvcm1hdChuYXRpdmVEaXNwbGF5KCksIG1fVmlzdWFsSW5mby0+dmlzdWFsKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWcgPSB0ZW1wW2ldOwotICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9WaXN1YWxJbmZvLT5k
ZXB0aCA9PSAzMikgewotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtX1Zpc3VhbEluZm8tPmRlcHRo
ID09IDMyKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBb
aV07Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3VwcG9ydGluZyBhbHBo
YSwgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmlnLgotICAgICAgICBpZiAoIWZvdW5k
KSB7Ci0gICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbMF07Ci0gICAgICAgICAgICBt
X1Zpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobV9kaXNwbGF5LCB0ZW1wWzBd
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFhGcmVlKHRlbXApOwotCi0gICAgICAgIHJldHVybiBz
ZWxlY3RlZENvbmZpZzsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5TaGFyZWRHTFhSZXNvdXJjZXMo
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKG1fcGJ1ZmZlcmZiQ29uZmlnKQotICAgICAgICAgICAgbV9wYnVmZmVyZmJD
b25maWcgPSAwOwotCi0gICAgICAgIGlmIChtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpCi0gICAg
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSAwOwotCi0gICAgICAgIGlmIChtX1Zp
c3VhbEluZm8pIHsKLSAgICAgICAgICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7Ci0gICAgICAgICAg
ICBtX1Zpc3VhbEluZm8gPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgR0xYRkJDb25maWcg
bV9wYnVmZmVyZmJDb25maWc7Ci0gICAgR0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4dGZiQ29u
ZmlnOwotICAgIFhWaXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87Ci19OwotCi19Ci0KLSNlbmRpZgot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAppbmRleCA1OGY3NTU4
Li41NDUzZjRhIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCkBAIC0yOCwy
NSArMjgsMTUgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2lmIFVT
RShHTFgpCi0jaW5jbHVkZSAiR0xYV2luZG93UmVzb3VyY2VzLmgiCi0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybVNoYXJlZFJlc291cmNlcyogU2hhcmVkWDExUmVzb3Vy
Y2VzOjptX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKK1NoYXJlZFgxMVJlc291cmNlcyogU2hh
cmVkWDExUmVzb3VyY2VzOjptX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKIAogWDExT2ZmU2Ny
ZWVuV2luZG93OjpYMTFPZmZTY3JlZW5XaW5kb3coKQotICAgIDogR0xQbGF0Zm9ybVN1cmZhY2Uo
KQotICAgICwgbV9zaGFyZWRSZXNvdXJjZXMoMCkKKyAgICA6IG1fc2hhcmVkUmVzb3VyY2VzKDAp
CiAgICAgLCBtX2NvbmZpZ1Zpc3VhbEluZm8oMCkKIHsKLSAgICBtX3NoYXJlZFJlc291cmNlcyA9
IFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzOjpjcmVhdGUoKTsKLQotICAgIGlmICghbV9zaGFyZWRS
ZXNvdXJjZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fc2hh
cmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7CisgICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBTaGFy
ZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSgpOwogfQogCiBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFP
ZmZTY3JlZW5XaW5kb3coKQpAQCAtNTcsMTIgKzQ3LDEyIEBAIFgxMU9mZlNjcmVlbldpbmRvdzo6
flgxMU9mZlNjcmVlbldpbmRvdygpCiAgICAgfQogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRv
dzo6cmVTaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIFBsYXRmb3JtQnVmZmVySGFu
ZGxlIHdpbmRvd0lkKQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnJlU2l6ZVdpbmRvdyhjb25z
dCBJbnRSZWN0JiBuZXdSZWN0LCBjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKIHsKICAgICBYUmVz
aXplV2luZG93KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIHdpbmRvd0lkLCBuZXdS
ZWN0LndpZHRoKCksIG5ld1JlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lkIFgxMU9mZlNjcmVlbldp
bmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKiBoYW5kbGVJ
ZCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3codWludDMy
X3QqIGhhbmRsZUlkKQogewogICAgIGlmICghbV9zaGFyZWRSZXNvdXJjZXMpCiAgICAgICAgIHJl
dHVybjsKQEAgLTcxLDE0ICs2MSw4IEBAIHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVP
ZmZzY3JlZW5XaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUqIGhhbmRsZUlkKQogICAgIGlmICgh
ZGlzcGxheSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKEdMWCkKLSAgICBYVmlzdWFsSW5m
byogdmlzSW5mbyA9IG1fc2hhcmVkUmVzb3VyY2VzLT52aXN1YWxJbmZvKCk7Ci0jZWxzZQotICAg
IFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gbV9jb25maWdWaXN1YWxJbmZvOwotI2VuZGlmCi0KLSAg
ICBpZiAoIXZpc0luZm8pIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZmluZCB2YWxp
ZCBYVmlzdWFsIik7CisgICAgaWYgKCFtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gZmluZCB2YWxpZCBYVmlzdWFsLiIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04NiwzNSArNzAsMzMgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNy
ZWF0ZU9mZnNjcmVlbldpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSogaGFuZGxlSWQpCiAgICAg
aWYgKCF4V2luZG93KQogICAgICAgICByZXR1cm47CiAKLSAgICBDb2xvcm1hcCBjbWFwID0gWENy
ZWF0ZUNvbG9ybWFwKGRpc3BsYXksIHhXaW5kb3csIHZpc0luZm8tPnZpc3VhbCwgQWxsb2NOb25l
KTsKKyAgICBDb2xvcm1hcCBjbWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksIHhXaW5kb3cs
IG1fY29uZmlnVmlzdWFsSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOwogICAgIFhTZXRXaW5kb3dB
dHRyaWJ1dGVzIGF0dHJpYnV0ZTsKICAgICBhdHRyaWJ1dGUuYmFja2dyb3VuZF9waXhlbCA9IFdo
aXRlUGl4ZWwoZGlzcGxheSwgMCk7CiAgICAgYXR0cmlidXRlLmJvcmRlcl9waXhlbCA9IEJsYWNr
UGl4ZWwoZGlzcGxheSwgMCk7CiAgICAgYXR0cmlidXRlLmNvbG9ybWFwID0gY21hcDsKLSAgICBQ
bGF0Zm9ybUJ1ZmZlckhhbmRsZSB0ZW1wSGFuZGxlSWQ7Ci0gICAgdGVtcEhhbmRsZUlkID0gWENy
ZWF0ZVdpbmRvdyhkaXNwbGF5LCB4V2luZG93LCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0
aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBp
eGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7CisgICAgdWludDMyX3QgdGVtcEhhbmRsZUlk
OworICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwg
MCwgMSwgMSwgMCwgbV9jb25maWdWaXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIG1fY29u
ZmlnVmlzdWFsSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0Nv
bG9ybWFwLCAmYXR0cmlidXRlKTsKIAogICAgIGlmICghdGVtcEhhbmRsZUlkKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93Iik7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxh
eSwgdGVtcEhhbmRsZUlkLCAwKTsKICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxh
eSwgdGVtcEhhbmRsZUlkLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CiAgICAgKmhhbmRsZUlk
ID0gdGVtcEhhbmRsZUlkOwotICAgIG1fYnVmZmVySGFuZGxlID0gdGVtcEhhbmRsZUlkOwogCiAg
ICAgaWYgKG1fc2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkK
ICAgICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQpOwogCiB9CiAKLXZvaWQg
WDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlIHdp
bmRvd0lkKQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coY29uc3QgdWlu
dDMyX3Qgd2luZG93SWQpCiB7CiAgICAgaWYgKCF3aW5kb3dJZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKICAgICBEaXNwbGF5KiBkaXNwbGF5
ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKICAgICBpZiAoIWRpc3BsYXkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTEyMiw3ICsxMDQsNyBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRv
dzo6ZGVzdHJveVdpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJZCkKICAgICBYRGVz
dHJveVdpbmRvdyhkaXNwbGF5LCB3aW5kb3dJZCk7CiB9CiAKLURpc3BsYXkqIFgxMU9mZlNjcmVl
bldpbmRvdzo6bmF0aXZlU2hhcmVkRGlzcGxheSgpCitEaXNwbGF5KiBYMTFPZmZTY3JlZW5XaW5k
b3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKSBjb25zdAogewogICAgIHJldHVybiBtX3NoYXJlZFJl
c291cmNlcy0+eDExRGlzcGxheSgpOwogfQpAQCAtMTgxLDYgKzE2MywxNiBAQCBib29sIFgxMU9m
ZlNjcmVlbldpbmRvdzo6c2V0VmlzdWFsSWQoY29uc3QgRUdMaW50IGlkKQogfQogI2VuZGlmCiAK
K3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpzZXRWaXN1YWxJbmZvKFhWaXN1YWxJbmZvKiB2aXNJ
bmZvKQoreworICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IHZpc0luZm87Cit9CisKK2Jvb2wgWDEx
T2ZmU2NyZWVuV2luZG93Ojppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVk
KCk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAppbmRl
eCA5YzA4MGMzLi5hMzk4NjVkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKQEAg
LTI4LDQxICsyOCwzMyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0j
aW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNp
bmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNv
bXBvc2l0ZS5oPgogI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KICNlbmRpZgog
Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgVVNFKEdMWCkKLWNsYXNzIFNoYXJlZEdM
WFJlc291cmNlczsKLXR5cGVkZWYgU2hhcmVkR0xYUmVzb3VyY2VzIFBsYXRmb3JtU2hhcmVkUmVz
b3VyY2VzOwotI2VsaWYgVVNFKEVHTCkKLWNsYXNzIFNoYXJlZFgxMVJlc291cmNlczsKLXR5cGVk
ZWYgU2hhcmVkWDExUmVzb3VyY2VzIFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzOwotI2VuZGlmCi0K
IGNsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMpOwogCiBwdWJsaWM6
Ci0jaWYgVVNFKEVHTCkKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybVNoYXJlZFJlc291
cmNlcz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+
IGNyZWF0ZSgpCiAgICAgewogICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkUmVzb3VyY2UpCi0g
ICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3IFBsYXRmb3JtU2hhcmVkUmVz
b3VyY2VzKCk7CisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3IFNoYXJl
ZFgxMVJlc291cmNlcygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3N0YXRpY1NoYXJl
ZFJlc291cmNlLT5yZWYoKTsKIAogICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFy
ZWRSZXNvdXJjZSk7CiAgICAgfQotI2VuZGlmCiAKICAgICB2b2lkIGRlcmVmKCkKICAgICB7CkBA
IC0xMDMsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93
aW5kb3cpOwogCiAgICAgICAgICAgICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFNpbXBsZVdpbmRvdyIpOworICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gcm9vdCB3aW5kb3cuIik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTExMSw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3dpbmRvdzsKICAgICB9
CiAKLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCisgICAgYm9vbCBpc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwogICAgIH0KQEAgLTEzOSwyOCArMTMxLDMwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgbV9kaXNwbGF5ID0gMDsKICAgICB9CiAKLSAgICBzdGF0aWMgUGxh
dGZvcm1TaGFyZWRSZXNvdXJjZXMqIG1fc3RhdGljU2hhcmVkUmVzb3VyY2U7CisgICAgc3RhdGlj
IFNoYXJlZFgxMVJlc291cmNlcyogbV9zdGF0aWNTaGFyZWRSZXNvdXJjZTsKICAgICBib29sIG1f
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwogICAgIFdpbmRvdyBtX3dpbmRvdzsKICAgICBEaXNw
bGF5KiBtX2Rpc3BsYXk7CiB9OwogCi1jbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cgOiBwdWJsaWMg
R0xQbGF0Zm9ybVN1cmZhY2UgeworY2xhc3MgWDExT2ZmU2NyZWVuV2luZG93IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShYMTFPZmZTY3JlZW5XaW5kb3cpOwogCiBwdWJsaWM6CiAgICAgWDEx
T2ZmU2NyZWVuV2luZG93KCk7CiAgICAgdmlydHVhbCB+WDExT2ZmU2NyZWVuV2luZG93KCk7Ci0g
ICAgdm9pZCBjcmVhdGVPZmZzY3JlZW5XaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUqKTsKLSAg
ICB2b2lkIGRlc3Ryb3lXaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUpOwotICAgIHZvaWQgcmVT
aXplV2luZG93KGNvbnN0IEludFJlY3QmLCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSk7Ci0gICAgRGlz
cGxheSogbmF0aXZlU2hhcmVkRGlzcGxheSgpOworICAgIHZvaWQgY3JlYXRlT2Zmc2NyZWVuV2lu
ZG93KHVpbnQzMl90Kik7CisgICAgdm9pZCBkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90KTsK
KyAgICB2b2lkIHJlU2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgY29uc3QgdWludDMyX3QpOwor
ICAgIERpc3BsYXkqIG5hdGl2ZVNoYXJlZERpc3BsYXkoKSBjb25zdDsKICNpZiBVU0UoRUdMKQog
ICAgIGJvb2wgc2V0VmlzdWFsSWQoY29uc3QgRUdMaW50KTsKICNlbmRpZgorICAgIHZvaWQgc2V0
VmlzdWFsSW5mbyhYVmlzdWFsSW5mbyopOworICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3Vw
cG9ydGVkKCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8UGxhdGZvcm1TaGFyZWRS
ZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3VyY2VzOworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVk
WDExUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKICAgICBYVmlzdWFsSW5mbyogbV9jb25m
aWdWaXN1YWxJbmZvOwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>