<?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>46894</bug_id>
          
          <creation_ts>2010-09-30 06:45:20 -0700</creation_ts>
          <short_desc>Redesign extension mechanism in GraphicsContext3D</short_desc>
          <delta_ts>2010-11-03 15:13:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>amarinichev</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>287520</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-09-30 06:45:20 -0700</bug_when>
    <thetext>Currently, GraphicsContext3D has direct calls for determining the presence of and using extensions. One example is supportsMapSubCHROMIUM() and mapBufferSubDataCHROMIUM(). In addition to being CHROMIUM specific, this sort of explicit extension functionality will eventually turn into a huge and unmanageable API.

One possible solution is to replace all the &apos;supportsXXX&apos; calls with a single supportsExtension() call. This would be passed a string with a unique extension name and would true if the extension is supported. Then there would be a getExtension() call which would return a platform specific Extension3D object. This would be statically cast into the platform specific subclass containing the API call(s).

This can be nested. If the extension gives access to existing OpenGL functionality, there can be an Extension3DOpenGL subclass which gives access to the OpenGL version of the extension. This will reduce the amount of platform specific code needed.

Since the platform specific code will have to be used to determine whether or not an extension is supported, it might be best for the supportedExtension() to be in Extension3D. So you would go:

    if (getExtension()-&gt;supportsExtension(&quot;GL_CHROMIUM_map_sub&quot;))
        static_cast&lt;const Extension3DChromium*&gt;(getExtension())-&gt;mapBufferSubData(...);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303855</commentid>
    <comment_count>1</comment_count>
      <attachid>72785</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 19:16:34 -0700</bug_when>
    <thetext>Created attachment 72785
Patch

From the ChangeLog:

Upon request, factored out extension support from GraphicsContext3D into a new Extensions3D class. (The plural was chosen because the class and subclasses hold multiple extensions.)

Unlike GraphicsContext3D, Extensions3D contains only pure virtual methods. This was done because Extensions3D&apos;s inheritance diagram and usage pattern is very different from that of GraphicsContext3D, and the concrete subclasses need to decide how to implement the various entry points. Requiring them to be placed at the Extensions3D level will cause implementation details to leak into the base class, which is highly undesirable. Any virtual call overhead to these entry points will be negligible.

Changed call sites utilizing these extensions to call through the Extensions3D object or its subclasses.

Tested:
 - Chromium on Linux with accelerated 2D canvas and HTML5 video
 - Chromium on Mac OS X with WebGL and CSS 3D content
 - Safari on Mac OS X with WebGL and CSS 3D content

No new tests. Covered by existing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304219</commentid>
    <comment_count>2</comment_count>
      <attachid>72785</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-03 12:58:18 -0700</bug_when>
    <thetext>Comment on attachment 72785
Patch

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

&gt; WebCore/platform/graphics/chromium/Extensions3DChromium.h:62
&gt; +    Extensions3DChromium(GraphicsContext3DInternal*);

nit: explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304221</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-03 12:58:47 -0700</bug_when>
    <thetext>This looks good to me.  Do you have any thoughts about this approach, Chris?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304294</commentid>
    <comment_count>4</comment_count>
      <attachid>72872</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 14:26:07 -0700</bug_when>
    <thetext>Created attachment 72872
Patch

Fixed style error in previous patch. Addressed review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304296</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-03 14:35:13 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=72785&amp;action=review

Looks good except for some small comments.

&gt; WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:73
&gt; +    , m_fbo(0)

Is this unrelated? If so, it should be in a separate patch

&gt; WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:116
&gt; +    static_cast&lt;Extensions3DChromium*&gt;(m_context-&gt;getExtensions())-&gt;copyTextureToParentTextureCHROMIUM(m_internal-&gt;offscreenColorTexture, parentTexture);

So it looks here like you&apos;re using the extensons mechanism as a way to implement cross-platform extensions in a platform specific way, and to add platform specific extensions to the interface. That&apos;s fine, but you should document it in Extensions3D.h and the ChangeLog. You do have a sentence that refers to this, but it should be made more clear.

&gt; WebKit/chromium/src/Extensions3DChromium.cpp:1
&gt; +/*

Really odd that this in not in WebCore/platform/graphics/chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304307</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 14:48:25 -0700</bug_when>
    <thetext>Committed r71272: &lt;http://trac.webkit.org/changeset/71272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304320</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-03 15:13:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72785&amp;action=review
&gt; 
&gt; Looks good except for some small comments.

Sorry, I looked at the wrong email indicating the review had been granted and didn&apos;t realize you wanted changes made. I&apos;ve already landed this but will make changes in a follow up bug if you want.

&gt; &gt; WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:73
&gt; &gt; +    , m_fbo(0)
&gt; 
&gt; Is this unrelated? If so, it should be in a separate patch

It&apos;s related. The FBO is now only allocated if the extension which DrawingBufferChromium needs is available.

&gt; &gt; WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp:116
&gt; &gt; +    static_cast&lt;Extensions3DChromium*&gt;(m_context-&gt;getExtensions())-&gt;copyTextureToParentTextureCHROMIUM(m_internal-&gt;offscreenColorTexture, parentTexture);
&gt; 
&gt; So it looks here like you&apos;re using the extensons mechanism as a way to implement cross-platform extensions in a platform specific way, and to add platform specific extensions to the interface. That&apos;s fine, but you should document it in Extensions3D.h and the ChangeLog. You do have a sentence that refers to this, but it should be made more clear.

I thought this was self-explanatory from your own request of how the refactoring was to work. I suspect that anyone looking at the code will be able to figure it out. If you feel strongly then file a bug and I&apos;ll update the documentation.

&gt; &gt; WebKit/chromium/src/Extensions3DChromium.cpp:1
&gt; &gt; +/*
&gt; 
&gt; Really odd that this in not in WebCore/platform/graphics/chromium

It can not be placed in WebCore/platform/graphics/chromium due to how it&apos;s implemented. The implementation reaches into files that live in WebKit/chromium/src/. This is part of the reason for decoupling the interface and implementation at the Extensions3D level.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72785</attachid>
            <date>2010-11-02 19:16:34 -0700</date>
            <delta_ts>2010-11-03 14:26:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>extensions3d.patch</filename>
            <type>text/plain</type>
            <size>59587</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxMjAwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTEtMDIgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZGVzaWduIGV4dGVuc2lvbiBtZWNoYW5pc20gaW4gR3JhcGhp
Y3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2ODk0CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAtIEV4
cG9zZWQgU3RyaW5nOjpzcGxpdChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPikuCisKIDIw
MTAtMTEtMDIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRv
d3MgYnVpbGQgZml4IGFmdGVyIHI3MTEyNwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAkocmV2aXNpb24gNzExOTkpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2Myw2ICs1NjMsNyBAQCBfX1pOSzNXVEY2U3RyaW5nMTljaGFy
YWN0ZXJTdGFydGluZ0F0RWoKIF9fWk5LM1dURjZTdHJpbmc0dXRmOEViCiBfX1pOSzNXVEY2U3Ry
aW5nNWFzY2lpRXYKIF9fWk5LM1dURjZTdHJpbmc1bG93ZXJFdgorX19aTkszV1RGNlN0cmluZzVz
cGxpdEVSS1MwX1JOU182VmVjdG9ySVMwX0xtMEVFRQogX19aTkszV1RGNlN0cmluZzVzcGxpdEVS
S1MwX2JSTlNfNlZlY3RvcklTMF9MbTBFRUUKIF9fWk5LM1dURjZTdHJpbmc1c3BsaXRFdFJOU182
VmVjdG9ySVMwX0xtMEVFRQogX19aTkszV1RGNlN0cmluZzVzcGxpdEV0YlJOU182VmVjdG9ySVMw
X0xtMEVFRQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcxMjAwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxMC0xMS0wMiAgS2VubmV0aCBSdXNzZWxsICA8a2Jy
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVkZXNpZ24gZXh0ZW5zaW9uIG1lY2hhbmlzbSBpbiBHcmFwaGljc0NvbnRleHQzRAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4OTQKKwor
ICAgICAgICBVcG9uIHJlcXVlc3QsIGZhY3RvcmVkIG91dCBleHRlbnNpb24gc3VwcG9ydCBmcm9t
IEdyYXBoaWNzQ29udGV4dDNECisgICAgICAgIGludG8gYSBuZXcgRXh0ZW5zaW9uczNEIGNsYXNz
LiAoVGhlIHBsdXJhbCB3YXMgY2hvc2VuIGJlY2F1c2UgdGhlCisgICAgICAgIGNsYXNzIGFuZCBz
dWJjbGFzc2VzIGhvbGQgbXVsdGlwbGUgZXh0ZW5zaW9ucy4pCisKKyAgICAgICAgVW5saWtlIEdy
YXBoaWNzQ29udGV4dDNELCBFeHRlbnNpb25zM0QgY29udGFpbnMgb25seSBwdXJlIHZpcnR1YWwK
KyAgICAgICAgbWV0aG9kcy4gVGhpcyB3YXMgZG9uZSBiZWNhdXNlIEV4dGVuc2lvbnMzRCdzIGlu
aGVyaXRhbmNlIGRpYWdyYW0KKyAgICAgICAgYW5kIHVzYWdlIHBhdHRlcm4gaXMgdmVyeSBkaWZm
ZXJlbnQgZnJvbSB0aGF0IG9mIEdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICBhbmQgdGhlIGNv
bmNyZXRlIHN1YmNsYXNzZXMgbmVlZCB0byBkZWNpZGUgaG93IHRvIGltcGxlbWVudCB0aGUKKyAg
ICAgICAgdmFyaW91cyBlbnRyeSBwb2ludHMuIFJlcXVpcmluZyB0aGVtIHRvIGJlIHBsYWNlZCBh
dCB0aGUKKyAgICAgICAgRXh0ZW5zaW9uczNEIGxldmVsIHdpbGwgY2F1c2UgaW1wbGVtZW50YXRp
b24gZGV0YWlscyB0byBsZWFrIGludG8KKyAgICAgICAgdGhlIGJhc2UgY2xhc3MsIHdoaWNoIGlz
IGhpZ2hseSB1bmRlc2lyYWJsZS4gQW55IHZpcnR1YWwgY2FsbAorICAgICAgICBvdmVyaGVhZCB0
byB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBiZSBuZWdsaWdpYmxlLgorCisgICAgICAgIENoYW5n
ZWQgY2FsbCBzaXRlcyB1dGlsaXppbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byBjYWxsIHRocm91Z2gg
dGhlCisgICAgICAgIEV4dGVuc2lvbnMzRCBvYmplY3Qgb3IgaXRzIHN1YmNsYXNzZXMuCisKKyAg
ICAgICAgVGVzdGVkOgorICAgICAgICAgLSBDaHJvbWl1bSBvbiBMaW51eCB3aXRoIGFjY2VsZXJh
dGVkIDJEIGNhbnZhcyBhbmQgSFRNTDUgdmlkZW8KKyAgICAgICAgIC0gQ2hyb21pdW0gb24gTWFj
IE9TIFggd2l0aCBXZWJHTCBhbmQgQ1NTIDNEIGNvbnRlbnQKKyAgICAgICAgIC0gU2FmYXJpIG9u
IE1hYyBPUyBYIHdpdGggV2ViR0wgYW5kIENTUyAzRCBjb250ZW50CisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25z
M0QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0Q6On5FeHRlbnNpb25z
M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0
ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6c3VwcG9ydHNCR1JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4
dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Rm9ybWF0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3Bl
bkdMKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0
ZW5zaW9uczNEUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRFF0
OjpFeHRlbnNpb25zM0RRdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RRdDo6fkV4
dGVuc2lvbnMzRFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRFF0OjpzdXBwb3J0
cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RRdDo6Z2V0R3JhcGhpY3NSZXNldFN0
YXR1c0FSQik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5z
aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNr
SGFyZHdhcmVUb1NvZnR3YXJlKToKKwogMjAxMC0xMS0wMiAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vy
c0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDE5LDYgKzI0MTksNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9t
aXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCcsCkBAIC0yNzM0LDYgKzI3MzUs
NyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvRGFzaEFycmF5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuc2lvbnMzRC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwJywKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gNzExOTkpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjczLDcgKzM2NzMsOSBAQCBIRUFERVJTICs9IFwKICAgICAgICAgaHRtbC9jYW52YXMvVWludDhB
cnJheS5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCBcCiAgICAgICAgIGh0
bWwvY2FudmFzL1VpbnQxNkFycmF5LmggXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5o
IFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmgKIAogICAgICF2OCB7CiAg
ICAgICAgIFNPVVJDRVMgKz0gXApAQCAtMzcxMSw2ICszNzEzLDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgICAgIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5LmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFz
L1VpbnQxNkFycmF5LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0
LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwCiAKIH0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc0LDYgKzE0NzQsOSBAQAogCQk2RTRFOTFBRDEw
RjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEU5MUE4MTBGN0ZCMzEwMEEyNzc5
QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5oICovOyB9OwogCQk2RTRFOTFBRTEwRjdGQjMx
MDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTRFOTFBOTEwRjdGQjMxMDBBMjc3OUMgLyog
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CiAJCTZFNEU5MUFGMTBGN0ZCMzEwMEEy
Nzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTRFOTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5oICovOyB9OworCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuY3BwICovOyB9OworCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
T3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi87IH07CisJ
CTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKIAkJNkU5NkJCMUMxMTk4NkVFMjAwN0Q5NENEIC8q
IEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFOTZCQjFBMTE5ODZFRTEwMDdEOTRDRCAvKiBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlLmggKi87IH07CiAJCTZFOTZCQjFEMTE5ODZFRTIwMDdEOTRDRCAvKiBUeXBlZEFy
cmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkU5NkJCMUIxMTk4NkVFMTAwN0Q5NENEIC8qIFR5cGVkQXJyYXlCYXNlLmggKi87IH07CiAJCTZF
RThBNzcyMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzAxMEY4
MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CkBAIC03
NjA4LDYgKzc2MTEsOSBAQAogCQk2RTRFOTFBOTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0RTkxQUExMEY3RkIz
MTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBwYXRoID0gY2FudmFzL1dl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0
RTkxQUIxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsOyBwYXRoID0gY2Fu
dmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
NjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFOTZCQjFBMTE5ODZFRTEwMDdEOTRDRCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEludGVncmFsVHlwZWRBcnJheUJh
c2UuaDsgcGF0aCA9IGNhbnZhcy9JbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZFOTZCQjFCMTE5ODZFRTEwMDdEOTRDRCAvKiBUeXBlZEFycmF5
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUeXBlZEFycmF5QmFzZS5o
OyBwYXRoID0gY2FudmFzL1R5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTU3LDYg
KzE2NTYzLDcgQEAKIAkJQjJBMDE1OTEwQUY2Q0Q1MzAwNkJDRTBFIC8qIGdyYXBoaWNzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk2RTY3RDJBODEyODBF
OEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCiAJCQkJQjI3NTM1MjkwQjA1MzgxNDAw
MkNFNjRGIC8qIGNnICovLAogCQkJCUI1MzIwRDY4MTIyQTI0RTkwMDJEMTQ0MCAvKiBjb2NvYSAq
LywKIAkJCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLywKQEAgLTE4Mzc3
LDYgKzE4Mzg0LDggQEAKIAkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNkU2N0QyQTQxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCisJCQkJNkU2N0QyQTUx
MjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJCUZCQzIyMERF
MTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi8sCiAJCQkp
OwogCQkJcGF0aCA9IG9wZW5nbDsKQEAgLTIxMjQzLDYgKzIxMjUyLDggQEAKIAkJCQk5M0YxOTlF
RDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEzMDIsNyArMjEzMTMsNiBAQAogCQkJaXNh
ID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAy
QjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJX
ZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlk
ZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0g
MTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM4MDQsNiArMjM4MTQs
NyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVD
RjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFNjdEMkE2MTI4MEU4
QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RfaAorI2RlZmluZSBF
eHRlbnNpb25zM0RfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgY29udGFpbmluZyBvbmx5
IHB1cmUgdmlydHVhbCBmdW5jdGlvbnMuCisvLyBJbXBsZW1lbnRhdGlvbnMgbXVzdCBwcm92aWRl
IGEgc3ViY2xhc3MuCisvLworLy8gVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGFyZSBkZWZpbmVk
IGJlbG93IGFuZCBpbiBzdWJjbGFzc2VzLAorLy8gcG9zc2libHkgcGxhdGZvcm0tc3BlY2lmaWMg
b25lcy4KKy8vCisvLyBDYWxsaW5nIGFueSBleHRlbnNpb24gZnVuY3Rpb24gbm90IHN1cHBvcnRl
ZCBieSB0aGUgY3VycmVudCBjb250ZXh0CisvLyBtdXN0IGJlIGEgbm8tb3A7IGluIHBhcnRpY3Vs
YXIsIGl0IG1heSBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuIEluCisvLyB0aGlzIHNpdHVhdGlvbiwg
aWYgdGhlIGZ1bmN0aW9uIGhhcyBhIHJldHVybiB2YWx1ZSwgMCBpcyByZXR1cm5lZC4KK2NsYXNz
IEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uczNEKCkge30K
KworICAgIC8vIFN1cHBvcnRlZCBleHRlbnNpb25zOgorICAgIC8vICAgR0xfRVhUX3RleHR1cmVf
Zm9ybWF0X0JHUkE4ODg4CisgICAgLy8gICBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQorICAgIC8v
ICAgR0xfQVJCX3JvYnVzdG5lc3MKKworICAgIC8vIFRha2VzIGZ1bGwgbmFtZSBvZiBleHRlbnNp
b247IGZvciBleGFtcGxlLAorICAgIC8vICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgi
LgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICBl
bnVtIHsKKyAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IGVudW1zCisg
ICAgICAgIEJHUkFfRVhUID0gMHg4MEUxLAorCisgICAgICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNz
IGVudW1zCisgICAgICAgIEdVSUxUWV9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1MywKKyAgICAg
ICAgSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTQsCisgICAgICAgIFVOS05PV05f
Q09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTUKKyAgICB9OworCisgICAgLy8gR0xfQVJCX3JvYnVz
dG5lc3MKKyAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXh0ZW5zaW9uczNEX2gK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDU1ICsxMDg4LDYgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyhjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c3Vw
cG9ydHNCR1JBKCkKLXsKLSAgICAvLyBGb3IgT3BlbkdMIEVTMi4wLCB0aGlzIHJlcXVpcmVzIGNo
ZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBhbmQgR0xf
RVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0b3AgR0wsIEJHUkEgaGFzIGJl
ZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0KLSAgICAvLyBIb3dldmVyLCBub3RlIHRo
YXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhlIGludGVybmFsRm9ybWF0IHRvCi0g
ICAgLy8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUgZGVza3RvcCBHTCB3aWxsIG5v
dCBhY2NlcHQgR0xfQkdSQQotICAgIC8vIChtdXN0IGJlIEdMX1JHQkEpLCBzbyB0aGlzIG11c3Qg
YmUgY2hlY2tlZCBvbiBlYWNoIHBsYXRmb3JtLgotICAgIC8vIFJldHVybmluZyBmYWxzZSBmb3Ig
bm93IHRvIGJlIHNhZmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpzdXBwb3J0c01hcFN1YkNIUk9NSVVNKCkKLXsKLSAgICAvLyBXZSBkb24ndCBjbGFp
bSBzdXBwb3J0IGZvciB0aGlzIGV4dGVuc2lvbiBhdCB0aGlzIHRpbWUuCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkKiBHcmFwaGljc0NvbnRleHQzRDo6bWFwQnVmZmVyU3ViRGF0YUNIUk9N
SVVNKHVuc2lnbmVkLCBpbnQsIGludCwgdW5zaWduZWQpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0
IHZvaWQqKQotewotfQotCi12b2lkKiBHcmFwaGljc0NvbnRleHQzRDo6bWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNKHVuc2lnbmVkLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQsIHVu
c2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCopCi17Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQ29weVRleHR1cmVUb1BhcmVudFRleHR1
cmVDSFJPTUlVTSgpCi17Ci0gICAgLy8gV2UgZG9uJ3QgY2xhaW0gc3VwcG9ydCBmb3IgdGhpcyBl
eHRlbnNpb24gYXQgdGhpcyB0aW1lLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSh1bnNpZ25l
ZCwgdW5zaWduZWQpCi17Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcxMTk5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Niw2ICs3NiwxMCBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3Mg
RHJhd2luZ0J1ZmZlcjsKK2NsYXNzIEV4dGVuc2lvbnMzRDsKKyNpZiBQTEFURk9STShNQUMpCitj
bGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CisjZW5kaWYKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFz
cyBJbWFnZTsKIGNsYXNzIEltYWdlRGF0YTsKQEAgLTQwMSwxOSArNDA1LDYgQEAgcHVibGljOgog
ICAgICAgICAvLyBXZWJHTC1zcGVjaWZpYyBlbnVtcwogICAgICAgICBVTlBBQ0tfRkxJUF9ZX1dF
QkdMID0gMHg5MjQwLAogICAgICAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgPSAw
eDkyNDEsCi0KLSAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAg
ICAgIEJHUkFfRVhUID0gMHg4MEUxLAotCi0gICAgICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIg
KGVudW1zIGluaGVyaXRlZCBmcm9tIEdMX0FSQl92ZXJ0ZXhfYnVmZmVyX29iamVjdCkKLSAgICAg
ICAgUkVBRF9PTkxZID0gMHg4OEI4LAotICAgICAgICBXUklURV9PTkxZID0gMHg4OEI5LAotCi0g
ICAgICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzIGVudW1zCi0gICAgICAgIEdVSUxUWV9DT05URVhU
X1JFU0VUX0FSQiA9IDB4ODI1MywKLSAgICAgICAgSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9BUkIg
PSAweDgyNTQsCi0gICAgICAgIFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTUKLQog
ICAgIH07CiAKICAgICAvLyBDb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMuCkBAIC03ODYsMjIg
Kzc3NywxMSBAQCBwdWJsaWM6CiAgICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2Vy
ZSBhZGRlZC4KICAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3Ip
OwogCi0gICAgLy8gRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAgYm9vbCBzdXBwb3J0
c0JHUkEoKTsKLQotICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKLSAgICBib29sIHN1cHBvcnRz
TWFwU3ViQ0hST01JVU0oKTsKLSAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odW5z
aWduZWQgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgYWNjZXNzKTsKLSAg
ICB2b2lkIHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKTsKLSAgICB2b2lk
KiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBm
b3JtYXQsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGFjY2Vzcyk7Ci0gICAgdm9pZCB1bm1hcFRl
eFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2b2lkKik7Ci0KLSAgICAvLyBHTF9DSFJPTUlVTV9j
b3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUKLSAgICBib29sIHN1cHBvcnRzQ29weVRleHR1
cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSgpOwotICAgIHZvaWQgY29weVRleHR1cmVUb1BhcmVu
dFRleHR1cmVDSFJPTUlVTSh1bnNpZ25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBwYXJlbnRUZXh0dXJl
KTsKLQotICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzCi0gICAgaW50IGdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKTsKKyAgICAvLyBTdXBwb3J0IGZvciBleHRlbnNpb25zLiBSZXR1cm5zIGEgbm9u
LW51bGwgb2JqZWN0LCB0aG91Z2ggbm90CisgICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMg
bWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKKyAgICAvLyBjdXJyZW50IGhhcmR3
YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9uczNEOjpzdXBwb3J0cygpIHRvCisgICAgLy8gZGV0ZXJt
aW5lIHRoaXMuCisgICAgRXh0ZW5zaW9uczNEKiBnZXRFeHRlbnNpb25zKCk7CiAKICAgcHJpdmF0
ZToKICAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKQEAgLTg3Miw2ICs4
NTIsOCBAQCBwdWJsaWM6CiAKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwogCisg
ICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTD4gbV9leHRlbnNpb25zOworCiAgICAgQXR0cmli
dXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzExOTkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgog
CkBAIC02OSw5ICs3MCwxNCBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUo
R3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAg
LCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZmJvKGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkp
CisgICAgLCBtX2ZibygwKQogICAgICwgbV9pbnRlcm5hbChuZXcgRHJhd2luZ0J1ZmZlckludGVy
bmFsKQogeworICAgIGlmICghbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9DSFJPTUlVTV9jb3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUiKSkgeworICAgICAgICBt
X2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ZibyA9IGNv
bnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIG1faW50ZXJuYWwt
Pm9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNp
emUpOwogfQpAQCAtMTA3LDcgKzExMyw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRv
UGxhdGZvcm1MYXkKICAgICAvLyBoYXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRvciBkcmF3cy4g
IFRoaXMgbWVhbnMgd2UgbWlnaHQgZHJhdyBzdGFsZSBmcmFtZXMgc29tZXRpbWVzLiAgSWRlYWxs
eSB0aGlzCiAgICAgLy8gd291bGQgaW5zZXJ0IGEgZmVuY2UgaW50byB0aGUgY2hpbGQgY29tbWFu
ZCBzdHJlYW0gdGhhdCB0aGUgY29tcG9zaXRvciBjb3VsZCB3YWl0IGZvci4KICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fY29udGV4dC0+Y29weVRleHR1cmVUb1Bh
cmVudFRleHR1cmVDSFJPTUlVTShtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUsIHBh
cmVudFRleHR1cmUpOworICAgIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5jb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9N
SVVNKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgcGFyZW50VGV4dHVyZSk7CiAg
ICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRl
bnNpb25zM0RDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBFeHRlbnNpb25zM0RDaHJvbWl1bV9oCisjZGVmaW5lIEV4dGVuc2lvbnMzRENocm9t
aXVtX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw7CisKK2NsYXNzIEV4dGVuc2lvbnMz
RENocm9taXVtIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
RXh0ZW5zaW9uczNEQ2hyb21pdW0oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKKyAgICBlbnVtIHsKKyAgICAgICAgLy8g
R0xfQ0hST01JVU1fbWFwX3N1YiAoZW51bXMgaW5oZXJpdGVkIGZyb20gR0xfQVJCX3ZlcnRleF9i
dWZmZXJfb2JqZWN0KQorICAgICAgICBSRUFEX09OTFkgPSAweDg4QjgsCisgICAgICAgIFdSSVRF
X09OTFkgPSAweDg4QjkKKyAgICB9OworCisgICAgLy8gR0xfQ0hST01JVU1fbWFwX3N1YgorICAg
IHZvaWQqIG1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBvZmZz
ZXQsIGludCBzaXplLCB1bnNpZ25lZCBhY2Nlc3MpOworICAgIHZvaWQgdW5tYXBCdWZmZXJTdWJE
YXRhQ0hST01JVU0oY29uc3Qgdm9pZCopOworICAgIHZvaWQqIG1hcFRleFN1YkltYWdlMkRDSFJP
TUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwg
dW5zaWduZWQgYWNjZXNzKTsKKyAgICB2b2lkIHVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNv
bnN0IHZvaWQqKTsKKworICAgIC8vIEdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZV90b19wYXJlbnRf
dGV4dHVyZQorICAgIHZvaWQgY29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSh1bnNp
Z25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBwYXJlbnRUZXh0dXJlKTsKKworcHJpdmF0ZToKKyAgICAv
LyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgc3RyaWN0bHkgb3duZWQgYnkgdGhlIEdyYXBo
aWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIGFuZCBkbyBub3QKKyAgICAvLyBuZWVkIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBhbnkgb3RoZXIgY29kZS4KKyAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDsKKyAgICBFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFwaGljc0Nv
bnRleHQzREludGVybmFsKik7CisKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsCisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogbV9pbnRl
cm5hbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lv
bnMzRENocm9taXVtX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcxMTk5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgpAQCAtMzAyLDEwICszMDMsMTAgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21p
dW06OnVwZGF0ZVRleHR1cmUoRwogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHRleHR1cmVJZCkpOwotICAgIHZvaWQqIG1lbSA9IGNvbnRleHQtPm1hcFRleFN1YkltYWdlMkRD
SFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9u
cy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBHcmFwaGljc0NvbnRleHQzRDo6V1JJVEVfT05MWSk7CisgICAgdm9p
ZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRF
eHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWln
aHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9u
czNEQ2hyb21pdW06OldSSVRFX09OTFkpOwogICAgIGlmIChtZW0pIHsKICAgICAgICAgbWVtY3B5
KG1lbSwgZGF0YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0g
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSht
ZW0pKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9t
aXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01J
VU0obWVtKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZl
IHNvbWUgc29ydCBvZiBjb2RlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVuCiAgICAgICAgIC8vIG1h
cFRleFN1YkltYWdlMkQgZmFpbHMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA3
MTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJFeHRlbnNp
b25zM0QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKQEAgLTE3OCwxOCArMTc5LDggQEAg
dm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscwogCiBib29sIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpzdXBwb3J0c0JHUkEoKQogewotICAgIHJldHVybiBtX2NvbnRleHQt
PnN1cHBvcnRzQkdSQSgpOwotfQotCi1ib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzdXBw
b3J0c0NvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0oKQotCi17Ci0gICAgcmV0dXJu
IG1fY29udGV4dC0+c3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKCk7
Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXh0dXJlVG9QYXJlbnRU
ZXh0dXJlQ0hST01JVU0odW5zaWduZWQgdGV4dHVyZSwgdW5zaWduZWQgcGFyZW50VGV4dHVyZSkK
LXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5jb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9N
SVVNKHRleHR1cmUsIHBhcmVudFRleHR1cmUpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpICYm
CisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3Jl
YWRfZm9ybWF0X2JncmEiKTsKIH0KIAogVGV4dHVyZSogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcx
MTk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsNiBAQCBwdWJsaWM6CiAKICAg
ICBib29sIHN1cHBvcnRzQkdSQSgpOwogCi0gICAgLy8gR0xfQ0hST01JVU1fY29weV90ZXh0dXJl
X3RvX3BhcmVudF90ZXh0dXJlCi0gICAgYm9vbCBzdXBwb3J0c0NvcHlUZXh0dXJlVG9QYXJlbnRU
ZXh0dXJlQ0hST01JVU0oKTsKLSAgICB2b2lkIGNvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hS
T01JVU0odW5zaWduZWQgdGV4dHVyZSwgdW5zaWduZWQgcGFyZW50VGV4dHVyZSk7Ci0KICAgICAv
LyBDcmVhdGVzIGEgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGltYWdlLiAgSXMg
b3duZWQgYnkgdGhpcyBjb250ZXh0J3MKICAgICAvLyBUZXh0dXJlSGFzaE1hcC4KICAgICBUZXh0
dXJlKiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGludCB3
aWR0aCwgaW50IGhlaWdodCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
ZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
ZXh0dXJlLmNwcAkocmV2aXNpb24gNzExOTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5j
bHVkZSAiVGV4dHVyZS5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCkBAIC02OSw4ICs3MCw4IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRGb3JtYXQoR3Jh
cGhpY3NDb250ZXgKICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHR1cmU6OkJHUkE4OgotICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNCR1JBKCkpIHsKLSAgICAgICAgICAgICpnbEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBX0VYVDsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpKSB7
CisgICAgICAgICAgICAqZ2xGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOwogICAgICAg
ICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNzExOTkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBD
b250ZXh0Lmg+CisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVkZSAiRmxv
YXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRN
TENhbnZhc0VsZW1lbnQuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNE
T3BlbkdMKCkKKyAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQor
eworfQorCitFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQoreworfQor
Citib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIC8vIE5vdGUgb24gc3VwcG9ydCBmb3IgQkdSQToKKyAgICAvLworICAgIC8vIEZvciBP
cGVuR0wgRVMyLjAsIHJlcXVpcmVzIGNoZWNraW5nIGZvcgorICAgIC8vIEdMX0VYVF90ZXh0dXJl
X2Zvcm1hdF9CR1JBODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCisgICAgLy8gRm9y
IGRlc2t0b3AgR0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCisg
ICAgLy8KKyAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVx
dWlyZXMgdGhlCisgICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xf
QkdSQSwgd2hpbGUgZGVza3RvcCBHTAorICAgIC8vIHdpbGwgbm90IGFjY2VwdCBHTF9CR1JBICht
dXN0IGJlIEdMX1JHQkEpLCBzbyB0aGlzIG11c3QgYmUKKyAgICAvLyBjaGVja2VkIG9uIGVhY2gg
cGxhdGZvcm0uIERlc2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKKyAgICAvLyBHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEsIHNvCisgICAgLy8g
dHJlYXQgdGhlbSBhcyB1bnN1cHBvcnRlZCBoZXJlLgorICAgIGlmICghbV9pbml0aWFsaXplZEF2
YWlsYWJsZUV4dGVuc2lvbnMpIHsKKyAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkp
OworICAgICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOworICAgICAgICBl
eHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9u
c1tpXSk7CisgICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsK
K30KKworaW50IEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
Cit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEV4dGVuc2lvbnMzRE9wZW5HTF9oCisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5H
TF9oCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNE
T3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0
ZW5zaW9uczNET3BlbkdMKCk7CisKKyAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBpbnQgZ2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgY2xhc3Mg
b25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVt
ZW50YXRpb25zLgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKyAgICBFeHRl
bnNpb25zM0RPcGVuR0woKTsKKworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVu
c2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTF9o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmll
dy5oIgogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgogI2luY2x1ZGUgIkZs
b2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNDQ1LDkgKzE0NDYsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3ludGhlc2l6ZUdMRXJybwogICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJv
cik7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKIHsK
LSAgICByZXR1cm4gTk9fRVJST1I7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1f
ZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wpOworICAgIHJldHVy
biBtX2V4dGVuc2lvbnMuZ2V0KCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEUXQuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uczNE
UXQ6OkV4dGVuc2lvbnMzRFF0KCkKK3sKK30KKworRXh0ZW5zaW9uczNEUXQ6On5FeHRlbnNpb25z
M0RRdCgpCit7Cit9CisKK2Jvb2wgRXh0ZW5zaW9uczNEUXQ6OnN1cHBvcnRzKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgRXh0ZW5zaW9uczNEUXQ6OmdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVuc2lv
bnMzRFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRl
bnNpb25zM0RRdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9FeHRlbnNpb25zM0RRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBFeHRlbnNpb25zM0RRdF9oCisjZGVmaW5lIEV4dGVuc2lvbnMzRFF0X2gKKworI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4
dGVuc2lvbnMzRFF0IDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+RXh0ZW5zaW9uczNEUXQoKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGludCBn
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBjbGFz
cyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBs
ZW1lbnRhdGlvbnMuCisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworICAgIEV4
dGVuc2lvbnMzRFF0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFeHRlbnNpb25zM0RRdF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlzaW9uIDcxMTk5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
UXQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFz
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKQEAgLTI1Myw2ICsyNTQsOCBAQCBw
dWJsaWM6CiAgICAgUUltYWdlIG1fcGl4ZWxzOwogICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxv
bmc+IG1fc3ludGhldGljRXJyb3JzOwogCisgICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4
dGVuc2lvbnM7CisKIHByaXZhdGU6CiAKICAgICB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBT
dHJpbmcmIHByb2MpOwpAQCAtMTYzMiw2ICsxNjM1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN5bnRoZXNpemVHTEVycm8KICAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5h
ZGQoZXJyb3IpOwogfQogCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRl
bnNpb25zKCkKK3sKKyAgICBpZiAoIW1faW50ZXJuYWwtPm1fZXh0ZW5zaW9ucykKKyAgICAgICAg
bV9pbnRlcm5hbC0+bV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRFF0KTsK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zOworfQorCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3Bw
CShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
QEAgLTg2MSw3ICs4NjIsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFy
ZHdhCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewogICAgICAgICB1aW50
MzJfdCogcGl4ZWxzID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzQkdSQSgpKQotICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscygwLCBo
ZWlnaHQgLSAxIC0geSwgd2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBX0VYVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWFkUGl4ZWxzKDAsIGhlaWdodCAtIDEgLSB5LCB3aWR0aCwgMSwgRXh0ZW5zaW9uczNE
OjpCR1JBX0VYVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscygwLCBoZWlnaHQg
LSAxIC0geSwgd2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgd2lkdGg7ICsraSkgewpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MTIwMCkKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NyBA
QAorMjAxMC0xMS0wMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVkZXNpZ24gZXh0ZW5z
aW9uIG1lY2hhbmlzbSBpbiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4OTQKKworICAgICAgICBVcG9uIHJlcXVlc3Qs
IGZhY3RvcmVkIG91dCBleHRlbnNpb24gc3VwcG9ydCBmcm9tIEdyYXBoaWNzQ29udGV4dDNECisg
ICAgICAgIGludG8gYSBuZXcgRXh0ZW5zaW9uczNEIGNsYXNzLiAoVGhlIHBsdXJhbCB3YXMgY2hv
c2VuIGJlY2F1c2UgdGhlCisgICAgICAgIGNsYXNzIGFuZCBzdWJjbGFzc2VzIGhvbGQgbXVsdGlw
bGUgZXh0ZW5zaW9ucy4pCisKKyAgICAgICAgVW5saWtlIEdyYXBoaWNzQ29udGV4dDNELCBFeHRl
bnNpb25zM0QgY29udGFpbnMgb25seSBwdXJlIHZpcnR1YWwKKyAgICAgICAgbWV0aG9kcy4gVGhp
cyB3YXMgZG9uZSBiZWNhdXNlIEV4dGVuc2lvbnMzRCdzIGluaGVyaXRhbmNlIGRpYWdyYW0KKyAg
ICAgICAgYW5kIHVzYWdlIHBhdHRlcm4gaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIEdy
YXBoaWNzQ29udGV4dDNELAorICAgICAgICBhbmQgdGhlIGNvbmNyZXRlIHN1YmNsYXNzZXMgbmVl
ZCB0byBkZWNpZGUgaG93IHRvIGltcGxlbWVudCB0aGUKKyAgICAgICAgdmFyaW91cyBlbnRyeSBw
b2ludHMuIFJlcXVpcmluZyB0aGVtIHRvIGJlIHBsYWNlZCBhdCB0aGUKKyAgICAgICAgRXh0ZW5z
aW9uczNEIGxldmVsIHdpbGwgY2F1c2UgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBsZWFrIGlu
dG8KKyAgICAgICAgdGhlIGJhc2UgY2xhc3MsIHdoaWNoIGlzIGhpZ2hseSB1bmRlc2lyYWJsZS4g
QW55IHZpcnR1YWwgY2FsbAorICAgICAgICBvdmVyaGVhZCB0byB0aGVzZSBlbnRyeSBwb2ludHMg
d2lsbCBiZSBuZWdsaWdpYmxlLgorCisgICAgICAgIENoYW5nZWQgY2FsbCBzaXRlcyB1dGlsaXpp
bmcgdGhlc2UgZXh0ZW5zaW9ucyB0byBjYWxsIHRocm91Z2ggdGhlCisgICAgICAgIEV4dGVuc2lv
bnMzRCBvYmplY3Qgb3IgaXRzIHN1YmNsYXNzZXMuCisKKyAgICAgICAgVGVzdGVkOgorICAgICAg
ICAgLSBDaHJvbWl1bSBvbiBMaW51eCB3aXRoIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBhbmQgSFRN
TDUgdmlkZW8KKyAgICAgICAgIC0gQ2hyb21pdW0gb24gTWFjIE9TIFggd2l0aCBXZWJHTCBhbmQg
Q1NTIDNEIGNvbnRlbnQKKyAgICAgICAgIC0gU2FmYXJpIG9uIE1hYyBPUyBYIHdpdGggV2ViR0wg
YW5kIENTUyAzRCBjb250ZW50CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMv
V2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBzcmMvRXh0ZW5zaW9uczNEQ2hyb21p
dW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpF
eHRlbnNpb25zM0RDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJv
bWl1bTo6fkV4dGVuc2lvbnMzRENocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRENocm9taXVtOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RD
aHJvbWl1bTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlV
TSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwVGV4U3ViSW1h
Z2UyRENIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp1
bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RDaHJvbWl1bTo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSk6CisgICAgICAg
ICogc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN1cHBvcnRz
RXh0ZW5zaW9uKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oOgor
ICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y29weVRleHR1cmVU
b1BhcmVudFRleHR1cmVDSFJPTUlVTSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmdldFN0cmluZyk6CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKwogMjAxMC0xMS0wMiAg
Q2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWlsbG9yeUBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDcx
MTk5KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTMy
OCw2ICszMjgsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvRWRpdG9yQ2xpZW50SW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oJywKKyAgICAgICAgICAgICAgICAn
c3JjL0V4dGVuc2lvbnMzRENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9FeHRl
cm5hbFBvcHVwTWVudS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvRXh0ZXJuYWxQb3B1cE1l
bnUuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwJywK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJ
KHJldmlzaW9uIDcxMTk5KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTggKzEzNCwxMyBAQCBwdWJsaWM6CiAg
ICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZC4KICAgICB2aXJ0dWFs
IHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcikgPSAwOwogCi0gICAg
Ly8gRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
QkdSQSgpID0gMDsKLQogICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKLSAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNNYXBTdWJDSFJPTUlVTSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIG1hcEJ1
ZmZlclN1YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBvZmZzZXQsIGludCBzaXpl
LCB1bnNpZ25lZCBhY2Nlc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdW5tYXBCdWZmZXJTdWJE
YXRhQ0hST01JVU0oY29uc3Qgdm9pZCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIG1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQs
IGludCB5b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5z
aWduZWQgdHlwZSwgdW5zaWduZWQgYWNjZXNzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVubWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqKSA9IDA7CiAKICAgICAvLyBHTF9DSFJP
TUlVTV9jb3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUKLSAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1
cmUsIHVuc2lnbmVkIHBhcmVudFRleHR1cmUpID0gMDsKIAogICAgIC8vIFRoZSBlbnRyeSBwb2lu
dHMgYmVsb3cgbWFwIGRpcmVjdGx5IHRvIHRoZSBPcGVuR0wgRVMgMi4wIEFQSS4KSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRENo
cm9taXVtOjpFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBp
bnRlcm5hbCkKKyAgICA6IG1faW50ZXJuYWwoaW50ZXJuYWwpCit7Cit9CisKK0V4dGVuc2lvbnMz
RENocm9taXVtOjp+RXh0ZW5zaW9uczNEQ2hyb21pdW0oKQoreworfQorCitib29sIEV4dGVuc2lv
bnMzRENocm9taXVtOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPnN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOworfQorCitpbnQgRXh0ZW5zaW9u
czNEQ2hyb21pdW06OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgdGhpcyBpbiBHcmFwaGljc0NvbnRleHQzREludGVybmFsIC8gV2ViR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbC4KKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VS
Uk9SOworfQorCit2b2lkKiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNI
Uk9NSVVNKHVuc2lnbmVkIHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNpemUsIHVuc2lnbmVkIGFj
Y2VzcykKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVN
KHRhcmdldCwgb2Zmc2V0LCBzaXplLCBhY2Nlc3MpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENo
cm9taXVtOjp1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKiBkYXRhKQorewor
ICAgIG1faW50ZXJuYWwtPnVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGRhdGEpOworfQorCit2
b2lkKiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHVuc2ln
bmVkIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBh
Y2Nlc3MpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlV
TSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGFjY2Vzcyk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbV9pbnRlcm5hbC0+
dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oZGF0YSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OmNvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0odW5zaWduZWQgdGV4
dHVyZSwgdW5zaWduZWQgcGFyZW50VGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5jb3B5VGV4
dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKHRleHR1cmUsIHBhcmVudFRleHR1cmUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9t
aXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgpAQCAt
ODMsNiArODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogICAgIDogbV93ZWJWaWV3SW1wbCgw
KQorICAgICwgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCiAjaWYgUExB
VEZPUk0oU0tJQSkKICNlbGlmIFBMQVRGT1JNKENHKQogICAgICwgbV9yZW5kZXJPdXRwdXQoMCkK
QEAgLTY3NSwxMyArNjc3LDMxIEBAIERFTEVHQVRFX1RPX0lNUExfMShkZWxldGVTaGFkZXIsIHVu
c2lnbmUKIERFTEVHQVRFX1RPX0lNUExfMShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIAogREVM
RUdBVEVfVE9fSU1QTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25nKQotREVMRUdB
VEVfVE9fSU1QTF9SKHN1cHBvcnRzQkdSQSwgYm9vbCkKLURFTEVHQVRFX1RPX0lNUExfUihzdXBw
b3J0c01hcFN1YkNIUk9NSVVNLCBib29sKQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQor
ICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNEQ2hyb21pdW0o
dGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpIHsKKyAgICAg
ICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6
OkVYVEVOU0lPTlMpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25z
OworICAgICAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9u
cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxh
YmxlRXh0ZW5zaW9uc1tpXSk7CisgICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNp
b25zID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKTsKK30KKwogREVMRUdBVEVfVE9fSU1QTF80UihtYXBCdWZmZXJTdWJEYXRhQ0hS
T01JVU0sIHVuc2lnbmVkLCBpbnQsIGludCwgdW5zaWduZWQsIHZvaWQqKQogREVMRUdBVEVfVE9f
SU1QTF8xKHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNLCBjb25zdCB2b2lkKikKIERFTEVHQVRF
X1RPX0lNUExfOVIobWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCB1bnNpZ25lZCwgaW50LCBpbnQs
IGludCwgaW50LCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHZvaWQqKQogREVM
RUdBVEVfVE9fSU1QTF8xKHVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBjb25zdCB2b2lkKikK
LURFTEVHQVRFX1RPX0lNUExfUihzdXBwb3J0c0NvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hS
T01JVU0sIGJvb2wpCiBERUxFR0FURV9UT19JTVBMXzIoY29weVRleHR1cmVUb1BhcmVudFRleHR1
cmVDSFJPTUlVTSwgdW5zaWduZWQsIHVuc2lnbmVkKQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEw
MjMsMTQgKzEwNDMsNyBAQCBERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVNoYWRlciwgdW5z
CiBERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVRleHR1cmUsIHVuc2lnbmVkKQogCiBERUxF
R0FURV9UT19JTlRFUk5BTF8xKHN5bnRoZXNpemVHTEVycm9yLCB1bnNpZ25lZCBsb25nKQotREVM
RUdBVEVfVE9fSU5URVJOQUxfUihzdXBwb3J0c0JHUkEsIGJvb2wpCi1ERUxFR0FURV9UT19JTlRF
Uk5BTF9SKHN1cHBvcnRzTWFwU3ViQ0hST01JVU0sIGJvb2wpCi1ERUxFR0FURV9UT19JTlRFUk5B
TF80UihtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0sIHVuc2lnbmVkLCBpbnQsIGludCwgdW5zaWdu
ZWQsIHZvaWQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMSh1bm1hcEJ1ZmZlclN1YkRhdGFDSFJP
TUlVTSwgY29uc3Qgdm9pZCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF85UihtYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0sIHVuc2lnbmVkLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgdm9pZCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKHVubWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBjb25zdCB2b2lkKikKLURFTEVHQVRFX1RPX0lOVEVSTkFM
X1Ioc3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNLCBib29sKQotREVM
RUdBVEVfVE9fSU5URVJOQUxfMihjb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNLCB1
bnNpZ25lZCwgdW5zaWduZWQpCitERUxFR0FURV9UT19JTlRFUk5BTF9SKGdldEV4dGVuc2lvbnMs
IEV4dGVuc2lvbnMzRCopCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAogewpAQCAtMTA0NywxMSArMTA2MCw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzRXJyb3JHZW5lcmF0ZWQKICAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpOwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAgIHJldHVybiBOT19FUlJPUjsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5oCShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5l
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIlNrQml0bWFwLmgiCkBAIC0zOSw2ICs0MCw3
IEBAIGNsYXNzIFdlYlZpZXdJbXBsOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEV4
dGVuc2lvbnMzRENocm9taXVtOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNs
YXNzIFdlYkdMTGF5ZXJDaHJvbWl1bTsKICNlbmRpZgpAQCAtMjYwLDcgKzI2Miw5IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcik7CiAK
LSAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgLy8gRXh0ZW5zaW9uczNEIHN1cHBvcnQuCisg
ICAgRXh0ZW5zaW9uczNEKiBnZXRFeHRlbnNpb25zKCk7CisgICAgYm9vbCBzdXBwb3J0c0V4dGVu
c2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgLy8gRVhUX3RleHR1cmVfZm9ybWF0X0JH
UkE4ODg4CiAgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKQEAgLTI3OCw3ICsyODIsMTAgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
PiBtX2ltcGw7CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtPiBtX2V4dGVuc2lvbnM7
CiAgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKKyAgICBib29sIG1faW5p
dGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWls
YWJsZUV4dGVuc2lvbnM7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJl
ZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKICNlbmRpZgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiA3MTE5OSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDggQEAKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxz
dHJpbmcuaD4KQEAgLTUzMSwyMCArNTMyLDYgQEAgdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpzeQogICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CiB9CiAKLWJv
b2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c3VwcG9ydHNCR1JBKCkKLXsKLSAg
ICAvLyBTdXBwb3J0ZWQgc2luY2UgT3BlbkdMIDEuMi4gSG93ZXZlciwgZ2xUZXhJbWFnZTJEKCkg
bXVzdCBiZSBtb2RpZmllZAotICAgIC8vIHRvIHRyYW5zbGF0ZSB0aGUgaW50ZXJuYWxGb3JtYXQg
ZnJvbSBHTF9CR1JBIHRvIEdMX1JHQkEsIHNpbmNlIHRoZQotICAgIC8vIGZvcm1lciBpcyBub3Qg
YWNjZXB0ZWQgYnkgZGVza3RvcCBHTC4gUmV0dXJuIGZhbHNlIHVudGlsIHRoaXMgaXMgZG9uZS4K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6c3VwcG9ydHNNYXBTdWJDSFJPTUlVTSgpCi17Ci0gICAgLy8gV2UgZG9uJ3QgY2xhaW0g
c3VwcG9ydCBmb3IgdGhpcyBleHRlbnNpb24gYXQgdGhpcyB0aW1lCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkKiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjptYXBCdWZmZXJT
dWJEYXRhQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5z
aWduZWQgYWNjZXNzKQogewogICAgIHJldHVybiAwOwpAQCAtNTYzLDE1ICs1NTAsMTEgQEAgdm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp1bgogewogfQogCi1ib29sIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnN1cHBvcnRzQ29weVRleHR1cmVUb1BhcmVudFRl
eHR1cmVDSFJPTUlVTSgpCi17Ci0gICAgLy8gVGhpcyBleHRlbnNpb24gcmVxdWlyZXMgdGhpcyBk
ZXNrdG9wR0wtb25seSBmdW5jdGlvbiAoR0xFUzIgZG9lc24ndAotICAgIC8vIHN1cHBvcnQgaXQp
LCBzbyBjaGVjayBmb3IgaXRzIGV4aXN0ZW5jZSBoZXJlLgotICAgIHJldHVybiBnbEdldFRleExl
dmVsUGFyYW1ldGVyaXY7Ci19Ci0KIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSh1bnNpZ25lZCBpZCwgdW5zaWdu
ZWQgaWQyKQogeworICAgIGlmICghZ2xHZXRUZXhMZXZlbFBhcmFtZXRlcml2KQorICAgICAgICBy
ZXR1cm47CisKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fY29weVRleHR1cmVUb1BhcmVudFRleHR1cmVGQk8p
OwogICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVIsCkBAIC0xMTMw
LDcgKzExMTMsMTYgQEAgV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAog
V2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFN0cmluZyh1bnNp
Z25lZCBsb25nIG5hbWUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IFdlYlN0cmluZzo6ZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRT
dHJpbmcobmFtZSkpKTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBw
ZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3RyaW5nKG5hbWUpKSk7Cisg
ICAgaWYgKG5hbWUgPT0gR0xfRVhURU5TSU9OUykgeworICAgICAgICAvLyBHTF9DSFJPTUlVTV9j
b3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUgcmVxdWlyZXMgdGhpcworICAgICAgICAvLyBk
ZXNrdG9wR0wtb25seSBmdW5jdGlvbiAoR0xFUzIgZG9lc24ndCBzdXBwb3J0IGl0KSwgc28KKyAg
ICAgICAgLy8gY2hlY2sgZm9yIGl0cyBleGlzdGVuY2UgaGVyZS4KKyAgICAgICAgaWYgKGdsR2V0
VGV4TGV2ZWxQYXJhbWV0ZXJpdikKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiBHTF9DSFJP
TUlVTV9jb3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUiKTsKKyAgICB9CisgICAgcmV0dXJu
IFdlYlN0cmluZyhyZXN1bHQudG9TdHJpbmcoKSk7CiB9CiAKIERFTEVHQVRFX1RPX0dMXzMoZ2V0
VGV4UGFyYW1ldGVyZnYsIEdldFRleFBhcmFtZXRlcmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBmbG9hdCopCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNpb24gNzExOTkpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEsMTMgKzgxLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZVRleHR1cmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNp
Z25lZCBsb25nIGVycm9yKTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNCR1JBKCk7Ci0gICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01JVU0oKTsKICAgICB2aXJ0dWFsIHZvaWQq
IG1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBvZmZzZXQsIGlu
dCBzaXplLCB1bnNpZ25lZCBhY2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCB1bm1hcEJ1ZmZlclN1
YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKik7CiAgICAgdmlydHVhbCB2b2lkKiBtYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBp
bnQgeW9mZnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHR5cGUsIHVuc2lnbmVkIGFjY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIHVubWFwVGV4U3Vi
SW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqKTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHND
b3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKCk7CiAgICAgdmlydHVhbCB2b2lkIGNv
cHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0odW5zaWduZWQgdGV4dHVyZSwgdW5zaWdu
ZWQgcGFyZW50VGV4dHVyZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWN0aXZlVGV4dHVyZSh1bnNp
Z25lZCBsb25nIHRleHR1cmUpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHJldmlzaW9uIDcxMTk5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJEcmFnRGF0YS5oIgog
I2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC0xMDUwLDcg
KzEwNTEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiAgICAg
bV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIGlmIChjb250ZXh0LT5nZXRH
cmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQor
ICAgIGlmIChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCiAgICAgICAgIHJlYWxsb2NhdGVS
ZW5kZXJlcigpOwogI2VuZGlmCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72872</attachid>
            <date>2010-11-03 14:26:07 -0700</date>
            <delta_ts>2010-11-03 14:35:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46894-20101103142607.patch</filename>
            <type>text/plain</type>
            <size>59621</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxMjYwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTEtMDMgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZGVzaWduIGV4dGVuc2lvbiBtZWNoYW5pc20gaW4gR3JhcGhp
Y3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2ODk0CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAtIEV4
cG9zZWQgU3RyaW5nOjpzcGxpdChjb25zdCBTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPikuCisKIDIw
MTAtMTEtMDMgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJyaW5n
IFdURi52Y3Byb2ogdXAgdG8gZGF0ZQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAko
cmV2aXNpb24gNzEyNjApCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2Myw2ICs1NjMsNyBAQCBfX1pOSzNXVEY2U3RyaW5nMTljaGFyYWN0
ZXJTdGFydGluZ0F0RWoKIF9fWk5LM1dURjZTdHJpbmc0dXRmOEViCiBfX1pOSzNXVEY2U3RyaW5n
NWFzY2lpRXYKIF9fWk5LM1dURjZTdHJpbmc1bG93ZXJFdgorX19aTkszV1RGNlN0cmluZzVzcGxp
dEVSS1MwX1JOU182VmVjdG9ySVMwX0xtMEVFRQogX19aTkszV1RGNlN0cmluZzVzcGxpdEVSS1Mw
X2JSTlNfNlZlY3RvcklTMF9MbTBFRUUKIF9fWk5LM1dURjZTdHJpbmc1c3BsaXRFdFJOU182VmVj
dG9ySVMwX0xtMEVFRQogX19aTkszV1RGNlN0cmluZzVzcGxpdEV0YlJOU182VmVjdG9ySVMwX0xt
MEVFRQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDcxMjYwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw3MSBAQAorMjAxMC0xMS0wMyAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVkZXNpZ24gZXh0ZW5zaW9uIG1lY2hhbmlzbSBpbiBHcmFwaGljc0NvbnRleHQzRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4OTQKKworICAg
ICAgICBVcG9uIHJlcXVlc3QsIGZhY3RvcmVkIG91dCBleHRlbnNpb24gc3VwcG9ydCBmcm9tIEdy
YXBoaWNzQ29udGV4dDNECisgICAgICAgIGludG8gYSBuZXcgRXh0ZW5zaW9uczNEIGNsYXNzLiAo
VGhlIHBsdXJhbCB3YXMgY2hvc2VuIGJlY2F1c2UgdGhlCisgICAgICAgIGNsYXNzIGFuZCBzdWJj
bGFzc2VzIGhvbGQgbXVsdGlwbGUgZXh0ZW5zaW9ucy4pCisKKyAgICAgICAgVW5saWtlIEdyYXBo
aWNzQ29udGV4dDNELCBFeHRlbnNpb25zM0QgY29udGFpbnMgb25seSBwdXJlIHZpcnR1YWwKKyAg
ICAgICAgbWV0aG9kcy4gVGhpcyB3YXMgZG9uZSBiZWNhdXNlIEV4dGVuc2lvbnMzRCdzIGluaGVy
aXRhbmNlIGRpYWdyYW0KKyAgICAgICAgYW5kIHVzYWdlIHBhdHRlcm4gaXMgdmVyeSBkaWZmZXJl
bnQgZnJvbSB0aGF0IG9mIEdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICBhbmQgdGhlIGNvbmNy
ZXRlIHN1YmNsYXNzZXMgbmVlZCB0byBkZWNpZGUgaG93IHRvIGltcGxlbWVudCB0aGUKKyAgICAg
ICAgdmFyaW91cyBlbnRyeSBwb2ludHMuIFJlcXVpcmluZyB0aGVtIHRvIGJlIHBsYWNlZCBhdCB0
aGUKKyAgICAgICAgRXh0ZW5zaW9uczNEIGxldmVsIHdpbGwgY2F1c2UgaW1wbGVtZW50YXRpb24g
ZGV0YWlscyB0byBsZWFrIGludG8KKyAgICAgICAgdGhlIGJhc2UgY2xhc3MsIHdoaWNoIGlzIGhp
Z2hseSB1bmRlc2lyYWJsZS4gQW55IHZpcnR1YWwgY2FsbAorICAgICAgICBvdmVyaGVhZCB0byB0
aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBiZSBuZWdsaWdpYmxlLgorCisgICAgICAgIENoYW5nZWQg
Y2FsbCBzaXRlcyB1dGlsaXppbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byBjYWxsIHRocm91Z2ggdGhl
CisgICAgICAgIEV4dGVuc2lvbnMzRCBvYmplY3Qgb3IgaXRzIHN1YmNsYXNzZXMuCisKKyAgICAg
ICAgVGVzdGVkOgorICAgICAgICAgLSBDaHJvbWl1bSBvbiBMaW51eCB3aXRoIGFjY2VsZXJhdGVk
IDJEIGNhbnZhcyBhbmQgSFRNTDUgdmlkZW8KKyAgICAgICAgIC0gQ2hyb21pdW0gb24gTWFjIE9T
IFggd2l0aCBXZWJHTCBhbmQgQ1NTIDNEIGNvbnRlbnQKKyAgICAgICAgIC0gU2FmYXJpIG9uIE1h
YyBPUyBYIHdpdGggV2ViR0wgYW5kIENTUyAzRCBjb250ZW50CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0Qu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0Q6On5FeHRlbnNpb25zM0Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
c3VwcG9ydHNCR1JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVy
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Rm9ybWF0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdM
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5z
aW9uczNEUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRFF0OjpF
eHRlbnNpb25zM0RRdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RRdDo6fkV4dGVu
c2lvbnMzRFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRFF0OjpzdXBwb3J0cyk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RRdDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9u
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFy
ZHdhcmVUb1NvZnR3YXJlKToKKwogMjAxMC0xMS0wMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5y
b3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBy
NzEyNTMKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MTI2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDIzLDYgKzI0MjMsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1
bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lv
bnMzRENocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCcsCkBAIC0yNzQw
LDYgKzI3NDEsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuc2lvbnMzRC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNzEyNjApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjc3LDcgKzM2NzcsOSBAQCBIRUFERVJTICs9IFwKICAgICAgICAgaHRtbC9jYW52
YXMvVWludDhBcnJheS5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCBcCiAg
ICAgICAgIGh0bWwvY2FudmFzL1VpbnQxNkFycmF5LmggXAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
c2lvbnMzRC5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmgKIAogICAg
ICF2OCB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApAQCAtMzcxNSw2ICszNzE3LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgICAgIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5LmNwcCBcCiAgICAgICAgIGh0
bWwvY2FudmFzL1VpbnQxNkFycmF5LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0V4dGVu
c2lvbnMzRFF0LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCiAKIH0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA3MTI2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgwLDYgKzE0ODAsOSBAQAogCQk2
RTRFOTFBRDEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEU5MUE4MTBGN0ZC
MzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5oICovOyB9OwogCQk2RTRFOTFB
RTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTRFOTFBOTEwRjdGQjMxMDBB
Mjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CiAJCTZFNEU5MUFGMTBG
N0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTRFOTFBQTEwRjdGQjMxMDBBMjc3OUMg
LyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovOyB9OworCQk2RTY3RDJBNjEyODBFOEE0MDA4
NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0RPcGVuR0wuY3BwICovOyB9OworCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0
ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmgg
Ki87IH07CisJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4
QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKIAkJNkU5NkJCMUMxMTk4NkVFMjAw
N0Q5NENEIC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFOTZCQjFBMTE5ODZFRTEwMDdEOTRDRCAvKiBJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlLmggKi87IH07CiAJCTZFOTZCQjFEMTE5ODZFRTIwMDdEOTRDRCAv
KiBUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkU5NkJCMUIxMTk4NkVFMTAwN0Q5NENEIC8qIFR5cGVkQXJyYXlCYXNlLmggKi87
IH07CiAJCTZFRThBNzcyMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVF
OEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87
IH07CkBAIC03NjIwLDYgKzc2MjMsOSBAQAogCQk2RTRFOTFBOTEwRjdGQjMxMDBBMjc3OUMgLyog
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0RTkx
QUExMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBwYXRoID0g
Y2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkU0RTkxQUIxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsOyBw
YXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3Bl
bkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMz
RE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjdEMkE1MTI4MEU4
QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFOTZCQjFBMTE5ODZFRTEwMDdEOTRDRCAvKiBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEludGVncmFsVHlw
ZWRBcnJheUJhc2UuaDsgcGF0aCA9IGNhbnZhcy9JbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFOTZCQjFCMTE5ODZFRTEwMDdEOTRDRCAvKiBU
eXBlZEFycmF5QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUeXBlZEFy
cmF5QmFzZS5oOyBwYXRoID0gY2FudmFzL1R5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2NTcxLDYgKzE2NTc3LDcgQEAKIAkJQjJBMDE1OTEwQUY2Q0Q1MzAwNkJDRTBFIC8qIGdyYXBo
aWNzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk2RTY3
RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCiAJCQkJQjI3NTM1Mjkw
QjA1MzgxNDAwMkNFNjRGIC8qIGNnICovLAogCQkJCUI1MzIwRDY4MTIyQTI0RTkwMDJEMTQ0MCAv
KiBjb2NvYSAqLywKIAkJCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLywK
QEAgLTE4Mzk1LDYgKzE4NDAyLDggQEAKIAkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9w
ZW5nbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNkU2
N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCisJCQkJ
NkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJ
CUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IG9wZW5nbDsKQEAgLTIxMjY1LDYgKzIxMjc0LDggQEAKIAkJ
CQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEzMjQsNyArMjEzMzUsNiBA
QAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlD
Mjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQ
cm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIu
NCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5j
b2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM4Mjgs
NiArMjM4MzgsNyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZE
RjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFNjdE
MkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RfaAor
I2RlZmluZSBFeHRlbnNpb25zM0RfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgY29udGFp
bmluZyBvbmx5IHB1cmUgdmlydHVhbCBmdW5jdGlvbnMuCisvLyBJbXBsZW1lbnRhdGlvbnMgbXVz
dCBwcm92aWRlIGEgc3ViY2xhc3MuCisvLworLy8gVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGFy
ZSBkZWZpbmVkIGJlbG93IGFuZCBpbiBzdWJjbGFzc2VzLAorLy8gcG9zc2libHkgcGxhdGZvcm0t
c3BlY2lmaWMgb25lcy4KKy8vCisvLyBDYWxsaW5nIGFueSBleHRlbnNpb24gZnVuY3Rpb24gbm90
IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBjb250ZXh0CisvLyBtdXN0IGJlIGEgbm8tb3A7IGlu
IHBhcnRpY3VsYXIsIGl0IG1heSBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuIEluCisvLyB0aGlzIHNp
dHVhdGlvbiwgaWYgdGhlIGZ1bmN0aW9uIGhhcyBhIHJldHVybiB2YWx1ZSwgMCBpcyByZXR1cm5l
ZC4KK2NsYXNzIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9u
czNEKCkge30KKworICAgIC8vIFN1cHBvcnRlZCBleHRlbnNpb25zOgorICAgIC8vICAgR0xfRVhU
X3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgLy8gICBHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YQorICAgIC8vICAgR0xfQVJCX3JvYnVzdG5lc3MKKworICAgIC8vIFRha2VzIGZ1bGwgbmFtZSBv
ZiBleHRlbnNpb247IGZvciBleGFtcGxlLAorICAgIC8vICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODgiLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKSA9IDA7
CisKKyAgICBlbnVtIHsKKyAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
IGVudW1zCisgICAgICAgIEJHUkFfRVhUID0gMHg4MEUxLAorCisgICAgICAgIC8vIEdMX0FSQl9y
b2J1c3RuZXNzIGVudW1zCisgICAgICAgIEdVSUxUWV9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1
MywKKyAgICAgICAgSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTQsCisgICAgICAg
IFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTUKKyAgICB9OworCisgICAgLy8gR0xf
QVJCX3JvYnVzdG5lc3MKKyAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXh0ZW5z
aW9uczNEX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCShyZXZpc2lvbiA3MTI2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg4LDU1ICsxMDg4
LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyhjb25zdAogICAgIHJldHVy
biB0cnVlOwogfQogCi0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6c3VwcG9ydHNCR1JBKCkKLXsKLSAgICAvLyBGb3IgT3BlbkdMIEVTMi4wLCB0aGlzIHJl
cXVpcmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0b3AgR0wsIEJH
UkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0KLSAgICAvLyBIb3dldmVy
LCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhlIGludGVybmFsRm9y
bWF0IHRvCi0gICAgLy8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUgZGVza3RvcCBH
TCB3aWxsIG5vdCBhY2NlcHQgR0xfQkdSQQotICAgIC8vIChtdXN0IGJlIEdMX1JHQkEpLCBzbyB0
aGlzIG11c3QgYmUgY2hlY2tlZCBvbiBlYWNoIHBsYXRmb3JtLgotICAgIC8vIFJldHVybmluZyBm
YWxzZSBmb3Igbm93IHRvIGJlIHNhZmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpzdXBwb3J0c01hcFN1YkNIUk9NSVVNKCkKLXsKLSAgICAvLyBXZSBk
b24ndCBjbGFpbSBzdXBwb3J0IGZvciB0aGlzIGV4dGVuc2lvbiBhdCB0aGlzIHRpbWUuCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkKiBHcmFwaGljc0NvbnRleHQzRDo6bWFwQnVmZmVyU3Vi
RGF0YUNIUk9NSVVNKHVuc2lnbmVkLCBpbnQsIGludCwgdW5zaWduZWQpCi17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVubWFwQnVmZmVyU3ViRGF0YUNIUk9N
SVVNKGNvbnN0IHZvaWQqKQotewotfQotCi12b2lkKiBHcmFwaGljc0NvbnRleHQzRDo6bWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKHVuc2lnbmVkLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5z
aWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCop
Ci17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQ29weVRleHR1cmVUb1Bh
cmVudFRleHR1cmVDSFJPTUlVTSgpCi17Ci0gICAgLy8gV2UgZG9uJ3QgY2xhaW0gc3VwcG9ydCBm
b3IgdGhpcyBleHRlbnNpb24gYXQgdGhpcyB0aW1lLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlV
TSh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcxMjYwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw2ICs3NiwxMCBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
OwogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKK2NsYXNzIEV4dGVuc2lvbnMzRDsKKyNpZiBQTEFURk9S
TShNQUMpCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CisjZW5kaWYKIGNsYXNzIEhvc3RXaW5k
b3c7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlRGF0YTsKQEAgLTQwMSwxOSArNDA1LDYgQEAg
cHVibGljOgogICAgICAgICAvLyBXZWJHTC1zcGVjaWZpYyBlbnVtcwogICAgICAgICBVTlBBQ0tf
RkxJUF9ZX1dFQkdMID0gMHg5MjQwLAogICAgICAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0wgPSAweDkyNDEsCi0KLSAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4
ODg4Ci0gICAgICAgIEJHUkFfRVhUID0gMHg4MEUxLAotCi0gICAgICAgIC8vIEdMX0NIUk9NSVVN
X21hcF9zdWIgKGVudW1zIGluaGVyaXRlZCBmcm9tIEdMX0FSQl92ZXJ0ZXhfYnVmZmVyX29iamVj
dCkKLSAgICAgICAgUkVBRF9PTkxZID0gMHg4OEI4LAotICAgICAgICBXUklURV9PTkxZID0gMHg4
OEI5LAotCi0gICAgICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzIGVudW1zCi0gICAgICAgIEdVSUxU
WV9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1MywKLSAgICAgICAgSU5OT0NFTlRfQ09OVEVYVF9S
RVNFVF9BUkIgPSAweDgyNTQsCi0gICAgICAgIFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkIgPSAw
eDgyNTUKLQogICAgIH07CiAKICAgICAvLyBDb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMuCkBA
IC03ODYsMjIgKzc3NywxMSBAQCBwdWJsaWM6CiAgICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVy
IHRoZXkgd2VyZSBhZGRlZC4KICAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxv
bmcgZXJyb3IpOwogCi0gICAgLy8gRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAgYm9v
bCBzdXBwb3J0c0JHUkEoKTsKLQotICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKLSAgICBib29s
IHN1cHBvcnRzTWFwU3ViQ0hST01JVU0oKTsKLSAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hS
T01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgYWNj
ZXNzKTsKLSAgICB2b2lkIHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKTsK
LSAgICB2b2lkKiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQg
bGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGFjY2Vzcyk7Ci0gICAgdm9p
ZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2b2lkKik7Ci0KLSAgICAvLyBHTF9D
SFJPTUlVTV9jb3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUKLSAgICBib29sIHN1cHBvcnRz
Q29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSgpOwotICAgIHZvaWQgY29weVRleHR1
cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSh1bnNpZ25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBwYXJl
bnRUZXh0dXJlKTsKLQotICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzCi0gICAgaW50IGdldEdyYXBo
aWNzUmVzZXRTdGF0dXNBUkIoKTsKKyAgICAvLyBTdXBwb3J0IGZvciBleHRlbnNpb25zLiBSZXR1
cm5zIGEgbm9uLW51bGwgb2JqZWN0LCB0aG91Z2ggbm90CisgICAgLy8gYWxsIG1ldGhvZHMgaXQg
Y29udGFpbnMgbWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKKyAgICAvLyBjdXJy
ZW50IGhhcmR3YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9uczNEOjpzdXBwb3J0cygpIHRvCisgICAg
Ly8gZGV0ZXJtaW5lIHRoaXMuCisgICAgRXh0ZW5zaW9uczNEKiBnZXRFeHRlbnNpb25zKCk7CiAK
ICAgcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKQEAg
LTg3Miw2ICs4NTIsOCBAQCBwdWJsaWM6CiAKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBp
bGVyOwogCisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTD4gbV9leHRlbnNpb25zOworCiAg
ICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0
ZXhBcnJheTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3
aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzEyNjAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oIgogCkBAIC02OSw5ICs3MCwxNCBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xv
clRleHR1cmUoR3JhCiBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZmJvKGNvbnRleHQtPmNyZWF0ZUZyYW1l
YnVmZmVyKCkpCisgICAgLCBtX2ZibygwKQogICAgICwgbV9pbnRlcm5hbChuZXcgRHJhd2luZ0J1
ZmZlckludGVybmFsKQogeworICAgIGlmICghbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmVfdG9fcGFyZW50X3RleHR1cmUiKSkgewor
ICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIG1f
aW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNv
bnRleHQsIHNpemUpOwogfQpAQCAtMTA3LDcgKzExMyw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6
cHVibGlzaFRvUGxhdGZvcm1MYXkKICAgICAvLyBoYXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRv
ciBkcmF3cy4gIFRoaXMgbWVhbnMgd2UgbWlnaHQgZHJhdyBzdGFsZSBmcmFtZXMgc29tZXRpbWVz
LiAgSWRlYWxseSB0aGlzCiAgICAgLy8gd291bGQgaW5zZXJ0IGEgZmVuY2UgaW50byB0aGUgY2hp
bGQgY29tbWFuZCBzdHJlYW0gdGhhdCB0aGUgY29tcG9zaXRvciBjb3VsZCB3YWl0IGZvci4KICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fY29udGV4dC0+Y29weVRl
eHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTShtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRl
eHR1cmUsIHBhcmVudFRleHR1cmUpOworICAgIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9t
aXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5jb3B5VGV4dHVyZVRvUGFyZW50VGV4
dHVyZUNIUk9NSVVNKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgcGFyZW50VGV4
dHVyZSk7CiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RD
aHJvbWl1bS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RDaHJvbWl1bV9oCisjZGVmaW5lIEV4dGVuc2lv
bnMzRENocm9taXVtX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw7CisKK2NsYXNzIEV4
dGVuc2lvbnMzRENocm9taXVtIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+RXh0ZW5zaW9uczNEQ2hyb21pdW0oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBt
ZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2
aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKKyAgICBlbnVtIHsKKyAg
ICAgICAgLy8gR0xfQ0hST01JVU1fbWFwX3N1YiAoZW51bXMgaW5oZXJpdGVkIGZyb20gR0xfQVJC
X3ZlcnRleF9idWZmZXJfb2JqZWN0KQorICAgICAgICBSRUFEX09OTFkgPSAweDg4QjgsCisgICAg
ICAgIFdSSVRFX09OTFkgPSAweDg4QjkKKyAgICB9OworCisgICAgLy8gR0xfQ0hST01JVU1fbWFw
X3N1YgorICAgIHZvaWQqIG1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQs
IGludCBvZmZzZXQsIGludCBzaXplLCB1bnNpZ25lZCBhY2Nlc3MpOworICAgIHZvaWQgdW5tYXBC
dWZmZXJTdWJEYXRhQ0hST01JVU0oY29uc3Qgdm9pZCopOworICAgIHZvaWQqIG1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGlu
dCB5b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgdW5zaWduZWQgYWNjZXNzKTsKKyAgICB2b2lkIHVubWFwVGV4U3ViSW1hZ2UyRENI
Uk9NSVVNKGNvbnN0IHZvaWQqKTsKKworICAgIC8vIEdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZV90
b19wYXJlbnRfdGV4dHVyZQorICAgIHZvaWQgY29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJP
TUlVTSh1bnNpZ25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBwYXJlbnRUZXh0dXJlKTsKKworcHJpdmF0
ZToKKyAgICAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgc3RyaWN0bHkgb3duZWQgYnkg
dGhlIEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9uIGFuZCBkbyBub3QKKyAgICAvLyBu
ZWVkIHRvIGJlIGluc3RhbnRpYXRlZCBieSBhbnkgb3RoZXIgY29kZS4KKyAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDsKKyAgICBleHBsaWNpdCBFeHRlbnNpb25zM0RD
aHJvbWl1bShHcmFwaGljc0NvbnRleHQzREludGVybmFsKik7CisKKyAgICAvLyBXZWFrIHBvaW50
ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHQzREludGVybmFsCisgICAgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbCogbV9pbnRlcm5hbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEV4dGVuc2lvbnMzRENocm9taXVtX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDcxMjYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJv
bWl1bS5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgpAQCAtMzAyLDEwICszMDMsMTAgQEAgdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUoRwogewogICAgIEFTU0VSVChjb250
ZXh0KTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotICAgIHZvaWQqIG1lbSA9IGNvbnRleHQt
Pm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBHcmFwaGljc0NvbnRleHQzRDo6V1JJ
VEVfT05MWSk7CisgICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21p
dW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgo
KSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwogICAgIGlmIChtZW0p
IHsKICAgICAgICAgbWVtY3B5KG1lbSwgZGF0YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5z
aW9ucy5oZWlnaHQoKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bm1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTShtZW0pKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0
PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBU
ZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgc29ydCBvZiBjb2RlIHRvIGhhbmRsZSB0aGUgY2FzZSB3
aGVuCiAgICAgICAgIC8vIG1hcFRleFN1YkltYWdlMkQgZmFpbHMuCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QuY3BwCShyZXZpc2lvbiA3MTI2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKQEAg
LTE3OCwxOCArMTc5LDggQEAgdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cwogCiBib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzdXBwb3J0c0JHUkEoKQogewotICAg
IHJldHVybiBtX2NvbnRleHQtPnN1cHBvcnRzQkdSQSgpOwotfQotCi1ib29sIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEOjpzdXBwb3J0c0NvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0o
KQotCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+c3VwcG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50
VGV4dHVyZUNIUk9NSVVNKCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0odW5zaWduZWQgdGV4dHVyZSwgdW5zaWdu
ZWQgcGFyZW50VGV4dHVyZSkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5jb3B5VGV4dHVyZVRv
UGFyZW50VGV4dHVyZUNIUk9NSVVNKHRleHR1cmUsIHBhcmVudFRleHR1cmUpOworICAgIHJldHVy
biBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKIH0KIAogVGV4dHVyZSogU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBUZXh0
dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgJKHJldmlzaW9uIDcxMjYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAs
NiBAQCBwdWJsaWM6CiAKICAgICBib29sIHN1cHBvcnRzQkdSQSgpOwogCi0gICAgLy8gR0xfQ0hS
T01JVU1fY29weV90ZXh0dXJlX3RvX3BhcmVudF90ZXh0dXJlCi0gICAgYm9vbCBzdXBwb3J0c0Nv
cHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0oKTsKLSAgICB2b2lkIGNvcHlUZXh0dXJl
VG9QYXJlbnRUZXh0dXJlQ0hST01JVU0odW5zaWduZWQgdGV4dHVyZSwgdW5zaWduZWQgcGFyZW50
VGV4dHVyZSk7Ci0KICAgICAvLyBDcmVhdGVzIGEgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhl
IGdpdmVuIGltYWdlLiAgSXMgb3duZWQgYnkgdGhpcyBjb250ZXh0J3MKICAgICAvLyBUZXh0dXJl
SGFzaE1hcC4KICAgICBUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0
dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkocmV2aXNpb24gNzEyNjApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogCiAjaW5jbHVkZSAiVGV4dHVyZS5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC02OSw4ICs3MCw4IEBAIHN0YXRpYyB2b2lk
IGNvbnZlcnRGb3JtYXQoR3JhcGhpY3NDb250ZXgKICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHR1
cmU6OkJHUkE4OgotICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNCR1JBKCkpIHsKLSAgICAg
ICAgICAgICpnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBX0VYVDsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCIpKSB7CisgICAgICAgICAgICAqZ2xGb3JtYXQgPSBFeHRlbnNpb25zM0Q6
OkJHUkFfRVhUOwogICAgICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgKmdsRm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNzEyNjApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmll
dy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdM
LmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVu
R0wvZ2wuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9w
ZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKCkKKyAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zKGZhbHNlKQoreworfQorCitFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25z
M0RPcGVuR0woKQoreworfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIE5vdGUgb24gc3VwcG9ydCBmb3IgQkdSQToKKyAg
ICAvLworICAgIC8vIEZvciBPcGVuR0wgRVMyLjAsIHJlcXVpcmVzIGNoZWNraW5nIGZvcgorICAg
IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0
X2JncmEuCisgICAgLy8gRm9yIGRlc2t0b3AgR0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNp
bmNlIE9wZW5HTCAxLjIuCisgICAgLy8KKyAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdM
IEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhlCisgICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xU
ZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUgZGVza3RvcCBHTAorICAgIC8vIHdpbGwgbm90
IGFjY2VwdCBHTF9CR1JBIChtdXN0IGJlIEdMX1JHQkEpLCBzbyB0aGlzIG11c3QgYmUKKyAgICAv
LyBjaGVja2VkIG9uIGVhY2ggcGxhdGZvcm0uIERlc2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKKyAg
ICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0
X2JncmEsIHNvCisgICAgLy8gdHJlYXQgdGhlbSBhcyB1bnN1cHBvcnRlZCBoZXJlLgorICAgIGlm
ICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpIHsKKyAgICAgICAgU3RyaW5nIGV4
dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhHTF9FWFRFTlNJT05TKSkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRl
bnNpb25zOworICAgICAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0
ZW5zaW9ucyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5z
aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQo
YXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CisgICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5jb250YWlucyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4dGVuc2lvbnMzRE9wZW5HTF9oCisjZGVmaW5l
IEV4dGVuc2lvbnMzRE9wZW5HTF9oCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMKCk7CisKKyAgICAvLyBFeHRlbnNpb25z
M0QgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworCitwcml2YXRlOgor
ICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKKyAgICBFeHRlbnNpb25zM0RPcGVuR0woKTsKKworICAgIGJvb2wgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxl
RXh0ZW5zaW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4
dGVuc2lvbnMzRE9wZW5HTF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lv
biA3MTI2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TC5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC0xNDQ1LDkgKzE0NDYsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJybwogICAgIG1fc3ludGhl
dGljRXJyb3JzLmFkZChlcnJvcik7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRFeHRlbnNpb25zKCkKIHsKLSAgICByZXR1cm4gTk9fRVJST1I7CisgICAgaWYgKCFtX2V4dGVu
c2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RP
cGVuR0wpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7CiB9CiAKIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEUXQu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRXh0ZW5zaW9uczNEUXQ6OkV4dGVuc2lvbnMzRFF0KCkKK3sKK30KKworRXh0ZW5zaW9u
czNEUXQ6On5FeHRlbnNpb25zM0RRdCgpCit7Cit9CisKK2Jvb2wgRXh0ZW5zaW9uczNEUXQ6OnN1
cHBvcnRzKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgRXh0
ZW5zaW9uczNEUXQ6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9FeHRlbnNpb25zM0RRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RRdF9oCisjZGVmaW5lIEV4dGVu
c2lvbnMzRFF0X2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnMzRFF0IDogcHVibGljIEV4dGVuc2lvbnMzRCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uczNEUXQoKTsKKworICAgIC8vIEV4dGVuc2lv
bnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKK3ByaXZhdGU6
CisgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFw
aGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworICAgIEV4dGVuc2lvbnMzRFF0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RRdF9oCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlz
aW9uIDcxMjYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAi
V2ViR0xPYmplY3QuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEUXQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKQEAg
LTI1Myw2ICsyNTQsOCBAQCBwdWJsaWM6CiAgICAgUUltYWdlIG1fcGl4ZWxzOwogICAgIExpc3RI
YXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOwogCisgICAgT3duUHRyPEV4
dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CisKIHByaXZhdGU6CiAKICAgICB2b2lkKiBnZXRQ
cm9jQWRkcmVzcyhjb25zdCBTdHJpbmcmIHByb2MpOwpAQCAtMTYzMiw2ICsxNjM1LDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm8KICAgICBtX2ludGVybmFsLT5t
X3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwogfQogCitFeHRlbnNpb25zM0QqIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1faW50ZXJuYWwtPm1fZXh0
ZW5zaW9ucykKKyAgICAgICAgbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3
IEV4dGVuc2lvbnMzRFF0KTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zOwor
fQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUs
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA3MTI2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTg2MSw3ICs4NjIsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnJlYWRiYWNrSGFyZHdhCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsr
eSkgewogICAgICAgICB1aW50MzJfdCogcGl4ZWxzID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsK
ICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzQkdSQSgpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVhZFBpeGVscygwLCBoZWlnaHQgLSAxIC0geSwgd2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4
dDNEOjpCR1JBX0VYVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKDAsIGhlaWdodCAtIDEgLSB5LCB3aWR0
aCwgMSwgRXh0ZW5zaW9uczNEOjpCR1JBX0VYVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIHBpeGVscyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29udGV4dC0+cmVh
ZFBpeGVscygwLCBoZWlnaHQgLSAxIC0geSwgd2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7ICsraSkgewpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3MTI2MCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0xMS0wMyAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVkZXNpZ24gZXh0ZW5zaW9uIG1lY2hhbmlzbSBpbiBHcmFwaGljc0NvbnRleHQzRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4OTQKKworICAg
ICAgICBVcG9uIHJlcXVlc3QsIGZhY3RvcmVkIG91dCBleHRlbnNpb24gc3VwcG9ydCBmcm9tIEdy
YXBoaWNzQ29udGV4dDNECisgICAgICAgIGludG8gYSBuZXcgRXh0ZW5zaW9uczNEIGNsYXNzLiAo
VGhlIHBsdXJhbCB3YXMgY2hvc2VuIGJlY2F1c2UgdGhlCisgICAgICAgIGNsYXNzIGFuZCBzdWJj
bGFzc2VzIGhvbGQgbXVsdGlwbGUgZXh0ZW5zaW9ucy4pCisKKyAgICAgICAgVW5saWtlIEdyYXBo
aWNzQ29udGV4dDNELCBFeHRlbnNpb25zM0QgY29udGFpbnMgb25seSBwdXJlIHZpcnR1YWwKKyAg
ICAgICAgbWV0aG9kcy4gVGhpcyB3YXMgZG9uZSBiZWNhdXNlIEV4dGVuc2lvbnMzRCdzIGluaGVy
aXRhbmNlIGRpYWdyYW0KKyAgICAgICAgYW5kIHVzYWdlIHBhdHRlcm4gaXMgdmVyeSBkaWZmZXJl
bnQgZnJvbSB0aGF0IG9mIEdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICBhbmQgdGhlIGNvbmNy
ZXRlIHN1YmNsYXNzZXMgbmVlZCB0byBkZWNpZGUgaG93IHRvIGltcGxlbWVudCB0aGUKKyAgICAg
ICAgdmFyaW91cyBlbnRyeSBwb2ludHMuIFJlcXVpcmluZyB0aGVtIHRvIGJlIHBsYWNlZCBhdCB0
aGUKKyAgICAgICAgRXh0ZW5zaW9uczNEIGxldmVsIHdpbGwgY2F1c2UgaW1wbGVtZW50YXRpb24g
ZGV0YWlscyB0byBsZWFrIGludG8KKyAgICAgICAgdGhlIGJhc2UgY2xhc3MsIHdoaWNoIGlzIGhp
Z2hseSB1bmRlc2lyYWJsZS4gQW55IHZpcnR1YWwgY2FsbAorICAgICAgICBvdmVyaGVhZCB0byB0
aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBiZSBuZWdsaWdpYmxlLgorCisgICAgICAgIENoYW5nZWQg
Y2FsbCBzaXRlcyB1dGlsaXppbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byBjYWxsIHRocm91Z2ggdGhl
CisgICAgICAgIEV4dGVuc2lvbnMzRCBvYmplY3Qgb3IgaXRzIHN1YmNsYXNzZXMuCisKKyAgICAg
ICAgVGVzdGVkOgorICAgICAgICAgLSBDaHJvbWl1bSBvbiBMaW51eCB3aXRoIGFjY2VsZXJhdGVk
IDJEIGNhbnZhcyBhbmQgSFRNTDUgdmlkZW8KKyAgICAgICAgIC0gQ2hyb21pdW0gb24gTWFjIE9T
IFggd2l0aCBXZWJHTCBhbmQgQ1NTIDNEIGNvbnRlbnQKKyAgICAgICAgIC0gU2FmYXJpIG9uIE1h
YyBPUyBYIHdpdGggV2ViR0wgYW5kIENTUyAzRCBjb250ZW50CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBzcmMv
RXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRENocm9taXVtOjpFeHRlbnNpb25zM0RDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6fkV4dGVuc2lvbnMzRENocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNI
Uk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcEJ1
ZmZlclN1YkRhdGFDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJv
bWl1bTo6bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRENocm9taXVtOjp1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVD
SFJPTUlVTSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbC5oOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFN0cmluZyk6CisgICAgICAg
ICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDoKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRl
KToKKwogMjAxMC0xMS0wMyAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAg
ICAgRm9yIHVubmFtZWQgZnJhbWVzLCB3aW5kb3cubmFtZSByZXR1cm5zIGEgZ2VuZXJhdGVkIG5h
bWUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA3MTI2MCkKKysrIFdlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNiArMzI4LDcgQEAKICAgICAgICAg
ICAgICAgICAnc3JjL0VkaXRvckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9F
dmVudExpc3RlbmVyV3JhcHBlci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvRXZlbnRMaXN0
ZW5lcldyYXBwZXIuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1
bS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvRXh0ZXJuYWxQb3B1cE1lbnUuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL0V4dGVybmFsUG9wdXBNZW51LmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3MTI2MCkKKysrIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDE4ICsxMzQsMTMgQEAgcHVibGljOgogICAgIC8vIGdldEVycm9yIGluIHRoZSBv
cmRlciB0aGV5IHdlcmUgYWRkZWQuCiAgICAgdmlydHVhbCB2b2lkIHN5bnRoZXNpemVHTEVycm9y
KHVuc2lnbmVkIGxvbmcgZXJyb3IpID0gMDsKIAotICAgIC8vIEVYVF90ZXh0dXJlX2Zvcm1hdF9C
R1JBODg4OAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0JHUkEoKSA9IDA7Ci0KICAgICAvLyBH
TF9DSFJPTUlVTV9tYXBfc3ViCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01J
VU0oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odW5z
aWduZWQgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgYWNjZXNzKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odW5zaWdu
ZWQgdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGFj
Y2VzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShj
b25zdCB2b2lkKikgPSAwOwogCiAgICAgLy8gR0xfQ0hST01JVU1fY29weV90ZXh0dXJlX3RvX3Bh
cmVudF90ZXh0dXJlCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29weVRleHR1cmVUb1BhcmVu
dFRleHR1cmVDSFJPTUlVTSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmVUb1Bh
cmVudFRleHR1cmVDSFJPTUlVTSh1bnNpZ25lZCB0ZXh0dXJlLCB1bnNpZ25lZCBwYXJlbnRUZXh0
dXJlKSA9IDA7CiAKICAgICAvLyBUaGUgZW50cnkgcG9pbnRzIGJlbG93IG1hcCBkaXJlY3RseSB0
byB0aGUgT3BlbkdMIEVTIDIuMCBBUEkuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0V4dGVu
c2lvbnMzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0V4
dGVuc2lvbnMzRENocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKwor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RDaHJvbWl1bTo6RXh0ZW5zaW9uczNEQ2hy
b21pdW0oR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwpCisgICAgOiBtX2ludGVy
bmFsKGludGVybmFsKQoreworfQorCitFeHRlbnNpb25zM0RDaHJvbWl1bTo6fkV4dGVuc2lvbnMz
RENocm9taXVtKCkKK3sKK30KKworYm9vbCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6c3VwcG9ydHMo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5zdXBwb3J0c0V4
dGVuc2lvbihuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbCAvIFdlYkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuCisg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKwordm9pZCogRXh0ZW5z
aW9uczNEQ2hyb21pdW06Om1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQs
IGludCBvZmZzZXQsIGludCBzaXplLCB1bnNpZ25lZCBhY2Nlc3MpCit7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwg
YWNjZXNzKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5tYXBCdWZmZXJTdWJE
YXRhQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBtX2ludGVybmFsLT51bm1hcEJ1
ZmZlclN1YkRhdGFDSFJPTUlVTShkYXRhKTsKK30KKwordm9pZCogRXh0ZW5zaW9uczNEQ2hyb21p
dW06Om1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwg
aW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgYWNjZXNzKQoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhY2Nlc3MpOworfQorCit2
b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25z
dCB2b2lkKiBkYXRhKQoreworICAgIG1faW50ZXJuYWwtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNKGRhdGEpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpjb3B5VGV4dHVyZVRv
UGFyZW50VGV4dHVyZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIHBhcmVudFRl
eHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+Y29weVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJP
TUlVTSh0ZXh0dXJlLCBwYXJlbnRUZXh0dXJlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2aXNpb24gNzEyNjAp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudElt
cGwuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTgzLDYgKzg0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsKCkKICAgICA6IG1fd2ViVmlld0ltcGwoMCkKKyAgICAsIG1faW5pdGlhbGl6ZWRB
dmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQogI2lmIFBMQVRGT1JNKFNLSUEpCiAjZWxpZiBQTEFU
Rk9STShDRykKICAgICAsIG1fcmVuZGVyT3V0cHV0KDApCkBAIC02NzUsMTMgKzY3NywzMSBAQCBE
RUxFR0FURV9UT19JTVBMXzEoZGVsZXRlU2hhZGVyLCB1bnNpZ25lCiBERUxFR0FURV9UT19JTVBM
XzEoZGVsZXRlVGV4dHVyZSwgdW5zaWduZWQpCiAKIERFTEVHQVRFX1RPX0lNUExfMShzeW50aGVz
aXplR0xFcnJvciwgdW5zaWduZWQgbG9uZykKLURFTEVHQVRFX1RPX0lNUExfUihzdXBwb3J0c0JH
UkEsIGJvb2wpCi1ERUxFR0FURV9UT19JTVBMX1Ioc3VwcG9ydHNNYXBTdWJDSFJPTUlVTSwgYm9v
bCkKKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRFeHRlbnNp
b25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0g
YWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRENocm9taXVtKHRoaXMpKTsKKyAgICByZXR1cm4gbV9l
eHRlbnNpb25zLmdldCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN1
cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5pdGlh
bGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIFN0cmluZyBleHRlbnNpb25zU3Ry
aW5nID0gZ2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKTsKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICAgICAgZXh0ZW5zaW9uc1N0
cmluZy5zcGxpdCgiICIsIGF2YWlsYWJsZUV4dGVuc2lvbnMpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAg
ICAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgfQorICAg
IHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9CisKIERFTEVH
QVRFX1RPX0lNUExfNFIobWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNLCB1bnNpZ25lZCwgaW50LCBp
bnQsIHVuc2lnbmVkLCB2b2lkKikKIERFTEVHQVRFX1RPX0lNUExfMSh1bm1hcEJ1ZmZlclN1YkRh
dGFDSFJPTUlVTSwgY29uc3Qgdm9pZCopCiBERUxFR0FURV9UT19JTVBMXzlSKG1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTSwgdW5zaWduZWQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25l
ZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkKikKIERFTEVHQVRFX1RPX0lNUExfMSh1bm1hcFRl
eFN1YkltYWdlMkRDSFJPTUlVTSwgY29uc3Qgdm9pZCopCi1ERUxFR0FURV9UT19JTVBMX1Ioc3Vw
cG9ydHNDb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNLCBib29sKQogREVMRUdBVEVf
VE9fSU1QTF8yKGNvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0sIHVuc2lnbmVkLCB1
bnNpZ25lZCkKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDIzLDE0ICsxMDQzLDcgQEAgREVMRUdB
VEVfVE9fSU5URVJOQUxfMShkZWxldGVTaGFkZXIsIHVucwogREVMRUdBVEVfVE9fSU5URVJOQUxf
MShkZWxldGVUZXh0dXJlLCB1bnNpZ25lZCkKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfMShzeW50
aGVzaXplR0xFcnJvciwgdW5zaWduZWQgbG9uZykKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1Ioc3Vw
cG9ydHNCR1JBLCBib29sKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihzdXBwb3J0c01hcFN1YkNI
Uk9NSVVNLCBib29sKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNFIobWFwQnVmZmVyU3ViRGF0YUNI
Uk9NSVVNLCB1bnNpZ25lZCwgaW50LCBpbnQsIHVuc2lnbmVkLCB2b2lkKikKLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzEodW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0sIGNvbnN0IHZvaWQqKQotREVM
RUdBVEVfVE9fSU5URVJOQUxfOVIobWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCB1bnNpZ25lZCwg
aW50LCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHZv
aWQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMSh1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwg
Y29uc3Qgdm9pZCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKHN1cHBvcnRzQ29weVRleHR1cmVU
b1BhcmVudFRleHR1cmVDSFJPTUlVTSwgYm9vbCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoY29w
eVRleHR1cmVUb1BhcmVudFRleHR1cmVDSFJPTUlVTSwgdW5zaWduZWQsIHVuc2lnbmVkKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfUihnZXRFeHRlbnNpb25zLCBFeHRlbnNpb25zM0QqKQogCiBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIHsKQEAgLTEwNDcs
MTEgKzEwNjAsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0Vycm9yR2VuZXJhdGVkCiAg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKCkKLXsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAkocmV2aXNpb24gNzEyNjApCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsX2gKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaWYgUExBVEZPUk0oU0tJQSkKICNp
bmNsdWRlICJTa0JpdG1hcC5oIgpAQCAtMzksNiArNDAsNyBAQCBjbGFzcyBXZWJWaWV3SW1wbDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBFeHRlbnNpb25zM0RDaHJvbWl1bTsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW07
CiAjZW5kaWYKQEAgLTI2MCw3ICsyNjIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN5bnRoZXNp
emVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOwogCi0gICAgdm9pZCBzd2FwQnVmZmVycygp
OworICAgIC8vIEV4dGVuc2lvbnMzRCBzdXBwb3J0LgorICAgIEV4dGVuc2lvbnMzRCogZ2V0RXh0
ZW5zaW9ucygpOworICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1l
KTsKIAogICAgIC8vIEVYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogICAgIGJvb2wgc3VwcG9y
dHNCR1JBKCk7CkBAIC0yNzgsNyArMjgyLDEwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBP
d25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOworICAgIE93blB0cjxF
eHRlbnNpb25zM0RDaHJvbWl1bT4gbV9leHRlbnNpb25zOwogICAgIFdlYktpdDo6V2ViVmlld0lt
cGwqIG1fd2ViVmlld0ltcGw7CisgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5z
aW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVt
PiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNp
b24gNzEyNjApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBACiAjaW5jbHVkZSAi
V2ViVmlldy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC01MzEsMjAgKzUz
Miw2IEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c3kKICAgICBtX3N5
bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwogfQogCi1ib29sIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OnN1cHBvcnRzQkdSQSgpCi17Ci0gICAgLy8gU3VwcG9ydGVkIHNpbmNlIE9w
ZW5HTCAxLjIuIEhvd2V2ZXIsIGdsVGV4SW1hZ2UyRCgpIG11c3QgYmUgbW9kaWZpZWQKLSAgICAv
LyB0byB0cmFuc2xhdGUgdGhlIGludGVybmFsRm9ybWF0IGZyb20gR0xfQkdSQSB0byBHTF9SR0JB
LCBzaW5jZSB0aGUKLSAgICAvLyBmb3JtZXIgaXMgbm90IGFjY2VwdGVkIGJ5IGRlc2t0b3AgR0wu
IFJldHVybiBmYWxzZSB1bnRpbCB0aGlzIGlzIGRvbmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnN1cHBvcnRzTWFwU3ViQ0hS
T01JVU0oKQotewotICAgIC8vIFdlIGRvbid0IGNsYWltIHN1cHBvcnQgZm9yIHRoaXMgZXh0ZW5z
aW9uIGF0IHRoaXMgdGltZQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCogV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKHVuc2lnbmVk
IHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNpemUsIHVuc2lnbmVkIGFjY2VzcykKIHsKICAgICBy
ZXR1cm4gMDsKQEAgLTU2MywxNSArNTUwLDExIEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6dW4KIHsKIH0KIAotYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpzdXBwb3J0c0NvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0oKQotewotICAg
IC8vIFRoaXMgZXh0ZW5zaW9uIHJlcXVpcmVzIHRoaXMgZGVza3RvcEdMLW9ubHkgZnVuY3Rpb24g
KEdMRVMyIGRvZXNuJ3QKLSAgICAvLyBzdXBwb3J0IGl0KSwgc28gY2hlY2sgZm9yIGl0cyBleGlz
dGVuY2UgaGVyZS4KLSAgICByZXR1cm4gZ2xHZXRUZXhMZXZlbFBhcmFtZXRlcml2OwotfQotCiB2
b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvcHlUZXh0dXJlVG9QYXJlbnRU
ZXh0dXJlQ0hST01JVU0odW5zaWduZWQgaWQsIHVuc2lnbmVkIGlkMikKIHsKKyAgICBpZiAoIWds
R2V0VGV4TGV2ZWxQYXJhbWV0ZXJpdikKKyAgICAgICAgcmV0dXJuOworCiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2NvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlRkJPKTsKICAgICBnbEZyYW1lYnVmZmVyVGV4
dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSLApAQCAtMTEzMCw3ICsxMTEzLDE2IEBAIFdlYlN0cmlu
ZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXAKIFdlYlN0cmluZyBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3RyaW5nKG5hbWUpKSk7CisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihnbEdldFN0cmluZyhuYW1lKSkpOworICAgIGlmIChuYW1lID09IEdMX0VYVEVO
U0lPTlMpIHsKKyAgICAgICAgLy8gR0xfQ0hST01JVU1fY29weV90ZXh0dXJlX3RvX3BhcmVudF90
ZXh0dXJlIHJlcXVpcmVzIHRoaXMKKyAgICAgICAgLy8gZGVza3RvcEdMLW9ubHkgZnVuY3Rpb24g
KEdMRVMyIGRvZXNuJ3Qgc3VwcG9ydCBpdCksIHNvCisgICAgICAgIC8vIGNoZWNrIGZvciBpdHMg
ZXhpc3RlbmNlIGhlcmUuCisgICAgICAgIGlmIChnbEdldFRleExldmVsUGFyYW1ldGVyaXYpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCIgR0xfQ0hST01JVU1fY29weV90ZXh0dXJlX3RvX3Bh
cmVudF90ZXh0dXJlIik7CisgICAgfQorICAgIHJldHVybiBXZWJTdHJpbmcocmVzdWx0LnRvU3Ry
aW5nKCkpOwogfQogCiBERUxFR0FURV9UT19HTF8zKGdldFRleFBhcmFtZXRlcmZ2LCBHZXRUZXhQ
YXJhbWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQqKQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsLmgJKHJldmlzaW9uIDcxMjYwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEzICs4MSwx
MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcik7Ci0gICAg
dmlydHVhbCBib29sIHN1cHBvcnRzQkdSQSgpOwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01h
cFN1YkNIUk9NSVVNKCk7CiAgICAgdmlydHVhbCB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01J
VU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgYWNjZXNz
KTsKICAgICB2aXJ0dWFsIHZvaWQgdW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oY29uc3Qgdm9p
ZCopOwogICAgIHZpcnR1YWwgdm9pZCogbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHVuc2lnbmVk
IHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBhY2Nl
c3MpOwogICAgIHZpcnR1YWwgdm9pZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2
b2lkKik7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29weVRleHR1cmVUb1BhcmVudFRleHR1
cmVDSFJPTUlVTSgpOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVy
ZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIHBhcmVudFRleHR1cmUpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA3MTI2MCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBACiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKICNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMTA1MCw3ICsxMDUxLDcgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2Vu
dCgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXIt
PmNvbnRleHQoKTsKLSAgICBpZiAoY29udGV4dC0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICBpZiAoY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKQogICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKICNlbmRpZgogfQo=
</data>
<flag name="review"
          id="63204"
          type_id="1"
          status="+"
          setter="cmarrin"
    />
          </attachment>
      

    </bug>

</bugzilla>