<?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>75906</bug_id>
          
          <creation_ts>2012-01-09 16:24:42 -0800</creation_ts>
          <short_desc>Add WebGLContextGroup as step toward sharing WebGL resources</short_desc>
          <delta_ts>2012-01-13 11:42:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gregg Tavares">gman</reporter>
          <assigned_to name="Gregg Tavares">gman</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>kbr</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>532627</commentid>
    <comment_count>0</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-09 16:24:42 -0800</bug_when>
    <thetext>Add WebGLContextGroup as step toward sharing WebGL resources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532697</commentid>
    <comment_count>1</comment_count>
      <attachid>121765</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-09 17:21:44 -0800</bug_when>
    <thetext>Created attachment 121765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532700</commentid>
    <comment_count>2</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-09 17:23:25 -0800</bug_when>
    <thetext>This patch adds WebGLContextGroup. There are NO API CHANGES

This addition makes it possible to implement the upcoming WebGL
sharing resources spec being worked on by the WebGL Working Group.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532718</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-09 17:34:34 -0800</bug_when>
    <thetext>Looks like the patch needs to be rebaselined to TOT. Could you do that and resubmit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533312</commentid>
    <comment_count>4</comment_count>
      <attachid>121894</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-10 12:48:11 -0800</bug_when>
    <thetext>Created attachment 121894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533319</commentid>
    <comment_count>5</comment_count>
      <attachid>121894</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-10 12:57:16 -0800</bug_when>
    <thetext>Comment on attachment 121894
Patch

Attachment 121894 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11167562</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533496</commentid>
    <comment_count>6</comment_count>
      <attachid>121944</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-10 17:01:26 -0800</bug_when>
    <thetext>Created attachment 121944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533553</commentid>
    <comment_count>7</comment_count>
      <attachid>121956</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-10 18:20:45 -0800</bug_when>
    <thetext>Created attachment 121956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533590</commentid>
    <comment_count>8</comment_count>
      <attachid>121956</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-10 19:55:48 -0800</bug_when>
    <thetext>Comment on attachment 121956
Patch

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

Good refactoring overall. Minor comments and questions only. If all of my comments are invalid and you think this patch should proceed as is, go ahead and mark r? again.

&gt; Source/WebCore/GNUmakefile.list.am:548
&gt; +	DerivedSources/WebCore/JSWebGLContextGroup.h \

WebGLContextGroup doesn&apos;t have any IDL -- so these shouldn&apos;t be necessary (and their presence should, I think, cause build failures).

&gt; Source/WebCore/html/canvas/WebGLContextGroup.cpp:74
&gt; +    if (m_contexts.isEmpty()) {

How about writing this as a pre-check: if (m_contexts.size() == 1 &amp;&amp; m_contexts.contains(context)) { detachAndRemvoeAllObjects(); } thereby avoiding the re-adding and removal of the context.

&gt; Source/WebCore/html/canvas/WebGLContextGroup.cpp:89
&gt; +    removeObject(object);

Why is this call necessary? The are two other similar calls in WebGLRenderingContext.cpp, addSharedObject() and addContextObject().

&gt; Source/WebCore/html/canvas/WebGLContextObject.h:37
&gt; +class WebGLContextObject : public WebGLObject {

This class definitely needs a comment indicating that it represents WebGL resources that are per-context, rather than shared among contexts.

&gt; Source/WebCore/html/canvas/WebGLContextObject.h:67
&gt; +#endif // WebGLObject_h

Wrong #include guard.

&gt; Source/WebCore/html/canvas/WebGLFramebuffer.h:46
&gt; +    void setAttachmentForBoundFramebuffer(GraphicsContext3D*, GC3Denum attachment, GC3Denum texTarget, WebGLTexture*, GC3Dint level);

Since WebGLFramebuffer is a per-context object, it&apos;s unnecessary to pass in the GraphicsContext3D* here, as well as in removeAttachmentFromBoundFramebuffer and onAccess. I think the changes to those methods, and the calling code in WebGLRenderingContext, should be reverted in order to simplify the patch.

&gt; Source/WebCore/html/canvas/WebGLFramebuffer.h:-87
&gt; -    bool isBound() const;

Why remove this? It seems that the associated assertions would still be correct, since WebGLFramebuffer is a per-context object.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4186
&gt; +    removeSharedObject(object);

Per comment above, I think this line should be removed.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4198
&gt; +    removeContextObject(object);

Per comment above, I think this line should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535105</commentid>
    <comment_count>9</comment_count>
      <attachid>122297</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-12 13:28:43 -0800</bug_when>
    <thetext>Created attachment 122297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535107</commentid>
    <comment_count>10</comment_count>
      <attachid>121956</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-12 13:29:29 -0800</bug_when>
    <thetext>Comment on attachment 121956
Patch

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

&gt;&gt; Source/WebCore/GNUmakefile.list.am:548
&gt;&gt; +	DerivedSources/WebCore/JSWebGLContextGroup.h \
&gt; 
&gt; WebGLContextGroup doesn&apos;t have any IDL -- so these shouldn&apos;t be necessary (and their presence should, I think, cause build failures).

done

&gt;&gt; Source/WebCore/html/canvas/WebGLContextGroup.cpp:74
&gt;&gt; +    if (m_contexts.isEmpty()) {
&gt; 
&gt; How about writing this as a pre-check: if (m_contexts.size() == 1 &amp;&amp; m_contexts.contains(context)) { detachAndRemvoeAllObjects(); } thereby avoiding the re-adding and removal of the context.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLContextGroup.cpp:89
&gt;&gt; +    removeObject(object);
&gt; 
&gt; Why is this call necessary? The are two other similar calls in WebGLRenderingContext.cpp, addSharedObject() and addContextObject().

done

&gt;&gt; Source/WebCore/html/canvas/WebGLContextObject.h:37
&gt;&gt; +class WebGLContextObject : public WebGLObject {
&gt; 
&gt; This class definitely needs a comment indicating that it represents WebGL resources that are per-context, rather than shared among contexts.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLContextObject.h:67
&gt;&gt; +#endif // WebGLObject_h
&gt; 
&gt; Wrong #include guard.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLFramebuffer.h:46
&gt;&gt; +    void setAttachmentForBoundFramebuffer(GraphicsContext3D*, GC3Denum attachment, GC3Denum texTarget, WebGLTexture*, GC3Dint level);
&gt; 
&gt; Since WebGLFramebuffer is a per-context object, it&apos;s unnecessary to pass in the GraphicsContext3D* here, as well as in removeAttachmentFromBoundFramebuffer and onAccess. I think the changes to those methods, and the calling code in WebGLRenderingContext, should be reverted in order to simplify the patch.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLFramebuffer.h:-87
&gt;&gt; -    bool isBound() const;
&gt; 
&gt; Why remove this? It seems that the associated assertions would still be correct, since WebGLFramebuffer is a per-context object.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4186
&gt;&gt; +    removeSharedObject(object);
&gt; 
&gt; Per comment above, I think this line should be removed.

done

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4198
&gt;&gt; +    removeContextObject(object);
&gt; 
&gt; Per comment above, I think this line should be removed.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535111</commentid>
    <comment_count>11</comment_count>
      <attachid>122300</attachid>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-01-12 13:31:07 -0800</bug_when>
    <thetext>Created attachment 122300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535382</commentid>
    <comment_count>12</comment_count>
      <attachid>122300</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-12 19:18:22 -0800</bug_when>
    <thetext>Comment on attachment 122300
Patch

Looks great. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535810</commentid>
    <comment_count>13</comment_count>
      <attachid>122300</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 11:02:32 -0800</bug_when>
    <thetext>Comment on attachment 122300
Patch

Clearing flags on attachment: 122300

Committed r104954: &lt;http://trac.webkit.org/changeset/104954&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535811</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 11:02:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535829</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-13 11:19:41 -0800</bug_when>
    <thetext>Committed r104959: &lt;http://trac.webkit.org/changeset/104959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535832</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-13 11:20:22 -0800</bug_when>
    <thetext>r104959 fixed an unused argument warning that wasn&apos;t seen when building locally on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535853</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-13 11:41:37 -0800</bug_when>
    <thetext>Committed r104963: &lt;http://trac.webkit.org/changeset/104963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535854</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-13 11:42:20 -0800</bug_when>
    <thetext>r104963 added the needed project.pbxproj changes that were somehow lost in the creation of the last patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121765</attachid>
            <date>2012-01-09 17:21:44 -0800</date>
            <delta_ts>2012-01-10 12:48:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75906-20120109172143.patch</filename>
            <type>text/plain</type>
            <size>81545</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCBlYWQ2ZGFkZDNmZDBmYjI1YjgzMDI0OTUyNDdiNzdhOTU5YzdmY2QzLi40Y2RlZDk4NmMx
MTRkYjQ0MTk4ZDRlOTc5MjRlZGRhODEzY2RhOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTU0NCw2ICs1NDQsOCBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHTENvbnRleHRFdmVudC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNXZWJHTENvbnRleHRFdmVudC5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTV2ViR0xDb250ZXh0R3JvdXAuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
V2ViR0xDb250ZXh0R3JvdXAuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMRnJh
bWVidWZmZXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xGcmFtZWJ1ZmZl
ci5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xMb3NlQ29udGV4dC5jcHAgXApA
QCAtNTU0Myw2ICs1NTQ1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdSZW5kZXJlckluZm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TERlYnVnUmVuZGVyZXJJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdTaGFkZXJzLmNwcCBcCkBAIC01NTYzLDYgKzU1NjcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUZXh0dXJlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODMwNWZjZWQ4ZWFmNjMwOWY3ZTZiYzliZjc2MWIw
MjFhYzA0NDg4NS4uN2QzNTNmMTY5Nzg1NmY5YzllYjkzMDY3NDQ4NGE0MDQyZTdmYzJlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNTc3OSw2ICs1Nzc5LDEwIEBACiAgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRFdmVudC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dEV2ZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgnLAogICAgICAgICAgICAg
J2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcCcsCkBAIC01ODAxLDYgKzU4MDUsOCBAQAogICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oJywKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL1dlYkdMU2hhZGVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhcmVk
T2JqZWN0LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3Qu
aCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKaW5kZXggYTI2ZDcwNjlmNmVjZDVh
OGI0MThiOWFjZTgyMmNhZDMyMmFhNWJmMy4uY2VhNTI1YzM5OTAxM2Q1MjZlNGNlYjczYjk5MTU1
MzRlMTA1ZjI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVy
dGV4QXJyYXlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcApAQCAtNjAsNyArNjAsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM+IE9FU1ZlcnRleEFycmF5T2JqZWN0OjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUz4gbyA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShtX2NvbnRl
eHQsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVVc2VyKTsKLSAgICBtX2NvbnRl
eHQtPmFkZE9iamVjdChvLmdldCgpKTsKKyAgICBtX2NvbnRleHQtPmFkZENvbnRleHRPYmplY3Qo
by5nZXQoKSk7CiAgICAgcmV0dXJuIG8ucmVsZWFzZSgpOwogfQogCkBAIC02OSw3ICs2OSw3IEBA
IHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMqIGFycmF5CiAgICAgaWYgKCFhcnJheU9iamVjdCB8fCBtX2NvbnRl
eHQtPmlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFycmF5T2Jq
ZWN0LT5kZWxldGVPYmplY3QoKTsKKyAgICBhcnJheU9iamVjdC0+ZGVsZXRlT2JqZWN0KG1fY29u
dGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CiB9CiAKIEdDM0Rib29sZWFuIE9FU1ZlcnRleEFy
cmF5T2JqZWN0Ojppc1ZlcnRleEFycmF5T0VTKFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFy
cmF5T2JqZWN0KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE9FU1ZlcnRleEFycmF5T2JqZWN0Ojpi
aW5kVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYgogICAg
IGlmIChtX2NvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChhcnJheU9iamVjdCAmJiBhcnJheU9iamVjdC0+Y29udGV4dCgpICE9IG1fY29udGV4
dCkgeworICAgIGlmIChhcnJheU9iamVjdCAmJiAhYXJyYXlPYmplY3QtPnZhbGlkYXRlKDAsIGNv
bnRleHQoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuY3BwCmluZGV4IDk5N2RiYTUwMGVkNTAzODNjNjQzZThlMWYwOTA2NWRiMGY2YjY4NjEuLmZj
NmQ0MDg2MDY3NWQ2ZjE2YTk2MzRjMmM2MTZkNTZhZWNiNTFmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJXZWJHTEJ1ZmZlci5oIgogCiAjaW5jbHVkZSAiQ2hlY2tlZEludC5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyVmlldy5oPgogCkBAIC00MSwxOCArNDIsMjMgQEAgUGFz
c1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xCdWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGN0eCkKIH0KIAogV2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY3R4KQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xTaGFyZWRP
YmplY3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQogICAg
ICwgbV9uZXh0QXZhaWxhYmxlQ2FjaGVFbnRyeSgwKQogewotICAgIHNldE9iamVjdChjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpKTsKKyAgICBzZXRPYmplY3Qo
Y3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVCdWZmZXIoKSk7CiAgICAgY2xlYXJDYWNo
ZWRNYXhJbmRpY2VzKCk7CiB9CiAKLXZvaWQgV2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwo
UGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCitXZWJHTEJ1ZmZlcjo6fldlYkdMQnVmZmVyKCkKIHsK
LSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihvYmplY3Qp
OworICAgIGRlbGV0ZU9iamVjdCgwKTsKK30KKwordm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKK3sKKyAgICAgIGNvbnRleHQzZC0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CiB9CiAKIGJv
b2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKEFycmF5QnVmZmVyKiBhcnJh
eSwgR0MzRGludHB0ciBieXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0aCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCmluZGV4IDAxNTdlY2U2NWYwY2U0Yjdj
NDA3YjdiY2I1OWQ3OTY4NzUxNDBjMDcuLjg0OWMzNTgyYmQ3OWNhOGMxNTA1MTQ3NTMwZmQ5MGU3
ZGNiNWU5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaApAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTEJ1ZmZlcl9oCiAjZGVmaW5lIFdlYkdMQnVmZmVy
X2gKIAotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmpl
Y3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC0zNSw5ICszNSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
V2ViR0xCdWZmZXIgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xCdWZmZXIgOiBw
dWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMQnVm
ZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMQnVmZmVyKCk7CiAK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOwogCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBX
ZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgbyk7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KTsKIAog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGNhNjEyMDVlN2UxZDAyZjFjZDU0ZGQ3NWIzOTMzYzdhNjQ4Y2YzNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKKworI2lmIFBMQVRG
T1JNKFFUKQorI3VuZGVmIGVtaXQKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IFdlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUoKQor
eworICAgIFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gY29udGV4dEdyb3VwID0gYWRvcHRSZWYo
bmV3IFdlYkdMQ29udGV4dEdyb3VwKCkpOworICAgIHJldHVybiBjb250ZXh0R3JvdXAucmVsZWFz
ZSgpOworfQorCitXZWJHTENvbnRleHRHcm91cDo6V2ViR0xDb250ZXh0R3JvdXAoKQoreworfQor
CitXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29udGV4dEdyb3VwKCkKK3sKKyAgICBkZXRhY2hB
bmRSZW1vdmVBbGxPYmplY3RzKCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRl
eHRHcm91cDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4
dHMuaXNFbXB0eSgpKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVy
YXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsKKyAgICByZXR1cm4gKCppdCktPmdyYXBoaWNz
Q29udGV4dDNEKCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRleHQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fY29udGV4dHMuYWRkKGNvbnRl
eHQpOworfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHRzLnJlbW92ZShjb250ZXh0
KTsKKworICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgY29udGV4dCBsZXQgZ28gb2YgYWxsIHRo
ZSByZXNvdXJjZXMuCisgICAgaWYgKG1fY29udGV4dHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8v
IGdldEFDb250ZXh0IG5lZWRzIGEgY29udGV4dCB0byBiZSBhYmxlIHRvIGRlbGV0ZS4KKyAgICAg
ICAgbV9jb250ZXh0cy5hZGQoY29udGV4dCk7CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9i
amVjdHMoKTsKKyAgICAgICAgbV9jb250ZXh0cy5yZW1vdmUoY29udGV4dCk7CisgICAgfQorfQor
Cit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpyZW1vdmVPYmplY3QoV2ViR0xTaGFyZWRPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBtX2dyb3VwT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6YWRkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgcmVtb3ZlT2JqZWN0KG9iamVjdCk7CisgICAgbV9ncm91cE9iamVjdHMuYWRkKG9i
amVjdCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUFsbE9i
amVjdHMoKQoreworICAgIHdoaWxlICghbV9ncm91cE9iamVjdHMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEhhc2hTZXQ8V2ViR0xTaGFyZWRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2dyb3VwT2Jq
ZWN0cy5iZWdpbigpOworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dEdyb3VwKCk7CisgICAg
fQorfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpsb3NlQ29udGV4dEdyb3VwKCkKK3sKKyAg
ICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0gbV9j
b250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQorICAgICAgICAo
Kml0KS0+bG9zZUNvbnRleHRJbXBsKCk7CisKKyAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3Rz
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIzMDhiY2VjZTQ0NTQ0NjQ3NDM1NjZiMWJhMzA0MjY4ZmY5YjdjNGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91
cC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViR0xDb250ZXh0R3JvdXBf
aAorI2RlZmluZSBXZWJHTENvbnRleHRHcm91cF9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2Ns
YXNzIFdlYkdMRXh0ZW5zaW9uOworY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7CitjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNz
IFdlYkdMQ29udGV4dEdyb3VwIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR0xDb250ZXh0R3JvdXA+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gY3Jl
YXRlKCk7CisgICAgdmlydHVhbCB+V2ViR0xDb250ZXh0R3JvdXAoKTsKKworICAgIHZvaWQgYWRk
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisKKyAgICB2b2lkIGFkZE9iamVjdChXZWJHTFNoYXJl
ZE9iamVjdCopOworICAgIHZvaWQgcmVtb3ZlT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisK
KyAgICBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCk7CisKKyAgICB2
b2lkIGxvc2VDb250ZXh0R3JvdXAoKTsKKworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTE9iamVjdDsKKworICAgIFdlYkdMQ29udGV4dEdyb3VwKCk7CisKKyAgICB2b2lkIGRldGFj
aEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKworICAgIEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4gbV9jb250ZXh0czsKKyAgICBIYXNoU2V0PFdlYkdMU2hhcmVkT2JqZWN0Kj4gbV9ncm91
cE9iamVjdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWIzYWIwYjljNmU0ZDEzYmM1MmFlNmIxNGI4NjRhODZkZDFhM2RiMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCisKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
ZWJHTENvbnRleHRPYmplY3Q6OldlYkdMQ29udGV4dE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCisgICAgOiBXZWJHTE9iamVjdChjb250ZXh0KQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCit7Cit9CisKK1dlYkdMQ29udGV4dE9iamVjdDo6fldlYkdMQ29udGV4dE9iamVj
dCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVDb250
ZXh0T2JqZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29u
dGV4dCgpCit7CisgICAgZGV0YWNoKCk7CisgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICBk
ZWxldGVPYmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9j
b250ZXh0LT5yZW1vdmVDb250ZXh0T2JqZWN0KHRoaXMpOworICAgICAgICBtX2NvbnRleHQgPSAw
OworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMQ29udGV4dE9iamVjdDo6Z2V0
QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ID8gbV9j
b250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpIDogMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRP
YmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMGJjMDlkNTViN2Y5ZGJmZjQ1NWUxM2IyZDIwNTFhN2FmNjg0
YTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0T2JqZWN0LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENv
bnRleHRPYmplY3RfaAorI2RlZmluZSBXZWJHTENvbnRleHRPYmplY3RfaAorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OworCitjbGFzcyBXZWJHTENvbnRleHRPYmplY3QgOiBwdWJsaWMgV2ViR0xP
YmplY3QgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkdMQ29udGV4dE9iamVjdCgpOworCisg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3Jv
dXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29udGV4dCA9PSBtX2NvbnRleHQ7CisgICAgfQorCisgICAgdm9pZCBk
ZXRhY2hDb250ZXh0KCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTENvbnRleHRPYmplY3QoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRl
eHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dDsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0OworICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gV2ViR0xPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAppbmRleCBkMWFmNTE4YzA1MTY1NWY5MzQxZDJkZmJi
YWMxNjljNjMxYjU2MmJmLi5lYTBhNzQyZmRiNThkZDQzYTE0N2M1Nzc2OWNjNTIxZTJhZGQ5MDgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cApAQCAtMjksMTMgKzI5LDE0IEBACiAKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCiAK
KyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLSAgICBi
b29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCwgR0Mz
RGVudW0gYXR0YWNobWVudCkKKyAgICBib29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdMU2hh
cmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCwgR0MzRGVudW0gYXR0YWNobWVudCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkp
OwogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwpAQCAt
NjIsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VXaWR0aChXZWJHTE9iamVjdCogYXR0YWNoZWRPYmplY3Qp
CisgICAgR0MzRHNpemVpIGdldEltYWdlV2lkdGgoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVk
T2JqZWN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVk
T2JqZWN0LT5vYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdC0+aXNSZW5k
ZXJidWZmZXIoKSk7CkBAIC03MCw3ICs3MSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHJldHVy
biBidWZmZXItPmdldFdpZHRoKCk7CiAgICAgfQogCi0gICAgR0MzRHNpemVpIGdldEltYWdlSGVp
Z2h0KFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VI
ZWlnaHQoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQogICAgIHsKICAgICAgICAg
QVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSk7CiAgICAg
ICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CkBAIC03OCw3ICs3
OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHJldHVybiBidWZmZXItPmdldEhlaWdodCgpOwog
ICAgIH0KIAotICAgIGJvb2wgaXNVbmluaXRpYWxpemVkKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9i
amVjdCkKKyAgICBib29sIGlzVW5pbml0aWFsaXplZChXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNo
ZWRPYmplY3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRP
YmplY3QtPm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpCiAgICAg
ICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hl
ZE9iamVjdCkpLT5pc0luaXRpYWxpemVkKCkpCkBAIC04NiwxMyArODcsMTMgQEAgbmFtZXNwYWNl
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgc2V0SW5pdGlhbGl6
ZWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAgIHZvaWQgc2V0SW5pdGlhbGl6ZWQo
V2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKGF0
dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSAmJiBhdHRhY2hlZE9iamVj
dC0+aXNSZW5kZXJidWZmZXIoKSkKICAgICAgICAgICAgIChyZWludGVycHJldF9jYXN0PFdlYkdM
UmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmplY3QpKS0+c2V0SW5pdGlhbGl6ZWQoKTsKICAgICB9
CiAKLSAgICBib29sIGlzVmFsaWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAgIGJv
b2wgaXNWYWxpZFJlbmRlcmJ1ZmZlcihXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNoZWRPYmplY3Qp
CiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3QtPm9i
amVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKSB7CiAgICAgICAgICAg
ICBpZiAoIShyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmpl
Y3QpKS0+aXNWYWxpZCgpKQpAQCAtMTA5LDIwICsxMTAsMjQgQEAgUGFzc1JlZlB0cjxXZWJHTEZy
YW1lYnVmZmVyPiBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjdHgKIH0KIAogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdMQ29u
dGV4dE9iamVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiAgICAgLCBt
X3RleFRhcmdldCgwKQogICAgICwgbV90ZXhMZXZlbCgtMSkKIHsKLSAgICBzZXRPYmplY3QoY29u
dGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKKyAgICBz
ZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsK
IH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1
ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK1dlYkdMRnJhbWVidWZmZXI6On5XZWJHTEZyYW1l
YnVmZmVyKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJH
TFRleHR1cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKGlzQm91bmQo
KSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50KTsKKyAgICByZW1vdmVBdHRhY2ht
ZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoY29udGV4dDNkLCBhdHRhY2htZW50KTsKICAgICBpZiAo
dGV4dHVyZSAmJiAhdGV4dHVyZS0+b2JqZWN0KCkpCiAgICAgICAgIHRleHR1cmUgPSAwOwogICAg
IHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtMTUwLDEyICsxNTUsMTEgQEAgdm9pZCBXZWJHTEZy
YW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzMKICAgICAgICAgdGV4dHVyZS0+b25BdHRhY2hlZCgpOwogfQogCi12b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit2b2lkIFdlYkdM
RnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M2QsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVy
KiByZW5kZXJidWZmZXIpCiB7Ci0gICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgaWYgKCFvYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFt
ZWJ1ZmZlcihhdHRhY2htZW50KTsKKyAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVi
dWZmZXIoY29udGV4dDNkLCBhdHRhY2htZW50KTsKICAgICBpZiAocmVuZGVyYnVmZmVyICYmICFy
ZW5kZXJidWZmZXItPm9iamVjdCgpKQogICAgICAgICByZW5kZXJidWZmZXIgPSAwOwogICAgIHN3
aXRjaCAoYXR0YWNobWVudCkgewpAQCAtMTc5LDcgKzE4Myw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVu
dCwgV2ViCiAgICAgICAgIHJlbmRlcmJ1ZmZlci0+b25BdHRhY2hlZCgpOwogfQogCi1XZWJHTE9i
amVjdCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50
KSBjb25zdAorV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1l
bnQoR0MzRGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE5OCwxNSArMjAyLDE0IEBAIFdlYkdMT2JqZWN0KiBXZWJHTEZy
YW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiAgICAg
fQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRG
cmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpy
ZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQzZCwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsKLSAgICBBU1NFUlQoaXNCb3VuZCgpKTsK
ICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChhdHRhY2ht
ZW50KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6CiAg
ICAgICAgIGlmIChtX2NvbG9yQXR0YWNobWVudCkgewotICAgICAgICAgICAgbV9jb2xvckF0dGFj
aG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5vbkRl
dGFjaGVkKGNvbnRleHQzZCk7CiAgICAgICAgICAgICBtX2NvbG9yQXR0YWNobWVudCA9IDA7CiAg
ICAgICAgICAgICBtX3RleFRhcmdldCA9IDA7CiAgICAgICAgICAgICBtX3RleExldmVsID0gLTE7
CkBAIC0yMTQsMTkgKzIxNywxOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgogICAg
ICAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQpIHsKLSAgICAgICAgICAgIG1fZGVwdGhBdHRhY2ht
ZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2RlcHRoQXR0YWNobWVudC0+b25EZXRh
Y2hlZChjb250ZXh0M2QpOwogICAgICAgICAgICAgbV9kZXB0aEF0dGFjaG1lbnQgPSAwOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVDoKICAgICAgICAgaWYgKG1fc3RlbmNpbEF0dGFjaG1lbnQpIHsKLSAgICAg
ICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1f
c3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgICAgIG1f
c3RlbmNpbEF0dGFjaG1lbnQgPSAwOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkgewotICAgICAgICAgICAgbV9kZXB0aFN0ZW5j
aWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2RlcHRoU3RlbmNpbEF0
dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgICAgIG1fZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMzYsMzMg
KzIzOSwzMSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQogICAgIH0KIH0KIAotdm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoV2ViR0xP
YmplY3QqIGF0dGFjaG1lbnQpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1l
bnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogZ2MzZCwgV2ViR0xTaGFy
ZWRPYmplY3QqIGF0dGFjaG1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgaWYg
KCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghYXR0YWNobWVudCkKICAgICAg
ICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnYzNkID0gY29udGV4dCgpLT5ncmFw
aGljc0NvbnRleHQzRCgpOwogICAgIGlmIChhdHRhY2htZW50ID09IG1fY29sb3JBdHRhY2htZW50
LmdldCgpKSB7CiAgICAgICAgIGlmIChhdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpKQogICAg
ICAgICAgICAgZ2MzZC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBnYzNkLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgbV90ZXhUYXJnZXQsIDAs
IG1fdGV4TGV2ZWwpOwotICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwKTsKKyAgICAgICAgcmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgfQogICAgIGlmIChhdHRhY2htZW50ID09IG1fZGVwdGhB
dHRhY2htZW50LmdldCgpKSB7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgICAg
ICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0FUVEFDSE1FTlQpOworICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJh
bWVidWZmZXIoZ2MzZCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQpOwogICAg
IH0KICAgICBpZiAoYXR0YWNobWVudCA9PSBtX3N0ZW5jaWxBdHRhY2htZW50LmdldCgpKSB7CiAg
ICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIHJlbW92ZUF0dGFjaG1lbnRG
cm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5U
KTsKKyAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAgIH0KICAgICBpZiAoYXR0
YWNobWVudCA9PSBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpIHsKICAgICAgICAgZ2Mz
ZC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAg
ICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZy
b21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQpOwogICAgIH0KIH0KIApAQCAtMzM3LDcgKzMzOCw3IEBAIEdDM0RlbnVtIFdl
YkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKCkgY29uc3QKICAgICBpZiAoaXNEZXB0aFN0ZW5j
aWxBdHRhY2hlZCgpKSB7CiAgICAgICAgIGlmICghaXNBdHRhY2htZW50Q29tcGxldGUobV9kZXB0
aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UKSkKICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICBpZiAoIWlzVmFsaWQobV9k
ZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkUmVuZGVy
YnVmZmVyKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpCiAgICAgICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICBp
ZiAoIWNvdW50KSB7CiAgICAgICAgICAgICB3aWR0aCA9IGdldEltYWdlV2lkdGgobV9kZXB0aFN0
ZW5jaWxBdHRhY2htZW50LmdldCgpKTsKQEAgLTM2OSwyOSArMzcwLDI5IEBAIEdDM0RlbnVtIFdl
YkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKCkgY29uc3QKICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZm
ZXI6Om9uQWNjZXNzKGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpCitib29sIFdl
YkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIGJv
b2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpCiB7CiAgICAgaWYgKGNoZWNrU3RhdHVz
KCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQotICAg
ICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJuIGlu
aXRpYWxpemVSZW5kZXJidWZmZXJzKGNvbnRleHQzZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0
IG9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBp
ZiAobV9jb2xvckF0dGFjaG1lbnQpCi0gICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5vbkRldGFj
aGVkKCk7CisgICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7
CiAgICAgaWYgKG1fZGVwdGhBdHRhY2htZW50KQotICAgICAgICBtX2RlcHRoQXR0YWNobWVudC0+
b25EZXRhY2hlZCgpOworICAgICAgICBtX2RlcHRoQXR0YWNobWVudC0+b25EZXRhY2hlZChjb250
ZXh0M2QpOwogICAgIGlmIChtX3N0ZW5jaWxBdHRhY2htZW50KQotICAgICAgICBtX3N0ZW5jaWxB
dHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9u
RGV0YWNoZWQoY29udGV4dDNkKTsKICAgICBpZiAobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KQot
ICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKLSAgICBjb250
ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7Cisg
ICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwor
ICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KIAotYm9vbCBXZWJH
TEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCitib29sIFdlYkdMRnJhbWVi
dWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2QpCiB7
CiAgICAgQVNTRVJUKG9iamVjdCgpKTsKICAgICBib29sIGluaXRDb2xvciA9IGZhbHNlLCBpbml0
RGVwdGggPSBmYWxzZSwgaW5pdFN0ZW5jaWwgPSBmYWxzZTsKQEAgLTQxOCw3ICs0MTksNiBAQCBi
b29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKCkKIAogICAgIC8v
IFdlIG9ubHkgY2xlYXIgdW4taW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVycyB3aGVuIHRoZXkgYXJl
IHJlYWR5IHRvIGJlCiAgICAgLy8gcmVhZCwgaS5lLiwgd2hlbiB0aGUgZnJhbWVidWZmZXIgaXMg
Y29tcGxldGUuCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGczZCA9IGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKICAgICBpZiAoZzNkLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ4NywxMSArNDg3LDYg
QEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNCb3VuZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIChjb250ZXh0KCktPm1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpID09
IHRoaXMpOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKaW5kZXggMTEwZjUxMzk1ZjliNzg0
NDFiODE5ZDkzNDU1OTYwMzI4MWQwYjRmZC4uMzQ2MzNhMDQxZDFmMTBmZjBjN2ZkZTQ2MWQwM2Y5
MjQzZTQ0MmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaApAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBXZWJHTEZyYW1lYnVmZmVyX2gKICNk
ZWZpbmUgV2ViR0xGcmFtZWJ1ZmZlcl9oCiAKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0
LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC0zNiwxOSArMzcsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV2Vi
R0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFRleHR1cmU7CiAKLWNsYXNzIFdlYkdMRnJhbWVi
dWZmZXIgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlciA6IHB1
YmxpYyBXZWJHTENvbnRleHRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMRnJh
bWVidWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xGcmFtZWJ1
ZmZlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFdl
YkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgc2V0QXR0YWNobWVudEZvckJv
dW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIqKTsK
KyAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1
cmUqLCBHQzNEaW50IGxldmVsKTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xSZW5k
ZXJidWZmZXIqKTsKICAgICAvLyBJZiBhbiBvYmplY3QgaXMgYXR0YWNoZWQgdG8gdGhlIGN1cnJl
bnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgcmVtb3ZlIGl0LgotICAgIHZvaWQgcmVtb3ZlQXR0YWNo
bWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBXZWJHTFNo
YXJlZE9iamVjdCopOwogICAgIC8vIElmIGEgZ2l2ZW4gYXR0YWNobWVudCBwb2ludCBmb3IgdGhl
IGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciBpcyBub3QgbnVsbCwgcmVtb3ZlIHRoZSBhdHRh
Y2hlZCBvYmplY3QuCi0gICAgdm9pZCByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZm
ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMT2JqZWN0KiBnZXRBdHRhY2htZW50KEdDM0RlbnVtKSBj
b25zdDsKKyAgICB2b2lkIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRCosIEdDM0RlbnVtKTsKKyAgICBXZWJHTFNoYXJlZE9iamVjdCogZ2V0QXR0
YWNobWVudChHQzNEZW51bSkgY29uc3Q7CiAKICAgICBHQzNEZW51bSBnZXRDb2xvckJ1ZmZlckZv
cm1hdCgpIGNvbnN0OwogICAgIEdDM0RzaXplaSBnZXRDb2xvckJ1ZmZlcldpZHRoKCkgY29uc3Q7
CkBAIC02MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIGZy
YW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFsaXplCiAgICAgLy8gdGhl
IGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCiAgICAgLy8gbmVl
ZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KLSAgICBib29sIG9uQWNjZXNzKGJv
b2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOworICAgIGJvb2wgb25BY2Nlc3MoR3Jh
cGhpY3NDb250ZXh0M0QqLCBib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKTsKIAog
ICAgIC8vIFNvZnR3YXJlIHZlcnNpb24gb2YgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKCksIGV4
Y2VwdCB0aGF0IHdoZW4KICAgICAvLyBGUkFNRUJVRkZFUl9DT01QTEVURSBpcyByZXR1cm5lZCwg
aXQgaXMgc3RpbGwgcG9zc2libGUgZm9yCkBAIC03NSwyNiArNzYsMjMgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRm
b3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGZyYW1l
YnVmZmVyIGlzIGluY29tcGxldGUuCi0gICAgYm9vbCBpbml0aWFsaXplUmVuZGVyYnVmZmVycygp
OwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGN1cnJlbnRseSBib3VuZC4K
LSAgICBib29sIGlzQm91bmQoKSBjb25zdDsKKyAgICBib29sIGluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICBib29sIGlzQ29sb3JBdHRhY2hlZCgpIGNv
bnN0IHsgcmV0dXJuIChtX2NvbG9yQXR0YWNobWVudCAmJiBtX2NvbG9yQXR0YWNobWVudC0+b2Jq
ZWN0KCkpOyB9CiAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9k
ZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQogICAgIGJv
b2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9zdGVuY2lsQXR0YWNobWVu
dCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KICAgICBib29sIGlzRGVwdGhT
dGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50
ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CiAKLSAgICBSZWZQdHI8
V2ViR0xPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4g
bV9kZXB0aEF0dGFjaG1lbnQ7Ci0gICAgUmVmUHRyPFdlYkdMT2JqZWN0PiBtX3N0ZW5jaWxBdHRh
Y2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50
OworICAgIFJlZlB0cjxXZWJHTFNoYXJlZE9iamVjdD4gbV9jb2xvckF0dGFjaG1lbnQ7CisgICAg
UmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoQXR0YWNobWVudDsKKyAgICBSZWZQdHI8
V2ViR0xTaGFyZWRPYmplY3Q+IG1fc3RlbmNpbEF0dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdlYkdM
U2hhcmVkT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7CiAKICAgICBib29sIG1faGFz
RXZlckJlZW5Cb3VuZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3Qu
Y3BwCmluZGV4IDdiNjI5YTY5Yzc0MzZjMDkwOWMzOTY3M2IwYjUwNDFhNDM4ZTIxZTEuLmZkOTkz
MGYzYWMwNDZkNTI1YzdlMmY5ZWFjMTdhMmVkNWZkYTUyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKQEAgLTI5LDEzICsyOSwyMCBAQAogCiAjaW5jbHVk
ZSAiV2ViR0xPYmplY3QuaCIKIAorI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIK
KyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9i
amVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgiCisjaW5jbHVkZSAi
V2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgi
CisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJXZWJHTExvc2VDb250
ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogV2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKICAgICA6IG1fb2JqZWN0KDApCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkK
ICAgICAsIG1fYXR0YWNobWVudENvdW50KDApCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCiB7CkBA
IC00Myw4ICs1MCw2IEBAIFdlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCiAKIFdlYkdMT2JqZWN0Ojp+V2ViR0xPYmplY3QoKQogewotICAgIGlm
IChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+cmVtb3ZlT2JqZWN0KHRoaXMpOwogfQog
CiB2b2lkIFdlYkdMT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkBA
IC01NCwyNiArNTksMzggQEAgdm9pZCBXZWJHTE9iamVjdDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KQogICAgIG1fb2JqZWN0ID0gb2JqZWN0OwogfQogCi12b2lkIFdlYkdMT2Jq
ZWN0OjpkZWxldGVPYmplY3QoKQordm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCiB7CiAgICAgbV9kZWxldGVkID0gdHJ1ZTsKLSAgICBp
ZiAoIW1fY29udGV4dCB8fCAhbV9vYmplY3QpCisgICAgaWYgKCFtX29iamVjdCkKICAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFoYXNHcm91cE9yQ29udGV4dCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50KSB7Ci0gICAgICAgIG1fY29udGV4dC0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGRlbGV0ZU9i
amVjdEltcGwobV9vYmplY3QpOworICAgICAgICBpZiAoIWNvbnRleHQzZCkKKyAgICAgICAgICAg
IGNvbnRleHQzZCA9IGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworCisgICAgICAgIGlmIChjb250
ZXh0M2QpCisgICAgICAgICAgICBkZWxldGVPYmplY3RJbXBsKGNvbnRleHQzZCwgbV9vYmplY3Qp
OworCiAgICAgICAgIG1fb2JqZWN0ID0gMDsKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xPYmplY3Q6
OmRldGFjaENvbnRleHQoKQordm9pZCBXZWJHTE9iamVjdDo6ZGV0YWNoKCkKIHsKICAgICBtX2F0
dGFjaG1lbnRDb3VudCA9IDA7IC8vIE1ha2Ugc3VyZSBPcGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRl
ZC4KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGRlbGV0ZU9iamVjdCgpOwotICAgICAg
ICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsKLSAgICAgICAgbV9jb250ZXh0ID0gMDsK
ICAgICB9CisKKwordm9pZCBXZWJHTE9iamVjdDo6b25EZXRhY2hlZChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNkKQoreworICAgIGlmIChtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgLS1t
X2F0dGFjaG1lbnRDb3VudDsKKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICBkZWxldGVPYmpl
Y3QoY29udGV4dDNkKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmgKaW5kZXggNDRjYzM2ZjZiZmUyNGFjMDRmZTkxZGU2OGM4ODEwNGI0OWQwNzYzYS4uODQx
ZDBmOWZjOGNmYmNhODgyNmQ0MjFiM2JiNmI0NmNkZjMxMTMwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBXZWJHTENvbnRleHRH
cm91cDsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKIAogY2xhc3MgV2ViR0xPYmplY3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTE9iamVjdD4gewpAQCAtNDQsMzMgKzQ2LDE5IEBAIHB1
YmxpYzoKICAgICAvLyBkZWxldGVPYmplY3QgbWF5IG5vdCBhbHdheXMgZGVsZXRlIHRoZSBPcGVu
R0wgcmVzb3VyY2UuICBGb3IgcHJvZ3JhbXMgYW5kCiAgICAgLy8gc2hhZGVycywgZGVsZXRpb24g
aXMgZGVsYXllZCB1bnRpbCB0aGV5IGFyZSBubyBsb25nZXIgYXR0YWNoZWQuCiAgICAgLy8gRklY
TUU6IHJldmlzaXQgdGhpcyB3aGVuIHJlc291cmNlIHNoYXJpbmcgYmV0d2VlbiBjb250ZXh0cyBh
cmUgaW1wbGVtZW50ZWQuCi0gICAgdm9pZCBkZWxldGVPYmplY3QoKTsKLQotICAgIHZvaWQgZGV0
YWNoQ29udGV4dCgpOwotCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJidWZmZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkZWxldGVPYmplY3QoR3JhcGhpY3NDb250ZXh0M0Qq
KTsKIAogICAgIHZvaWQgb25BdHRhY2hlZCgpIHsgKyttX2F0dGFjaG1lbnRDb3VudDsgfQotICAg
IHZvaWQgb25EZXRhY2hlZCgpCi0gICAgewotICAgICAgICBpZiAobV9hdHRhY2htZW50Q291bnQp
Ci0gICAgICAgICAgICAtLW1fYXR0YWNobWVudENvdW50OwotICAgICAgICBpZiAobV9kZWxldGVk
KQotICAgICAgICAgICAgZGVsZXRlT2JqZWN0KCk7Ci0gICAgfQorICAgIHZvaWQgb25EZXRhY2hl
ZChHcmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0
aGUgY2xpZW50IHNpZGUgaXNzdWUgYSBkZWxldGUgY2FsbCBhbHJlYWR5LCBub3QKICAgICAvLyB3
aGV0aGVyIHRoZSBPcGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRlZC4KICAgICAvLyBvYmplY3QoKT09
MCBpbmRpY2F0ZXMgdGhlIE9wZW5HTCByZXNvdXJjZSBpcyBkZWxldGVkLgogICAgIGJvb2wgaXNE
ZWxldGVkKCkgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAKKyAgICAvLyBUcnVlIGlmIHRoaXMgb2Jq
ZWN0IGJlbG9uZ3MgdG8gdGhlIGdyb3VwIG9yIGNvbnRleHQuCisgICAgdmlydHVhbCBib29sIHZh
bGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KikgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Kik7CiAKQEAgLTc4LDExICs2NiwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAvLyBkZWxldGVPYmplY3RJbXBs
IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHRvIGRlbGV0ZSB0aGUgT3BlbkdMIHJlc291cmNl
LgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCos
IFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9yQ29u
dGV4dCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKKworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0ID0g
MDsKIAogcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0OwotICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwogICAgIHVuc2lnbmVkIG1fYXR0YWNobWVudENv
dW50OwogICAgIGJvb2wgbV9kZWxldGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCmluZGV4IGQzZWZkYTQ3ZGVlNDYzNjU1NGRiYzA3Nzg5ZDQzMmQz
OThhY2MyMGYuLmY2ODU0M2NlNGQ5OTBkYjU4ZTE1N2UwMzRlYzI3MDVkNDI1NTY3YzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcApAQCAtMjksNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAKKyNpbmNsdWRlICJXZWJHTENvbnRl
eHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zOSwzMiArNDAsMzYgQEAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+
IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogfQogCiBX
ZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKLSAg
ICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAs
IG1fbGlua1N0YXR1cyhmYWxzZSkKICAgICAsIG1fbGlua0NvdW50KDApCiB7Ci0gICAgc2V0T2Jq
ZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKKyAg
ICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOwog
fQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0
IG9iaikKK1dlYkdMUHJvZ3JhbTo6fldlYkdMUHJvZ3JhbSgpCiB7Ci0gICAgY29udGV4dCgpLT5n
cmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVQcm9ncmFtKG9iaik7CisgICAgZGVsZXRlT2JqZWN0
KDApOworfQorCit2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAgICBjb250ZXh0
M2QtPmRlbGV0ZVByb2dyYW0ob2JqKTsKICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIpIHsKLSAgICAg
ICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV92ZXJ0ZXhTaGFkZXIt
Pm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgbV92ZXJ0ZXhTaGFkZXIgPSAwOwogICAg
IH0KICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikgewotICAgICAgICBtX2ZyYWdtZW50U2hhZGVy
LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fZnJhZ21lbnRTaGFkZXItPm9uRGV0YWNoZWQoY29u
dGV4dDNkKTsKICAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IDA7CiAgICAgfQogfQogCi1ib29s
IFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKQorYm9vbCBXZWJHTFBy
b2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M2QpCiB7CiAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnMuY2xlYXIoKTsKICAgICBpZiAo
IW9iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCA9IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKIAogICAgIC8vIEFz
c3VtZSBsaW5rIHN0YXR1cyBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZC4KICAgICBpZiAoIW1fbGlu
a1N0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKaW5kZXgg
MGRkM2JhMGZhYWZiOWQ3MDZhYzkzNjFkMTlhNWYwODkzMTY5NjIzNi4uMTUwNTAxMTAwNWQ0Zjg5
Y2ZkZDY1M2JkY2I4NTU3NTQ0OTExOTBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xQcm9ncmFtX2gK
ICNkZWZpbmUgV2ViR0xQcm9ncmFtX2gKIAotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5j
bHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAK
QEAgLTM2LDE1ICszNiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdM
UHJvZ3JhbSA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitjbGFzcyBXZWJHTFByb2dyYW0gOiBwdWJs
aWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMUHJvZ3Jh
bSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFByb2dyYW0oKTsKIAog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOwogCiAgICAgLy8gY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbigpIGlzIG9ubHkg
Y2FsbGVkIG9uY2UgYWZ0ZXIgbGlua1Byb2dyYW0oKQogICAgIC8vIHN1Y2NlZWRzLgotICAgIGJv
b2wgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBib29sIGNhY2hlQWN0aXZlQXR0
cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdW5zaWduZWQgbnVtQWN0aXZl
QXR0cmliTG9jYXRpb25zKCkgY29uc3Q7CiAgICAgR0MzRGludCBnZXRBY3RpdmVBdHRyaWJMb2Nh
dGlvbihHQzNEdWludCBpbmRleCkgY29uc3Q7CiAKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmNwcAppbmRleCA5M2I5MTY1Yzk5NDc0OWY2M2RjNTAzYTM2MjA4YzUx
ZmJlZGI2NDcwLi5kYWFmOWQ0ZWU1OWIzY2E2NmIxY2RjYzg3YWIwMGExOTdmMDE3YjE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgogCisjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsOCArMzksMTMgQEAgUGFzc1JlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGMKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVy
KGN0eCkpOwogfQogCitXZWJHTFJlbmRlcmJ1ZmZlcjo6fldlYkdMUmVuZGVyYnVmZmVyKCkKK3sK
KyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKIFdlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRl
cmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0
eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1faW50ZXJuYWxGb3JtYXQo
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQogICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKICAg
ICAsIG1fd2lkdGgoMCkKQEAgLTQ3LDEyICs1MywxMiBAQCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2Vi
R0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgLCBtX2lzVmFs
aWQodHJ1ZSkKICAgICAsIG1faGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKIHsKLSAgICBzZXRPYmpl
Y3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7
CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKFBs
YXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVJlbmRl
cmJ1ZmZlcihvYmplY3QpOworICAgIGNvbnRleHQzZC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVj
dCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyYnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5oCmluZGV4IDRiNDdiZjVkMzJlODQ2OGQwZjkyZWE5MWU1YThkNjQzM2NjZmNmMTkuLmUx
NjllMmU4YmJmZTVmMTY3ZWNmNTI4MDNiZTJlZjdkOWJmN2M4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaApAQCAtMjYsMTYgKzI2LDE2IEBA
CiAjaWZuZGVmIFdlYkdMUmVuZGVyYnVmZmVyX2gKICNkZWZpbmUgV2ViR0xSZW5kZXJidWZmZXJf
aAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVj
dC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVy
IDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMUmVuZGVyYnVmZmVyIDogcHVibGlj
IFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1
ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1ZmZl
cigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiBwcm90
ZWN0ZWQ6CiAgICAgV2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRm
b3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDU4NTg1NzQ2YjUyYjE2NmU3
OGY2NWRiN2MzMmM5YjQ0NTdhNjMyNmUuLmZkM2UzOGNjNzY4NDY2YjVkOTc0YmExY2JkY2IzZmUw
NWZmYjMwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIldlYkdMQ29t
cHJlc3NlZFRleHR1cmVzLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIldlYkdMQ29udGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3Jv
dXAuaCIKICNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2Vi
R0xEZWJ1Z1NoYWRlcnMuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCkBAIC00MTks
NiArNDIwLDggQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQo
SFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGEKICAgICAsIG1fYXR0cmlidXRlcyhh
dHRyaWJ1dGVzKQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIG1fY29udGV4dEdyb3Vw
ID0gV2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRD
b250ZXh0KHRoaXMpOwogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgLy8gQ3JlYXRlIHRo
ZSBEcmF3aW5nQnVmZmVyIGFuZCBpbml0aWFsaXplIHRoZSBwbGF0Zm9ybSBsYXllci4KQEAgLTQ4
Myw3ICs0ODYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0Nv
bnRleHQoKQogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7CiAKICAgICBtX2RlZmF1bHRWZXJ0
ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBlRGVmYXVsdCk7Ci0gICAgYWRkT2JqZWN0
KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKKyAgICBhZGRDb250ZXh0T2JqZWN0
KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKICAgICBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKICAgICAKICAgICBtX3ZlcnRl
eEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJpYnMpOwpAQCAtNTI4LDggKzUzMSwy
NyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9u
cygpIGNvbnN0CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4
dCgpCiB7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBp
ZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQg
YmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3Vw
LgorICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgbV9kZWZhdWx0VmVydGV4QXJyYXlP
YmplY3QgPSAwOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IDA7CisgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyID0gMDsKKyAgICBtX2N1cnJlbnRQcm9ncmFtID0gMDsKKyAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLm1fdGV4dHVyZTJEQmluZGluZyA9IDA7CisgICAgICBt
X3RleHR1cmVVbml0c1tpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZyA9IDA7CisgICAgfQorCisg
ICAgbV9ibGFja1RleHR1cmUyRCA9IDA7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gMDsK
KwogICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKICAgICBtX2NvbnRleHQtPnNldENv
bnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7CisgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZUNv
bnRleHQodGhpcyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4
dENoYW5nZWQoKQpAQCAtODAxLDcgKzgyMyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja09iamVjdFRvQmVCb3VuZChXZWJHTE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxlCiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChv
YmplY3QpIHsKLSAgICAgICAgaWYgKG9iamVjdC0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAg
ICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewogICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC0xMTA4LDcgKzExMzAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0Mz
RGJpdGZpZWxkIG1hc2spCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9u
QWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCks
ICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTkzLDcgKzEyMTUsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNS
ZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTIzOSw3ICsxMjYxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jl
c291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xMjg3LDcgKzEzMDksNyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVm
ZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCiAgICAgaWYgKGlzQ29u
dGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBv
ID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7Cisg
ICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0xMjk2
LDcgKzEzMTgsNyBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xG
cmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBh
ZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0xMzA1LDcg
KzEzMjcsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVUZXh0dXJlKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xUZXh0dXJlOjpjcmVhdGUo
dGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdl
dCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTMxNCw3ICsxMzM2LDcgQEAgUGFzc1JlZlB0
cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiAg
ICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdl
YkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVj
dChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87
CiB9CiAKQEAgLTEzMjMsNyArMTM0NSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xSZW5kZXJi
dWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVj
dChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87
CiB9CiAKQEAgLTEzMzgsNyArMTM2MCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwCiAgICAg
fQogCiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlz
LCB0eXBlKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8u
Z2V0KCkpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0xMzU0LDEyICsxMzc2LDE0IEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFvYmplY3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgIGlmICghb2Jq
ZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChvYmplY3QtPm9iamVjdCgp
KQotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdCgpOworICAgICAgICAvLyBXZSBuZWVkIHRv
IHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGluZ3Mg
aW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisgICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdy
YXBoaWNzQ29udGV4dDNEKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDE1LDcgKzE0
MzksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiAgICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcpCiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7
CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5k
RnJhbWVidWZmZXIoZ3JhcGhpY3NDb250ZXh0M0QoKSwgcmVuZGVyYnVmZmVyKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVy
KQpAQCAtMTQzNCw3ICsxNDU4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQogICAgICAgICAgICAgbV90ZXh0dXJlVW5p
dHNbaV0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSAwOwogICAgIH0KICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7CisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoZ3JhcGhpY3ND
b250ZXh0M0QoKSwgdGV4dHVyZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKQEAgLTE0NzYsNyArMTUwMCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJH
TFNoYWRlciogc2hhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5kZXRh
Y2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclplcm8oc2hhZGVyKSk7Ci0g
ICAgc2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNz
Q29udGV4dDNEKCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
QEAgLTE2ODgsNyArMTcxMiw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVdlYkdMT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChvYmplY3QtPmNvbnRleHQoKSAhPSB0aGlz
KSB7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNzI5
LDcgKzE3NTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgYwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0Qo
KSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4MDMsNyArMTgyNyw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUo
KSkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsK
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTg4MCw3ICsxOTA0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXQKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKKyAgICBpZiAoYnVmZmVyICYmICFidWZmZXItPnZhbGlkYXRlKGNv
bnRleHRHcm91cCgpLCB0aGlzKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xOTE4LDcgKzE5NDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdAog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
dGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIG9iamVjdE9yWmVybyhidWZm
ZXIpKTsKICAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JC
b3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7CisgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGdyYXBoaWNzQ29udGV4dDNE
KCksIGF0dGFjaG1lbnQsIGJ1ZmZlcik7CiAgICAgaWYgKHJlYXR0YWNoRGVwdGgpIHsKICAgICAg
ICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QgPSBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJp
bmRpbmctPmdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQp
KTsKICAgICAgICAgaWYgKG9iamVjdCkKQEAgLTE5NTEsNyArMTk3NSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgaWYgKHRl
eHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTYzLDcgKzE5ODcs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSwgbGV2ZWwpOwotICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0
YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoZ3JhcGhpY3NDb250ZXh0M0QoKSwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIApAQCAtMjE2Nyw3ICsyMTkxLDcgQEAgV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0Rl
bnVtIHQKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwogICAgIH0KIAotICAgIFdlYkdM
T2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0QXR0YWNobWVudChhdHRh
Y2htZW50KTsKKyAgICBXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPmdldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7CiAgICAgaWYgKCFvYmplY3QpIHsKICAg
ICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX09CSkVDVF9UWVBFKQogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGlj
c0NvbnRleHQzRDo6Tk9ORSk7CkBAIC0yOTQzLDcgKzI5NjcsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25D
b2RlJiBlYwogICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTLCAmdmFsdWUpOwogICAgIHByb2dyYW0t
PnNldExpbmtTdGF0dXMoc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKICAgICAvLyBOZWVkIHRv
IGNhY2hlIGxpbmsgc3RhdHVzIGJlZm9yZSBjYWNoaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgbG9jYXRp
b25zLgotICAgIHByb2dyYW0tPmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgcHJv
Z3JhbS0+Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMzAzNCw3ICszMDU4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdy
YXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zOTQzLDcgKzM5Njcs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0q
IHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KICAgICBpZiAobV9jdXJyZW50UHJv
Z3JhbSAhPSBwcm9ncmFtKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAgICAg
ICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZCgpOworICAgICAgICAgICAgbV9jdXJy
ZW50UHJvZ3JhbS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgbV9j
dXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShv
YmplY3RPclplcm8ocHJvZ3JhbSkpOwogICAgICAgICBpZiAocHJvZ3JhbSkKQEAgLTQxMjEsMjIg
KzQxNDUsMzQgQEAgUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKIH0KICNlbmRpZgogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVtb3ZlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChvYmplY3QpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIHJlbW92ZVNoYXJlZE9i
amVjdChvYmplY3QpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xD
b250ZXh0T2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgbV9jYW52YXNPYmplY3RzLnJlbW92ZShvYmpl
Y3QpOworICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7CiB9CiAKLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphZGRPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVj
dCogb2JqZWN0KQogewogICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICByZW1vdmVP
YmplY3Qob2JqZWN0KTsKLSAgICBtX2NhbnZhc09iamVjdHMuYWRkKG9iamVjdCk7CisgICAgcmVt
b3ZlQ29udGV4dE9iamVjdChvYmplY3QpOworICAgIG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVj
dCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCkKIHsKLSAgICB3aGlsZSAobV9jYW52YXNPYmplY3RzLnNpemUoKSA+IDApIHsKLSAg
ICAgICAgSGFzaFNldDxXZWJHTE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY2FudmFzT2JqZWN0
cy5iZWdpbigpOworICAgIHdoaWxlIChtX2NvbnRleHRPYmplY3RzLnNpemUoKSA+IDApIHsKKyAg
ICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2NvbnRl
eHRPYmplY3RzLmJlZ2luKCk7CiAgICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7CiAgICAg
fQogfQpAQCAtNDk1Myw2ICs0OTg5LDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCiAKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dCgpCiB7CisgICAgbV9jb250ZXh0R3JvdXAtPmxv
c2VDb250ZXh0R3JvdXAoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VD
b250ZXh0SW1wbCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CiAKICAgICBkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCmluZGV4IDhiYWFmN2ZhYmI4Yjk3ZjI1NjM3MzA2NTQxZTEyOTI5MzIyN2U0
ZjIuLjNmMGQ4MjdkNjQ5MzZlZWQzNDEzMjA4YjliMGMwNGE3NDYyYjAyNTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC01
MCw2ICs1MCw4IEBAIGNsYXNzIE9FU1RleHR1cmVGbG9hdDsKIGNsYXNzIE9FU1ZlcnRleEFycmF5
T2JqZWN0OwogY2xhc3MgV2ViR0xBY3RpdmVJbmZvOwogY2xhc3MgV2ViR0xCdWZmZXI7CitjbGFz
cyBXZWJHTENvbnRleHRHcm91cDsKK2NsYXNzIFdlYkdMQ29udGV4dE9iamVjdDsKIGNsYXNzIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVzOwogY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKIGNs
YXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87CkBAIC02MSw2ICs2Myw3IEBAIGNsYXNzIFdlYkdM
T2JqZWN0OwogY2xhc3MgV2ViR0xQcm9ncmFtOwogY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CiBj
bGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OwogY2xhc3MgV2ViR0xU
ZXh0dXJlOwogY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb247CiBjbGFzcyBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTOwpAQCAtMjkyLDggKzI5NSwxMCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2
b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKICAgICB2b2lkIGZvcmNlUmVz
dG9yZUNvbnRleHQoKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0SW1wbCgpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
LmdldCgpOyB9CisgICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
OwogI2VuZGlmCkBAIC0zMDQsNyArMzA5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKLSAgICB2b2lk
IHJlbW92ZU9iamVjdChXZWJHTE9iamVjdCopOworICAgIHZvaWQgcmVtb3ZlU2hhcmVkT2JqZWN0
KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOwogICAgIAogICAgIHVuc2lnbmVkIGdldE1heFZlcnRleEF0dHJpYnMo
KSBjb25zdCB7IHJldHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0KIApAQCAtMzE5LDcgKzMyNSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiAgICAgdm9pZCBz
ZXR1cEZsYWdzKCk7CiAKLSAgICB2b2lkIGFkZE9iamVjdChXZWJHTE9iamVjdCopOworICAgIHZv
aWQgYWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250
ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwogICAgIHZvaWQgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwogCiAgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKQEAgLTM2Miw2
ICszNjksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250ZXh0R3Jv
dXA7CiAKICAgICAvLyBPcHRpb25hbCBzdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdp
bmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkKICAgICAvLyB0byB0aGUgYmFjay1idWZmZXIg
b2YgbV9jb250ZXh0LgpAQCAtMzgwLDcgKzM4OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV9u
ZWVkc1VwZGF0ZTsKICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxX
ZWJHTE9iamVjdCo+IG1fY2FudmFzT2JqZWN0czsKKyAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9i
amVjdCo+IG1fY29udGV4dE9iamVjdHM7CiAKICAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBV
c2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3Rv
cmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKICAgICBSZWZQdHI8V2ViR0xCdWZm
ZXI+IG1fYm91bmRBcnJheUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhZGVyLmNwcAppbmRleCA1OTY5NWU0YzkzYmY1NGM5ODIwYTVhNzdlZWQ5ODM2MmYxOTQyMGI2
Li4zNTA2OGViY2RjYTJlZTY2NTdhYTZiYjExYWFkODI0OGUyNTllMzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlICJXZWJHTFNoYWRlci5oIgogCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzksMTYgKzQwLDIxIEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVy
OjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtCiB9CiAKIFdlYkdM
U2hhZGVyOjpXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0g
dHlwZSkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0
eCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9zb3VyY2UoIiIpCiB7Ci0gICAgc2V0T2Jq
ZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsK
KyAgICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIodHlw
ZSkpOwogfQogCi12b2lkIFdlYkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KQorV2ViR0xTaGFkZXI6On5XZWJHTFNoYWRlcigpCiB7Ci0gICAgY29udGV4
dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVTaGFkZXIob2JqZWN0KTsKKyAgICBkZWxl
dGVPYmplY3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit7Cisg
ICAgY29udGV4dDNkLT5kZWxldGVTaGFkZXIob2JqZWN0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKaW5kZXggMWQ3YTEwYzFjNGI5ZDk5YWYwY2FjN2Yy
MWVjYzRmOTc4ZjkzNGE0OC4uOTJkMWQxYzQ4YTE5YzFjOWQwYjYwNjEwZmVmYzI1YmFlNjc4YjQw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCkBAIC0yNiwxNiAr
MjYsMTYgQEAKICNpZm5kZWYgV2ViR0xTaGFkZXJfaAogI2RlZmluZSBXZWJHTFNoYWRlcl9oCiAK
LSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0Lmgi
CiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xTaGFkZXIgOiBwdWJsaWMg
V2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xTaGFkZXIgOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmpl
Y3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMU2hhZGVyKCkgeyBkZWxldGVPYmplY3Qo
KTsgfQorICAgIHZpcnR1YWwgfldlYkdMU2hhZGVyKCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdDM0RlbnVtKTsK
IApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkdMU2hhZGVyKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCosIEdDM0RlbnVtKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45Zjc2Y2FlNzdiNGY5MTc2YzU4OWZhZjJhNjVlNTUwNjI5NmY2Yzk0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJHTCkKKworI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCisKKyNpbmNsdWRlICJX
ZWJHTENvbnRleHRHcm91cC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9i
amVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBXZWJHTE9iamVjdChj
b250ZXh0KSwKKyAgICAgIG1fY29udGV4dEdyb3VwKGNvbnRleHQtPmNvbnRleHRHcm91cCgpKQor
eworfQorCitXZWJHTFNoYXJlZE9iamVjdDo6fldlYkdMU2hhcmVkT2JqZWN0KCkKK3sKKyAgICBp
ZiAobV9jb250ZXh0R3JvdXApCisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qo
dGhpcyk7Cit9CisKK3ZvaWQgV2ViR0xTaGFyZWRPYmplY3Q6OmRldGFjaENvbnRleHRHcm91cCgp
Cit7CisgICAgZGV0YWNoKCk7CisgICAgaWYgKG1fY29udGV4dEdyb3VwKSB7CisgICAgICAgIGRl
bGV0ZU9iamVjdCgwKTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdCh0aGlz
KTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAgPSAwOworICAgIH0KK30KKworR3JhcGhpY3NDb250
ZXh0M0QqIFdlYkdMU2hhcmVkT2JqZWN0OjpnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbnRleHRHcm91cCA/IG1fY29udGV4dEdyb3VwLT5nZXRBR3JhcGhp
Y3NDb250ZXh0M0QoKSA6IDA7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE4ODlhNmE1NjE3NWM4NjY2MmVhNjliNjM3OWM4NmEwMzcwNjc1NzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViR0xTaGFyZWRPYmplY3RfaAorI2Rl
ZmluZSBXZWJHTFNoYXJlZE9iamVjdF9oCisKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2Vi
R0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CisKK2NsYXNzIFdl
YkdMU2hhcmVkT2JqZWN0IDogcHVibGljIFdlYkdMT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5XZWJHTFNoYXJlZE9iamVjdCgpOworCisgICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRl
eHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZW5kZXJidWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
VGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFs
aWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCwgY29uc3QgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb250ZXh0R3Jv
dXAgPT0gbV9jb250ZXh0R3JvdXA7CisgICAgfQorCisgICAgdm9pZCBkZXRhY2hDb250ZXh0R3Jv
dXAoKTsKKworcHJvdGVjdGVkOgorICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworCisgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRleHRHcm91cDsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBXZWJHTENvbnRleHRHcm91cCogbV9jb250ZXh0R3JvdXA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJHTE9iamVjdF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAppbmRleCBlOGU4YmY4MjQ1ZDAz
NDAwNzIzZTcyNzY2ZjIwMzk3MmU0M2IxODJmLi45YWQ1OGI0YmMxNjQ3MGVhMDRmNjQ4OTgwYjc2
OTUxMjZhM2JkMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgogCisj
aW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKQEAgLTQwLDcgKzQxLDcg
QEAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdl
YkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAgICAgLCBtX21pbkZpbHRl
cihHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKQogICAgICwgbV9tYWdG
aWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikKQEAgLTUwLDcgKzUxLDEyIEBAIFdlYkdM
VGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgICwg
bV9pc0NvbXBsZXRlKGZhbHNlKQogICAgICwgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUoZmFsc2Up
CiB7Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRl
VGV4dHVyZSgpKTsKKyAgICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVh
dGVUZXh0dXJlKCkpOworfQorCitXZWJHTFRleHR1cmU6On5XZWJHTFRleHR1cmUoKQoreworICAg
IGRlbGV0ZU9iamVjdCgwKTsKIH0KIAogdm9pZCBXZWJHTFRleHR1cmU6OnNldFRhcmdldChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbWF4TGV2ZWwpCkBAIC0yMjUsOSArMjMxLDkgQEAgYm9vbCBX
ZWJHTFRleHR1cmU6Om5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
bmVlZFRvVXNlQmxhY2tUZXh0dXJlOwogfQogCi12b2lkIFdlYkdMVGV4dHVyZTo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xUZXh0dXJlOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRl
VGV4dHVyZShvYmplY3QpOworICAgIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOwog
fQogCiBpbnQgV2ViR0xUZXh0dXJlOjptYXBUYXJnZXRUb0luZGV4KEdDM0RlbnVtIHRhcmdldCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKaW5kZXggNmJk
MTI3MjNjYzc0YWZkMjI3YTFjYmZjM2E2ZmZjMTRlNTk3ZDlkOC4uZDFkYjk1MWZmYzIwZDE5Nzg3
MTk5NTAzNTA1MjEzMThkMWY2MGM3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xUZXh0dXJlX2gKICNk
ZWZpbmUgV2ViR0xUZXh0dXJlX2gKIAotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVk
ZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTM0LDkgKzM0LDkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFRleHR1cmUgOiBwdWJsaWMgV2ViR0xPYmplY3Qgewor
Y2xhc3MgV2ViR0xUZXh0dXJlIDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5XZWJHTFRleHR1cmUoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmly
dHVhbCB+V2ViR0xUZXh0dXJlKCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1
cmU+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNzMsNyArNzMsNyBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
LCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBMZXZlbEluZm8gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmNwcAppbmRleCBkMTRjOTZjMDFmNjE0N2VmNGU4MGE5YjgxZWY5YmJjYjA2MTkz
NzUwLi40YWEwM2I4ZmVhMTUxOWI5NzIyMzcwNGNhZmJmYTc2MzgxMzJhZjIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTLmNwcApAQCAtNDAsNyArNDAsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM+IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShXZWJHTFJlbgogfQogCiBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY3R4LCBWYW9UeXBlIHR5cGUpCi0gICAgOiBXZWJHTE9iamVjdChj
dHgpCisgICAgOiBXZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiAgICAgLCBtX2JvdW5kRWxlbWVudEFycmF5
QnVmZmVyKDApCkBAIC01Nyw5ICs1NywxNCBAQCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LAogICAg
IH0KIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBs
KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQorV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6fldl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKQogewotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9u
cyA9IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOworICAg
IGRlbGV0ZU9iamVjdCgwKTsKK30KKwordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpk
ZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQz
ZC0+Z2V0RXh0ZW5zaW9ucygpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBWYW9U
eXBlRGVmYXVsdDoKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKaW5kZXggZjQ5YTc4MDY5MzA4
MzQ5YjE2NTBlYjRiZWRkODI0NzY4MmI4MjAxMi4uNzVhZTQyZmY3MjVhY2QxZGZlZGJjZTZhMGJj
OTJkM2M0MDI4ZjQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaApAQCAtMjcsMjEgKzI3LDIxIEBACiAjZGVmaW5l
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVNfaAogCiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIK
LSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5o
IgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyA6IHB1YmxpYyBXZWJHTENvbnRleHRPYmplY3QgewogcHVibGljOgogICAgIGVudW0gVmFv
VHlwZSB7CiAgICAgICAgIFZhb1R5cGVEZWZhdWx0LAogICAgICAgICBWYW9UeXBlVXNlciwKICAg
ICB9OwogICAgIAotICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSB7IGRl
bGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygp
OwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gY3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5cGUpOwogICAgIApAQCAtODMsNyArODMs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiwgVmFvVHlwZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgdmly
dHVhbCBib29sIGlzVmVydGV4QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCmRp
ZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggNTU2ZmEwNTY0ODFiOWEwMjdh
NTY0YjQ5ZmIxNzJlOGI1NzE2NTFmYi4uMWUxMjNhYWE0NDU1YTk2ZDI0ODM1YTJjZTkxMDk1M2Q0
YzEwMTBkMSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1MyBAQAorMjAxMi0wMS0wOSAgR3JlZ2cgVGF2YXJlcyAgPGdtYW5AZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBBZGQgV2ViR0xDb250ZXh0R3JvdXAgYXMgc3RlcCB0b3dhcmQgc2hhcmluZyBXZWJH
TCByZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1OTA2CisKKyAgICAgICAgVGhlIFdlYkdMIFdvcmtpbmcgR3JvdXAgd2lsbCBzb29uIGFk
ZCB0aGUgYWJpbGl0eSB0byBzaGFyZQorICAgICAgICBXZWJHTCByZXNvdXJjZXMgYW1vbmcgV2Vi
R0wgY29udGV4dHMuIFRoaXMgaXMgdGhlIG5lY2Vzc2FyeQorICAgICAgICBwcmVwIHdvcmsuIE5P
IEFQSSBjaGFuZ2VzLgorCisgICAgICAgIEFkZGVkIFdlYkdMU2hhcmVkT2JqZWN0IGZvciBvYmpl
Y3RzIHRoYXQgYXJlIHNoYXJlZCB2cworICAgICAgICBXZWJHTENvbnRleHRPYmplY3QgZm9yIG9i
amVjdHMgdGhhdCBhcmUgbm90LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T0VTVmVydGV4QXJyYXlPYmplY3Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6
CisgICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6aXNWZXJ0ZXhBcnJheU9F
Uyk6CisgICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6YmluZFZlcnRleEFy
cmF5T0VTKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xCdWZmZXI6On5XZWJHTEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZl
cjo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6V2ViR0xDb250ZXh0R3JvdXApOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6On5XZWJHTENvbnRleHRHcm91cCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpyZW1vdmVPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xDb250ZXh0R3JvdXA6OmFkZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFNoYWRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6Oldl
YkdMQ29udGV4dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6
On5XZWJHTENvbnRleHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2Jq
ZWN0OjpkZXRhY2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVj
dDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTaGFkZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6OnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6aGFzR3JvdXBPckNvbnRleHQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEZyYW1lYnVmZmVyOjp+V2ViR0xGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91
bmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpjaGVj
a1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xP
YmplY3Q6OldlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0Ojp+V2Vi
R0xPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMT2JqZWN0OjpvbkRldGFjaGVkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TE9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFByb2dyYW06On5XZWJHTFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJv
Z3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjp+V2ViR0xSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVy
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmpl
Y3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6fldlYkdMUmVu
ZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFySWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5k
ZXhBcnJheUNvbnNlcnZhdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVtb3ZlQ29udGV4dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdFZlcnRleEF0dHJpYjApOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbnRleHRHcm91cCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xT
aGFkZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjp+V2Vi
R0xTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdElt
cGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xTaGFyZWRPYmplY3Q6On5XZWJHTFNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFNoYXJlZE9iamVjdDo6ZGV0YWNoQ29udGV4dEdyb3VwKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMU2hhcmVkT2JqZWN0OjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmguCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNo
YXJlZE9iamVjdDo6Y29udGV4dEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVk
T2JqZWN0Ojppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6
aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojppc1JlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6dmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xTaGFyZWRPYmplY3Q6Omhhc0dyb3VwT3JDb250ZXh0KToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJl
OjpXZWJHTFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjp+V2ViR0xU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1w
bCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6On5XZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMuaDoKKwogMjAxMi0wMS0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIGEgd2F5IHRvIGNoYW5n
ZSB3ZWIgdmlldyBzZXR0aW5ncyBpbiBNaW5pQnJvd3Nlcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121894</attachid>
            <date>2012-01-10 12:48:11 -0800</date>
            <delta_ts>2012-01-10 17:01:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75906-20120110124809.patch</filename>
            <type>text/plain</type>
            <size>81708</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA2NDg2ODk3NGMzODgyYjg4YWIwOGQyOGI5ZjdmZmVhMGY5YWU0NzIwLi45ZmI5OTEyYTQ2
YTY4ZWVjNzIyZjdkOThiYTVmMmYyN2U0ZDY4YTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTU0NCw2ICs1NDQsOCBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHTENvbnRleHRFdmVudC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNXZWJHTENvbnRleHRFdmVudC5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTV2ViR0xDb250ZXh0R3JvdXAuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
V2ViR0xDb250ZXh0R3JvdXAuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMRnJh
bWVidWZmZXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xGcmFtZWJ1ZmZl
ci5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xMb3NlQ29udGV4dC5jcHAgXApA
QCAtNTU1OSw2ICs1NTYxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdSZW5kZXJlckluZm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TERlYnVnUmVuZGVyZXJJbmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdTaGFkZXJzLmNwcCBcCkBAIC01NTc5LDYgKzU1ODMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUZXh0dXJlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzQxM2Y1ODJhMmViYTdiYmRlZGRmNjJjMTE0Mjdi
MTNiZDJmMjk0Ni4uNzMxM2RhZjMwNjI0OTI4OTRlYTBiZTY0MTM0MjFjNmFiZjNiNjA2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNTgwNCw2ICs1ODA0LDEwIEBACiAgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRFdmVudC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dEV2ZW50LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgnLAogICAgICAgICAgICAg
J2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcCcsCkBAIC01ODI2LDYgKzU4MzAsOCBAQAogICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oJywKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL1dlYkdMU2hhZGVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhcmVk
T2JqZWN0LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3Qu
aCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKaW5kZXggYTI2ZDcwNjlmNmVjZDVh
OGI0MThiOWFjZTgyMmNhZDMyMmFhNWJmMy4uY2VhNTI1YzM5OTAxM2Q1MjZlNGNlYjczYjk5MTU1
MzRlMTA1ZjI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVy
dGV4QXJyYXlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcApAQCAtNjAsNyArNjAsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM+IE9FU1ZlcnRleEFycmF5T2JqZWN0OjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUz4gbyA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShtX2NvbnRl
eHQsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVVc2VyKTsKLSAgICBtX2NvbnRl
eHQtPmFkZE9iamVjdChvLmdldCgpKTsKKyAgICBtX2NvbnRleHQtPmFkZENvbnRleHRPYmplY3Qo
by5nZXQoKSk7CiAgICAgcmV0dXJuIG8ucmVsZWFzZSgpOwogfQogCkBAIC02OSw3ICs2OSw3IEBA
IHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMqIGFycmF5CiAgICAgaWYgKCFhcnJheU9iamVjdCB8fCBtX2NvbnRl
eHQtPmlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFycmF5T2Jq
ZWN0LT5kZWxldGVPYmplY3QoKTsKKyAgICBhcnJheU9iamVjdC0+ZGVsZXRlT2JqZWN0KG1fY29u
dGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CiB9CiAKIEdDM0Rib29sZWFuIE9FU1ZlcnRleEFy
cmF5T2JqZWN0Ojppc1ZlcnRleEFycmF5T0VTKFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFy
cmF5T2JqZWN0KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIE9FU1ZlcnRleEFycmF5T2JqZWN0Ojpi
aW5kVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYgogICAg
IGlmIChtX2NvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGlmIChhcnJheU9iamVjdCAmJiBhcnJheU9iamVjdC0+Y29udGV4dCgpICE9IG1fY29udGV4
dCkgeworICAgIGlmIChhcnJheU9iamVjdCAmJiAhYXJyYXlPYmplY3QtPnZhbGlkYXRlKDAsIGNv
bnRleHQoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuY3BwCmluZGV4IDk5N2RiYTUwMGVkNTAzODNjNjQzZThlMWYwOTA2NWRiMGY2YjY4NjEuLmZj
NmQ0MDg2MDY3NWQ2ZjE2YTk2MzRjMmM2MTZkNTZhZWNiNTFmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJXZWJHTEJ1ZmZlci5oIgogCiAjaW5jbHVkZSAiQ2hlY2tlZEludC5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyVmlldy5oPgogCkBAIC00MSwxOCArNDIsMjMgQEAgUGFz
c1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xCdWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGN0eCkKIH0KIAogV2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY3R4KQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xTaGFyZWRP
YmplY3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQogICAg
ICwgbV9uZXh0QXZhaWxhYmxlQ2FjaGVFbnRyeSgwKQogewotICAgIHNldE9iamVjdChjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpKTsKKyAgICBzZXRPYmplY3Qo
Y3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVCdWZmZXIoKSk7CiAgICAgY2xlYXJDYWNo
ZWRNYXhJbmRpY2VzKCk7CiB9CiAKLXZvaWQgV2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwo
UGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCitXZWJHTEJ1ZmZlcjo6fldlYkdMQnVmZmVyKCkKIHsK
LSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihvYmplY3Qp
OworICAgIGRlbGV0ZU9iamVjdCgwKTsKK30KKwordm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKK3sKKyAgICAgIGNvbnRleHQzZC0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CiB9CiAKIGJv
b2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKEFycmF5QnVmZmVyKiBhcnJh
eSwgR0MzRGludHB0ciBieXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbmd0aCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCmluZGV4IDAxNTdlY2U2NWYwY2U0Yjdj
NDA3YjdiY2I1OWQ3OTY4NzUxNDBjMDcuLjg0OWMzNTgyYmQ3OWNhOGMxNTA1MTQ3NTMwZmQ5MGU3
ZGNiNWU5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaApAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTEJ1ZmZlcl9oCiAjZGVmaW5lIFdlYkdMQnVmZmVy
X2gKIAotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmpl
Y3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CkBAIC0zNSw5ICszNSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
V2ViR0xCdWZmZXIgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xCdWZmZXIgOiBw
dWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMQnVm
ZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMQnVmZmVyKCk7CiAK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOwogCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBX
ZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgbyk7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KTsKIAog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmVmYmRkODYxNjA4N2NlN2Q3NDU3OTM5NDQwYzcwODBjMTE4MDdkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKKworI2lmIFBMQVRG
T1JNKFFUKQorI3VuZGVmIGVtaXQKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IFdlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUoKQor
eworICAgIFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gY29udGV4dEdyb3VwID0gYWRvcHRSZWYo
bmV3IFdlYkdMQ29udGV4dEdyb3VwKCkpOworICAgIHJldHVybiBjb250ZXh0R3JvdXAucmVsZWFz
ZSgpOworfQorCitXZWJHTENvbnRleHRHcm91cDo6V2ViR0xDb250ZXh0R3JvdXAoKQoreworfQor
CitXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29udGV4dEdyb3VwKCkKK3sKKyAgICBkZXRhY2hB
bmRSZW1vdmVBbGxPYmplY3RzKCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRl
eHRHcm91cDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4
dHMuaXNFbXB0eSgpKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVy
YXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4oKTsKKyAgICByZXR1cm4gKCppdCktPmdyYXBoaWNz
Q29udGV4dDNEKCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRleHQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fY29udGV4dHMuYWRkKGNvbnRl
eHQpOworfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHRzLnJlbW92ZShjb250ZXh0
KTsKKworICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgY29udGV4dCBsZXQgZ28gb2YgYWxsIHRo
ZSByZXNvdXJjZXMuCisgICAgaWYgKG1fY29udGV4dHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8v
IGdldEFDb250ZXh0IG5lZWRzIGEgY29udGV4dCB0byBiZSBhYmxlIHRvIGRlbGV0ZS4KKyAgICAg
ICAgbV9jb250ZXh0cy5hZGQoY29udGV4dCk7CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9i
amVjdHMoKTsKKyAgICAgICAgbV9jb250ZXh0cy5yZW1vdmUoY29udGV4dCk7CisgICAgfQorfQor
Cit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpyZW1vdmVPYmplY3QoV2ViR0xTaGFyZWRPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBtX2dyb3VwT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6YWRkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgcmVtb3ZlT2JqZWN0KG9iamVjdCk7CisgICAgbV9ncm91cE9iamVjdHMuYWRkKG9i
amVjdCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUFsbE9i
amVjdHMoKQoreworICAgIHdoaWxlICghbV9ncm91cE9iamVjdHMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEhhc2hTZXQ8V2ViR0xTaGFyZWRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2dyb3VwT2Jq
ZWN0cy5iZWdpbigpOworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dEdyb3VwKCk7CisgICAg
fQorfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgZm9yIChIYXNoU2V0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVnaW4o
KTsgaXQgIT0gbV9jb250ZXh0cy5lbmQoKTsgKytpdCkKKyAgICAgICAgKCppdCktPmxvc2VDb250
ZXh0SW1wbChtb2RlKTsKKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjExYTAzNjc5M2IxNDA3MjRlZjQ0Njc0ZDI1YWEwNmRkNTE2ODQ4YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKQEAgLTAs
MCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENvbnRleHRHcm91cF9oCisjZGVmaW5l
IFdlYkdMQ29udGV4dEdyb3VwX2gKKworI2luY2x1ZGUgPFdlYkdMUmVuZGVyaW5nQ29udGV4dC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBXZWJH
TFNoYXJlZE9iamVjdDsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKKwordHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXAgOiBwdWJsaWMgUmVm
Q291bnRlZDxXZWJHTENvbnRleHRHcm91cD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5XZWJHTENvbnRl
eHRHcm91cCgpOworCisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKworICAg
IHZvaWQgYWRkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVPYmpl
Y3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3Jh
cGhpY3NDb250ZXh0M0QoKTsKKworICAgIHZvaWQgbG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSk7CisKKyAgcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgV2ViR0xPYmplY3Q7CisKKyAgICBXZWJHTENvbnRleHRHcm91cCgpOworCisgICAgdm9p
ZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxXZWJHTFNoYXJlZE9iamVjdCo+
IG1fZ3JvdXBPYmplY3RzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjliM2FiMGI5YzZlNGQxM2JjNTJhZTZiMTRiODY0YTg2ZGQxYTNkYjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRP
YmplY3QuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgor
CisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorICAgIDogV2ViR0xPYmplY3QoY29udGV4dCkKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworfQorCitXZWJHTENvbnRleHRPYmplY3Q6On5XZWJHTENvbnRl
eHRPYmplY3QoKQoreworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dC0+cmVt
b3ZlQ29udGV4dE9iamVjdCh0aGlzKTsKK30KKwordm9pZCBXZWJHTENvbnRleHRPYmplY3Q6OmRl
dGFjaENvbnRleHQoKQoreworICAgIGRldGFjaCgpOworICAgIGlmIChtX2NvbnRleHQpIHsKKyAg
ICAgICAgZGVsZXRlT2JqZWN0KG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAg
ICAgIG1fY29udGV4dC0+cmVtb3ZlQ29udGV4dE9iamVjdCh0aGlzKTsKKyAgICAgICAgbV9jb250
ZXh0ID0gMDsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRPYmpl
Y3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4
dCA/IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSA6IDA7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29udGV4dE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0T2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBiYzA5ZDU1YjdmOWRiZmY0NTVlMTNiMmQyMDUx
YTdhZjY4NGExZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29udGV4dE9iamVjdC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViR0xDb250ZXh0T2JqZWN0X2gKKyNkZWZpbmUgV2ViR0xDb250ZXh0T2JqZWN0X2gKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDsKKworY2xhc3MgV2ViR0xDb250ZXh0T2JqZWN0IDogcHVibGlj
IFdlYkdMT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJHTENvbnRleHRPYmplY3Qo
KTsKKworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dDsgfQorCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29u
dGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQgPT0gbV9jb250ZXh0OworICAgIH0KKworICAg
IHZvaWQgZGV0YWNoQ29udGV4dCgpOworCitwcm90ZWN0ZWQ6CisgICAgV2ViR0xDb250ZXh0T2Jq
ZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworCisgICAgdmlydHVhbCBib29sIGhhc0dyb3Vw
T3JDb250ZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQ7CisgICAg
fQorCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX29iamVjdDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkdMT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggZDFhZjUxOGMwNTE2NTVmOTM0
MWQyZGZiYmFjMTY5YzYzMWI1NjJiZi4uZWEwYTc0MmZkYjU4ZGQ0M2ExNDdjNTc3NjljYzUyMWUy
YWRkOTA4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZl
ci5oIgogCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2Ugewog
Ci0gICAgYm9vbCBpc0F0dGFjaG1lbnRDb21wbGV0ZShXZWJHTE9iamVjdCogYXR0YWNoZWRPYmpl
Y3QsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCisgICAgYm9vbCBpc0F0dGFjaG1lbnRDb21wbGV0ZShX
ZWJHTFNoYXJlZE9iamVjdCogYXR0YWNoZWRPYmplY3QsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAg
ICAgewogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3QtPm9i
amVjdCgpKTsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigp
KTsKQEAgLTYyLDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgR0MzRHNpemVpIGdldEltYWdlV2lkdGgoV2ViR0xPYmplY3QqIGF0dGFjaGVk
T2JqZWN0KQorICAgIEdDM0RzaXplaSBnZXRJbWFnZVdpZHRoKFdlYkdMU2hhcmVkT2JqZWN0KiBh
dHRhY2hlZE9iamVjdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdCAmJiBh
dHRhY2hlZE9iamVjdC0+b2JqZWN0KCkpOwogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3Qt
PmlzUmVuZGVyYnVmZmVyKCkpOwpAQCAtNzAsNyArNzEsNyBAQCBuYW1lc3BhY2UgewogICAgICAg
ICByZXR1cm4gYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgIH0KIAotICAgIEdDM0RzaXplaSBnZXRJ
bWFnZUhlaWdodChXZWJHTE9iamVjdCogYXR0YWNoZWRPYmplY3QpCisgICAgR0MzRHNpemVpIGdl
dEltYWdlSGVpZ2h0KFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkp
OwogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwpAQCAt
NzgsNyArNzksNyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gYnVmZmVyLT5nZXRIZWln
aHQoKTsKICAgICB9CiAKLSAgICBib29sIGlzVW5pbml0aWFsaXplZChXZWJHTE9iamVjdCogYXR0
YWNoZWRPYmplY3QpCisgICAgYm9vbCBpc1VuaW5pdGlhbGl6ZWQoV2ViR0xTaGFyZWRPYmplY3Qq
IGF0dGFjaGVkT2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmIGF0
dGFjaGVkT2JqZWN0LT5vYmplY3QoKSAmJiBhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIo
KQogICAgICAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4o
YXR0YWNoZWRPYmplY3QpKS0+aXNJbml0aWFsaXplZCgpKQpAQCAtODYsMTMgKzg3LDEzIEBAIG5h
bWVzcGFjZSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHNldElu
aXRpYWxpemVkKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICB2b2lkIHNldEluaXRp
YWxpemVkKFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKICAgICB7CiAgICAgICAg
IGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkgJiYgYXR0YWNo
ZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpCiAgICAgICAgICAgICAocmVpbnRlcnByZXRfY2Fz
dDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFjaGVkT2JqZWN0KSktPnNldEluaXRpYWxpemVkKCk7
CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkK
KyAgICBib29sIGlzVmFsaWRSZW5kZXJidWZmZXIoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVk
T2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2Jq
ZWN0LT5vYmplY3QoKSAmJiBhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSkgewogICAg
ICAgICAgICAgaWYgKCEocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFj
aGVkT2JqZWN0KSktPmlzVmFsaWQoKSkKQEAgLTEwOSwyMCArMTEwLDI0IEBAIFBhc3NSZWZQdHI8
V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY3R4CiB9CiAKIFdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAgOiBX
ZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQog
ICAgICwgbV90ZXhUYXJnZXQoMCkKICAgICAsIG1fdGV4TGV2ZWwoLTEpCiB7Ci0gICAgc2V0T2Jq
ZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7
CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZm
ZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5k
RnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJH
TFRleHR1cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCitXZWJHTEZyYW1lYnVmZmVyOjp+V2Vi
R0xGcmFtZWJ1ZmZlcigpCit7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdlYkdM
RnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M2QsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdl
dCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQogewotICAgIEFTU0VSVChp
c0JvdW5kKCkpOwogICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICByZW1v
dmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCk7CisgICAgcmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGNvbnRleHQzZCwgYXR0YWNobWVudCk7CiAg
ICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPm9iamVjdCgpKQogICAgICAgICB0ZXh0dXJlID0g
MDsKICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKQEAgLTE1MCwxMiArMTU1LDExIEBAIHZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzCiAgICAgICAgIHRleHR1cmUtPm9uQXR0YWNoZWQoKTsKIH0KIAot
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihH
QzNEZW51bSBhdHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQordm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNkLCBHQzNEZW51bSBhdHRhY2htZW50LCBXZWJHTFJlbmRl
cmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogewotICAgIEFTU0VSVChpc0JvdW5kKCkpOwogICAgIGlm
ICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICByZW1vdmVBdHRhY2htZW50RnJvbUJv
dW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCk7CisgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3Vu
ZEZyYW1lYnVmZmVyKGNvbnRleHQzZCwgYXR0YWNobWVudCk7CiAgICAgaWYgKHJlbmRlcmJ1ZmZl
ciAmJiAhcmVuZGVyYnVmZmVyLT5vYmplY3QoKSkKICAgICAgICAgcmVuZGVyYnVmZmVyID0gMDsK
ICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKQEAgLTE3OSw3ICsxODMsNyBAQCB2b2lkIFdlYkdM
RnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIFdlYgogICAgICAgICByZW5kZXJidWZmZXItPm9uQXR0YWNoZWQoKTsKIH0KIAot
V2ViR0xPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQoR0MzRGVudW0gYXR0
YWNobWVudCkgY29uc3QKK1dlYkdMU2hhcmVkT2JqZWN0KiBXZWJHTEZyYW1lYnVmZmVyOjpnZXRB
dHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTgsMTUgKzIwMiwxNCBAQCBXZWJHTE9iamVjdCog
V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KSBjb25z
dAogICAgIH0KIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCkKK3ZvaWQgV2ViR0xGcmFtZWJ1
ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0M2QsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzQm91
bmQoKSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAo
YXR0YWNobWVudCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwOgogICAgICAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQpIHsKLSAgICAgICAgICAgIG1fY29s
b3JBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2NvbG9yQXR0YWNobWVu
dC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgICAgICAgICAgbV9jb2xvckF0dGFjaG1lbnQg
PSAwOwogICAgICAgICAgICAgbV90ZXhUYXJnZXQgPSAwOwogICAgICAgICAgICAgbV90ZXhMZXZl
bCA9IC0xOwpAQCAtMjE0LDE5ICsyMTcsMTkgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1v
dmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VDoKICAgICAgICAgaWYgKG1fZGVwdGhBdHRhY2htZW50KSB7Ci0gICAgICAgICAgICBtX2RlcHRo
QXR0YWNobWVudC0+b25EZXRhY2hlZCgpOworICAgICAgICAgICAgbV9kZXB0aEF0dGFjaG1lbnQt
Pm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgICAgIG1fZGVwdGhBdHRhY2htZW50ID0g
MDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CiAgICAgICAgIGlmIChtX3N0ZW5jaWxBdHRhY2htZW50KSB7
Ci0gICAgICAgICAgICBtX3N0ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAg
ICAgICBtX3N0ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgICAg
ICAgICBtX3N0ZW5jaWxBdHRhY2htZW50ID0gMDsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CiAg
ICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQpIHsKLSAgICAgICAgICAgIG1fZGVw
dGhTdGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZCgpOworICAgICAgICAgICAgbV9kZXB0aFN0
ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgICAgICAgICBtX2Rl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSAwOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MjM2LDMzICsyMzksMzEgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50
RnJvbUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCkKICAgICB9CiB9CiAKLXZv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVy
KFdlYkdMT2JqZWN0KiBhdHRhY2htZW50KQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGdjM2QsIFdl
YkdMU2hhcmVkT2JqZWN0KiBhdHRhY2htZW50KQogewotICAgIEFTU0VSVChpc0JvdW5kKCkpOwog
ICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWF0dGFjaG1lbnQp
CiAgICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogZ2MzZCA9IGNvbnRleHQo
KS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAoYXR0YWNobWVudCA9PSBtX2NvbG9yQXR0
YWNobWVudC5nZXQoKSkgewogICAgICAgICBpZiAoYXR0YWNobWVudC0+aXNSZW5kZXJidWZmZXIo
KSkKICAgICAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgZ2MzZC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIG1fdGV4VGFy
Z2V0LCAwLCBtX3RleExldmVsKTsKLSAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgICAg
IHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihnYzNkLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDApOwogICAgIH0KICAgICBpZiAoYXR0YWNobWVudCA9PSBt
X2RlcHRoQXR0YWNobWVudC5nZXQoKSkgewogICAgICAgICBnYzNkLT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsK
LSAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5U
KTsKICAgICB9CiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gbV9zdGVuY2lsQXR0YWNobWVudC5nZXQo
KSkgewogICAgICAgICBnYzNkLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQs
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgICAgICByZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVCk7CisgICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihn
YzNkLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKICAgICB9CiAgICAg
aWYgKGF0dGFjaG1lbnQgPT0gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSB7CiAgICAg
ICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwogICAgICAgICBnYzNkLT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDAp
OwotICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk7CisgICAgICAgIHJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihnYzNkLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UKTsKICAgICB9CiB9CiAKQEAgLTMzNyw3ICszMzgsNyBAQCBHQzNE
ZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cygpIGNvbnN0CiAgICAgaWYgKGlzRGVw
dGhTdGVuY2lsQXR0YWNoZWQoKSkgewogICAgICAgICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRl
KG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUxfQVRUQUNITUVOVCkpCiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKLSAgICAgICAgaWYgKCFpc1Zh
bGlkKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpCisgICAgICAgIGlmICghaXNWYWxp
ZFJlbmRlcmJ1ZmZlcihtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAg
ICAgICAgaWYgKCFjb3VudCkgewogICAgICAgICAgICAgd2lkdGggPSBnZXRJbWFnZVdpZHRoKG1f
ZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSk7CkBAIC0zNjksMjkgKzM3MCwyOSBAQCBHQzNE
ZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cygpIGNvbnN0CiAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKIH0KIAotYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjpvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQor
Ym9vbCBXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2VzcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkLCBib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQogewogICAgIGlmIChjaGVj
a1N0YXR1cygpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVy
cykKLSAgICAgICAgcmV0dXJuIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7CisgICAgICAgIHJl
dHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVycyhjb250ZXh0M2QpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0z
RE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7
CiAgICAgaWYgKG1fY29sb3JBdHRhY2htZW50KQotICAgICAgICBtX2NvbG9yQXR0YWNobWVudC0+
b25EZXRhY2hlZCgpOworICAgICAgICBtX2NvbG9yQXR0YWNobWVudC0+b25EZXRhY2hlZChjb250
ZXh0M2QpOwogICAgIGlmIChtX2RlcHRoQXR0YWNobWVudCkKLSAgICAgICAgbV9kZXB0aEF0dGFj
aG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9kZXB0aEF0dGFjaG1lbnQtPm9uRGV0YWNo
ZWQoY29udGV4dDNkKTsKICAgICBpZiAobV9zdGVuY2lsQXR0YWNobWVudCkKLSAgICAgICAgbV9z
dGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZCgpOworICAgICAgICBtX3N0ZW5jaWxBdHRhY2ht
ZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQXR0YWNo
bWVudCkKLSAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7Ci0g
ICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmpl
Y3QpOworICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4
dDNkKTsKKyAgICBjb250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CiB9CiAKLWJv
b2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKQorYm9vbCBXZWJH
TEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycyhHcmFwaGljc0NvbnRleHQzRCog
ZzNkKQogewogICAgIEFTU0VSVChvYmplY3QoKSk7CiAgICAgYm9vbCBpbml0Q29sb3IgPSBmYWxz
ZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFsc2U7CkBAIC00MTgsNyArNDE5
LDYgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiAK
ICAgICAvLyBXZSBvbmx5IGNsZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMgd2hlbiB0
aGV5IGFyZSByZWFkeSB0byBiZQogICAgIC8vIHJlYWQsIGkuZS4sIHdoZW4gdGhlIGZyYW1lYnVm
ZmVyIGlzIGNvbXBsZXRlLgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnM2QgPSBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgaWYgKGczZC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00ODcsMTEg
KzQ4Nyw2IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMo
KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZmZXI6OmlzQm91bmQo
KSBjb25zdAotewotICAgIHJldHVybiAoY29udGV4dCgpLT5tX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSA9PSB0aGlzKTsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCmluZGV4IDExMGY1MTM5
NWY5Yjc4NDQxYjgxOWQ5MzQ1NTk2MDMyODFkMGI0ZmQuLjM0NjMzYTA0MWQxZjEwZmYwYzdmZGU0
NjFkMDNmOTI0M2U0NDJkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmgKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgV2ViR0xGcmFtZWJ1ZmZl
cl9oCiAjZGVmaW5lIFdlYkdMRnJhbWVidWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3Qu
aCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFNoYXJl
ZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgpAQCAtMzYsMTkgKzM3LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFdlYkdMUmVuZGVyYnVmZmVyOwogY2xhc3MgV2ViR0xUZXh0dXJlOwogCi1jbGFzcyBXZWJH
TEZyYW1lYnVmZmVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMRnJhbWVidWZm
ZXIgOiBwdWJsaWMgV2ViR0xDb250ZXh0T2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5X
ZWJHTEZyYW1lYnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdM
RnJhbWVidWZmZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZvaWQgc2V0QXR0YWNobWVu
dEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFy
Z2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsKTsKLSAgICB2b2lkIHNldEF0dGFjaG1l
bnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVm
ZmVyKik7CisgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2Vi
R0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCk7CisgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdl
YkdMUmVuZGVyYnVmZmVyKik7CiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGF0dGFjaGVkIHRvIHRo
ZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KLSAgICB2b2lkIHJlbW92
ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTE9iamVjdCopOworICAgIHZvaWQg
cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwg
V2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICAvLyBJZiBhIGdpdmVuIGF0dGFjaG1lbnQgcG9pbnQg
Zm9yIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIgaXMgbm90IG51bGwsIHJlbW92ZSB0
aGUgYXR0YWNoZWQgb2JqZWN0LgotICAgIHZvaWQgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZy
YW1lYnVmZmVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTE9iamVjdCogZ2V0QXR0YWNobWVudChHQzNE
ZW51bSkgY29uc3Q7CisgICAgdm9pZCByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBHQzNEZW51bSk7CisgICAgV2ViR0xTaGFyZWRPYmplY3Qq
IGdldEF0dGFjaG1lbnQoR0MzRGVudW0pIGNvbnN0OwogCiAgICAgR0MzRGVudW0gZ2V0Q29sb3JC
dWZmZXJGb3JtYXQoKSBjb25zdDsKICAgICBHQzNEc2l6ZWkgZ2V0Q29sb3JCdWZmZXJXaWR0aCgp
IGNvbnN0OwpAQCAtNjAsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIGZhbHNlIGlm
IHRoZSBmcmFtZWJ1ZmZlciBpcyBpbmNvbXBsZXRlOyBvdGhlcndpc2UgaW5pdGlhbGl6ZQogICAg
IC8vIHRoZSBidWZmZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGluaXRpYWxpemVkIGFuZAogICAg
IC8vIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzIGlzIHRydWUuCi0gICAgYm9vbCBvbkFj
Y2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKTsKKyAgICBib29sIG9uQWNj
ZXNzKEdyYXBoaWNzQ29udGV4dDNEKiwgYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVy
cyk7CiAKICAgICAvLyBTb2Z0d2FyZSB2ZXJzaW9uIG9mIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cygpLCBleGNlcHQgdGhhdCB3aGVuCiAgICAgLy8gRlJBTUVCVUZGRVJfQ09NUExFVEUgaXMgcmV0
dXJuZWQsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIGZvcgpAQCAtNzUsMjYgKzc2LDIzIEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
LCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFt
ZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIFJldHVybiBmYWxzZSBp
ZiBmcmFtZWJ1ZmZlciBpcyBpbmNvbXBsZXRlLgotICAgIGJvb2wgaW5pdGlhbGl6ZVJlbmRlcmJ1
ZmZlcnMoKTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBjdXJyZW50bHkg
Ym91bmQuCi0gICAgYm9vbCBpc0JvdW5kKCkgY29uc3Q7CisgICAgYm9vbCBpbml0aWFsaXplUmVu
ZGVyYnVmZmVycyhHcmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgYm9vbCBpc0NvbG9yQXR0YWNo
ZWQoKSBjb25zdCB7IHJldHVybiAobV9jb2xvckF0dGFjaG1lbnQgJiYgbV9jb2xvckF0dGFjaG1l
bnQtPm9iamVjdCgpKTsgfQogICAgIGJvb2wgaXNEZXB0aEF0dGFjaGVkKCkgY29uc3QgeyByZXR1
cm4gKG1fZGVwdGhBdHRhY2htZW50ICYmIG1fZGVwdGhBdHRhY2htZW50LT5vYmplY3QoKSk7IH0K
ICAgICBib29sIGlzU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fc3RlbmNpbEF0
dGFjaG1lbnQgJiYgbV9zdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CiAgICAgYm9vbCBp
c0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fZGVwdGhTdGVuY2lsQXR0
YWNobWVudCAmJiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQogCi0gICAg
UmVmUHRyPFdlYkdMT2JqZWN0PiBtX2NvbG9yQXR0YWNobWVudDsKLSAgICBSZWZQdHI8V2ViR0xP
YmplY3Q+IG1fZGVwdGhBdHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9zdGVu
Y2lsQXR0YWNobWVudDsKLSAgICBSZWZQdHI8V2ViR0xPYmplY3Q+IG1fZGVwdGhTdGVuY2lsQXR0
YWNobWVudDsKKyAgICBSZWZQdHI8V2ViR0xTaGFyZWRPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50
OworICAgIFJlZlB0cjxXZWJHTFNoYXJlZE9iamVjdD4gbV9kZXB0aEF0dGFjaG1lbnQ7CisgICAg
UmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX3N0ZW5jaWxBdHRhY2htZW50OworICAgIFJlZlB0
cjxXZWJHTFNoYXJlZE9iamVjdD4gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50OwogCiAgICAgYm9v
bCBtX2hhc0V2ZXJCZWVuQm91bmQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
T2JqZWN0LmNwcAppbmRleCA3YjYyOWE2OWM3NDM2YzA5MDljMzk2NzNiMGI1MDQxYTQzOGUyMWUx
Li5mZDk5MzBmM2FjMDQ2ZDUyNWM3ZTJmOWVhYzE3YTJlZDVmZGE1MmRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCkBAIC0yOSwxMyArMjksMjAgQEAKIAog
I2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRp
dmVzLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVmVydGV4
QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlcy5oIgorI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xM
b3NlQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFdlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX29iamVjdCgwKQotICAgICwgbV9jb250ZXh0KGNv
bnRleHQpCiAgICAgLCBtX2F0dGFjaG1lbnRDb3VudCgwKQogICAgICwgbV9kZWxldGVkKGZhbHNl
KQogewpAQCAtNDMsOCArNTAsNiBAQCBXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQogCiBXZWJHTE9iamVjdDo6fldlYkdMT2JqZWN0KCkKIHsK
LSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlz
KTsKIH0KIAogdm9pZCBXZWJHTE9iamVjdDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2Jq
ZWN0KQpAQCAtNTQsMjYgKzU5LDM4IEBAIHZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0
Zm9ybTNET2JqZWN0IG9iamVjdCkKICAgICBtX29iamVjdCA9IG9iamVjdDsKIH0KIAotdm9pZCBX
ZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KCkKK3ZvaWQgV2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVj
dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQogewogICAgIG1fZGVsZXRlZCA9IHRydWU7
Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fb2JqZWN0KQorICAgIGlmICghbV9vYmplY3QpCiAg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghaGFzR3JvdXBPckNvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgaWYgKCFtX2F0dGFjaG1lbnRDb3VudCkgewotICAgICAgICBtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBk
ZWxldGVPYmplY3RJbXBsKG1fb2JqZWN0KTsKKyAgICAgICAgaWYgKCFjb250ZXh0M2QpCisgICAg
ICAgICAgICBjb250ZXh0M2QgPSBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgICAgICBp
ZiAoY29udGV4dDNkKQorICAgICAgICAgICAgZGVsZXRlT2JqZWN0SW1wbChjb250ZXh0M2QsIG1f
b2JqZWN0KTsKKwogICAgICAgICBtX29iamVjdCA9IDA7CiAgICAgfQogfQogCi12b2lkIFdlYkdM
T2JqZWN0OjpkZXRhY2hDb250ZXh0KCkKK3ZvaWQgV2ViR0xPYmplY3Q6OmRldGFjaCgpCiB7CiAg
ICAgbV9hdHRhY2htZW50Q291bnQgPSAwOyAvLyBNYWtlIHN1cmUgT3BlbkdMIHJlc291cmNlIGlz
IGRlbGV0ZWQuCi0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBkZWxldGVPYmplY3QoKTsK
LSAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVPYmplY3QodGhpcyk7Ci0gICAgICAgIG1fY29udGV4
dCA9IDA7CiAgICAgfQorCisKK3ZvaWQgV2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCkKK3sKKyAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCisgICAg
ICAgIC0tbV9hdHRhY2htZW50Q291bnQ7CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgZGVs
ZXRlT2JqZWN0KGNvbnRleHQzZCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTE9iamVjdC5oCmluZGV4IDQ0Y2MzNmY2YmZlMjRhYzA0ZmU5MWRlNjhjODgxMDRiNDlkMDc2
M2EuLjg0MWQwZjlmYzhjZmJjYTg4MjZkNDIxYjNiYjZiNDZjZGYzMTEzMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xD
b250ZXh0R3JvdXA7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAKIGNsYXNzIFdlYkdM
T2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR0xPYmplY3Q+IHsKQEAgLTQ0LDMzICs0Niwx
OSBAQCBwdWJsaWM6CiAgICAgLy8gZGVsZXRlT2JqZWN0IG1heSBub3QgYWx3YXlzIGRlbGV0ZSB0
aGUgT3BlbkdMIHJlc291cmNlLiAgRm9yIHByb2dyYW1zIGFuZAogICAgIC8vIHNoYWRlcnMsIGRl
bGV0aW9uIGlzIGRlbGF5ZWQgdW50aWwgdGhleSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkLgogICAg
IC8vIEZJWE1FOiByZXZpc2l0IHRoaXMgd2hlbiByZXNvdXJjZSBzaGFyaW5nIGJldHdlZW4gY29u
dGV4dHMgYXJlIGltcGxlbWVudGVkLgotICAgIHZvaWQgZGVsZXRlT2JqZWN0KCk7Ci0KLSAgICB2
b2lkIGRldGFjaENvbnRleHQoKTsKLQotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUHJvZ3Jh
bSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKik7CiAKICAgICB2b2lkIG9uQXR0YWNoZWQoKSB7ICsrbV9hdHRhY2htZW50Q291bnQ7
IH0KLSAgICB2b2lkIG9uRGV0YWNoZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYXR0YWNobWVu
dENvdW50KQotICAgICAgICAgICAgLS1tX2F0dGFjaG1lbnRDb3VudDsKLSAgICAgICAgaWYgKG1f
ZGVsZXRlZCkKLSAgICAgICAgICAgIGRlbGV0ZU9iamVjdCgpOwotICAgIH0KKyAgICB2b2lkIG9u
RGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIC8vIFRoaXMgaW5kaWNhdGVzIHdo
ZXRoZXIgdGhlIGNsaWVudCBzaWRlIGlzc3VlIGEgZGVsZXRlIGNhbGwgYWxyZWFkeSwgbm90CiAg
ICAgLy8gd2hldGhlciB0aGUgT3BlbkdMIHJlc291cmNlIGlzIGRlbGV0ZWQuCiAgICAgLy8gb2Jq
ZWN0KCk9PTAgaW5kaWNhdGVzIHRoZSBPcGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRlZC4KICAgICBi
b29sIGlzRGVsZXRlZCgpIHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogCisgICAgLy8gVHJ1ZSBpZiB0
aGlzIG9iamVjdCBiZWxvbmdzIHRvIHRoZSBncm91cCBvciBjb250ZXh0LgorICAgIHZpcnR1YWwg
Ym9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIFdlYkdMT2JqZWN0KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopOwogCkBAIC03OCwxMSArNjYsMTYgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgLy8gZGVsZXRlT2Jq
ZWN0SW1wbCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSB0byBkZWxldGUgdGhlIE9wZW5HTCBy
ZXNvdXJjZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250
ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzR3Jv
dXBPckNvbnRleHQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBj
b25zdCA9IDA7CiAKIHByaXZhdGU6CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX29iamVjdDsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKICAgICB1bnNpZ25lZCBtX2F0dGFj
aG1lbnRDb3VudDsKICAgICBib29sIG1fZGVsZXRlZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAppbmRleCBkM2VmZGE0N2RlZTQ2MzY1NTRkYmMwNzc4
OWQ0MzJkMzk4YWNjMjBmLi5mNjg1NDNjZTRkOTkwZGI1OGUxNTdlMDM0ZWMyNzA1ZDQyNTU2N2M5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgogCisjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMzIgKzQwLDM2IEBAIFBhc3NSZWZQdHI8V2ViR0xQ
cm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkK
IH0KIAogV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHgpCi0gICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgp
CiAgICAgLCBtX2xpbmtTdGF0dXMoZmFsc2UpCiAgICAgLCBtX2xpbmtDb3VudCgwKQogewotICAg
IHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVByb2dyYW0o
KSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3Jh
bSgpKTsKIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0z
RE9iamVjdCBvYmopCitXZWJHTFByb2dyYW06On5XZWJHTFByb2dyYW0oKQogewotICAgIGNvbnRl
eHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmopOworICAgIGRlbGV0
ZU9iamVjdCgwKTsKK30KKwordm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmopCit7CisgICAg
Y29udGV4dDNkLT5kZWxldGVQcm9ncmFtKG9iaik7CiAgICAgaWYgKG1fdmVydGV4U2hhZGVyKSB7
Ci0gICAgICAgIG1fdmVydGV4U2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fdmVydGV4
U2hhZGVyLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgICAgIG1fdmVydGV4U2hhZGVyID0g
MDsKICAgICB9CiAgICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIpIHsKLSAgICAgICAgbV9mcmFnbWVu
dFNoYWRlci0+b25EZXRhY2hlZCgpOworICAgICAgICBtX2ZyYWdtZW50U2hhZGVyLT5vbkRldGFj
aGVkKGNvbnRleHQzZCk7CiAgICAgICAgIG1fZnJhZ21lbnRTaGFkZXIgPSAwOwogICAgIH0KIH0K
IAotYm9vbCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCkKK2Jvb2wg
V2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNkKQogewogICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLmNsZWFyKCk7CiAg
ICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M2QgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAKICAg
ICAvLyBBc3N1bWUgbGluayBzdGF0dXMgaGFzIGFscmVhZHkgYmVlbiBjYWNoZWQuCiAgICAgaWYg
KCFtX2xpbmtTdGF0dXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
CmluZGV4IDBkZDNiYTBmYWFmYjlkNzA2YWM5MzYxZDE5YTVmMDg5MzE2OTYyMzYuLjE1MDUwMTEw
MDVkNGY4OWNmZGQ2NTNiZGNiODU1NzU0NDkxMTkwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkdMUHJv
Z3JhbV9oCiAjZGVmaW5lIFdlYkdMUHJvZ3JhbV9oCiAKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5o
IgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNsdWRlICJXZWJHTFNoYWRl
ci5oIgogCkBAIC0zNiwxNSArMzYsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBXZWJHTFByb2dyYW0gOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xQcm9ncmFt
IDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJH
TFByb2dyYW0oKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xQcm9ncmFt
KCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKIAogICAgIC8vIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb24oKSBp
cyBvbmx5IGNhbGxlZCBvbmNlIGFmdGVyIGxpbmtQcm9ncmFtKCkKICAgICAvLyBzdWNjZWVkcy4K
LSAgICBib29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgYm9vbCBjYWNoZUFj
dGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHVuc2lnbmVkIG51
bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpIGNvbnN0OwogICAgIEdDM0RpbnQgZ2V0QWN0aXZlQXR0
cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpIGNvbnN0OwogCkBAIC02Nyw3ICs2Nyw3IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCos
IFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dy
YW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKaW5kZXggOTNiOTE2NWM5OTQ3NDlmNjNkYzUwM2Ez
NjIwOGM1MWZiZWRiNjQ3MC4uZGFhZjlkNGVlNTliM2NhNjZiMWNkY2M4N2FiMDBhMTk3ZjAxN2Ix
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
IAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDggKzM5LDEzIEBAIFBh
c3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFJlbmRl
cmJ1ZmZlcihjdHgpKTsKIH0KIAorV2ViR0xSZW5kZXJidWZmZXI6On5XZWJHTFJlbmRlcmJ1ZmZl
cigpCit7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCiBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2Vi
R0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9i
amVjdChjdHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2ludGVybmFs
Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFs
c2UpCiAgICAgLCBtX3dpZHRoKDApCkBAIC00NywxMiArNTMsMTIgQEAgV2ViR0xSZW5kZXJidWZm
ZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgICwg
bV9pc1ZhbGlkKHRydWUpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiB7Ci0gICAg
c2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCkpOworICAgIHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0
SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xSZW5kZXJidWZmZXI6OmRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxl
dGVSZW5kZXJidWZmZXIob2JqZWN0KTsKKyAgICBjb250ZXh0M2QtPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihvYmplY3QpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuaAppbmRleCA0YjQ3YmY1ZDMyZTg0NjhkMGY5MmVhOTFlNWE4ZDY0MzNjY2Zj
ZjE5Li5lMTY5ZTJlOGJiZmU1ZjE2N2VjZjUyODAzYmUyZWY3ZDliZjdjODc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKQEAgLTI2LDE2ICsy
NiwxNiBAQAogI2lmbmRlZiBXZWJHTFJlbmRlcmJ1ZmZlcl9oCiAjZGVmaW5lIFdlYkdMUmVuZGVy
YnVmZmVyX2gKIAotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFy
ZWRPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJlbmRl
cmJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitjbGFzcyBXZWJHTFJlbmRlcmJ1ZmZlciA6
IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xS
ZW5kZXJidWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xSZW5k
ZXJidWZmZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBj
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGlj
OgogcHJvdGVjdGVkOgogICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
LCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5k
ZXJidWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBhN2I5Y2Y2NDg2
MGY1Y2UzY2QyMjcxYzYwYTk5ZmE0Njk2OTY3ODRjLi5hMWVmNTkzZjEwYTg5OTFkMDE2NjMwZjYw
YWZlOGEwNjI3NjNkZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJX
ZWJHTENvbXByZXNzZWRUZXh0dXJlcy5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgorI2luY2x1ZGUgIldlYkdMQ29u
dGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgogI2luY2x1
ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgpA
QCAtNDE2LDYgKzQxNyw4IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhCiAgICAgLCBtX2F0dHJp
YnV0ZXMoYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBtX2NvbnRl
eHRHcm91cCA9IFdlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUoKTsKKyAgICBtX2NvbnRleHRHcm91
cC0+YWRkQ29udGV4dCh0aGlzKTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIC8vIENy
ZWF0ZSB0aGUgRHJhd2luZ0J1ZmZlciBhbmQgaW5pdGlhbGl6ZSB0aGUgcGxhdGZvcm0gbGF5ZXIu
CkBAIC00ODAsNyArNDgzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxp
emVOZXdDb250ZXh0KCkKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVklFV1BPUlRfRElNUywgbV9tYXhWaWV3cG9ydERpbXMpOwogCiAgICAgbV9kZWZh
dWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVhdGUo
dGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmFvVHlwZURlZmF1bHQpOwotICAgIGFk
ZE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7CisgICAgYWRkQ29udGV4
dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKSk7CiAgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CiAgICAgCiAgICAg
bV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhWZXJ0ZXhBdHRyaWJzKTsKQEAgLTUyNSw4
ICs1MjgsMjcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFsbG93UHJpdmlsZWdlZEV4
dGVuc2lvbnMoKSBjb25zdAogCiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmlu
Z0NvbnRleHQoKQogeworICAgIC8vIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBXZWJHTE9iamVj
dHMgc28gaWYgdGhleSBhcmUgdGhlIGxhc3QgcmVmZXJlbmNlCisgICAgLy8gdGhleSB3aWxsIGJl
IGZyZWVkIGJlZm9yZSB0aGUgbGFzdCBjb250ZXh0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY29udGV4
dCBncm91cC4KKyAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOworICAgIG1fZGVmYXVsdFZlcnRl
eEFycmF5T2JqZWN0ID0gMDsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSAwOworICAg
IG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7Cisg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9
IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsg
KytpKSB7CisgICAgICBtX3RleHR1cmVVbml0c1tpXS5tX3RleHR1cmUyREJpbmRpbmcgPSAwOwor
ICAgICAgbV90ZXh0dXJlVW5pdHNbaV0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSAwOworICAg
IH0KKworICAgIG1fYmxhY2tUZXh0dXJlMkQgPSAwOworICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1h
cCA9IDA7CisKICAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAgICAgbV9jb250ZXh0
LT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKG51bGxwdHIpOworICAgIG1fY29udGV4dEdyb3VwLT5y
ZW1vdmVDb250ZXh0KHRoaXMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFy
a0NvbnRleHRDaGFuZ2VkKCkKQEAgLTc5OCw3ICs4MjAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoV2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYg
ZGVsZQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAob2JqZWN0KSB7Ci0gICAgICAgIGlmIChvYmplY3QtPmNvbnRleHQoKSAhPSB0aGlzKSB7
CisgICAgICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsK
ICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtMTEwNSw3ICsxMTI3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRl
eHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE5MCw3ICsxMjEyLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGUKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0Qo
KSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMzYsNyArMTI1OCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTI4NCw3ICsxMzA2LDcgQEAgUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0
KCkpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApA
QCAtMTI5Myw3ICsxMzE1LDcgQEAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9
IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7
CisgICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAt
MTMwMiw3ICsxMzI0LDcgQEAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6
Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmpl
Y3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMTEsNyArMTMzMyw3IEBAIFBh
c3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVByb2dy
YW0oKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJl
ZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBh
ZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJl
dHVybiBvOwogfQogCkBAIC0xMzIwLDcgKzEzNDIsNyBAQCBQYXNzUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdM
UmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBh
ZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJl
dHVybiBvOwogfQogCkBAIC0xMzM1LDcgKzEzNTcsNyBAQCBQYXNzUmVmUHRyPFdlYkdMU2hhZGVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNl
cAogICAgIH0KIAogICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVh
dGUodGhpcywgdHlwZSk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIGFkZFNoYXJlZE9i
amVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTM1MSwxMiArMTM3MywxNCBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhb2JqZWN0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG9iamVjdC0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICBp
ZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAob2JqZWN0LT5v
YmplY3QoKSkKLSAgICAgICAgb2JqZWN0LT5kZWxldGVPYmplY3QoKTsKKyAgICAgICAgLy8gV2Ug
bmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKKyAgICAgICAgLy8g
dGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgorICAgICAgICBvYmplY3QtPmRlbGV0ZU9i
amVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQx
Miw3ICsxNDM2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQogICAgIGlmIChyZW5kZXJidWZm
ZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmcgPSAwOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihyZW5kZXJi
dWZmZXIpOworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZy
b21Cb3VuZEZyYW1lYnVmZmVyKGdyYXBoaWNzQ29udGV4dDNEKCksIHJlbmRlcmJ1ZmZlcik7CiB9
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIq
IHNoYWRlcikKQEAgLTE0MzEsNyArMTQ1NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKICAgICAgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gMDsKICAgICB9CiAgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHRleHR1cmUpOworICAgICAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdy
YXBoaWNzQ29udGV4dDNEKCksIHRleHR1cmUpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCkBAIC0xNDczLDcgKzE0OTcsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgV2ViR0xTaGFkZXIqIHNoYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4
dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRl
cikpOwotICAgIHNoYWRlci0+b25EZXRhY2hlZCgpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChn
cmFwaGljc0NvbnRleHQzRCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCkBAIC0xNjg1LDcgKzE3MDksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVXZWJHTE9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkg
IT0gdGhpcykgeworICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhp
cykpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMTcyNiw3ICsxNzUwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJh
eXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGMKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29u
dGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODAwLDcgKzE4MjQsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3Vy
Y2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZl
KCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE4NzcsNyArMTkwMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGJ1ZmZlciAmJiBidWZm
ZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxp
ZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTkxNSw3ICsxOTM5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXQKICAgICBkZWZhdWx0OgogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBvYmplY3RPclpl
cm8oYnVmZmVyKSk7CiAgICAgfQotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2ht
ZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50LCBidWZmZXIpOworICAgIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihncmFwaGljc0Nv
bnRleHQzRCgpLCBhdHRhY2htZW50LCBidWZmZXIpOwogICAgIGlmIChyZWF0dGFjaERlcHRoKSB7
CiAgICAgICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0ID0gb2JqZWN0T3JaZXJvKG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRB
Q0hNRU5UKSk7CiAgICAgICAgIGlmIChvYmplY3QpCkBAIC0xOTQ4LDcgKzE5NzIsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhYwogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAg
IGlmICh0ZXh0dXJlICYmICF0ZXh0dXJlLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykp
IHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk2MCw3
ICsxOTg0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWMKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSksIGxldmVsKTsKLSAgICBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGdyYXBoaWNzQ29udGV4dDNEKCksIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTIxNjQsNyArMjE4OCw3IEBAIFdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihHQzNEZW51bSB0CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAKLSAg
ICBXZWJHTE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1l
bnQoYXR0YWNobWVudCk7CisgICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpOwogICAgIGlmICghb2JqZWN0
KSB7CiAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwpAQCAtMjk0MCw3ICsyOTY0LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhj
ZXB0aW9uQ29kZSYgZWMKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJnZhbHVlKTsKICAgICBw
cm9ncmFtLT5zZXRMaW5rU3RhdHVzKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CiAgICAgLy8g
TmVlZCB0byBjYWNoZSBsaW5rIHN0YXR1cyBiZWZvcmUgY2FjaGluZyBhY3RpdmUgYXR0cmlidXRl
IGxvY2F0aW9ucy4KLSAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwor
ICAgIHByb2dyYW0tPmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKGdyYXBoaWNzQ29udGV4dDNE
KCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTMwMzEs
NyArMzA1NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzk0MCw3
ICszOTY0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAgICAgaWYgKG1fY3Vy
cmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgewogICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkK
LSAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAg
IG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAg
ICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwogICAgICAgICBtX2NvbnRleHQtPnVzZVBy
b2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKICAgICAgICAgaWYgKHByb2dyYW0pCkBAIC00
MDkwLDYgKzQxMTQsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENv
bnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIG1fY29udGV4dEdyb3VwLT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CiAg
ICAgbV9jb250ZXh0TG9zdE1vZGUgPSBtb2RlOwogCkBAIC00MTQzLDIyICs0MTc1LDM0IEBAIFBs
YXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0
CiB9CiAjZW5kaWYKIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZU9iamVjdChX
ZWJHTE9iamVjdCogb2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNo
YXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIG1fY29udGV4dEdy
b3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIEFT
U0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICByZW1vdmVTaGFyZWRPYmplY3Qob2JqZWN0KTsK
KyAgICBtX2NvbnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCog
b2JqZWN0KQogewotICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKKyAgICBtX2Nv
bnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YWRkT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0gICAgcmVtb3ZlT2JqZWN0KG9iamVjdCk7
Ci0gICAgbV9jYW52YXNPYmplY3RzLmFkZChvYmplY3QpOworICAgIHJlbW92ZUNvbnRleHRPYmpl
Y3Qob2JqZWN0KTsKKyAgICBtX2NvbnRleHRPYmplY3RzLmFkZChvYmplY3QpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpCiB7Ci0g
ICAgd2hpbGUgKG1fY2FudmFzT2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhhc2hTZXQ8
V2ViR0xPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2NhbnZhc09iamVjdHMuYmVnaW4oKTsKKyAg
ICB3aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8
V2ViR0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdp
bigpOwogICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXgg
OGYxZWZkOWIwNDRiZmMwMGVhZDRhYTQ0MDlmNGEwODNiYjRmOGYxNS4uNWY2M2NmMWFlNmNmZGE4
MDU4YWJkYjZiNjE3MWQwZmQwY2JkYTY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTUwLDYgKzUwLDggQEAgY2xhc3Mg
T0VTVGV4dHVyZUZsb2F0OwogY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7CiBjbGFzcyBXZWJH
TEFjdGl2ZUluZm87CiBjbGFzcyBXZWJHTEJ1ZmZlcjsKK2NsYXNzIFdlYkdMQ29udGV4dEdyb3Vw
OworY2xhc3MgV2ViR0xDb250ZXh0T2JqZWN0OwogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZXM7CiBjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOwogY2xhc3MgV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mbzsKQEAgLTYxLDYgKzYzLDcgQEAgY2xhc3MgV2ViR0xPYmplY3Q7CiBjbGFzcyBXZWJH
TFByb2dyYW07CiBjbGFzcyBXZWJHTFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIFdlYkdMU2hhZGVyOwor
Y2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7CiBjbGFzcyBXZWJHTFRleHR1cmU7CiBjbGFzcyBXZWJH
TFVuaWZvcm1Mb2NhdGlvbjsKIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CkBAIC0y
OTIsOCArMjk1LDEwIEBAIHB1YmxpYzoKICAgICB9OwogICAgIHZvaWQgZm9yY2VMb3N0Q29udGV4
dChMb3N0Q29udGV4dE1vZGUpOwogICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOworICAg
IHZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CiAKICAgICBHcmFwaGljc0Nv
bnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7IH0KKyAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAj
ZW5kaWYKQEAgLTMwNCw3ICszMDksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIAotICAgIHZvaWQgcmVt
b3ZlT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0Kik7CiAgICAgCiAgICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQogCkBAIC0zMTksNyArMzI1LDggQEAg
cHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKICAgICB2b2lkIHNldHVw
RmxhZ3MoKTsKIAotICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisgICAgdm9pZCBh
ZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKyAgICB2b2lkIGFkZENvbnRleHRP
YmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7CiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCk7CiAKICAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwpAQCAtMzYyLDYgKzM2
OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQ7CisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsK
IAogICAgIC8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1
ZmZlciwgaW5zdGVhZCBvZiBkaXJlY3RseQogICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBt
X2NvbnRleHQuCkBAIC0zNzgsNyArMzg2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBtX25lZWRz
VXBkYXRlOwogICAgIGJvb2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKLSAgICBIYXNoU2V0PFdlYkdM
T2JqZWN0Kj4gbV9jYW52YXNPYmplY3RzOworICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0
Kj4gbV9jb250ZXh0T2JqZWN0czsKIAogICAgIC8vIExpc3Qgb2YgYm91bmQgVkJPJ3MuIFVzZWQg
dG8gbWFpbnRhaW4gaW5mbyBhYm91dCBzaXplcyBmb3IgQVJSQVlfQlVGRkVSIGFuZCBzdG9yZWQg
dmFsdWVzIGZvciBFTEVNRU5UX0FSUkFZX0JVRkZFUgogICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4g
bV9ib3VuZEFycmF5QnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFk
ZXIuY3BwCmluZGV4IDU5Njk1ZTRjOTNiZjU0Yzk4MjBhNWE3N2VlZDk4MzYyZjE5NDIwYjYuLjM1
MDY4ZWJjZGNhMmVlNjY1N2FhNmJiMTFhYWQ4MjQ4ZTI1OWUzNTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIldlYkdMU2hhZGVyLmgiCiAKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOSwxNiArNDAsMjEgQEAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNy
ZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0KIH0KIAogV2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBHQzNEZW51bSB0eXBl
KQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQog
ICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZSgiIikKIHsKLSAgICBzZXRPYmplY3Qo
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIodHlwZSkpOworICAg
IHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVNoYWRlcih0eXBlKSk7
CiB9CiAKLXZvaWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCitXZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKCkKIHsKLSAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVNoYWRlcihvYmplY3QpOworICAgIGRlbGV0ZU9i
amVjdCgwKTsKK30KKwordm9pZCBXZWJHTFNoYWRlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3sKKyAgICBj
b250ZXh0M2QtPmRlbGV0ZVNoYWRlcihvYmplY3QpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTaGFkZXIuaAppbmRleCAxZDdhMTBjMWM0YjlkOTlhZjBjYWM3ZjIxZWNj
NGY5NzhmOTM0YTQ4Li45MmQxZDFjNDhhMTljMWM5ZDBiNjA2MTBmZWZjMjViYWU2NzhiNDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKQEAgLTI2LDE2ICsyNiwx
NiBAQAogI2lmbmRlZiBXZWJHTFNoYWRlcl9oCiAjZGVmaW5lIFdlYkdMU2hhZGVyX2gKIAotI2lu
Y2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFNoYWRlciA6IHB1YmxpYyBXZWJH
TE9iamVjdCB7CitjbGFzcyBXZWJHTFNoYWRlciA6IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVjdCB7
CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9
CisgICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOwogCkBA
IC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViR0xTaGFkZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVj
dEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlm
NzZjYWU3N2I0ZjkxNzZjNTg5ZmFmMmE2NWU1NTA2Mjk2ZjZjOTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdF
QkdMKQorCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKKworI2luY2x1ZGUgIldlYkdM
Q29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworV2ViR0xTaGFyZWRPYmplY3Q6OldlYkdMU2hhcmVkT2JqZWN0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKKyAgICA6IFdlYkdMT2JqZWN0KGNvbnRl
eHQpLAorICAgICAgbV9jb250ZXh0R3JvdXAoY29udGV4dC0+Y29udGV4dEdyb3VwKCkpCit7Cit9
CisKK1dlYkdMU2hhcmVkT2JqZWN0Ojp+V2ViR0xTaGFyZWRPYmplY3QoKQoreworICAgIGlmICht
X2NvbnRleHRHcm91cCkKKyAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdCh0aGlz
KTsKK30KKwordm9pZCBXZWJHTFNoYXJlZE9iamVjdDo6ZGV0YWNoQ29udGV4dEdyb3VwKCkKK3sK
KyAgICBkZXRhY2goKTsKKyAgICBpZiAobV9jb250ZXh0R3JvdXApIHsKKyAgICAgICAgZGVsZXRl
T2JqZWN0KDApOworICAgICAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KHRoaXMpOwor
ICAgICAgICBtX2NvbnRleHRHcm91cCA9IDA7CisgICAgfQorfQorCitHcmFwaGljc0NvbnRleHQz
RCogV2ViR0xTaGFyZWRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dEdyb3VwID8gbV9jb250ZXh0R3JvdXAtPmdldEFHcmFwaGljc0Nv
bnRleHQzRCgpIDogMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTg4OWE2YTU2MTc1Yzg2NjYyZWE2OWI2Mzc5Yzg2YTAzNzA2NzU3OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTFNoYXJlZE9iamVjdF9oCisjZGVmaW5l
IFdlYkdMU2hhcmVkT2JqZWN0X2gKKworI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBXZWJHTENv
bnRleHRHcm91cDsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKKworY2xhc3MgV2ViR0xT
aGFyZWRPYmplY3QgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworcHVibGljOgorICAgIHZpcnR1YWwg
fldlYkdMU2hhcmVkT2JqZWN0KCk7CisKKyAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdy
b3VwKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0R3JvdXA7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
RnJhbWVidWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1Byb2dyYW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
U2hhZGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0
dXJlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0
ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHRHcm91cCA9
PSBtX2NvbnRleHRHcm91cDsKKyAgICB9CisKKyAgICB2b2lkIGRldGFjaENvbnRleHRHcm91cCgp
OworCitwcm90ZWN0ZWQ6CisgICAgV2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRleHQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dEdyb3VwOworICAgIH0KKworICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIFdlYkdMQ29udGV4dEdyb3VwKiBtX2NvbnRleHRHcm91cDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkdMT2JqZWN0X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCmluZGV4IGU4ZThiZjgyNDVkMDM0MDA3
MjNlNzI3NjZmMjAzOTcyZTQzYjE4MmYuLjlhZDU4YjRiYzE2NDcwZWEwNGY2NDg5ODBiNzY5NTEy
NmEzYmQyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNw
cApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAKKyNpbmNs
dWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIApAQCAtNDAsNyArNDEsNyBAQCBQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjdHgpCiB9CiAKIFdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xT
aGFyZWRPYmplY3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fbWluRmlsdGVyKEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpCiAgICAgLCBtX21hZ0ZpbHRl
cihHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKQpAQCAtNTAsNyArNTEsMTIgQEAgV2ViR0xUZXh0
dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgLCBtX2lz
Q29tcGxldGUoZmFsc2UpCiAgICAgLCBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZShmYWxzZSkKIHsK
LSAgICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVUZXh0
dXJlKCkpOworICAgIHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVRl
eHR1cmUoKSk7Cit9CisKK1dlYkdMVGV4dHVyZTo6fldlYkdMVGV4dHVyZSgpCit7CisgICAgZGVs
ZXRlT2JqZWN0KDApOwogfQogCiB2b2lkIFdlYkdMVGV4dHVyZTo6c2V0VGFyZ2V0KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBtYXhMZXZlbCkKQEAgLTIyNSw5ICsyMzEsOSBAQCBib29sIFdlYkdM
VGV4dHVyZTo6bmVlZFRvVXNlQmxhY2tUZXh0dXJlKCkgY29uc3QKICAgICByZXR1cm4gbV9uZWVk
VG9Vc2VCbGFja1RleHR1cmU7CiB9CiAKLXZvaWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBv
YmplY3QpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVUZXh0
dXJlKG9iamVjdCk7CisgICAgY29udGV4dDNkLT5kZWxldGVUZXh0dXJlKG9iamVjdCk7CiB9CiAK
IGludCBXZWJHTFRleHR1cmU6Om1hcFRhcmdldFRvSW5kZXgoR0MzRGVudW0gdGFyZ2V0KSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAppbmRleCA2YmQxMjcy
M2NjNzRhZmQyMjdhMWNiZmMzYTZmZmMxNGU1OTdkOWQ4Li5kMWRiOTUxZmZjMjBkMTk3ODcxOTk1
MDM1MDUyMTMxOGQxZjYwYzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRl
eHR1cmUuaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTFRleHR1cmVfaAogI2RlZmlu
ZSBXZWJHTFRleHR1cmVfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzQsOSArMzQsOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFdlYkdMVGV4dHVyZSA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitjbGFz
cyBXZWJHTFRleHR1cmUgOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgotICAg
IHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFs
IH5XZWJHTFRleHR1cmUoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4g
Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCkBAIC03Myw3ICs3Myw3IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBs
YXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIGNsYXNzIExldmVsSW5mbyB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuY3BwCmluZGV4IGQxNGM5NmMwMWY2MTQ3ZWY0ZTgwYTliODFlZjliYmNiMDYxOTM3NTAu
LjRhYTAzYjhmZWExNTE5Yjk3MjIzNzA0Y2FmYmZhNzYzODEzMmFmMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
Y3BwCkBAIC00MCw3ICs0MCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uz4gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKFdlYkdMUmVuCiB9CiAKIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjdHgsIFZhb1R5cGUgdHlwZSkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkK
KyAgICA6IFdlYkdMQ29udGV4dE9iamVjdChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAs
IG1faGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKICAgICAsIG1fYm91bmRFbGVtZW50QXJyYXlCdWZm
ZXIoMCkKQEAgLTU3LDkgKzU3LDE0IEBAIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsCiAgICAgfQog
fQogCi12b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCitXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjp+V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUygpCiB7Ci0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0g
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CisgICAgZGVs
ZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCit7CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29udGV4dDNkLT5n
ZXRFeHRlbnNpb25zKCk7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFZhb1R5cGVE
ZWZhdWx0OgogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAppbmRleCBmNDlhNzgwNjkzMDgzNDli
MTY1MGViNGJlZGQ4MjQ3NjgyYjgyMDEyLi43NWFlNDJmZjcyNWFjZDFkZmVkYmNlNmEwYmM5MmQz
YzQwMjhmNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCkBAIC0yNywyMSArMjcsMjEgQEAKICNkZWZpbmUgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FU19oCiAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCiAK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
UyA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
IDogcHVibGljIFdlYkdMQ29udGV4dE9iamVjdCB7CiBwdWJsaWM6CiAgICAgZW51bSBWYW9UeXBl
IHsKICAgICAgICAgVmFvVHlwZURlZmF1bHQsCiAgICAgICAgIFZhb1R5cGVVc2VyLAogICAgIH07
CiAgICAgCi0gICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpIHsgZGVsZXRl
T2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCk7CiAK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBjcmVhdGUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgVmFvVHlwZSk7CiAgICAgCkBAIC04Myw3ICs4Myw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNWZXJ0ZXhBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAKZGlmZiAt
LWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxOGY0NTAxMzAyMjQwZTU1ZWU4MjIw
MjUzMjdjYjBjNWM2NDc2OGNiLi5kNTgyODhhODU4ZjllN2Q3YjgwMzlkMTM0MjM4MDU4NDJiMTlh
NDEwIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUz
IEBACisyMDEyLTAxLTA5ICBHcmVnZyBUYXZhcmVzICA8Z21hbkBnb29nbGUuY29tPgorCisgICAg
ICAgIEFkZCBXZWJHTENvbnRleHRHcm91cCBhcyBzdGVwIHRvd2FyZCBzaGFyaW5nIFdlYkdMIHJl
c291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzU5MDYKKworICAgICAgICBUaGUgV2ViR0wgV29ya2luZyBHcm91cCB3aWxsIHNvb24gYWRkIHRo
ZSBhYmlsaXR5IHRvIHNoYXJlCisgICAgICAgIFdlYkdMIHJlc291cmNlcyBhbW9uZyBXZWJHTCBj
b250ZXh0cy4gVGhpcyBpcyB0aGUgbmVjZXNzYXJ5CisgICAgICAgIHByZXAgd29yay4gTk8gQVBJ
IGNoYW5nZXMuCisKKyAgICAgICAgQWRkZWQgV2ViR0xTaGFyZWRPYmplY3QgZm9yIG9iamVjdHMg
dGhhdCBhcmUgc2hhcmVkIHZzCisgICAgICAgIFdlYkdMQ29udGV4dE9iamVjdCBmb3Igb2JqZWN0
cyB0aGF0IGFyZSBub3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAo
V2ViQ29yZTo6T0VTVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0Ojppc1ZlcnRleEFycmF5T0VTKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpiaW5kVmVydGV4QXJyYXlP
RVMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TEJ1ZmZlcjo6fldlYkdMQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpk
ZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMQ29udGV4dEdyb3VwOjpXZWJHTENvbnRleHRHcm91cCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29udGV4dEdyb3VwKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbnRleHRHcm91cDo6YWRkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29u
dGV4dEdyb3VwOjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMQ29udGV4dEdyb3VwOjpsb3NlQ29udGV4dEdyb3VwKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRHcm91cC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFNoYWRlci5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4
dE9iamVjdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhZGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xD
b250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6fldl
YkdMQ29udGV4dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6
OmRldGFjaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojpn
ZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4
dE9iamVjdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojpjb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6dmFsaWRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0OjpoYXNHcm91cE9yQ29udGV4dCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMRnJhbWVidWZmZXI6On5XZWJHTEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVj
dDo6V2ViR0xPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6On5XZWJHTE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUHJvZ3JhbTo6fldlYkdMUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFBy
b2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFt
OjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xQcm9ncmFtLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6On5XZWJHTFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9iamVjdElt
cGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmg6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJp
bmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xl
YXJJZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZW1vdmVTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjphZGRTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YWRkQ29udGV4dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29udGV4dEdyb3VwKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRl
cjo6V2ViR0xTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6On5XZWJHTFNo
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
U2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFNoYXJlZE9iamVjdDo6fldlYkdMU2hhcmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMU2hhcmVkT2JqZWN0OjpkZXRhY2hDb250ZXh0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xTaGFyZWRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVk
T2JqZWN0Ojpjb250ZXh0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmpl
Y3Q6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojppc0Zy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojppc1Byb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojppc1NoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojp2YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFNoYXJlZE9iamVjdDo6aGFzR3JvdXBPckNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6Oldl
YkdMVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6On5XZWJHTFRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6fldlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUy5oOgorCiAyMDEyLTAxLTA5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBbQUNdIFNpbXBsaWZ5IGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIGJ1aWxkIG9wdGlvbnMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121944</attachid>
            <date>2012-01-10 17:01:26 -0800</date>
            <delta_ts>2012-01-10 18:20:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75906-20120110170124.patch</filename>
            <type>text/plain</type>
            <size>91577</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDY3MTIy
MmRmZGQzODBmNzhiYjRiOGU5NGZlZGJkY2VmYWJmNDcxZWIuLjdmOTA2NWI4Y2ZlNjU2MDhmODEw
NmQyYTJkZjIxY2VkMjA5YzA1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTY5LDYgKzIx
NjksOCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAorICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdS
ZW5kZXJlckluZm8uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNw
cAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcApAQCAtMjE3OSw2ICsy
MTgxLDcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCisgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAogICAg
ICAgICBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNjQ4Njg5NzRjMzg4MmI4OGFiMDhkMjhiOWY3ZmZlYTBm
OWFlNDcyMC4uOWZiOTkxMmE0NmE2OGVlYzcyMmY3ZDk4YmE1ZjJmMjdlNGQ2OGExMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDQsNiArNTQ0LDggQEAgd2ViY29yZV9idWls
dF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb250ZXh0RXZlbnQu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb250ZXh0RXZlbnQuaCBcCisJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29udGV4dEdyb3VwLmNwcCBcCisJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29udGV4dEdyb3VwLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1dlYkdMRnJhbWVidWZmZXIuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdM
TG9zZUNvbnRleHQuY3BwIFwKQEAgLTU1NTksNiArNTU2MSw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmggXAorCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAgXApAQCAtNTU3OSw2ICs1NTgzLDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZDUwM2Y1ZTRmNWFjMDc4
OGE3ZmQ0MDI2YjMyOThiNWJkMDFkMTUwYy4uMTAwYWJhMWQxMzQyMmY4NDI4NzE3YjIzYTFiZjYx
NTU5NWNjMGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zNjY1LDYgKzM2NjUsOCBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaCBcCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmggXAorICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdS
ZW5kZXJlckluZm8uaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmgg
XAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oIFwKQEAgLTM2NzUsNiArMzY3
Nyw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAor
ICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIFwKICAgICAgICAgaHRtbC9j
YW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0LmggXAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIFwKQEAgLTM3MDIsNiArMzcwNSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJH
TD0xKSB7CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmNwcCBc
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIFwKICAgICAg
ICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwIFwKKyAgICAgICAgaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwIFwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0T2JqZWN0LmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlcklu
Zm8uY3BwIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIFwKICAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwIFwKQEAgLTM3MTIsNiArMzcxNyw3
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAg
XAorICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAgXAogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBcCiAgICAgICAgIGh0bWwvY2Fu
dmFzL09FU1RleHR1cmVGbG9hdC5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhB
cnJheU9iamVjdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGFlMWRhM2MzNjJmNjJkY2M1MGNh
ODg3NTA1OGNmN2U1ZWYzMGUyZjUuLjRjOTIxMjY0Mzk5YTIxN2JlYjNiZjU1ZGY5NGY2NzI5Yjc0
YTkwMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU4MDYsNiArNTgwNiwxMCBAQAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRFdmVudC5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJH
TENvbnRleHRHcm91cC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oJywKICAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oJywKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAnLApAQCAtNTgyOCw2ICs1ODMy
LDggQEAKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCcs
CiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9X
ZWJHTFNoYXJlZE9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hh
cmVkT2JqZWN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAn
LAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE1NDkxNTcxNmY2
MDFkZjk0ZTI2MWQ0MDA0YjI4OGIzZDdmYTY1MGIuLjQ1YThlMzZjNDFiMmYxMWI0Y2QxYmE2MmM3
YzA4NDRhZmU0MDlkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTY2LDYgKzY2LDEyIEBACiAJCTAwQ0E5M0I1MTNDNjY5N0Mw
MEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3
WE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQkwMEQwNDY0QTEzQzREMTQ1MDAzMjZGQ0Mg
LyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwRDA0NjQ4MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwICovOyB9OwogCQkwMEQwNDY0QjEzQzREMTQ1MDAz
MjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEQwNDY0OTEzQzREMTQ1MDAzMjZGQ0MgLyog
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggKi87IH07CisJCTAxRDNDRjgyMTRCRDBBMzAw
MEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMUQzQ0Y3QzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xD
b250ZXh0R3JvdXAuY3BwICovOyB9OworCQkwMUQzQ0Y4MzE0QkQwQTMwMDBGRTk5NzAgLyogV2Vi
R0xDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDAxRDNDRjdEMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5oICov
OyB9OworCQkwMUQzQ0Y4NDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAxRDNDRjdF
MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRPYmplY3QuY3BwICovOyB9OworCQkwMUQz
Q0Y4NTE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMUQzQ0Y3RjE0QkQwQTMwMDBGRTk5
NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmggKi87IH07CisJCTAxRDNDRjg2MTRCRDBBMzAwMEZF
OTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMUQzQ0Y4MDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFy
ZWRPYmplY3QuY3BwICovOyB9OworCQkwMUQzQ0Y4NzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xT
aGFyZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDAxRDNDRjgxMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5oICovOyB9
OwogCQkwMzNBNkE3QzE0N0UwN0QyMDA1MDlCMzYgLyogSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMzNBNkE3
QjE0N0UwN0QyMDA1MDlCMzYgLyogSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmggKi87IH07CiAJ
CTAzM0E2QTdFMTQ3RTA3RTcwMDUwOUIzNiAvKiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDMzQTZBN0Qx
NDdFMDdFNzAwNTA5QjM2IC8qIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAgKi87IH07CiAJ
CTAzM0E2QTgxMTQ3RTA4ODYwMDUwOUIzNiAvKiBKU0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMzNBNkE4
MDE0N0UwODg2MDA1MDlCMzYgLyogSlNIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwICovOyB9
OwpAQCAtNzE2Miw2ICs3MTY4LDEyIEBACiAJCTAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBO
ZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTAwRDA0NjQ4MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDBEMDQ2
NDkxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDFEM0NGN0MxNEJEMEEzMDAwRkU5OTcw
IC8qIFdlYkdMQ29udGV4dEdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMQ29udGV4dEdyb3VwLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAxRDNDRjdEMTRCRDBBMzAw
MEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJHTENvbnRleHRHcm91cC5oOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAxRDNDRjdFMTRCRDBBMzAwMEZF
OTk3MCAvKiBXZWJHTENvbnRleHRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViR0xDb250ZXh0T2JqZWN0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMUQzQ0Y3RjE0
QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYkdMQ29udGV4dE9iamVjdC5oOyBwYXRoID0gY2FudmFzL1dlYkdM
Q29udGV4dE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMUQzQ0Y4MDE0
QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xTaGFyZWRPYmplY3QuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDFE
M0NGODExNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMU2hhcmVkT2JqZWN0Lmg7IHBhdGggPSBjYW52YXMv
V2ViR0xTaGFyZWRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDMzQTZB
N0IxNDdFMDdEMjAwNTA5QjM2IC8qIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDMzQTZBN0QxNDdFMDdFNzAwNTA5QjM2IC8qIEhU
TUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMzNBNkE3RjE0N0UwN0Y5MDA1MDlCMzYgLyogSFRNTFByb3BlcnRpZXNDb2xs
ZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MUHJvcGVydGllc0NvbGxlY3Rp
b24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUwMzYsNiArMTUwNDgsMTAg
QEAKIAkJCQk5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3Bw
ICovLAogCQkJCTkzRjZGMUVCMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5o
ICovLAogCQkJCTkzRjZGMUVDMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5p
ZGwgKi8sCisJCQkJMDFEM0NGN0MxNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMQ29udGV4dEdyb3Vw
LmNwcCAqLywKKwkJCQkwMUQzQ0Y3RDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0R3Jv
dXAuaCAqLywKKwkJCQkwMUQzQ0Y3RTE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2Jq
ZWN0LmNwcCAqLywKKwkJCQkwMUQzQ0Y3RjE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0
T2JqZWN0LmggKi8sCiAJCQkJQTBFRTBERjExNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdS
ZW5kZXJlckluZm8uY3BwICovLAogCQkJCUEwRUUwREYyMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJH
TERlYnVnUmVuZGVyZXJJbmZvLmggKi8sCiAJCQkJQTBFRTBERjAxNDRGODI0MzAwRjgwQjBEIC8q
IFdlYkdMRGVidWdSZW5kZXJlckluZm8uaWRsICovLApAQCAtMTUwNjYsNiArMTUwODIsOCBAQAog
CQkJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi8sCiAJCQkJ
NDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggKi8sCiAJCQkJNDlDN0I5
QzQxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmlkbCAqLywKKwkJCQkwMUQzQ0Y4MDE0
QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuY3BwICovLAorCQkJCTAxRDNDRjgx
MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5oICovLAogCQkJCTQ5QzdCOUM1
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOUM2MTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLywKIAkJCQk0OUM3QjlDNzEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmlkbCAqLywKQEAgLTI0OTA0LDYgKzI0OTIyLDkgQEAK
IAkJCQk5NzRBODYyMzE0QjdBREJCMDAzRkRDNzYgLyogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0QyQUQwNDE0QjgyM0E2MDA5M0RGMzIgLyogRE9NV2lu
ZG93UHJvcGVydHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBQUJBMjVBMTRCQzYxMzMwMEFBOUEx
MSAvKiBET01FZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTAxRDNDRjgzMTRCRDBBMzAwMEZF
OTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDFEM0NGODUx
NEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMQ29udGV4dE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMDFEM0NGODcxNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTI3ODExLDYgKzI3ODMyLDkgQEAKIAkJCQk5NzRBODYyMjE0QjdBREJCMDAz
RkRDNzYgLyogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3RDJBRDAzMTRCODIzQTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QUFCQTI1OTE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTAxRDNDRjgyMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRl
eHRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwMUQzQ0Y4NDE0QkQwQTMwMDBGRTk5NzAg
LyogV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAxRDNDRjg2MTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNw
cAppbmRleCBhMjZkNzA2OWY2ZWNkNWE4YjQxOGI5YWNlODIyY2FkMzIyYWE1YmYzLi5jZWE1MjVj
Mzk5MDEzZDUyNmU0Y2ViNzNiOTkxNTUzNGUxMDVmMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCkBAIC02MCw3ICs2MCw3
IEBAIFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gT0VTVmVydGV4QXJyYXlP
YmplY3Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAg
IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBvID0gV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzo6Y3JlYXRlKG1fY29udGV4dCwgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmFv
VHlwZVVzZXIpOwotICAgIG1fY29udGV4dC0+YWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIG1fY29u
dGV4dC0+YWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gby5yZWxlYXNlKCk7
CiB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBPRVNWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRl
VmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXkKICAgICBpZiAo
IWFycmF5T2JqZWN0IHx8IG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgYXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdCgpOworICAgIGFycmF5T2Jq
ZWN0LT5kZWxldGVPYmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKTsKIH0KIAog
R0MzRGJvb2xlYW4gT0VTVmVydGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJyYXlPRVMoV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYmplY3QpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQg
T0VTVmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTKiBhcnJheU9iCiAgICAgaWYgKG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGFycmF5T2JqZWN0ICYmIGFycmF5T2JqZWN0
LT5jb250ZXh0KCkgIT0gbV9jb250ZXh0KSB7CisgICAgaWYgKGFycmF5T2JqZWN0ICYmICFhcnJh
eU9iamVjdC0+dmFsaWRhdGUoMCwgY29udGV4dCgpKSkgewogICAgICAgICBtX2NvbnRleHQtPmdy
YXBoaWNzQ29udGV4dDNEKCktPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKaW5kZXggOTk3ZGJhNTAwZWQ1MDM4M2M2NDNl
OGUxZjA5MDY1ZGIwZjZiNjg2MS4uZmM2ZDQwODYwNjc1ZDZmMTZhOTYzNGMyYzYxNmQ1NmFlY2I1
MWYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAKICNpbmNsdWRlICJDaGVj
a2VkSW50LmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXJWaWV3Lmg+CiAK
QEAgLTQxLDE4ICs0MiwyMyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6
Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJHTEJ1ZmZlcjo6V2Vi
R0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9iamVjdChj
dHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQogICAg
ICwgbV9ieXRlTGVuZ3RoKDApCiAgICAgLCBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5KDApCiB7
Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVm
ZmVyKCkpOworICAgIHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1
ZmZlcigpKTsKICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKIH0KIAotdm9pZCBXZWJHTEJ1
ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMQnVm
ZmVyOjp+V2ViR0xCdWZmZXIoKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lk
IFdlYkdMQnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgICAgY29udGV4dDNkLT5kZWxldGVC
dWZmZXIob2JqZWN0KTsKIH0KIAogYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0
YUltcGwoQXJyYXlCdWZmZXIqIGFycmF5LCBHQzNEaW50cHRyIGJ5dGVPZmZzZXQsIEdDM0RzaXpl
aXB0ciBieXRlTGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgK
aW5kZXggMDE1N2VjZTY1ZjBjZTRiN2M0MDdiN2JjYjU5ZDc5Njg3NTE0MGMwNy4uODQ5YzM1ODJi
ZDc5Y2E4YzE1MDUxNDc1MzBmZDkwZTdkY2I1ZTk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkdMQnVmZmVy
X2gKICNkZWZpbmUgV2ViR0xCdWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNp
bmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM1LDkgKzM1LDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7
CitjbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6
Ci0gICAgdmlydHVhbCB+V2ViR0xCdWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmly
dHVhbCB+V2ViR0xCdWZmZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBv
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCos
IFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZWZiZGQ4NjE2MDg3Y2U3ZDc0
NTc5Mzk0NDBjNzA4MGMxMTgwN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRl
ICJXZWJHTENvbnRleHRHcm91cC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFNoYXJl
ZE9iamVjdC5oIgorCisjaWYgUExBVEZPUk0oUVQpCisjdW5kZWYgZW1pdAorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gV2ViR0xD
b250ZXh0R3JvdXA6OmNyZWF0ZSgpCit7CisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBj
b250ZXh0R3JvdXAgPSBhZG9wdFJlZihuZXcgV2ViR0xDb250ZXh0R3JvdXAoKSk7CisgICAgcmV0
dXJuIGNvbnRleHRHcm91cC5yZWxlYXNlKCk7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjpXZWJH
TENvbnRleHRHcm91cCgpCit7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjp+V2ViR0xDb250ZXh0
R3JvdXAoKQoreworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30KKworR3JhcGhp
Y3NDb250ZXh0M0QqIFdlYkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QoKQor
eworICAgIEFTU0VSVCghbV9jb250ZXh0cy5pc0VtcHR5KCkpOworICAgIEhhc2hTZXQ8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOworICAg
IHJldHVybiAoKml0KS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKK30KKwordm9pZCBXZWJHTENvbnRl
eHRHcm91cDo6YWRkQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgbV9jb250ZXh0cy5hZGQoY29udGV4dCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6
OnJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1f
Y29udGV4dHMucmVtb3ZlKGNvbnRleHQpOworCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCBj
b250ZXh0IGxldCBnbyBvZiBhbGwgdGhlIHJlc291cmNlcy4KKyAgICBpZiAobV9jb250ZXh0cy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgLy8gZ2V0QUNvbnRleHQgbmVlZHMgYSBjb250ZXh0IHRvIGJl
IGFibGUgdG8gZGVsZXRlLgorICAgICAgICBtX2NvbnRleHRzLmFkZChjb250ZXh0KTsKKyAgICAg
ICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAgICAgICBtX2NvbnRleHRzLnJlbW92
ZShjb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZU9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIG1fZ3JvdXBPYmplY3RzLnJl
bW92ZShvYmplY3QpOworfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICByZW1vdmVPYmplY3Qob2JqZWN0KTsKKyAg
ICBtX2dyb3VwT2JqZWN0cy5hZGQob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTENvbnRleHRHcm91
cDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgd2hpbGUgKCFtX2dyb3VwT2Jq
ZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSGFzaFNldDxXZWJHTFNoYXJlZE9iamVjdCo+Ojpp
dGVyYXRvciBpdCA9IG1fZ3JvdXBPYmplY3RzLmJlZ2luKCk7CisgICAgICAgICgqaXQpLT5kZXRh
Y2hDb250ZXh0R3JvdXAoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6Omxv
c2VDb250ZXh0R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9k
ZSkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQor
ICAgICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOworCisgICAgZGV0YWNoQW5kUmVt
b3ZlQWxsT2JqZWN0cygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRHcm91cC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0R3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTFhMDM2NzkzYjE0MDcyNGVmNDQ2NzRkMjVhYTA2ZGQ1
MTY4NDhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0R3JvdXAuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdM
Q29udGV4dEdyb3VwX2gKKyNkZWZpbmUgV2ViR0xDb250ZXh0R3JvdXBfaAorCisjaW5jbHVkZSA8
V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBXZWJH
TEV4dGVuc2lvbjsKK2NsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OworY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBXZWJHTENv
bnRleHRHcm91cCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdMQ29udGV4dEdyb3VwPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IGNyZWF0ZSgpOwor
ICAgIHZpcnR1YWwgfldlYkdMQ29udGV4dEdyb3VwKCk7CisKKyAgICB2b2lkIGFkZENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOworCisgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3Qq
KTsKKyAgICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOworCisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworCisgICAgdm9pZCBsb3Nl
Q29udGV4dEdyb3VwKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKwor
ICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKKworICAgIFdlYkdMQ29u
dGV4dEdyb3VwKCk7CisKKyAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKwor
ICAgIEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4gbV9jb250ZXh0czsKKyAgICBIYXNo
U2V0PFdlYkdMU2hhcmVkT2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29udGV4dE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQ5YzA4ZWM5Yzg2OTZiMmRlNDU0
NTgzNmVmNDAwOGY0YTJhZTliOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAi
V2ViR0xDb250ZXh0T2JqZWN0LmgiCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJHTENvbnRleHRPYmplY3Q6OldlYkdMQ29u
dGV4dE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCisgICAgOiAgbV9jb250
ZXh0KGNvbnRleHQpCit7Cit9CisKK1dlYkdMQ29udGV4dE9iamVjdDo6fldlYkdMQ29udGV4dE9i
amVjdCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVD
b250ZXh0T2JqZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNo
Q29udGV4dCgpCit7CisgICAgZGV0YWNoKCk7CisgICAgaWYgKG1fY29udGV4dCkgeworICAgICAg
ICBkZWxldGVPYmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAg
bV9jb250ZXh0LT5yZW1vdmVDb250ZXh0T2JqZWN0KHRoaXMpOworICAgICAgICBtX2NvbnRleHQg
PSAwOworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMQ29udGV4dE9iamVjdDo6
Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ID8g
bV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpIDogMDsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRl
eHRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGJjMDlkNTViN2Y5ZGJmZjQ1NWUxM2IyZDIwNTFhN2Fm
Njg0YTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0T2JqZWN0LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJH
TENvbnRleHRPYmplY3RfaAorI2RlZmluZSBXZWJHTENvbnRleHRPYmplY3RfaAorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OworCitjbGFzcyBXZWJHTENvbnRleHRPYmplY3QgOiBwdWJsaWMgV2Vi
R0xPYmplY3QgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkdMQ29udGV4dE9iamVjdCgpOwor
CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0
R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gY29udGV4dCA9PSBtX2NvbnRleHQ7CisgICAgfQorCisgICAgdm9p
ZCBkZXRhY2hDb250ZXh0KCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTENvbnRleHRPYmplY3Qo
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNv
bnRleHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dDsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0OworICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gV2ViR0xPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAppbmRleCBkMWFmNTE4YzA1MTY1NWY5MzQxZDJk
ZmJiYWMxNjljNjMxYjU2MmJmLi5lYTBhNzQyZmRiNThkZDQzYTE0N2M1Nzc2OWNjNTIxZTJhZGQ5
MDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmNwcApAQCAtMjksMTMgKzI5LDE0IEBACiAKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgi
CiAKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLSAg
ICBib29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCwg
R0MzRGVudW0gYXR0YWNobWVudCkKKyAgICBib29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdM
U2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCwgR0MzRGVudW0gYXR0YWNobWVudCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0
KCkpOwogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwpA
QCAtNjIsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VXaWR0aChXZWJHTE9iamVjdCogYXR0YWNoZWRPYmpl
Y3QpCisgICAgR0MzRHNpemVpIGdldEltYWdlV2lkdGgoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFj
aGVkT2JqZWN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFj
aGVkT2JqZWN0LT5vYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdC0+aXNS
ZW5kZXJidWZmZXIoKSk7CkBAIC03MCw3ICs3MSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHJl
dHVybiBidWZmZXItPmdldFdpZHRoKCk7CiAgICAgfQogCi0gICAgR0MzRHNpemVpIGdldEltYWdl
SGVpZ2h0KFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICBHQzNEc2l6ZWkgZ2V0SW1h
Z2VIZWlnaHQoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSk7CiAg
ICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CkBAIC03OCw3
ICs3OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHJldHVybiBidWZmZXItPmdldEhlaWdodCgp
OwogICAgIH0KIAotICAgIGJvb2wgaXNVbmluaXRpYWxpemVkKFdlYkdMT2JqZWN0KiBhdHRhY2hl
ZE9iamVjdCkKKyAgICBib29sIGlzVW5pbml0aWFsaXplZChXZWJHTFNoYXJlZE9iamVjdCogYXR0
YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNo
ZWRPYmplY3QtPm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpCiAg
ICAgICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRh
Y2hlZE9iamVjdCkpLT5pc0luaXRpYWxpemVkKCkpCkBAIC04NiwxMyArODcsMTMgQEAgbmFtZXNw
YWNlIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgc2V0SW5pdGlh
bGl6ZWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAgIHZvaWQgc2V0SW5pdGlhbGl6
ZWQoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQogICAgIHsKICAgICAgICAgaWYg
KGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSAmJiBhdHRhY2hlZE9i
amVjdC0+aXNSZW5kZXJidWZmZXIoKSkKICAgICAgICAgICAgIChyZWludGVycHJldF9jYXN0PFdl
YkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmplY3QpKS0+c2V0SW5pdGlhbGl6ZWQoKTsKICAg
ICB9CiAKLSAgICBib29sIGlzVmFsaWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAg
IGJvb2wgaXNWYWxpZFJlbmRlcmJ1ZmZlcihXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNoZWRPYmpl
Y3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3Qt
Pm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKSB7CiAgICAgICAg
ICAgICBpZiAoIShyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRP
YmplY3QpKS0+aXNWYWxpZCgpKQpAQCAtMTA5LDIwICsxMTAsMjQgQEAgUGFzc1JlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjdHgKIH0KIAogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdM
Q29udGV4dE9iamVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiAgICAg
LCBtX3RleFRhcmdldCgwKQogICAgICwgbV90ZXhMZXZlbCgtMSkKIHsKLSAgICBzZXRPYmplY3Qo
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKKyAg
ICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigp
KTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFdlYkdMVGV4
dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK1dlYkdMRnJhbWVidWZmZXI6On5XZWJHTEZy
YW1lYnVmZmVyKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzZCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBX
ZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKGlzQm91
bmQoKSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50KTsKKyAgICByZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoY29udGV4dDNkLCBhdHRhY2htZW50KTsKICAgICBp
ZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+b2JqZWN0KCkpCiAgICAgICAgIHRleHR1cmUgPSAwOwog
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtMTUwLDEyICsxNTUsMTEgQEAgdm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBh
dHRhY2htZW50LCBHQzMKICAgICAgICAgdGV4dHVyZS0+b25BdHRhY2hlZCgpOwogfQogCi12b2lk
IFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0Rl
bnVtIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0M2QsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVm
ZmVyKiByZW5kZXJidWZmZXIpCiB7Ci0gICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgaWYgKCFv
YmplY3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRG
cmFtZWJ1ZmZlcihhdHRhY2htZW50KTsKKyAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJh
bWVidWZmZXIoY29udGV4dDNkLCBhdHRhY2htZW50KTsKICAgICBpZiAocmVuZGVyYnVmZmVyICYm
ICFyZW5kZXJidWZmZXItPm9iamVjdCgpKQogICAgICAgICByZW5kZXJidWZmZXIgPSAwOwogICAg
IHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtMTc5LDcgKzE4Myw3IEBAIHZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNo
bWVudCwgV2ViCiAgICAgICAgIHJlbmRlcmJ1ZmZlci0+b25BdHRhY2hlZCgpOwogfQogCi1XZWJH
TE9iamVjdCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2ht
ZW50KSBjb25zdAorV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFj
aG1lbnQoR0MzRGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTE5OCwxNSArMjAyLDE0IEBAIFdlYkdMT2JqZWN0KiBXZWJH
TEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CiAg
ICAgfQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQordm9pZCBXZWJHTEZyYW1lYnVmZmVy
OjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsKLSAgICBBU1NFUlQoaXNCb3VuZCgp
KTsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChhdHRh
Y2htZW50KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6
CiAgICAgICAgIGlmIChtX2NvbG9yQXR0YWNobWVudCkgewotICAgICAgICAgICAgbV9jb2xvckF0
dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5v
bkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgICAgICAgICBtX2NvbG9yQXR0YWNobWVudCA9IDA7
CiAgICAgICAgICAgICBtX3RleFRhcmdldCA9IDA7CiAgICAgICAgICAgICBtX3RleExldmVsID0g
LTE7CkBAIC0yMTQsMTkgKzIxNywxOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgog
ICAgICAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQpIHsKLSAgICAgICAgICAgIG1fZGVwdGhBdHRh
Y2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2RlcHRoQXR0YWNobWVudC0+b25E
ZXRhY2hlZChjb250ZXh0M2QpOwogICAgICAgICAgICAgbV9kZXB0aEF0dGFjaG1lbnQgPSAwOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAgaWYgKG1fc3RlbmNpbEF0dGFjaG1lbnQpIHsKLSAg
ICAgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAg
IG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgICAg
IG1fc3RlbmNpbEF0dGFjaG1lbnQgPSAwOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAg
ICAgaWYgKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkgewotICAgICAgICAgICAgbV9kZXB0aFN0
ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2RlcHRoU3RlbmNp
bEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgICAgIG1fZGVwdGhT
dGVuY2lsQXR0YWNobWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMzYs
MzMgKzIzOSwzMSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9t
Qm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQogICAgIH0KIH0KIAotdm9pZCBX
ZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoV2Vi
R0xPYmplY3QqIGF0dGFjaG1lbnQpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogZ2MzZCwgV2ViR0xT
aGFyZWRPYmplY3QqIGF0dGFjaG1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAg
aWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghYXR0YWNobWVudCkKICAg
ICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnYzNkID0gY29udGV4dCgpLT5n
cmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChhdHRhY2htZW50ID09IG1fY29sb3JBdHRhY2ht
ZW50LmdldCgpKSB7CiAgICAgICAgIGlmIChhdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpKQog
ICAgICAgICAgICAgZ2MzZC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBnYzNkLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgbV90ZXhUYXJnZXQs
IDAsIG1fdGV4TGV2ZWwpOwotICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwKTsKKyAgICAgICAgcmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgfQogICAgIGlmIChhdHRhY2htZW50ID09IG1fZGVw
dGhBdHRhY2htZW50LmdldCgpKSB7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAg
ICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQpOworICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5k
RnJhbWVidWZmZXIoZ2MzZCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQpOwog
ICAgIH0KICAgICBpZiAoYXR0YWNobWVudCA9PSBtX3N0ZW5jaWxBdHRhY2htZW50LmdldCgpKSB7
CiAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIHJlbW92ZUF0dGFjaG1l
bnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5UKTsKKyAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2Qs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAgIH0KICAgICBpZiAo
YXR0YWNobWVudCA9PSBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpIHsKICAgICAgICAg
Z2MzZC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0g
ICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgcmVtb3ZlQXR0YWNobWVu
dEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQpOwogICAgIH0KIH0KIApAQCAtMzM3LDcgKzMzOCw3IEBAIEdDM0RlbnVt
IFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKCkgY29uc3QKICAgICBpZiAoaXNEZXB0aFN0
ZW5jaWxBdHRhY2hlZCgpKSB7CiAgICAgICAgIGlmICghaXNBdHRhY2htZW50Q29tcGxldGUobV9k
ZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UKSkKICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICBpZiAoIWlzVmFsaWQo
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkUmVu
ZGVyYnVmZmVyKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAg
ICBpZiAoIWNvdW50KSB7CiAgICAgICAgICAgICB3aWR0aCA9IGdldEltYWdlV2lkdGgobV9kZXB0
aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKTsKQEAgLTM2OSwyOSArMzcwLDI5IEBAIEdDM0RlbnVt
IFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKCkgY29uc3QKICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwogfQogCi1ib29sIFdlYkdMRnJhbWVi
dWZmZXI6Om9uQWNjZXNzKGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpCitib29s
IFdlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2Qs
IGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpCiB7CiAgICAgaWYgKGNoZWNrU3Rh
dHVzKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQot
ICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJu
IGluaXRpYWxpemVSZW5kZXJidWZmZXJzKGNvbnRleHQzZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2Jq
ZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAg
ICBpZiAobV9jb2xvckF0dGFjaG1lbnQpCi0gICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5vbkRl
dGFjaGVkKCk7CisgICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQz
ZCk7CiAgICAgaWYgKG1fZGVwdGhBdHRhY2htZW50KQotICAgICAgICBtX2RlcHRoQXR0YWNobWVu
dC0+b25EZXRhY2hlZCgpOworICAgICAgICBtX2RlcHRoQXR0YWNobWVudC0+b25EZXRhY2hlZChj
b250ZXh0M2QpOwogICAgIGlmIChtX3N0ZW5jaWxBdHRhY2htZW50KQotICAgICAgICBtX3N0ZW5j
aWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQt
Pm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICBpZiAobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50
KQotICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKLSAgICBj
b250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7
CisgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2Qp
OworICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KIAotYm9vbCBX
ZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCitib29sIFdlYkdMRnJh
bWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2Qp
CiB7CiAgICAgQVNTRVJUKG9iamVjdCgpKTsKICAgICBib29sIGluaXRDb2xvciA9IGZhbHNlLCBp
bml0RGVwdGggPSBmYWxzZSwgaW5pdFN0ZW5jaWwgPSBmYWxzZTsKQEAgLTQxOCw3ICs0MTksNiBA
QCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKCkKIAogICAg
IC8vIFdlIG9ubHkgY2xlYXIgdW4taW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVycyB3aGVuIHRoZXkg
YXJlIHJlYWR5IHRvIGJlCiAgICAgLy8gcmVhZCwgaS5lLiwgd2hlbiB0aGUgZnJhbWVidWZmZXIg
aXMgY29tcGxldGUuCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGczZCA9IGNvbnRleHQoKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAoZzNkLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0NPTVBMRVRFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ4NywxMSArNDg3
LDYgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNCb3VuZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIChjb250ZXh0KCktPm1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
ID09IHRoaXMpOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKaW5kZXggMTEwZjUxMzk1Zjli
Nzg0NDFiODE5ZDkzNDU1OTYwMzI4MWQwYjRmZC4uMzQ2MzNhMDQxZDFmMTBmZjBjN2ZkZTQ2MWQw
M2Y5MjQzZTQ0MmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaApAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBXZWJHTEZyYW1lYnVmZmVyX2gK
ICNkZWZpbmUgV2ViR0xGcmFtZWJ1ZmZlcl9oCiAKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgor
I2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2Jq
ZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CkBAIC0zNiwxOSArMzcsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
V2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFRleHR1cmU7CiAKLWNsYXNzIFdlYkdMRnJh
bWVidWZmZXIgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlciA6
IHB1YmxpYyBXZWJHTENvbnRleHRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdM
RnJhbWVidWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xGcmFt
ZWJ1ZmZlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9pZCBzZXRBdHRhY2htZW50Rm9y
Qm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQs
IFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgc2V0QXR0YWNobWVudEZv
ckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIq
KTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRl
eHR1cmUqLCBHQzNEaW50IGxldmVsKTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xS
ZW5kZXJidWZmZXIqKTsKICAgICAvLyBJZiBhbiBvYmplY3QgaXMgYXR0YWNoZWQgdG8gdGhlIGN1
cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgcmVtb3ZlIGl0LgotICAgIHZvaWQgcmVtb3ZlQXR0
YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMT2JqZWN0Kik7CisgICAgdm9pZCByZW1v
dmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqLCBXZWJH
TFNoYXJlZE9iamVjdCopOwogICAgIC8vIElmIGEgZ2l2ZW4gYXR0YWNobWVudCBwb2ludCBmb3Ig
dGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciBpcyBub3QgbnVsbCwgcmVtb3ZlIHRoZSBh
dHRhY2hlZCBvYmplY3QuCi0gICAgdm9pZCByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVi
dWZmZXIoR0MzRGVudW0pOwotICAgIFdlYkdMT2JqZWN0KiBnZXRBdHRhY2htZW50KEdDM0RlbnVt
KSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtKTsKKyAgICBXZWJHTFNoYXJlZE9iamVjdCogZ2V0
QXR0YWNobWVudChHQzNEZW51bSkgY29uc3Q7CiAKICAgICBHQzNEZW51bSBnZXRDb2xvckJ1ZmZl
ckZvcm1hdCgpIGNvbnN0OwogICAgIEdDM0RzaXplaSBnZXRDb2xvckJ1ZmZlcldpZHRoKCkgY29u
c3Q7CkBAIC02MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhl
IGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFsaXplCiAgICAgLy8g
dGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCiAgICAgLy8g
bmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KLSAgICBib29sIG9uQWNjZXNz
KGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOworICAgIGJvb2wgb25BY2Nlc3Mo
R3JhcGhpY3NDb250ZXh0M0QqLCBib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKTsK
IAogICAgIC8vIFNvZnR3YXJlIHZlcnNpb24gb2YgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKCks
IGV4Y2VwdCB0aGF0IHdoZW4KICAgICAvLyBGUkFNRUJVRkZFUl9DT01QTEVURSBpcyByZXR1cm5l
ZCwgaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yCkBAIC03NSwyNiArNzYsMjMgQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBs
YXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lYnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGZy
YW1lYnVmZmVyIGlzIGluY29tcGxldGUuCi0gICAgYm9vbCBpbml0aWFsaXplUmVuZGVyYnVmZmVy
cygpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGN1cnJlbnRseSBib3Vu
ZC4KLSAgICBib29sIGlzQm91bmQoKSBjb25zdDsKKyAgICBib29sIGluaXRpYWxpemVSZW5kZXJi
dWZmZXJzKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICBib29sIGlzQ29sb3JBdHRhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIChtX2NvbG9yQXR0YWNobWVudCAmJiBtX2NvbG9yQXR0YWNobWVudC0+
b2JqZWN0KCkpOyB9CiAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAo
bV9kZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQogICAg
IGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9zdGVuY2lsQXR0YWNo
bWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KICAgICBib29sIGlzRGVw
dGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CiAKLSAgICBSZWZQ
dHI8V2ViR0xPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVj
dD4gbV9kZXB0aEF0dGFjaG1lbnQ7Ci0gICAgUmVmUHRyPFdlYkdMT2JqZWN0PiBtX3N0ZW5jaWxB
dHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50OworICAgIFJlZlB0cjxXZWJHTFNoYXJlZE9iamVjdD4gbV9jb2xvckF0dGFjaG1lbnQ7Cisg
ICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoQXR0YWNobWVudDsKKyAgICBSZWZQ
dHI8V2ViR0xTaGFyZWRPYmplY3Q+IG1fc3RlbmNpbEF0dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdl
YkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7CiAKICAgICBib29sIG1f
aGFzRXZlckJlZW5Cb3VuZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuY3BwCmluZGV4IDdiNjI5YTY5Yzc0MzZjMDkwOWMzOTY3M2IwYjUwNDFhNDM4ZTIxZTEuLjNi
ZWQ1NWJkYTFiZWY2ZGUwNzAzODM3MTFkMGYyZDIxOWUyZmI0ODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKQEAgLTI5LDEzICsyOSwyMCBAQAogCiAjaW5j
bHVkZSAiV2ViR0xPYmplY3QuaCIKIAorI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJh
eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgiCisjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZv
LmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJXZWJHTExvc2VD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotV2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCgpCiAgICAgOiBtX29iamVj
dCgwKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2F0dGFjaG1lbnRDb3VudCgw
KQogICAgICwgbV9kZWxldGVkKGZhbHNlKQogewpAQCAtNDMsOCArNTAsNiBAQCBXZWJHTE9iamVj
dDo6V2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogCiBXZWJHTE9i
amVjdDo6fldlYkdMT2JqZWN0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2Nv
bnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsKIH0KIAogdm9pZCBXZWJHTE9iamVjdDo6c2V0T2Jq
ZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQpAQCAtNTQsMjYgKzU5LDM4IEBAIHZvaWQgV2Vi
R0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKICAgICBtX29iamVj
dCA9IG9iamVjdDsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KCkKK3ZvaWQg
V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQog
ewogICAgIG1fZGVsZXRlZCA9IHRydWU7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fb2JqZWN0
KQorICAgIGlmICghbV9vYmplY3QpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmICghaGFzR3Jv
dXBPckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFtX2F0dGFjaG1lbnRD
b3VudCkgewotICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgICAgICBkZWxldGVPYmplY3RJbXBsKG1fb2JqZWN0KTsKKyAgICAg
ICAgaWYgKCFjb250ZXh0M2QpCisgICAgICAgICAgICBjb250ZXh0M2QgPSBnZXRBR3JhcGhpY3ND
b250ZXh0M0QoKTsKKworICAgICAgICBpZiAoY29udGV4dDNkKQorICAgICAgICAgICAgZGVsZXRl
T2JqZWN0SW1wbChjb250ZXh0M2QsIG1fb2JqZWN0KTsKKwogICAgICAgICBtX29iamVjdCA9IDA7
CiAgICAgfQogfQogCi12b2lkIFdlYkdMT2JqZWN0OjpkZXRhY2hDb250ZXh0KCkKK3ZvaWQgV2Vi
R0xPYmplY3Q6OmRldGFjaCgpCiB7CiAgICAgbV9hdHRhY2htZW50Q291bnQgPSAwOyAvLyBNYWtl
IHN1cmUgT3BlbkdMIHJlc291cmNlIGlzIGRlbGV0ZWQuCi0gICAgaWYgKG1fY29udGV4dCkgewot
ICAgICAgICBkZWxldGVPYmplY3QoKTsKLSAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVPYmplY3Qo
dGhpcyk7Ci0gICAgICAgIG1fY29udGV4dCA9IDA7CiAgICAgfQorCisKK3ZvaWQgV2ViR0xPYmpl
Y3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKK3sKKyAgICBpZiAo
bV9hdHRhY2htZW50Q291bnQpCisgICAgICAgIC0tbV9hdHRhY2htZW50Q291bnQ7CisgICAgaWYg
KG1fZGVsZXRlZCkKKyAgICAgICAgZGVsZXRlT2JqZWN0KGNvbnRleHQzZCk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCmluZGV4IDQ0Y2MzNmY2YmZlMjRh
YzA0ZmU5MWRlNjhjODgxMDRiNDlkMDc2M2EuLmUwYjZhOGUxN2JjODI2YzQ0YjQ4YmU0MTJmZTU4
NTE0YmZiNjBhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaApA
QCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CiBjbGFzcyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ7CiAKIGNsYXNzIFdlYkdMT2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR0xP
YmplY3Q+IHsKQEAgLTQ0LDQ1ICs0NiwzNiBAQCBwdWJsaWM6CiAgICAgLy8gZGVsZXRlT2JqZWN0
IG1heSBub3QgYWx3YXlzIGRlbGV0ZSB0aGUgT3BlbkdMIHJlc291cmNlLiAgRm9yIHByb2dyYW1z
IGFuZAogICAgIC8vIHNoYWRlcnMsIGRlbGV0aW9uIGlzIGRlbGF5ZWQgdW50aWwgdGhleSBhcmUg
bm8gbG9uZ2VyIGF0dGFjaGVkLgogICAgIC8vIEZJWE1FOiByZXZpc2l0IHRoaXMgd2hlbiByZXNv
dXJjZSBzaGFyaW5nIGJldHdlZW4gY29udGV4dHMgYXJlIGltcGxlbWVudGVkLgotICAgIHZvaWQg
ZGVsZXRlT2JqZWN0KCk7Ci0KLSAgICB2b2lkIGRldGFjaENvbnRleHQoKTsKLQotICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQot
Ci0gICAgdmlydHVhbCBib29sIGlzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQg
ZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICB2b2lkIG9uQXR0YWNoZWQo
KSB7ICsrbV9hdHRhY2htZW50Q291bnQ7IH0KLSAgICB2b2lkIG9uRGV0YWNoZWQoKQotICAgIHsK
LSAgICAgICAgaWYgKG1fYXR0YWNobWVudENvdW50KQotICAgICAgICAgICAgLS1tX2F0dGFjaG1l
bnRDb3VudDsKLSAgICAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgICAgIGRlbGV0ZU9iamVj
dCgpOwotICAgIH0KKyAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAog
ICAgIC8vIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBzaWRlIGlzc3VlIGEgZGVs
ZXRlIGNhbGwgYWxyZWFkeSwgbm90CiAgICAgLy8gd2hldGhlciB0aGUgT3BlbkdMIHJlc291cmNl
IGlzIGRlbGV0ZWQuCiAgICAgLy8gb2JqZWN0KCk9PTAgaW5kaWNhdGVzIHRoZSBPcGVuR0wgcmVz
b3VyY2UgaXMgZGVsZXRlZC4KICAgICBib29sIGlzRGVsZXRlZCgpIHsgcmV0dXJuIG1fZGVsZXRl
ZDsgfQogCisgICAgLy8gVHJ1ZSBpZiB0aGlzIG9iamVjdCBiZWxvbmdzIHRvIHRoZSBncm91cCBv
ciBjb250ZXh0LgorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRH
cm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0ID0gMDsKKwogcHJvdGVj
dGVkOgotICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdM
T2JqZWN0KCk7CiAKICAgICAvLyBzZXRPYmplY3Qgc2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2Ug
cmlnaHQgYWZ0ZXIgY3JlYXRpbmcgYSBXZWJHTE9iamVjdC4KICAgICB2b2lkIHNldE9iamVjdChQ
bGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIC8vIGRlbGV0ZU9iamVjdEltcGwgc2hvdWxkIGJlIG9u
bHkgY2FsbGVkIG9uY2UgdG8gZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2UuCi0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9i
amVjdCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworCisgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgPSAwOwogCiBwcml2YXRl
OgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3Q7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBtX2NvbnRleHQ7CiAgICAgdW5zaWduZWQgbV9hdHRhY2htZW50Q291bnQ7CiAgICAgYm9v
bCBtX2RlbGV0ZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAKaW5kZXggZDNlZmRhNDdkZWU0NjM2NTU0ZGJjMDc3ODlkNDMyZDM5OGFjYzIwZi4uZjY4
NTQzY2U0ZDk5MGRiNThlMTU3ZTAzNGVjMjcwNWQ0MjU1NjdjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM5LDMyICs0MCwzNiBAQCBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xQcm9ncmFt
OjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiB9CiAKIFdlYkdMUHJvZ3JhbTo6
V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQotICAgIDogV2ViR0xPYmpl
Y3QoY3R4KQorICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV9saW5rU3RhdHVz
KGZhbHNlKQogICAgICwgbV9saW5rQ291bnQoMCkKIHsKLSAgICBzZXRPYmplY3QoY29udGV4dCgp
LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOworICAgIHNldE9iamVjdChj
dHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVByb2dyYW0oKSk7CiB9CiAKLXZvaWQgV2Vi
R0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQorV2ViR0xQ
cm9ncmFtOjp+V2ViR0xQcm9ncmFtKCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4
dDNEKCktPmRlbGV0ZVByb2dyYW0ob2JqKTsKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3Zv
aWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAgIGNvbnRleHQzZC0+ZGVsZXRlUHJv
Z3JhbShvYmopOwogICAgIGlmIChtX3ZlcnRleFNoYWRlcikgewotICAgICAgICBtX3ZlcnRleFNo
YWRlci0+b25EZXRhY2hlZCgpOworICAgICAgICBtX3ZlcnRleFNoYWRlci0+b25EZXRhY2hlZChj
b250ZXh0M2QpOwogICAgICAgICBtX3ZlcnRleFNoYWRlciA9IDA7CiAgICAgfQogICAgIGlmICht
X2ZyYWdtZW50U2hhZGVyKSB7Ci0gICAgICAgIG1fZnJhZ21lbnRTaGFkZXItPm9uRGV0YWNoZWQo
KTsKKyAgICAgICAgbV9mcmFnbWVudFNoYWRlci0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAg
ICAgICBtX2ZyYWdtZW50U2hhZGVyID0gMDsKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xQcm9ncmFt
OjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpCitib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVB
Y3RpdmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKIHsKICAg
ICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5jbGVhcigpOwogICAgIGlmICghb2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0g
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOwogCiAgICAgLy8gQXNzdW1lIGxpbmsgc3Rh
dHVzIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVkLgogICAgIGlmICghbV9saW5rU3RhdHVzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAppbmRleCAwZGQzYmEwZmFhZmI5
ZDcwNmFjOTM2MWQxOWE1ZjA4OTMxNjk2MjM2Li4xNTA1MDExMDA1ZDRmODljZmRkNjUzYmRjYjg1
NTc1NDQ5MTE5MGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
aApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTFByb2dyYW1faAogI2RlZmluZSBXZWJH
TFByb2dyYW1faAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFNo
YXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIApAQCAtMzYsMTUgKzM2
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xQcm9ncmFtIDogcHVi
bGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMUHJvZ3JhbSA6IHB1YmxpYyBXZWJHTFNoYXJl
ZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xQcm9ncmFtKCkgeyBkZWxldGVP
YmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMUHJvZ3JhbSgpOwogCiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAK
ICAgICAvLyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25seSBjYWxsZWQgb25jZSBh
ZnRlciBsaW5rUHJvZ3JhbSgpCiAgICAgLy8gc3VjY2VlZHMuCi0gICAgYm9vbCBjYWNoZUFjdGl2
ZUF0dHJpYkxvY2F0aW9ucygpOworICAgIGJvb2wgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMo
R3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB1bnNpZ25lZCBudW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMoKSBjb25zdDsKICAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50
IGluZGV4KSBjb25zdDsKIApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KTsK
IAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuY3BwCmluZGV4IDkzYjkxNjVjOTk0NzQ5ZjYzZGM1MDNhMzYyMDhjNTFmYmVkYjY0NzAuLmRh
YWY5ZDRlZTU5YjNjYTY2YjFjZGNjODdhYjAwYTE5N2YwMTdiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCiAKKyNpbmNsdWRlICJXZWJHTENv
bnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw4ICszOSwxMyBAQCBQYXNzUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
YwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xSZW5kZXJidWZmZXIoY3R4KSk7CiB9CiAK
K1dlYkdMUmVuZGVyYnVmZmVyOjp+V2ViR0xSZW5kZXJidWZmZXIoKQoreworICAgIGRlbGV0ZU9i
amVjdCgwKTsKK30KKwogV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY3R4KQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2Vi
R0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV9pbnRlcm5hbEZvcm1hdChHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTQpCiAgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV93aWR0aCgw
KQpAQCAtNDcsMTIgKzUzLDEyIEBAIFdlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICAsIG1faXNWYWxpZCh0cnVlKQogICAg
ICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTsKKyAgICBzZXRPYmpl
Y3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CiB9CiAK
LXZvaWQgV2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCit2b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewotICAg
IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVj
dCk7CisgICAgY29udGV4dDNkLT5kZWxldGVSZW5kZXJidWZmZXIob2JqZWN0KTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKaW5kZXgg
NGI0N2JmNWQzMmU4NDY4ZDBmOTJlYTkxZTVhOGQ2NDMzY2NmY2YxOS4uZTE2OWUyZThiYmZlNWYx
NjdlY2Y1MjgwM2JlMmVmN2Q5YmY3Yzg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCkBAIC0yNiwxNiArMjYsMTYgQEAKICNpZm5kZWYgV2Vi
R0xSZW5kZXJidWZmZXJfaAogI2RlZmluZSBXZWJHTFJlbmRlcmJ1ZmZlcl9oCiAKLSNpbmNsdWRl
ICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgOiBwdWJsaWMgV2Vi
R0xPYmplY3QgeworY2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgOiBwdWJsaWMgV2ViR0xTaGFyZWRP
YmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyYnVmZmVyKCkgeyBkZWxl
dGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyYnVmZmVyKCk7CiAKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOwogCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBX
ZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggZDE3NzQxZmIzMGFlMzliNDk2MjdmMDNiNWU1ZmQ5
YzQyMmNiOWUzZC4uYzU5NGQ3ZWNiZjYyZGI2MTU4ODcwMGY3OTJkN2Q3YjQxMzQ2Mjg4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZXMuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1
ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKICNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVy
cy5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKQEAgLTQxNiw2ICs0MTcsOCBAQCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxl
bWVudCogcGFzc2VkQ2FudmFzLCBQYQogICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiB7
CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAgPSBXZWJHTENvbnRl
eHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENvbnRleHQodGhpcyk7
CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBDcmVhdGUgdGhlIERyYXdpbmdCdWZm
ZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVyLgpAQCAtNDgwLDcgKzQ4Myw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCiAgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJ
TVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKIAogICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0
ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKLSAgICBhZGRPYmplY3QobV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3QuZ2V0KCkpOworICAgIGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3QuZ2V0KCkpOwogICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1f
ZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwogICAgIAogICAgIG1fdmVydGV4QXR0cmliVmFsdWUu
cmVzaXplKG1fbWF4VmVydGV4QXR0cmlicyk7CkBAIC01MjUsOCArNTI4LDI3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKIAog
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKIHsKKyAgICAv
LyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRo
ZSBsYXN0IHJlZmVyZW5jZQorICAgIC8vIHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxh
c3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20gdGhlIGNvbnRleHQgZ3JvdXAuCisgICAgbV9ib3Vu
ZEFycmF5QnVmZmVyID0gMDsKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IDA7Cisg
ICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXIgPSAwOworICAgIG1fY3VycmVudFByb2dyYW0gPSAwOworICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgeworICAgICAgbV90ZXh0
dXJlVW5pdHNbaV0ubV90ZXh0dXJlMkRCaW5kaW5nID0gMDsKKyAgICAgIG1fdGV4dHVyZVVuaXRz
W2ldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gMDsKKyAgICB9CisKKyAgICBtX2JsYWNrVGV4
dHVyZTJEID0gMDsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSAwOworCiAgICAgZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpOwogICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxs
YmFjayhudWxscHRyKTsKKyAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlQ29udGV4dCh0aGlzKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCkBA
IC03OTgsNyArODIwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0
VG9CZUJvdW5kKFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGUKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG9iamVjdCkgewotICAg
ICAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBpZiAoIW9iamVj
dC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTExMDUsNyArMTEy
Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFz
aykKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVz
b3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTExOTAsNyArMTIxMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNl
U2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgp
KSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xMjM2LDcgKzEyNTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VT
YWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkp
KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTEyODQsNyArMTMwNiw3IEBAIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBXZWJHTEJ1ZmZl
cjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRP
YmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEyOTMsNyArMTMxNSw3IEBA
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVGcmFtZWJ1ZmZlcigpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIGFkZENvbnRleHRPYmpl
Y3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMDIsNyArMTMyNCw3IEBAIFBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1
cmUoKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJl
ZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNyZWF0ZSh0aGlzKTsKLSAgICBh
ZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJl
dHVybiBvOwogfQogCkBAIC0xMzExLDcgKzEzMzMsNyBAQCBQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBv
ID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTMy
MCw3ICsxMzQyLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdl
YkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTMz
NSw3ICsxMzU3LDcgQEAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXAKICAgICB9CiAKICAgICBSZWZQ
dHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMsIHR5cGUpOwotICAg
IGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CiAgICAg
cmV0dXJuIG87CiB9CiAKQEAgLTEzNTEsMTIgKzEzNzMsMTQgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChvYmplY3QtPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRl
KGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCi0gICAgICAgIG9i
amVjdC0+ZGVsZXRlT2JqZWN0KCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250
ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50CisgICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRl
eHQgdW5ib3VuZC4KKyAgICAgICAgb2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0
M0QoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0MTIsNyArMTQzNiw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZm
ZXIqIHJlbmRlcmJ1ZmZlcikKICAgICBpZiAocmVuZGVyYnVmZmVyID09IG1fcmVuZGVyYnVmZmVy
QmluZGluZykKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVyKTsKKyAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihn
cmFwaGljc0NvbnRleHQzRCgpLCByZW5kZXJidWZmZXIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCkBAIC0xNDMxLDcg
KzE0NTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShXZWJH
TFRleHR1cmUqIHRleHR1cmUpCiAgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS5tX3RleHR1
cmVDdWJlTWFwQmluZGluZyA9IDA7CiAgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91
bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJl
bW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihncmFwaGljc0NvbnRleHQzRCgpLCB0
ZXh0dXJlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNE
ZW51bSBmdW5jKQpAQCAtMTQ3Myw3ICsxNDk3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGEK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9u
RGV0YWNoZWQoKTsKKyAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTY4NSw3ICsx
NzA5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3Qo
V2ViR0xPYmplY3QqIG9iamVjdCkKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgaWYgKG9iamVjdC0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICBpZiAo
IW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE3MjYsNyArMTc1MCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNS
ZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTgwMCw3ICsxODI0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnUK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODc3LDcgKzE5
MDEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdAogICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhp
cykgeworICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCks
IHRoaXMpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE5MTUsNyArMTkzOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFj
aG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwogICAgIH0K
LSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZm
ZXIoYXR0YWNobWVudCwgYnVmZmVyKTsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0
YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoZ3JhcGhpY3NDb250ZXh0M0QoKSwgYXR0YWNobWVu
dCwgYnVmZmVyKTsKICAgICBpZiAocmVhdHRhY2hEZXB0aCkgewogICAgICAgICBQbGF0Zm9ybTNE
T2JqZWN0IG9iamVjdCA9IG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0QXR0
YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCkpOwogICAgICAgICBp
ZiAob2JqZWN0KQpAQCAtMTk0OCw3ICsxOTcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWMK
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRleHR1cmUg
JiYgdGV4dHVyZS0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICBpZiAodGV4dHVyZSAmJiAhdGV4
dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjAsNyArMTk4NCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgb2JqZWN0
T3JaZXJvKHRleHR1cmUpLCBsZXZlbCk7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0
dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZSwgbGV2ZWwpOworICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91
bmRGcmFtZWJ1ZmZlcihncmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2htZW50LCB0ZXh0YXJnZXQs
IHRleHR1cmUsIGxldmVsKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCkBAIC0yMTY0LDcgKzIxODgsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdAogICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCi0gICAgV2ViR0xPYmplY3QqIG9iamVj
dCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpOworICAg
IFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0QXR0
YWNobWVudChhdHRhY2htZW50KTsKICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBpZiAocG5h
bWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZ
UEUpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpO
T05FKTsKQEAgLTI5NDAsNyArMjk2NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojps
aW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAg
bV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElOS19TVEFUVVMsICZ2YWx1ZSk7CiAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1
cyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwogICAgIC8vIE5lZWQgdG8gY2FjaGUgbGluayBz
dGF0dXMgYmVmb3JlIGNhY2hpbmcgYWN0aXZlIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCi0gICAgcHJv
Z3JhbS0+Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBwcm9ncmFtLT5jYWNoZUFj
dGl2ZUF0dHJpYkxvY2F0aW9ucyhncmFwaGljc0NvbnRleHQzRCgpKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMDMxLDcgKzMwNTUsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQwogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0
M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5NDAsNyArMzk2NCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiAgICAgfQogICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICE9IHByb2dy
YW0pIHsKICAgICAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAgICAgICBtX2N1cnJl
bnRQcm9ncmFtLT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5v
bkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgICAgICBtX2N1cnJlbnRQcm9ncmFt
ID0gcHJvZ3JhbTsKICAgICAgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhw
cm9ncmFtKSk7CiAgICAgICAgIGlmIChwcm9ncmFtKQpAQCAtNDA5MCw2ICs0MTE0LDE0IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6TG9zdENvbnRleHRNCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX2Nv
bnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RD
b250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwogICAgIG1fY29udGV4dExvc3RNb2Rl
ID0gbW9kZTsKIApAQCAtNDE0MywyMiArNDE3NSwzNCBAQCBQbGF0Zm9ybUxheWVyKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogfQogI2VuZGlmCiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFy
ZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9i
amVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRTaGFyZWRPYmplY3Qo
V2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3Qo
KSk7CisgICAgcmVtb3ZlU2hhcmVkT2JqZWN0KG9iamVjdCk7CisgICAgbV9jb250ZXh0R3JvdXAt
PmFkZE9iamVjdChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVt
b3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKIHsKLSAgICBtX2Nh
bnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CisgICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUo
b2JqZWN0KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZE9iamVjdChXZWJH
TE9iamVjdCogb2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRP
YmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFpc0NvbnRl
eHRMb3N0KCkpOwotICAgIHJlbW92ZU9iamVjdChvYmplY3QpOwotICAgIG1fY2FudmFzT2JqZWN0
cy5hZGQob2JqZWN0KTsKKyAgICByZW1vdmVDb250ZXh0T2JqZWN0KG9iamVjdCk7CisgICAgbV9j
b250ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQogewotICAgIHdoaWxlIChtX2NhbnZhc09i
amVjdHMuc2l6ZSgpID4gMCkgewotICAgICAgICBIYXNoU2V0PFdlYkdMT2JqZWN0Kj46Oml0ZXJh
dG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7CisgICAgd2hpbGUgKG1fY29udGV4dE9i
amVjdHMuc2l6ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+
OjppdGVyYXRvciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKICAgICAgICAgKCppdCkt
PmRldGFjaENvbnRleHQoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDhmMWVmZDliMDQ0YmZjMDBlYWQ0
YWE0NDA5ZjRhMDgzYmI0ZjhmMTUuLjVmNjNjZjFhZTZjZmRhODA1OGFiZGI2YjYxNzFkMGZkMGNi
ZGE2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCkBAIC01MCw2ICs1MCw4IEBAIGNsYXNzIE9FU1RleHR1cmVGbG9hdDsKIGNs
YXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OwogY2xhc3MgV2ViR0xBY3RpdmVJbmZvOwogY2xhc3Mg
V2ViR0xCdWZmZXI7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKK2NsYXNzIFdlYkdMQ29udGV4
dE9iamVjdDsKIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOwogY2xhc3MgV2ViR0xDb250
ZXh0QXR0cmlidXRlczsKIGNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87CkBAIC02MSw2ICs2
Myw3IEBAIGNsYXNzIFdlYkdMT2JqZWN0OwogY2xhc3MgV2ViR0xQcm9ncmFtOwogY2xhc3MgV2Vi
R0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hhcmVkT2Jq
ZWN0OwogY2xhc3MgV2ViR0xUZXh0dXJlOwogY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb247CiBj
bGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwpAQCAtMjkyLDggKzI5NSwxMCBAQCBwdWJs
aWM6CiAgICAgfTsKICAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsK
ICAgICB2b2lkIGZvcmNlUmVzdG9yZUNvbnRleHQoKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0SW1w
bChMb3N0Q29udGV4dE1vZGUpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgV2ViR0xDb250
ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdl
dCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC0zMDQsNyArMzA5
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKLSAgICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTE9iamVj
dCopOworICAgIHZvaWQgcmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Cisg
ICAgdm9pZCByZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwogICAgIAog
ICAgIHVuc2lnbmVkIGdldE1heFZlcnRleEF0dHJpYnMoKSBjb25zdCB7IHJldHVybiBtX21heFZl
cnRleEF0dHJpYnM7IH0KIApAQCAtMzE5LDcgKzMyNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGlu
aXRpYWxpemVOZXdDb250ZXh0KCk7CiAgICAgdm9pZCBzZXR1cEZsYWdzKCk7CiAKLSAgICB2b2lk
IGFkZE9iamVjdChXZWJHTE9iamVjdCopOworICAgIHZvaWQgYWRkU2hhcmVkT2JqZWN0KFdlYkdM
U2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9i
amVjdCopOwogICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwogCiAgICAgdm9p
ZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKQEAgLTM2Miw2ICszNjksNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFJlZlB0
cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250ZXh0R3JvdXA7CiAKICAgICAvLyBPcHRpb25hbCBz
dHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGly
ZWN0bHkKICAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgpAQCAtMzc4LDcg
KzM4Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKICAgICBib29sIG1f
bWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxXZWJHTE9iamVjdCo+IG1fY2FudmFzT2Jq
ZWN0czsKKyAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+IG1fY29udGV4dE9iamVjdHM7
CiAKICAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJv
dXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9B
UlJBWV9CVUZGRVIKICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1ZmZlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAppbmRleCA1OTY5NWU0
YzkzYmY1NGM5ODIwYTVhNzdlZWQ5ODM2MmYxOTQyMGI2Li4zNTA2OGViY2RjYTJlZTY2NTdhYTZi
YjExYWFkODI0OGUyNTllMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNoYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgog
CisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMTYgKzQwLDIxIEBAIFBh
c3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjdHgsIEdDM0RlbnVtCiB9CiAKIFdlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0gdHlwZSkKLSAgICA6IFdlYkdMT2JqZWN0
KGN0eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdHlwZSh0eXBlKQog
ICAgICwgbV9zb3VyY2UoIiIpCiB7Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsKKyAgICBzZXRPYmplY3QoY3R4LT5ncmFw
aGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIodHlwZSkpOwogfQogCi12b2lkIFdlYkdMU2hh
ZGVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQorV2ViR0xTaGFk
ZXI6On5XZWJHTFNoYWRlcigpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5kZWxldGVTaGFkZXIob2JqZWN0KTsKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3ZvaWQg
V2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit7CisgICAgY29udGV4dDNkLT5kZWxldGVTaGFk
ZXIob2JqZWN0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVy
LmgKaW5kZXggMWQ3YTEwYzFjNGI5ZDk5YWYwY2FjN2YyMWVjYzRmOTc4ZjkzNGE0OC4uOTJkMWQx
YzQ4YTE5YzFjOWQwYjYwNjEwZmVmYzI1YmFlNjc4YjQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFNoYWRlci5oCkBAIC0yNiwxNiArMjYsMTYgQEAKICNpZm5kZWYgV2ViR0xT
aGFkZXJfaAogI2RlZmluZSBXZWJHTFNoYWRlcl9oCiAKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5o
IgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgV2ViR0xTaGFkZXIgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2Vi
R0xTaGFkZXIgOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1
YWwgfldlYkdMU2hhZGVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdM
U2hhZGVyKCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCosIEdDM0RlbnVtKTsKIApAQCAtNDcsNyArNDcsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdD
M0RlbnVtKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RP
YmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjgzNzIxOGFhZDg5Y2M5NzNmY2Mz
MjczOGFhMWQzYjVhZDc3M2IxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIldl
YkdMU2hhcmVkT2JqZWN0LmgiCisKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgorI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHRHcm91cChjb250ZXh0LT5jb250ZXh0R3JvdXAo
KSkKK3sKK30KKworV2ViR0xTaGFyZWRPYmplY3Q6On5XZWJHTFNoYXJlZE9iamVjdCgpCit7Cisg
ICAgaWYgKG1fY29udGV4dEdyb3VwKQorICAgICAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2Jq
ZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMU2hhcmVkT2JqZWN0OjpkZXRhY2hDb250ZXh0R3Jv
dXAoKQoreworICAgIGRldGFjaCgpOworICAgIGlmIChtX2NvbnRleHRHcm91cCkgeworICAgICAg
ICBkZWxldGVPYmplY3QoMCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qo
dGhpcyk7CisgICAgICAgIG1fY29udGV4dEdyb3VwID0gMDsKKyAgICB9Cit9CisKK0dyYXBoaWNz
Q29udGV4dDNEKiBXZWJHTFNoYXJlZE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0R3JvdXAgPyBtX2NvbnRleHRHcm91cC0+Z2V0QUdy
YXBoaWNzQ29udGV4dDNEKCkgOiAwOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hODg5YTZhNTYxNzVjODY2NjJlYTY5YjYzNzljODZhMDM3MDY3NTc4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3Qu
aApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdMU2hhcmVkT2JqZWN0X2gK
KyNkZWZpbmUgV2ViR0xTaGFyZWRPYmplY3RfaAorCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNz
IFdlYkdMQ29udGV4dEdyb3VwOworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworCitjbGFz
cyBXZWJHTFNoYXJlZE9iamVjdCA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+V2ViR0xTaGFyZWRPYmplY3QoKTsKKworICAgIFdlYkdMQ29udGV4dEdyb3VwKiBj
b250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cDsgfQorCisgICAgdmly
dHVhbCBib29sIGlzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29s
IHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0R3JvdXAsIGNvbnN0IFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29udGV4
dEdyb3VwID09IG1fY29udGV4dEdyb3VwOworICAgIH0KKworICAgIHZvaWQgZGV0YWNoQ29udGV4
dEdyb3VwKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZXh0R3JvdXA7CisgICAgfQorCisgICAg
dmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgV2ViR0xDb250ZXh0R3JvdXAqIG1fY29udGV4dEdyb3VwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViR0xPYmplY3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKaW5kZXggZThlOGJmODI0
NWQwMzQwMDcyM2U3Mjc2NmYyMDM5NzJlNDNiMTgyZi4uOWFkNThiNGJjMTY0NzBlYTA0ZjY0ODk4
MGI3Njk1MTI2YTNiZDJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRl
eHR1cmUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIK
IAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1
ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCkBAIC00MCw3ICs0
MSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKIH0KIAogV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAg
OiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQogICAgICwgbV9taW5G
aWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUikKICAgICAsIG1f
bWFnRmlsdGVyKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpCkBAIC01MCw3ICs1MSwxMiBAQCBX
ZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAg
ICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAgICAsIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlKGZh
bHNlKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNy
ZWF0ZVRleHR1cmUoKSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
Y3JlYXRlVGV4dHVyZSgpKTsKK30KKworV2ViR0xUZXh0dXJlOjp+V2ViR0xUZXh0dXJlKCkKK3sK
KyAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKIHZvaWQgV2ViR0xUZXh0dXJlOjpzZXRUYXJnZXQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKQpAQCAtMjI1LDkgKzIzMSw5IEBAIGJv
b2wgV2ViR0xUZXh0dXJlOjpuZWVkVG9Vc2VCbGFja1RleHR1cmUoKSBjb25zdAogICAgIHJldHVy
biBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZTsKIH0KIAotdm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0
ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMVGV4dHVyZTo6
ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNE
T2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRl
bGV0ZVRleHR1cmUob2JqZWN0KTsKKyAgICBjb250ZXh0M2QtPmRlbGV0ZVRleHR1cmUob2JqZWN0
KTsKIH0KIAogaW50IFdlYkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleChHQzNEZW51bSB0YXJn
ZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRl
eHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCmluZGV4
IDZiZDEyNzIzY2M3NGFmZDIyN2ExY2JmYzNhNmZmYzE0ZTU5N2Q5ZDguLmQxZGI5NTFmZmMyMGQx
OTc4NzE5OTUwMzUwNTIxMzE4ZDFmNjBjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVGV4dHVyZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkdMVGV4dHVyZV9o
CiAjZGVmaW5lIFdlYkdMVGV4dHVyZV9oCiAKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2lu
Y2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xUZXh0dXJlIDogcHVibGljIFdlYkdMT2JqZWN0
IHsKK2NsYXNzIFdlYkdMVGV4dHVyZSA6IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+V2ViR0xUZXh0dXJlKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAg
IHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xU
ZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RP
YmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgTGV2ZWxJbmZv
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUy5jcHAKaW5kZXggZDE0Yzk2YzAxZjYxNDdlZjRlODBhOWI4MWVmOWJiY2Iw
NjE5Mzc1MC4uNGFhMDNiOGZlYTE1MTliOTcyMjM3MDRjYWZiZmE3NjM4MTMyYWYyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUy5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTPiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVhdGUoV2ViR0xSZW4KIH0K
IAogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgVmFvVHlwZSB0eXBlKQotICAgIDogV2ViR0xPYmpl
Y3QoY3R4KQorICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAsIG1fdHlwZSh0eXBl
KQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogICAgICwgbV9ib3VuZEVsZW1lbnRB
cnJheUJ1ZmZlcigwKQpAQCAtNTcsOSArNTcsMTQgQEAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwK
ICAgICB9CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0
SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
On5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkKIHsKLSAgICBFeHRlbnNpb25zM0QqIGV4dGVu
c2lvbnMgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsK
KyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9y
bTNET2JqZWN0IG9iamVjdCkKK3sKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250
ZXh0M2QtPmdldEV4dGVuc2lvbnMoKTsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
VmFvVHlwZURlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCmluZGV4IGY0OWE3ODA2
OTMwODM0OWIxNjUwZWI0YmVkZDgyNDc2ODJiODIwMTIuLjc1YWU0MmZmNzI1YWNkMWRmZWRiY2U2
YTBiYzkyZDNjNDAyOGY0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKQEAgLTI3LDIxICsyNywyMSBAQAogI2Rl
ZmluZSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTX2gKIAogI2luY2x1ZGUgIldlYkdMQnVmZmVy
LmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRPYmpl
Y3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMgOiBwdWJsaWMgV2ViR0xDb250ZXh0T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVt
IFZhb1R5cGUgewogICAgICAgICBWYW9UeXBlRGVmYXVsdCwKICAgICAgICAgVmFvVHlwZVVzZXIs
CiAgICAgfTsKICAgICAKLSAgICB2aXJ0dWFsIH5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkg
eyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+
IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKICAgICAKQEAgLTgzLDcg
KzgzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5cGUpOwogCi0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1ZlcnRleEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDE4ZjQ1MDEzMDIyNDBl
NTVlZTgyMjAyNTMyN2NiMGM1YzY0NzY4Y2IuLmQ1ODI4OGE4NThmOWU3ZDdiODAzOWQxMzQyMzgw
NTg0MmIxOWE0MTAgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTMgQEAKKzIwMTItMDEtMDkgIEdyZWdnIFRhdmFyZXMgIDxnbWFuQGdvb2dsZS5jb20+
CisKKyAgICAgICAgQWRkIFdlYkdMQ29udGV4dEdyb3VwIGFzIHN0ZXAgdG93YXJkIHNoYXJpbmcg
V2ViR0wgcmVzb3VyY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NTkwNgorCisgICAgICAgIFRoZSBXZWJHTCBXb3JraW5nIEdyb3VwIHdpbGwgc29v
biBhZGQgdGhlIGFiaWxpdHkgdG8gc2hhcmUKKyAgICAgICAgV2ViR0wgcmVzb3VyY2VzIGFtb25n
IFdlYkdMIGNvbnRleHRzLiBUaGlzIGlzIHRoZSBuZWNlc3NhcnkKKyAgICAgICAgcHJlcCB3b3Jr
LiBOTyBBUEkgY2hhbmdlcy4KKworICAgICAgICBBZGRlZCBXZWJHTFNoYXJlZE9iamVjdCBmb3Ig
b2JqZWN0cyB0aGF0IGFyZSBzaGFyZWQgdnMKKyAgICAgICAgV2ViR0xDb250ZXh0T2JqZWN0IGZv
ciBvYmplY3RzIHRoYXQgYXJlIG5vdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6Cisg
ICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlVmVydGV4QXJyYXlP
RVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VTVmVydGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJy
YXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VTVmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0
ZXhBcnJheU9FUyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMQnVmZmVyOjp+V2ViR0xCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xC
dWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OldlYkdMQ29udGV4dEdyb3VwKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjp+V2ViR0xDb250ZXh0R3JvdXApOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6YWRkQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjphZGRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmguCisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0T2JqZWN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0
OjpXZWJHTENvbnRleHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2Jq
ZWN0Ojp+V2ViR0xDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4
dE9iamVjdDo6ZGV0YWNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRP
YmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0T2JqZWN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmguCisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6OmNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojp2YWxpZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6Omhhc0dyb3VwT3JDb250ZXh0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6fldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6
Y2hlY2tTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVy
YnVmZmVycyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6
fldlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpkZWxldGVPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTE9iamVjdDo6b25EZXRhY2hlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xQcm9ncmFtOjp+V2ViR0xQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6fldlYkdMUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRl
T2JqZWN0SW1wbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJH
TFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpjbGVhcklmQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJh
eVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIw
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dElt
cGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb250ZXh0R3JvdXApOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6
fldlYkdMU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpkZWxldGVPYmpl
Y3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xTaGFyZWRPYmplY3Q6OldlYkdMU2hhcmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMU2hhcmVkT2JqZWN0Ojp+V2ViR0xTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmRldGFjaENvbnRleHRHcm91cCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xTaGFyZWRPYmplY3Q6OmNvbnRleHRHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNo
YXJlZE9iamVjdDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmpl
Y3Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6
OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzU2hhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojppc1RleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OnZhbGlkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpoYXNHcm91cE9yQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4
dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6fldl
YkdMVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVj
dEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjp+V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisKIDIwMTItMDEtMDkgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFtBQ10gU2ltcGxpZnkgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgYnVpbGQgb3B0aW9ucwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121956</attachid>
            <date>2012-01-10 18:20:45 -0800</date>
            <delta_ts>2012-01-12 13:30:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75906-20120110182044.patch</filename>
            <type>text/plain</type>
            <size>93071</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDcxN2E3
ZDg2OTAxZDBiMmJlMmExZWNkYmJiMzc4Y2NlMTlhMGJmMjUuLjU1N2M3YzcyMzEyMTk3MzhjM2Vm
NmY1OGJiNjQ3ZTJhNTg2ZDY1NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTcxLDYgKzIx
NzEsOCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAorICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdS
ZW5kZXJlckluZm8uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNw
cAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcApAQCAtMjE4MSw2ICsy
MTgzLDcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCisgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAogICAg
ICAgICBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMmIxMDAxMWNlYWFhMThjYTU1ODgyMjdkYTk1OTZlOThj
ZjJiYmE1NS4uZmM3NzYyNzQzZTI5YTBmMDY5MTgzYWM0ZmUwNGZlNTc4MWYxZWQ3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NDQsNiArNTQ0LDggQEAgd2ViY29yZV9idWls
dF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb250ZXh0RXZlbnQu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb250ZXh0RXZlbnQuaCBcCisJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29udGV4dEdyb3VwLmNwcCBcCisJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29udGV4dEdyb3VwLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1dlYkdMRnJhbWVidWZmZXIuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdM
TG9zZUNvbnRleHQuY3BwIFwKQEAgLTU1NjIsNiArNTU2NCw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmggXAorCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAgXApAQCAtNTU4Miw2ICs1NTg2LDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNWRiODUxYWQ0NTkwNTg0
YzAyNmNjNWY2NzFjOWI2NTAwOGY1MGQxOC4uNWY1ZjRjNDg4NzdjYWI0Njk0YmE2NmZjZjlhOGIw
ZWMwZTFkOWYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zNjY3LDYgKzM2NjcsOCBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaCBcCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmggXAorICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdS
ZW5kZXJlckluZm8uaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmgg
XAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oIFwKQEAgLTM2NzcsNiArMzY3
OSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggXAor
ICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIFwKICAgICAgICAgaHRtbC9j
YW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0LmggXAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIFwKQEAgLTM3MDQsNiArMzcwNyw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJH
TD0xKSB7CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmNwcCBc
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIFwKICAgICAg
ICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwIFwKKyAgICAgICAgaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwIFwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0T2JqZWN0LmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlcklu
Zm8uY3BwIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIFwKICAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwIFwKQEAgLTM3MTQsNiArMzcxOSw3
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAg
XAorICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAgXAogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBcCiAgICAgICAgIGh0bWwvY2Fu
dmFzL09FU1RleHR1cmVGbG9hdC5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhB
cnJheU9iamVjdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGRlYTgyMjRiZmIyYzg3ZTk5YjUz
ZDU5MDUzZDE5Yjk0NjUyNzY1MzAuLmFmYmM2NGI1NTBmMDJkNmE0YTQwMTYyZjgxZTU4M2M2N2Ix
YThmMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU4MDksNiArNTgwOSwxMCBAQAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwJywKICAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRFdmVudC5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJH
TENvbnRleHRHcm91cC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oJywKICAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oJywKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAnLApAQCAtNTgzMSw2ICs1ODM1
LDggQEAKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCcs
CiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9X
ZWJHTFNoYXJlZE9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hh
cmVkT2JqZWN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAn
LAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRiOTlmMTE0OWY1
OTIwNDA2MDdjMzU5ZTI3ZjE3ZGYwNDRkYWQwNTUuLjBkMDY0OWUzYzIwMGFkMmRjMDRlNTZmNzlh
YTdlMDMzMjEwNzZmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTY2LDYgKzY2LDEyIEBACiAJCTAwQ0E5M0I1MTNDNjY5N0Mw
MEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3
WE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQkwMEQwNDY0QTEzQzREMTQ1MDAzMjZGQ0Mg
LyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwRDA0NjQ4MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwICovOyB9OwogCQkwMEQwNDY0QjEzQzREMTQ1MDAz
MjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEQwNDY0OTEzQzREMTQ1MDAzMjZGQ0MgLyog
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggKi87IH07CisJCTAxRDNDRjgyMTRCRDBBMzAw
MEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMUQzQ0Y3QzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xD
b250ZXh0R3JvdXAuY3BwICovOyB9OworCQkwMUQzQ0Y4MzE0QkQwQTMwMDBGRTk5NzAgLyogV2Vi
R0xDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDAxRDNDRjdEMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5oICov
OyB9OworCQkwMUQzQ0Y4NDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAxRDNDRjdF
MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRPYmplY3QuY3BwICovOyB9OworCQkwMUQz
Q0Y4NTE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMUQzQ0Y3RjE0QkQwQTMwMDBGRTk5
NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmggKi87IH07CisJCTAxRDNDRjg2MTRCRDBBMzAwMEZF
OTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMUQzQ0Y4MDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFy
ZWRPYmplY3QuY3BwICovOyB9OworCQkwMUQzQ0Y4NzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xT
aGFyZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDAxRDNDRjgxMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5oICovOyB9
OwogCQkwMzNBNkE3QzE0N0UwN0QyMDA1MDlCMzYgLyogSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMzNBNkE3
QjE0N0UwN0QyMDA1MDlCMzYgLyogSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmggKi87IH07CiAJ
CTAzM0E2QTdFMTQ3RTA3RTcwMDUwOUIzNiAvKiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDMzQTZBN0Qx
NDdFMDdFNzAwNTA5QjM2IC8qIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAgKi87IH07CiAJ
CTAzM0E2QTgxMTQ3RTA4ODYwMDUwOUIzNiAvKiBKU0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMzNBNkE4
MDE0N0UwODg2MDA1MDlCMzYgLyogSlNIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwICovOyB9
OwpAQCAtNzE2NCw2ICs3MTcwLDEyIEBACiAJCTAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBO
ZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTAwRDA0NjQ4MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDBEMDQ2
NDkxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDFEM0NGN0MxNEJEMEEzMDAwRkU5OTcw
IC8qIFdlYkdMQ29udGV4dEdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMQ29udGV4dEdyb3VwLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAxRDNDRjdEMTRCRDBBMzAw
MEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJHTENvbnRleHRHcm91cC5oOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAxRDNDRjdFMTRCRDBBMzAwMEZF
OTk3MCAvKiBXZWJHTENvbnRleHRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViR0xDb250ZXh0T2JqZWN0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMUQzQ0Y3RjE0
QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYkdMQ29udGV4dE9iamVjdC5oOyBwYXRoID0gY2FudmFzL1dlYkdM
Q29udGV4dE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMUQzQ0Y4MDE0
QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xTaGFyZWRPYmplY3QuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDFE
M0NGODExNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMU2hhcmVkT2JqZWN0Lmg7IHBhdGggPSBjYW52YXMv
V2ViR0xTaGFyZWRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDMzQTZB
N0IxNDdFMDdEMjAwNTA5QjM2IC8qIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDMzQTZBN0QxNDdFMDdFNzAwNTA5QjM2IC8qIEhU
TUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMzNBNkE3RjE0N0UwN0Y5MDA1MDlCMzYgLyogSFRNTFByb3BlcnRpZXNDb2xs
ZWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MUHJvcGVydGllc0NvbGxlY3Rp
b24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUwNDQsNiArMTUwNTYsMTAg
QEAKIAkJCQk5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3Bw
ICovLAogCQkJCTkzRjZGMUVCMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5o
ICovLAogCQkJCTkzRjZGMUVDMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5p
ZGwgKi8sCisJCQkJMDFEM0NGN0MxNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMQ29udGV4dEdyb3Vw
LmNwcCAqLywKKwkJCQkwMUQzQ0Y3RDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0R3Jv
dXAuaCAqLywKKwkJCQkwMUQzQ0Y3RTE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2Jq
ZWN0LmNwcCAqLywKKwkJCQkwMUQzQ0Y3RjE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0
T2JqZWN0LmggKi8sCiAJCQkJQTBFRTBERjExNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdS
ZW5kZXJlckluZm8uY3BwICovLAogCQkJCUEwRUUwREYyMTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJH
TERlYnVnUmVuZGVyZXJJbmZvLmggKi8sCiAJCQkJQTBFRTBERjAxNDRGODI0MzAwRjgwQjBEIC8q
IFdlYkdMRGVidWdSZW5kZXJlckluZm8uaWRsICovLApAQCAtMTUwNzQsNiArMTUwOTAsOCBAQAog
CQkJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi8sCiAJCQkJ
NDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggKi8sCiAJCQkJNDlDN0I5
QzQxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmlkbCAqLywKKwkJCQkwMUQzQ0Y4MDE0
QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuY3BwICovLAorCQkJCTAxRDNDRjgx
MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5oICovLAogCQkJCTQ5QzdCOUM1
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOUM2MTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLywKIAkJCQk0OUM3QjlDNzEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmlkbCAqLywKQEAgLTI0Nzg3LDYgKzI0ODA1LDggQEAK
IAkJCQk2RTNGQUU4RjE0NzMzRkRCMDBFNDIzMDYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTZFNEU5MUFGMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y2RjFFRTEyN0Y3MEIxMDA1
NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTAxRDNDRjgz
MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMDFEM0NGODUxNEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMQ29udGV4dE9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTBFRTBERjYxNDRGODI1NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdSZW5k
ZXJlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUEwRUUwREY4MTQ0RjgyNTUwMEY4MEIwRCAv
KiBXZWJHTERlYnVnU2hhZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCRjBFNTUxMkE4OTI5
ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI0Nzk5LDYg
KzI0ODE5LDcgQEAKIAkJCQk0OUM3QjlEQTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJi
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUzMTA0MkQz
MkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDFEM0NGODcx
NEJEMEEzMDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQzNGMUY1QjEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTc3QTE3QTc4MTJGMjg2NDIwMDRFMDJGNiAvKiBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLywKQEAgLTI0OTEzLDYgKzI0OTM0LDcg
QEAKIAkJCQk5N0QyQUQwNDE0QjgyM0E2MDA5M0RGMzIgLyogRE9NV2luZG93UHJvcGVydHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBQUJBMjVBMTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4RjQ1N0ExMTRCQzFBOTQwMDBDRUE1OSAvKiBET01XaW5k
b3dTUUxEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3NzA1LDYgKzI3NzI3LDggQEAK
IAkJCQk2RTNGQUU4RTE0NzMzRkRCMDBFNDIzMDYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU0RTkxQUUxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGNkYxRUQxMjdGNzBC
MTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTAx
RDNDRjgyMTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTENvbnRleHRHcm91cC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwMUQzQ0Y4NDE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xDb250ZXh0T2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwRUUwREY1MTQ0RjgyNTUwMEY4MEIwRCAvKiBXZWJH
TERlYnVnUmVuZGVyZXJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwRUUwREY3MTQ0Rjgy
NTUwMEY4MEIwRCAvKiBXZWJHTERlYnVnU2hhZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
RUJGMEU1NDEyQTg5Mjk4MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yNzcxNyw2ICsyNzc0MSw3IEBACiAJCQkJNDlDN0I5RDkxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOURGMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTAxRDNDRjg2MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlFNTEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBDM0YxRjVBMTBDODg3MTIwMEQ3MkNF
MSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3N0ExN0E3
NzEyRjI4NjQyMDA0RTAyRjYgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRl
eEFycmF5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFy
cmF5T2JqZWN0LmNwcAppbmRleCBhMjZkNzA2OWY2ZWNkNWE4YjQxOGI5YWNlODIyY2FkMzIyYWE1
YmYzLi5jZWE1MjVjMzk5MDEzZDUyNmU0Y2ViNzNiOTkxNTUzNGUxMDVmMjU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCkBA
IC02MCw3ICs2MCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gT0VT
VmVydGV4QXJyYXlPYmplY3Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTCiAgICAgICAgIHJldHVybiAw
OwogICAgIAogICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBvID0gV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKG1fY29udGV4dCwgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzo6VmFvVHlwZVVzZXIpOwotICAgIG1fY29udGV4dC0+YWRkT2JqZWN0KG8uZ2V0KCkp
OworICAgIG1fY29udGV4dC0+YWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4g
by5yZWxlYXNlKCk7CiB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBPRVNWZXJ0ZXhBcnJheU9i
amVjdDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJy
YXkKICAgICBpZiAoIWFycmF5T2JqZWN0IHx8IG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdCgpOwor
ICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQz
RCgpKTsKIH0KIAogR0MzRGJvb2xlYW4gT0VTVmVydGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJy
YXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYmplY3QpCkBAIC05MCw3ICs5
MCw3IEBAIHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTKiBhcnJheU9iCiAgICAgaWYgKG1fY29udGV4dC0+aXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGFycmF5T2JqZWN0ICYm
IGFycmF5T2JqZWN0LT5jb250ZXh0KCkgIT0gbV9jb250ZXh0KSB7CisgICAgaWYgKGFycmF5T2Jq
ZWN0ICYmICFhcnJheU9iamVjdC0+dmFsaWRhdGUoMCwgY29udGV4dCgpKSkgewogICAgICAgICBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKaW5kZXggOTk3ZGJhNTAw
ZWQ1MDM4M2M2NDNlOGUxZjA5MDY1ZGIwZjZiNjg2MS4uZmM2ZDQwODYwNjc1ZDZmMTZhOTYzNGMy
YzYxNmQ1NmFlY2I1MWYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAKICNp
bmNsdWRlICJDaGVja2VkSW50LmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAKQEAgLTQxLDE4ICs0MiwyMyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBX
ZWJHTEJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJH
TEJ1ZmZlcjo6V2ViR0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBX
ZWJHTE9iamVjdChjdHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3Rh
cmdldCgwKQogICAgICwgbV9ieXRlTGVuZ3RoKDApCiAgICAgLCBtX25leHRBdmFpbGFibGVDYWNo
ZUVudHJ5KDApCiB7Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+Y3JlYXRlQnVmZmVyKCkpOworICAgIHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNE
KCktPmNyZWF0ZUJ1ZmZlcigpKTsKICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKIH0KIAot
dm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVj
dCkKK1dlYkdMQnVmZmVyOjp+V2ViR0xCdWZmZXIoKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KDAp
OworfQorCit2b2lkIFdlYkdMQnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgICAgY29udGV4
dDNkLT5kZWxldGVCdWZmZXIob2JqZWN0KTsKIH0KIAogYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2Np
YXRlQnVmZmVyRGF0YUltcGwoQXJyYXlCdWZmZXIqIGFycmF5LCBHQzNEaW50cHRyIGJ5dGVPZmZz
ZXQsIEdDM0RzaXplaXB0ciBieXRlTGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQnVmZmVyLmgKaW5kZXggMDE1N2VjZTY1ZjBjZTRiN2M0MDdiN2JjYjU5ZDc5Njg3NTE0MGMw
Ny4uODQ5YzM1ODJiZDc5Y2E4YzE1MDUxNDc1MzBmZDkwZTdkY2I1ZTk5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFdlYkdMQnVmZmVyX2gKICNkZWZpbmUgV2ViR0xCdWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xP
YmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3Rm
L0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM1LDkgKzM1LDkg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBX
ZWJHTE9iamVjdCB7CitjbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVj
dCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xCdWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgp
OyB9CisgICAgdmlydHVhbCB+V2ViR0xCdWZmZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMQnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZv
cm0zRE9iamVjdCBvKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZWZiZGQ4
NjE2MDg3Y2U3ZDc0NTc5Mzk0NDBjNzA4MGMxMTgwN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCkBAIC0wLDAgKzEs
MTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wp
CisKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHTFNoYXJlZE9iamVjdC5oIgorCisjaWYgUExBVEZPUk0oUVQpCisjdW5kZWYgZW1pdAor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRH
cm91cD4gV2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSgpCit7CisgICAgUmVmUHRyPFdlYkdMQ29u
dGV4dEdyb3VwPiBjb250ZXh0R3JvdXAgPSBhZG9wdFJlZihuZXcgV2ViR0xDb250ZXh0R3JvdXAo
KSk7CisgICAgcmV0dXJuIGNvbnRleHRHcm91cC5yZWxlYXNlKCk7Cit9CisKK1dlYkdMQ29udGV4
dEdyb3VwOjpXZWJHTENvbnRleHRHcm91cCgpCit7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjp+
V2ViR0xDb250ZXh0R3JvdXAoKQoreworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
K30KKworR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3ND
b250ZXh0M0QoKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0cy5pc0VtcHR5KCkpOworICAgIEhh
c2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5i
ZWdpbigpOworICAgIHJldHVybiAoKml0KS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKK30KKwordm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6YWRkQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQpCit7CisgICAgbV9jb250ZXh0cy5hZGQoY29udGV4dCk7Cit9CisKK3ZvaWQgV2ViR0xD
b250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQoreworICAgIG1fY29udGV4dHMucmVtb3ZlKGNvbnRleHQpOworCisgICAgLy8gSWYgdGhpcyBp
cyB0aGUgbGFzdCBjb250ZXh0IGxldCBnbyBvZiBhbGwgdGhlIHJlc291cmNlcy4KKyAgICBpZiAo
bV9jb250ZXh0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gZ2V0QUNvbnRleHQgbmVlZHMgYSBj
b250ZXh0IHRvIGJlIGFibGUgdG8gZGVsZXRlLgorICAgICAgICBtX2NvbnRleHRzLmFkZChjb250
ZXh0KTsKKyAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAgICAgICBtX2Nv
bnRleHRzLnJlbW92ZShjb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3Jv
dXA6OnJlbW92ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIG1fZ3Jv
dXBPYmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjph
ZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICByZW1vdmVPYmplY3Qo
b2JqZWN0KTsKKyAgICBtX2dyb3VwT2JqZWN0cy5hZGQob2JqZWN0KTsKK30KKwordm9pZCBXZWJH
TENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgd2hpbGUg
KCFtX2dyb3VwT2JqZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSGFzaFNldDxXZWJHTFNoYXJl
ZE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fZ3JvdXBPYmplY3RzLmJlZ2luKCk7CisgICAgICAg
ICgqaXQpLT5kZXRhY2hDb250ZXh0R3JvdXAoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xDb250
ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29u
dGV4dE1vZGUgbW9kZSkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVu
ZCgpOyArK2l0KQorICAgICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOworCisgICAg
ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0R3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTFhMDM2NzkzYjE0MDcyNGVmNDQ2
NzRkMjVhYTA2ZGQ1MTY4NDhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKKyNkZWZpbmUgV2ViR0xDb250ZXh0R3JvdXBfaAor
CisjaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CitjbGFzcyBXZWJHTEV4dGVuc2lvbjsKK2NsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OworY2xhc3Mg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitj
bGFzcyBXZWJHTENvbnRleHRHcm91cCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdMQ29udGV4dEdy
b3VwPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+
IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgfldlYkdMQ29udGV4dEdyb3VwKCk7CisKKyAgICB2b2lk
IGFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgdm9pZCByZW1vdmVDb250
ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworCisgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xT
aGFyZWRPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
OworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworCisg
ICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRl
eHRNb2RlKTsKKworICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKKwor
ICAgIFdlYkdMQ29udGV4dEdyb3VwKCk7CisKKyAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9i
amVjdHMoKTsKKworICAgIEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4gbV9jb250ZXh0
czsKKyAgICBIYXNoU2V0PFdlYkdMU2hhcmVkT2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQ5YzA4ZWM5
Yzg2OTZiMmRlNDU0NTgzNmVmNDAwOGY0YTJhZTliOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQor
CisjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCisKKyNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJHTENvbnRleHRPYmpl
Y3Q6OldlYkdMQ29udGV4dE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCisg
ICAgOiAgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1dlYkdMQ29udGV4dE9iamVjdDo6fldl
YkdMQ29udGV4dE9iamVjdCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9jb250
ZXh0LT5yZW1vdmVDb250ZXh0T2JqZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMQ29udGV4dE9i
amVjdDo6ZGV0YWNoQ29udGV4dCgpCit7CisgICAgZGV0YWNoKCk7CisgICAgaWYgKG1fY29udGV4
dCkgeworICAgICAgICBkZWxldGVPYmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
KTsKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVDb250ZXh0T2JqZWN0KHRoaXMpOworICAgICAg
ICBtX2NvbnRleHQgPSAwOworICAgIH0KK30KKworR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMQ29u
dGV4dE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb250ZXh0ID8gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpIDogMDsKK30KKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGJjMDlkNTViN2Y5ZGJmZjQ1NWUx
M2IyZDIwNTFhN2FmNjg0YTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJHTENvbnRleHRPYmplY3RfaAorI2RlZmluZSBXZWJHTENvbnRleHRPYmplY3Rf
aAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVj
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwor
Y2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworCitjbGFzcyBXZWJHTENvbnRleHRPYmplY3Qg
OiBwdWJsaWMgV2ViR0xPYmplY3QgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkdMQ29udGV4
dE9iamVjdCgpOworCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3Qg
V2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29udGV4dCA9PSBtX2NvbnRleHQ7CisgICAg
fQorCisgICAgdm9pZCBkZXRhY2hDb250ZXh0KCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTENv
bnRleHRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzR3JvdXBPckNvbnRleHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGV4
dDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3ND
b250ZXh0M0QoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2Jq
ZWN0OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViR0xPYmplY3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAppbmRleCBkMWFmNTE4YzA1
MTY1NWY5MzQxZDJkZmJiYWMxNjljNjMxYjU2MmJmLi5lYTBhNzQyZmRiNThkZDQzYTE0N2M1Nzc2
OWNjNTIxZTJhZGQ5MDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcApAQCAtMjksMTMgKzI5LDE0IEBACiAKICNpbmNsdWRlICJXZWJHTEZy
YW1lYnVmZmVyLmgiCiAKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUg
IldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVz
cGFjZSB7CiAKLSAgICBib29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdMT2JqZWN0KiBhdHRh
Y2hlZE9iamVjdCwgR0MzRGVudW0gYXR0YWNobWVudCkKKyAgICBib29sIGlzQXR0YWNobWVudENv
bXBsZXRlKFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCwgR0MzRGVudW0gYXR0YWNo
bWVudCkKICAgICB7CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9i
amVjdC0+b2JqZWN0KCkpOwogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QtPmlzUmVuZGVy
YnVmZmVyKCkpOwpAQCAtNjIsNyArNjMsNyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VXaWR0aChXZWJHTE9iamVjdCog
YXR0YWNoZWRPYmplY3QpCisgICAgR0MzRHNpemVpIGdldEltYWdlV2lkdGgoV2ViR0xTaGFyZWRP
YmplY3QqIGF0dGFjaGVkT2JqZWN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2Jq
ZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhdHRhY2hl
ZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CkBAIC03MCw3ICs3MSw3IEBAIG5hbWVzcGFjZSB7
CiAgICAgICAgIHJldHVybiBidWZmZXItPmdldFdpZHRoKCk7CiAgICAgfQogCi0gICAgR0MzRHNp
emVpIGdldEltYWdlSGVpZ2h0KFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICBHQzNE
c2l6ZWkgZ2V0SW1hZ2VIZWlnaHQoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5v
YmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIo
KSk7CkBAIC03OCw3ICs3OSw3IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIHJldHVybiBidWZmZXIt
PmdldEhlaWdodCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNVbmluaXRpYWxpemVkKFdlYkdMT2Jq
ZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICBib29sIGlzVW5pbml0aWFsaXplZChXZWJHTFNoYXJl
ZE9iamVjdCogYXR0YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmpl
Y3QgJiYgYXR0YWNoZWRPYmplY3QtPm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRl
cmJ1ZmZlcigpCiAgICAgICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJi
dWZmZXIqPihhdHRhY2hlZE9iamVjdCkpLT5pc0luaXRpYWxpemVkKCkpCkBAIC04NiwxMyArODcs
MTMgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZv
aWQgc2V0SW5pdGlhbGl6ZWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAgIHZvaWQg
c2V0SW5pdGlhbGl6ZWQoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQogICAgIHsK
ICAgICAgICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSAm
JiBhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSkKICAgICAgICAgICAgIChyZWludGVy
cHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oYXR0YWNoZWRPYmplY3QpKS0+c2V0SW5pdGlh
bGl6ZWQoKTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWQoV2ViR0xPYmplY3QqIGF0dGFjaGVk
T2JqZWN0KQorICAgIGJvb2wgaXNWYWxpZFJlbmRlcmJ1ZmZlcihXZWJHTFNoYXJlZE9iamVjdCog
YXR0YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0
YWNoZWRPYmplY3QtPm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigp
KSB7CiAgICAgICAgICAgICBpZiAoIShyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVy
Kj4oYXR0YWNoZWRPYmplY3QpKS0+aXNWYWxpZCgpKQpAQCAtMTA5LDIwICsxMTAsMjQgQEAgUGFz
c1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgKIH0KIAogV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1
ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkK
KyAgICA6IFdlYkdMQ29udGV4dE9iamVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQo
ZmFsc2UpCiAgICAgLCBtX3RleFRhcmdldCgwKQogICAgICwgbV90ZXhMZXZlbCgtMSkKIHsKLSAg
ICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1
ZmZlcigpKTsKKyAgICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVG
cmFtZWJ1ZmZlcigpKTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50
Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK1dlYkdMRnJhbWVidWZm
ZXI6On5XZWJHTEZyYW1lYnVmZmVyKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3Zv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
dGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCiB7Ci0gICAg
QVNTRVJUKGlzQm91bmQoKSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50KTsKKyAg
ICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoY29udGV4dDNkLCBhdHRhY2ht
ZW50KTsKICAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+b2JqZWN0KCkpCiAgICAgICAgIHRl
eHR1cmUgPSAwOwogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtMTUwLDEyICsxNTUsMTEg
QEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSBhdHRhY2htZW50LCBHQzMKICAgICAgICAgdGV4dHVyZS0+b25BdHRhY2hlZCgp
OwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZm
ZXIpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7Ci0gICAgQVNTRVJUKGlzQm91bmQoKSk7
CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHJlbW92ZUF0dGFjaG1l
bnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50KTsKKyAgICByZW1vdmVBdHRhY2htZW50
RnJvbUJvdW5kRnJhbWVidWZmZXIoY29udGV4dDNkLCBhdHRhY2htZW50KTsKICAgICBpZiAocmVu
ZGVyYnVmZmVyICYmICFyZW5kZXJidWZmZXItPm9iamVjdCgpKQogICAgICAgICByZW5kZXJidWZm
ZXIgPSAwOwogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewpAQCAtMTc5LDcgKzE4Myw3IEBAIHZv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0Mz
RGVudW0gYXR0YWNobWVudCwgV2ViCiAgICAgICAgIHJlbmRlcmJ1ZmZlci0+b25BdHRhY2hlZCgp
OwogfQogCi1XZWJHTE9iamVjdCogV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNE
ZW51bSBhdHRhY2htZW50KSBjb25zdAorV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZm
ZXI6OmdldEF0dGFjaG1lbnQoR0MzRGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBpZiAo
IW9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE5OCwxNSArMjAyLDE0IEBAIFdlYkdM
T2JqZWN0KiBXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1l
bnQpIGNvbnN0CiAgICAgfQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQordm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQzZCwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsKLSAgICBBU1NF
UlQoaXNCb3VuZCgpKTsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm47CiAgICAg
c3dpdGNoIChhdHRhY2htZW50KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QVRUQUNITUVOVDA6CiAgICAgICAgIGlmIChtX2NvbG9yQXR0YWNobWVudCkgewotICAgICAgICAg
ICAgbV9jb2xvckF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fY29sb3JB
dHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgICAgICAgICBtX2NvbG9yQXR0
YWNobWVudCA9IDA7CiAgICAgICAgICAgICBtX3RleFRhcmdldCA9IDA7CiAgICAgICAgICAgICBt
X3RleExldmVsID0gLTE7CkBAIC0yMTQsMTkgKzIxNywxOSBAQCB2b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2ht
ZW50KQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9B
VFRBQ0hNRU5UOgogICAgICAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQpIHsKLSAgICAgICAgICAg
IG1fZGVwdGhBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2RlcHRoQXR0
YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgICAgICAgICAgbV9kZXB0aEF0dGFj
aG1lbnQgPSAwOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAgaWYgKG1fc3RlbmNpbEF0dGFj
aG1lbnQpIHsKLSAgICAgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsK
KyAgICAgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsK
ICAgICAgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQgPSAwOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVDoKICAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkgewotICAgICAgICAg
ICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBt
X2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAg
ICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CkBAIC0yMzYsMzMgKzIzOSwzMSBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQogICAgIH0K
IH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJh
bWVidWZmZXIoV2ViR0xPYmplY3QqIGF0dGFjaG1lbnQpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRCog
Z2MzZCwgV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaG1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzQm91
bmQoKSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghYXR0
YWNobWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnYzNkID0g
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChhdHRhY2htZW50ID09IG1f
Y29sb3JBdHRhY2htZW50LmdldCgpKSB7CiAgICAgICAgIGlmIChhdHRhY2htZW50LT5pc1JlbmRl
cmJ1ZmZlcigpKQogICAgICAgICAgICAgZ2MzZC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBnYzNkLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwg
bV90ZXhUYXJnZXQsIDAsIG1fdGV4TGV2ZWwpOwotICAgICAgICByZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwKTsK
KyAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgfQogICAgIGlmIChhdHRhY2ht
ZW50ID09IG1fZGVwdGhBdHRhY2htZW50LmdldCgpKSB7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIDApOwotICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQpOworICAgICAgICByZW1vdmVBdHRhY2ht
ZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoZ2MzZCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FU
VEFDSE1FTlQpOwogICAgIH0KICAgICBpZiAoYXR0YWNobWVudCA9PSBtX3N0ZW5jaWxBdHRhY2ht
ZW50LmdldCgpKSB7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIHJl
bW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1l
YnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAg
IH0KICAgICBpZiAoYXR0YWNobWVudCA9PSBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkp
IHsKICAgICAgICAgZ2MzZC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgICAgIGdjM2QtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgMCk7Ci0gICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgcmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGdjM2QsIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAgIH0KIH0KIApAQCAtMzM3LDcgKzMzOCw3
IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKCkgY29uc3QKICAgICBp
ZiAoaXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCgpKSB7CiAgICAgICAgIGlmICghaXNBdHRhY2htZW50
Q29tcGxldGUobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpLCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSkKICAgICAgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICBp
ZiAoIWlzVmFsaWQobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKSkKKyAgICAgICAgaWYg
KCFpc1ZhbGlkUmVuZGVyYnVmZmVyKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC5nZXQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOwogICAgICAgICBpZiAoIWNvdW50KSB7CiAgICAgICAgICAgICB3aWR0aCA9IGdldEltYWdl
V2lkdGgobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgpKTsKQEAgLTM2OSwyOSArMzcwLDI5
IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKCkgY29uc3QKICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwogfQogCi1ib29s
IFdlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1
ZmZlcnMpCitib29sIFdlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M2QsIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpCiB7CiAgICAg
aWYgKGNoZWNrU3RhdHVzKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBM
RVRFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG5lZWRUb0luaXRpYWxpemVSZW5k
ZXJidWZmZXJzKQotICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAg
ICAgICAgcmV0dXJuIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKGNvbnRleHQzZCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChQ
bGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKIHsKICAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQpCi0gICAgICAgIG1fY29sb3JBdHRh
Y2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fY29sb3JBdHRhY2htZW50LT5vbkRldGFj
aGVkKGNvbnRleHQzZCk7CiAgICAgaWYgKG1fZGVwdGhBdHRhY2htZW50KQotICAgICAgICBtX2Rl
cHRoQXR0YWNobWVudC0+b25EZXRhY2hlZCgpOworICAgICAgICBtX2RlcHRoQXR0YWNobWVudC0+
b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgIGlmIChtX3N0ZW5jaWxBdHRhY2htZW50KQotICAg
ICAgICBtX3N0ZW5jaWxBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fc3RlbmNp
bEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICBpZiAobV9kZXB0aFN0ZW5j
aWxBdHRhY2htZW50KQotICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNo
ZWQoKTsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUZyYW1lYnVm
ZmVyKG9iamVjdCk7CisgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hl
ZChjb250ZXh0M2QpOworICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsK
IH0KIAotYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiti
b29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKEdyYXBoaWNzQ29u
dGV4dDNEKiBnM2QpCiB7CiAgICAgQVNTRVJUKG9iamVjdCgpKTsKICAgICBib29sIGluaXRDb2xv
ciA9IGZhbHNlLCBpbml0RGVwdGggPSBmYWxzZSwgaW5pdFN0ZW5jaWwgPSBmYWxzZTsKQEAgLTQx
OCw3ICs0MTksNiBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKCkKIAogICAgIC8vIFdlIG9ubHkgY2xlYXIgdW4taW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVy
cyB3aGVuIHRoZXkgYXJlIHJlYWR5IHRvIGJlCiAgICAgLy8gcmVhZCwgaS5lLiwgd2hlbiB0aGUg
ZnJhbWVidWZmZXIgaXMgY29tcGxldGUuCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGczZCA9IGNv
bnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAoZzNkLT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTQ4NywxMSArNDg3LDYgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVy
YnVmZmVycygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6
aXNCb3VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChjb250ZXh0KCktPm1fZnJhbWVidWZmZXJC
aW5kaW5nLmdldCgpID09IHRoaXMpOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKaW5kZXgg
MTEwZjUxMzk1ZjliNzg0NDFiODE5ZDkzNDU1OTYwMzI4MWQwYjRmZC4uMzQ2MzNhMDQxZDFmMTBm
ZjBjN2ZkZTQ2MWQwM2Y5MjQzZTQ0MmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaApAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBXZWJHTEZy
YW1lYnVmZmVyX2gKICNkZWZpbmUgV2ViR0xGcmFtZWJ1ZmZlcl9oCiAKLSNpbmNsdWRlICJXZWJH
TE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgorI2luY2x1ZGUgIldl
YkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNiwxOSArMzcsMTkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFRleHR1cmU7CiAKLWNs
YXNzIFdlYkdMRnJhbWVidWZmZXIgOiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlciA6IHB1YmxpYyBXZWJHTENvbnRleHRPYmplY3QgewogcHVibGljOgotICAgIHZp
cnR1YWwgfldlYkdMRnJhbWVidWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVh
bCB+V2ViR0xGcmFtZWJ1ZmZlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdm9pZCBzZXRB
dHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgc2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xS
ZW5kZXJidWZmZXIqKTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4VGFy
Z2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsKTsKKyAgICB2b2lkIHNldEF0dGFjaG1l
bnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNo
bWVudCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKICAgICAvLyBJZiBhbiBvYmplY3QgaXMgYXR0YWNo
ZWQgdG8gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciwgcmVtb3ZlIGl0LgotICAgIHZv
aWQgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMT2JqZWN0Kik7Cisg
ICAgdm9pZCByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0QqLCBXZWJHTFNoYXJlZE9iamVjdCopOwogICAgIC8vIElmIGEgZ2l2ZW4gYXR0YWNobWVu
dCBwb2ludCBmb3IgdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlciBpcyBub3QgbnVsbCwg
cmVtb3ZlIHRoZSBhdHRhY2hlZCBvYmplY3QuCi0gICAgdm9pZCByZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0pOwotICAgIFdlYkdMT2JqZWN0KiBnZXRBdHRhY2ht
ZW50KEdDM0RlbnVtKSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtKTsKKyAgICBXZWJHTFNoYXJl
ZE9iamVjdCogZ2V0QXR0YWNobWVudChHQzNEZW51bSkgY29uc3Q7CiAKICAgICBHQzNEZW51bSBn
ZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0OwogICAgIEdDM0RzaXplaSBnZXRDb2xvckJ1ZmZl
cldpZHRoKCkgY29uc3Q7CkBAIC02MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4g
ZmFsc2UgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFs
aXplCiAgICAgLy8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQg
YW5kCiAgICAgLy8gbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KLSAgICBi
b29sIG9uQWNjZXNzKGJvb2wgbmVlZFRvSW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOworICAgIGJv
b2wgb25BY2Nlc3MoR3JhcGhpY3NDb250ZXh0M0QqLCBib29sIG5lZWRUb0luaXRpYWxpemVSZW5k
ZXJidWZmZXJzKTsKIAogICAgIC8vIFNvZnR3YXJlIHZlcnNpb24gb2YgZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKCksIGV4Y2VwdCB0aGF0IHdoZW4KICAgICAvLyBGUkFNRUJVRkZFUl9DT01QTEVU
RSBpcyByZXR1cm5lZCwgaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yCkBAIC03NSwyNiArNzYsMjMg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJp
bmdDb250ZXh0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9y
bTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gUmV0dXJu
IGZhbHNlIGlmIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGUuCi0gICAgYm9vbCBpbml0aWFsaXpl
UmVuZGVyYnVmZmVycygpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGN1
cnJlbnRseSBib3VuZC4KLSAgICBib29sIGlzQm91bmQoKSBjb25zdDsKKyAgICBib29sIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICBib29sIGlzQ29s
b3JBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2NvbG9yQXR0YWNobWVudCAmJiBtX2NvbG9y
QXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CiAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25z
dCB7IHJldHVybiAobV9kZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVj
dCgpKTsgfQogICAgIGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9z
dGVuY2lsQXR0YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KICAg
ICBib29sIGlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aFN0
ZW5jaWxBdHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9
CiAKLSAgICBSZWZQdHI8V2ViR0xPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50OwotICAgIFJlZlB0
cjxXZWJHTE9iamVjdD4gbV9kZXB0aEF0dGFjaG1lbnQ7Ci0gICAgUmVmUHRyPFdlYkdMT2JqZWN0
PiBtX3N0ZW5jaWxBdHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aFN0
ZW5jaWxBdHRhY2htZW50OworICAgIFJlZlB0cjxXZWJHTFNoYXJlZE9iamVjdD4gbV9jb2xvckF0
dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoQXR0YWNobWVu
dDsKKyAgICBSZWZQdHI8V2ViR0xTaGFyZWRPYmplY3Q+IG1fc3RlbmNpbEF0dGFjaG1lbnQ7Cisg
ICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7CiAK
ICAgICBib29sIG1faGFzRXZlckJlZW5Cb3VuZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuY3BwCmluZGV4IDdiNjI5YTY5Yzc0MzZjMDkwOWMzOTY3M2IwYjUwNDFh
NDM4ZTIxZTEuLjNiZWQ1NWJkYTFiZWY2ZGUwNzAzODM3MTFkMGYyZDIxOWUyZmI0ODMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKQEAgLTI5LDEzICsyOSwy
MCBAQAogCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKIAorI2luY2x1ZGUgIk9FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJP
RVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVz
LmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNsdWRlICJXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRl
ICJXZWJHTExvc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCgpCiAg
ICAgOiBtX29iamVjdCgwKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2F0dGFj
aG1lbnRDb3VudCgwKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQogewpAQCAtNDMsOCArNTAsNiBA
QCBXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQogCiBXZWJHTE9iamVjdDo6fldlYkdMT2JqZWN0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQot
ICAgICAgICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsKIH0KIAogdm9pZCBXZWJHTE9i
amVjdDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQpAQCAtNTQsMjYgKzU5LDM4
IEBAIHZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
ICAgICBtX29iamVjdCA9IG9iamVjdDsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2Jq
ZWN0KCkKK3ZvaWQgV2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkKQogewogICAgIG1fZGVsZXRlZCA9IHRydWU7Ci0gICAgaWYgKCFtX2NvbnRleHQg
fHwgIW1fb2JqZWN0KQorICAgIGlmICghbV9vYmplY3QpCiAgICAgICAgIHJldHVybjsKKworICAg
IGlmICghaGFzR3JvdXBPckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFt
X2F0dGFjaG1lbnRDb3VudCkgewotICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBkZWxldGVPYmplY3RJbXBsKG1fb2Jq
ZWN0KTsKKyAgICAgICAgaWYgKCFjb250ZXh0M2QpCisgICAgICAgICAgICBjb250ZXh0M2QgPSBn
ZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgICAgICBpZiAoY29udGV4dDNkKQorICAgICAg
ICAgICAgZGVsZXRlT2JqZWN0SW1wbChjb250ZXh0M2QsIG1fb2JqZWN0KTsKKwogICAgICAgICBt
X29iamVjdCA9IDA7CiAgICAgfQogfQogCi12b2lkIFdlYkdMT2JqZWN0OjpkZXRhY2hDb250ZXh0
KCkKK3ZvaWQgV2ViR0xPYmplY3Q6OmRldGFjaCgpCiB7CiAgICAgbV9hdHRhY2htZW50Q291bnQg
PSAwOyAvLyBNYWtlIHN1cmUgT3BlbkdMIHJlc291cmNlIGlzIGRlbGV0ZWQuCi0gICAgaWYgKG1f
Y29udGV4dCkgewotICAgICAgICBkZWxldGVPYmplY3QoKTsKLSAgICAgICAgbV9jb250ZXh0LT5y
ZW1vdmVPYmplY3QodGhpcyk7Ci0gICAgICAgIG1fY29udGV4dCA9IDA7CiAgICAgfQorCisKK3Zv
aWQgV2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkK
K3sKKyAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCisgICAgICAgIC0tbV9hdHRhY2htZW50Q291
bnQ7CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgZGVsZXRlT2JqZWN0KGNvbnRleHQzZCk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCmluZGV4IDQ0
Y2MzNmY2YmZlMjRhYzA0ZmU5MWRlNjhjODgxMDRiNDlkMDc2M2EuLmUwYjZhOGUxN2JjODI2YzQ0
YjQ4YmU0MTJmZTU4NTE0YmZiNjBhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xPYmplY3QuaApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CiBjbGFzcyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAKIGNsYXNzIFdlYkdMT2JqZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViR0xPYmplY3Q+IHsKQEAgLTQ0LDQ1ICs0NiwzNiBAQCBwdWJsaWM6CiAgICAgLy8g
ZGVsZXRlT2JqZWN0IG1heSBub3QgYWx3YXlzIGRlbGV0ZSB0aGUgT3BlbkdMIHJlc291cmNlLiAg
Rm9yIHByb2dyYW1zIGFuZAogICAgIC8vIHNoYWRlcnMsIGRlbGV0aW9uIGlzIGRlbGF5ZWQgdW50
aWwgdGhleSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkLgogICAgIC8vIEZJWE1FOiByZXZpc2l0IHRo
aXMgd2hlbiByZXNvdXJjZSBzaGFyaW5nIGJldHdlZW4gY29udGV4dHMgYXJlIGltcGxlbWVudGVk
LgotICAgIHZvaWQgZGVsZXRlT2JqZWN0KCk7Ci0KLSAgICB2b2lkIGRldGFjaENvbnRleHQoKTsK
LQotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZvaWQgZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICB2b2lk
IG9uQXR0YWNoZWQoKSB7ICsrbV9hdHRhY2htZW50Q291bnQ7IH0KLSAgICB2b2lkIG9uRGV0YWNo
ZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYXR0YWNobWVudENvdW50KQotICAgICAgICAgICAg
LS1tX2F0dGFjaG1lbnRDb3VudDsKLSAgICAgICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgICAg
IGRlbGV0ZU9iamVjdCgpOwotICAgIH0KKyAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250
ZXh0M0QqKTsKIAogICAgIC8vIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBzaWRl
IGlzc3VlIGEgZGVsZXRlIGNhbGwgYWxyZWFkeSwgbm90CiAgICAgLy8gd2hldGhlciB0aGUgT3Bl
bkdMIHJlc291cmNlIGlzIGRlbGV0ZWQuCiAgICAgLy8gb2JqZWN0KCk9PTAgaW5kaWNhdGVzIHRo
ZSBPcGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRlZC4KICAgICBib29sIGlzRGVsZXRlZCgpIHsgcmV0
dXJuIG1fZGVsZXRlZDsgfQogCisgICAgLy8gVHJ1ZSBpZiB0aGlzIG9iamVjdCBiZWxvbmdzIHRv
IHRoZSBncm91cCBvciBjb250ZXh0LgorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBX
ZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0ID0g
MDsKKwogcHJvdGVjdGVkOgotICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OworICAgIFdlYkdMT2JqZWN0KCk7CiAKICAgICAvLyBzZXRPYmplY3Qgc2hvdWxkIGJlIG9ubHkg
Y2FsbGVkIG9uY2UgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgYSBXZWJHTE9iamVjdC4KICAgICB2b2lk
IHNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIC8vIGRlbGV0ZU9iamVjdEltcGwg
c2hvdWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgdG8gZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2Uu
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwg
UGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250
ZXh0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworCisgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgPSAw
OwogCiBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3Q7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7CiAgICAgdW5zaWduZWQgbV9hdHRhY2htZW50Q291
bnQ7CiAgICAgYm9vbCBtX2RlbGV0ZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAKaW5kZXggZDNlZmRhNDdkZWU0NjM2NTU0ZGJjMDc3ODlkNDMyZDM5
OGFjYzIwZi4uZjY4NTQzY2U0ZDk5MGRiNThlMTU3ZTAzNGVjMjcwNWQ0MjU1NjdjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4
dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM5LDMyICs0MCwzNiBAQCBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
V2ViR0xQcm9ncmFtOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiB9CiAKIFdl
YkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQotICAg
IDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwg
bV9saW5rU3RhdHVzKGZhbHNlKQogICAgICwgbV9saW5rQ291bnQoMCkKIHsKLSAgICBzZXRPYmpl
Y3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOworICAg
IHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVByb2dyYW0oKSk7CiB9
CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qg
b2JqKQorV2ViR0xQcm9ncmFtOjp+V2ViR0xQcm9ncmFtKCkKIHsKLSAgICBjb250ZXh0KCktPmdy
YXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0ob2JqKTsKKyAgICBkZWxldGVPYmplY3Qo
MCk7Cit9CisKK3ZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAgIGNvbnRleHQz
ZC0+ZGVsZXRlUHJvZ3JhbShvYmopOwogICAgIGlmIChtX3ZlcnRleFNoYWRlcikgewotICAgICAg
ICBtX3ZlcnRleFNoYWRlci0+b25EZXRhY2hlZCgpOworICAgICAgICBtX3ZlcnRleFNoYWRlci0+
b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgICAgICBtX3ZlcnRleFNoYWRlciA9IDA7CiAgICAg
fQogICAgIGlmIChtX2ZyYWdtZW50U2hhZGVyKSB7Ci0gICAgICAgIG1fZnJhZ21lbnRTaGFkZXIt
Pm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9mcmFnbWVudFNoYWRlci0+b25EZXRhY2hlZChjb250
ZXh0M2QpOwogICAgICAgICBtX2ZyYWdtZW50U2hhZGVyID0gMDsKICAgICB9CiB9CiAKLWJvb2wg
V2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpCitib29sIFdlYkdMUHJv
Z3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzZCkKIHsKICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5jbGVhcigpOwogICAgIGlmICgh
b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkID0gY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOwogCiAgICAgLy8gQXNz
dW1lIGxpbmsgc3RhdHVzIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVkLgogICAgIGlmICghbV9saW5r
U3RhdHVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAppbmRleCAw
ZGQzYmEwZmFhZmI5ZDcwNmFjOTM2MWQxOWE1ZjA4OTMxNjk2MjM2Li4xNTA1MDExMDA1ZDRmODlj
ZmRkNjUzYmRjYjg1NTc1NDQ5MTE5MGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTFByb2dyYW1faAog
I2RlZmluZSBXZWJHTFByb2dyYW1faAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNs
dWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIApA
QCAtMzYsMTUgKzM2LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xQ
cm9ncmFtIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMUHJvZ3JhbSA6IHB1Ymxp
YyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xQcm9ncmFt
KCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMUHJvZ3JhbSgpOwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CiAKICAgICAvLyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25seSBj
YWxsZWQgb25jZSBhZnRlciBsaW5rUHJvZ3JhbSgpCiAgICAgLy8gc3VjY2VlZHMuCi0gICAgYm9v
bCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOworICAgIGJvb2wgY2FjaGVBY3RpdmVBdHRy
aWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB1bnNpZ25lZCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMoKSBjb25zdDsKICAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0
aW9uKEdDM0R1aW50IGluZGV4KSBjb25zdDsKIApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCk7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuY3BwCmluZGV4IDkzYjkxNjVjOTk0NzQ5ZjYzZGM1MDNhMzYyMDhjNTFm
YmVkYjY0NzAuLmRhYWY5ZDRlZTU5YjNjYTY2YjFjZGNjODdhYjAwYTE5N2YwMTdiMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCiAKKyNpbmNs
dWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw4ICszOSwxMyBAQCBQYXNzUmVmUHRy
PFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogYwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xSZW5kZXJidWZmZXIo
Y3R4KSk7CiB9CiAKK1dlYkdMUmVuZGVyYnVmZmVyOjp+V2ViR0xSZW5kZXJidWZmZXIoKQorewor
ICAgIGRlbGV0ZU9iamVjdCgwKTsKK30KKwogV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQotICAgIDogV2ViR0xPYmplY3QoY3R4
KQorICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV9pbnRlcm5hbEZvcm1hdChH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTQpCiAgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQogICAg
ICwgbV93aWR0aCgwKQpAQCAtNDcsMTIgKzUzLDEyIEBAIFdlYkdMUmVuZGVyYnVmZmVyOjpXZWJH
TFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICAsIG1faXNWYWxp
ZCh0cnVlKQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogewotICAgIHNldE9iamVj
dChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTsK
KyAgICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVSZW5kZXJidWZm
ZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmpl
Y3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2Jq
ZWN0KQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlUmVuZGVy
YnVmZmVyKG9iamVjdCk7CisgICAgY29udGV4dDNkLT5kZWxldGVSZW5kZXJidWZmZXIob2JqZWN0
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVm
ZmVyLmgKaW5kZXggNGI0N2JmNWQzMmU4NDY4ZDBmOTJlYTkxZTVhOGQ2NDMzY2NmY2YxOS4uZTE2
OWUyZThiYmZlNWYxNjdlY2Y1MjgwM2JlMmVmN2Q5YmY3Yzg3NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCkBAIC0yNiwxNiArMjYsMTYgQEAK
ICNpZm5kZWYgV2ViR0xSZW5kZXJidWZmZXJfaAogI2RlZmluZSBXZWJHTFJlbmRlcmJ1ZmZlcl9o
CiAKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0
LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xSZW5kZXJidWZmZXIg
OiBwdWJsaWMgV2ViR0xPYmplY3QgeworY2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgOiBwdWJsaWMg
V2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyYnVm
ZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyYnVmZmVy
KCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopOwogCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggZDE3NzQxZmIzMGFlMzliNDk2
MjdmMDNiNWU1ZmQ5YzQyMmNiOWUzZC4uYzU5NGQ3ZWNiZjYyZGI2MTU4ODcwMGY3OTJkN2Q3YjQx
MzQ2Mjg4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb21w
cmVzc2VkVGV4dHVyZXMuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiV2ViR0xDb250ZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91
cC5oIgogI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKICNpbmNsdWRlICJXZWJH
TERlYnVnU2hhZGVycy5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKQEAgLTQxNiw2
ICs0MTcsOCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChI
VE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYQogICAgICwgbV9hdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAg
PSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENv
bnRleHQodGhpcyk7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBDcmVhdGUgdGhl
IERyYXdpbmdCdWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGxheWVyLgpAQCAtNDgw
LDcgKzQ4Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29u
dGV4dCgpCiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKIAogICAgIG1fZGVmYXVsdFZlcnRl
eEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMsIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKLSAgICBhZGRPYmplY3Qo
bV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QuZ2V0KCkpOworICAgIGFkZENvbnRleHRPYmplY3Qo
bV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QuZ2V0KCkpOwogICAgIG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdCA9IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwogICAgIAogICAgIG1fdmVydGV4
QXR0cmliVmFsdWUucmVzaXplKG1fbWF4VmVydGV4QXR0cmlicyk7CkBAIC01MjUsOCArNTI4LDI3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25z
KCkgY29uc3QKIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2ViR0xSZW5kZXJpbmdDb250ZXh0
KCkKIHsKKyAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gV2ViR0xPYmplY3RzIHNvIGlm
IHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIC8vIHRoZXkgd2lsbCBiZSBmcmVlZCBi
ZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20gdGhlIGNvbnRleHQgZ3JvdXAu
CisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdCA9IDA7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gMDsKKyAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXIgPSAwOworICAgIG1fY3VycmVudFByb2dyYW0gPSAwOworICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgewor
ICAgICAgbV90ZXh0dXJlVW5pdHNbaV0ubV90ZXh0dXJlMkRCaW5kaW5nID0gMDsKKyAgICAgIG1f
dGV4dHVyZVVuaXRzW2ldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gMDsKKyAgICB9CisKKyAg
ICBtX2JsYWNrVGV4dHVyZTJEID0gMDsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSAwOwor
CiAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwogICAgIG1fY29udGV4dC0+c2V0Q29u
dGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsKKyAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlQ29u
dGV4dCh0aGlzKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCgpCkBAIC03OTgsNyArODIwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNoZWNrT2JqZWN0VG9CZUJvdW5kKFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGUKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG9i
amVjdCkgewotICAgICAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAg
ICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAg
LTExMDUsNyArMTEyNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNE
Yml0ZmllbGQgbWFzaykKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25B
Y2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwg
IWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExOTAsNyArMTIxMiw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jl
c291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xMjM2LDcgKzEyNTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQwogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3Mo
IWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTEyODQsNyArMTMwNiw3IEBAIFBhc3NSZWZQdHI8V2ViR0xCdWZm
ZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8g
PSBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAg
ICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEyOTMs
NyArMTMxNSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZy
YW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIGFk
ZENvbnRleHRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMDIsNyAr
MTMyNCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVRleHR1cmUoKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNyZWF0ZSh0
aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0
KCkpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0xMzExLDcgKzEzMzMsNyBAQCBQYXNzUmVmUHRy
PFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2Vi
R0xQcm9ncmFtPiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0
KG8uZ2V0KCkpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsK
IH0KIApAQCAtMTMyMCw3ICsxMzQyLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1
ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0
KG8uZ2V0KCkpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsK
IH0KIApAQCAtMTMzNSw3ICsxMzU3LDcgQEAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXAKICAgICB9
CiAKICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMs
IHR5cGUpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5n
ZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzNTEsMTIgKzEzNzMsMTQgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQog
ewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChvYmplY3QtPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgaWYgKCFvYmpl
Y3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewogICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkp
Ci0gICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8g
cGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50CisgICAgICAgIC8vIHRoaW5ncyBp
biB0aGlzIGNvbnRleHQgdW5ib3VuZC4KKyAgICAgICAgb2JqZWN0LT5kZWxldGVPYmplY3QoZ3Jh
cGhpY3NDb250ZXh0M0QoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0MTIsNyArMTQz
Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKICAgICBpZiAocmVuZGVyYnVmZmVyID09IG1f
cmVuZGVyYnVmZmVyQmluZGluZykKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsK
ICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVyKTsK
KyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRG
cmFtZWJ1ZmZlcihncmFwaGljc0NvbnRleHQzRCgpLCByZW5kZXJidWZmZXIpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
CkBAIC0xNDMxLDcgKzE0NTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
VGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCiAgICAgICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZyA9IDA7CiAgICAgfQogICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFj
aG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKKyAgICAgICAgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihncmFwaGljc0Nv
bnRleHQzRCgpLCB0ZXh0dXJlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
cHRoRnVuYyhHQzNEZW51bSBmdW5jKQpAQCAtMTQ3Myw3ICsxNDk3LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdM
U2hhZGVyKiBzaGEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmRldGFj
aFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAg
ICBzaGFkZXItPm9uRGV0YWNoZWQoKTsKKyAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3ND
b250ZXh0M0QoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMTY4NSw3ICsxNzA5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
V2ViR0xPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKICAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKG9iamVjdC0+Y29udGV4dCgpICE9IHRoaXMp
IHsKKyAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE3MjYs
NyArMTc1MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgwMCw3ICsxODI0LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgp
KSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xODc3LDcgKzE5MDEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdAogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb250
ZXh0KCkgIT0gdGhpcykgeworICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29u
dGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTE5MTUsNyArMTkzOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0
YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZl
cikpOwogICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJv
dW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVmZmVyKTsKKyAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoZ3JhcGhpY3NDb250ZXh0M0Qo
KSwgYXR0YWNobWVudCwgYnVmZmVyKTsKICAgICBpZiAocmVhdHRhY2hEZXB0aCkgewogICAgICAg
ICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCA9IG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+Z2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCkp
OwogICAgICAgICBpZiAob2JqZWN0KQpAQCAtMTk0OCw3ICsxOTcyLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWMKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICBpZiAodGV4
dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjAsNyArMTk4NCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRh
cmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpLCBsZXZlbCk7Ci0gICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIHRleHRh
cmdldCwgdGV4dHVyZSwgbGV2ZWwpOworICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRh
Y2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihncmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2htZW50
LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCkBAIC0yMTY0LDcgKzIxODgsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVu
dW0gdAogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgfQogCi0gICAgV2ViR0xP
YmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50KGF0dGFj
aG1lbnQpOworICAgIFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+Z2V0QXR0YWNobWVudChhdHRhY2htZW50KTsKICAgICBpZiAoIW9iamVjdCkgewogICAg
ICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX1RZUEUpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKTsKQEAgLTI5NDAsNyArMjk2NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNv
ZGUmIGVjCiAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMsICZ2YWx1ZSk7CiAgICAgcHJvZ3JhbS0+
c2V0TGlua1N0YXR1cyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwogICAgIC8vIE5lZWQgdG8g
Y2FjaGUgbGluayBzdGF0dXMgYmVmb3JlIGNhY2hpbmcgYWN0aXZlIGF0dHJpYnV0ZSBsb2NhdGlv
bnMuCi0gICAgcHJvZ3JhbS0+Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBwcm9n
cmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhncmFwaGljc0NvbnRleHQzRCgpKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMDMxLDcgKzMwNTUs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQwogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3Jh
cGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM5NDAsNyArMzk2NCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgfQogICAgIGlmIChtX2N1cnJlbnRQcm9n
cmFtICE9IHByb2dyYW0pIHsKICAgICAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAg
ICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2N1cnJl
bnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgICAgICBtX2N1
cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKICAgICAgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG9i
amVjdE9yWmVybyhwcm9ncmFtKSk7CiAgICAgICAgIGlmIChwcm9ncmFtKQpAQCAtNDA5MCw2ICs0
MTE0LDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0KFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwogICAgIG1fY29u
dGV4dExvc3RNb2RlID0gbW9kZTsKIApAQCAtNDE0MywyMiArNDE3NSwzNCBAQCBQbGF0Zm9ybUxh
eWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogfQogI2Vu
ZGlmCiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmpl
Y3QqIG9iamVjdCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVTaGFyZWRPYmpl
Y3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBtX2NvbnRleHRHcm91cC0+cmVt
b3ZlT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRT
aGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIWlz
Q29udGV4dExvc3QoKSk7CisgICAgcmVtb3ZlU2hhcmVkT2JqZWN0KG9iamVjdCk7CisgICAgbV9j
b250ZXh0R3JvdXAtPmFkZE9iamVjdChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkK
IHsKLSAgICBtX2NhbnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CisgICAgbV9jb250ZXh0T2Jq
ZWN0cy5yZW1vdmUob2JqZWN0KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFk
ZE9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNT
RVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAgIHJlbW92ZU9iamVjdChvYmplY3QpOwotICAgIG1f
Y2FudmFzT2JqZWN0cy5hZGQob2JqZWN0KTsKKyAgICByZW1vdmVDb250ZXh0T2JqZWN0KG9iamVj
dCk7CisgICAgbV9jb250ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKIH0KIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQogewotICAgIHdoaWxl
IChtX2NhbnZhc09iamVjdHMuc2l6ZSgpID4gMCkgewotICAgICAgICBIYXNoU2V0PFdlYkdMT2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7CisgICAgd2hpbGUg
KG1fY29udGV4dE9iamVjdHMuc2l6ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29u
dGV4dE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKICAg
ICAgICAgKCppdCktPmRldGFjaENvbnRleHQoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDhmMWVmZDli
MDQ0YmZjMDBlYWQ0YWE0NDA5ZjRhMDgzYmI0ZjhmMTUuLjVmNjNjZjFhZTZjZmRhODA1OGFiZGI2
YjYxNzFkMGZkMGNiZGE2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC01MCw2ICs1MCw4IEBAIGNsYXNzIE9FU1RleHR1
cmVGbG9hdDsKIGNsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OwogY2xhc3MgV2ViR0xBY3RpdmVJ
bmZvOwogY2xhc3MgV2ViR0xCdWZmZXI7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKK2NsYXNz
IFdlYkdMQ29udGV4dE9iamVjdDsKIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVzOwogY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKIGNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
CkBAIC02MSw2ICs2Myw3IEBAIGNsYXNzIFdlYkdMT2JqZWN0OwogY2xhc3MgV2ViR0xQcm9ncmFt
OwogY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CiBjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdl
YkdMU2hhcmVkT2JqZWN0OwogY2xhc3MgV2ViR0xUZXh0dXJlOwogY2xhc3MgV2ViR0xVbmlmb3Jt
TG9jYXRpb247CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwpAQCAtMjkyLDggKzI5
NSwxMCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENv
bnRleHRNb2RlKTsKICAgICB2b2lkIGZvcmNlUmVzdG9yZUNvbnRleHQoKTsKKyAgICB2b2lkIGxv
c2VDb250ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Cisg
ICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dEdyb3VwLmdldCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBA
IC0zMDQsNyArMzA5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKLSAgICB2b2lkIHJlbW92ZU9iamVj
dChXZWJHTE9iamVjdCopOworICAgIHZvaWQgcmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVk
T2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVj
dCopOwogICAgIAogICAgIHVuc2lnbmVkIGdldE1heFZlcnRleEF0dHJpYnMoKSBjb25zdCB7IHJl
dHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0KIApAQCAtMzE5LDcgKzMyNSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CiAgICAgdm9pZCBzZXR1cEZsYWdzKCk7
CiAKLSAgICB2b2lkIGFkZE9iamVjdChXZWJHTE9iamVjdCopOworICAgIHZvaWQgYWRkU2hhcmVk
T2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdl
YkdMQ29udGV4dE9iamVjdCopOwogICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygp
OwogCiAgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKQEAgLTM2Miw2ICszNjksNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0
OworICAgIFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250ZXh0R3JvdXA7CiAKICAgICAv
LyBPcHRpb25hbCBzdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGlu
c3RlYWQgb2YgZGlyZWN0bHkKICAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0
LgpAQCAtMzc4LDcgKzM4Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsK
ICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxXZWJHTE9iamVjdCo+
IG1fY2FudmFzT2JqZWN0czsKKyAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+IG1fY29u
dGV4dE9iamVjdHM7CiAKICAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50
YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBm
b3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRB
cnJheUJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcApp
bmRleCA1OTY5NWU0YzkzYmY1NGM5ODIwYTVhNzdlZWQ5ODM2MmYxOTQyMGI2Li4zNTA2OGViY2Rj
YTJlZTY2NTdhYTZiYjExYWFkODI0OGUyNTllMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaGFkZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJH
TFNoYWRlci5oIgogCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMTYg
KzQwLDIxIEBAIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtCiB9CiAKIFdlYkdMU2hhZGVyOjpXZWJH
TFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0gdHlwZSkKLSAgICA6
IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9zb3VyY2UoIiIpCiB7Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQo
KS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsKKyAgICBzZXRPYmpl
Y3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIodHlwZSkpOwogfQogCi12
b2lkIFdlYkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQorV2ViR0xTaGFkZXI6On5XZWJHTFNoYWRlcigpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5kZWxldGVTaGFkZXIob2JqZWN0KTsKKyAgICBkZWxldGVPYmplY3QoMCk7
Cit9CisKK3ZvaWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit7CisgICAgY29udGV4dDNk
LT5kZWxldGVTaGFkZXIob2JqZWN0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmgKaW5kZXggMWQ3YTEwYzFjNGI5ZDk5YWYwY2FjN2YyMWVjYzRmOTc4Zjkz
NGE0OC4uOTJkMWQxYzQ4YTE5YzFjOWQwYjYwNjEwZmVmYzI1YmFlNjc4YjQwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCkBAIC0yNiwxNiArMjYsMTYgQEAKICNp
Zm5kZWYgV2ViR0xTaGFkZXJfaAogI2RlZmluZSBXZWJHTFNoYWRlcl9oCiAKLSNpbmNsdWRlICJX
ZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xTaGFkZXIgOiBwdWJsaWMgV2ViR0xPYmplY3Qg
eworY2xhc3MgV2ViR0xTaGFkZXIgOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGlj
OgotICAgIHZpcnR1YWwgfldlYkdMU2hhZGVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZp
cnR1YWwgfldlYkdMU2hhZGVyKCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRl
cj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdDM0RlbnVtKTsKIApAQCAtNDcsNyAr
NDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCosIEdDM0RlbnVtKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjgzNzIxOGFh
ZDg5Y2M5NzNmY2MzMjczOGFhMWQzYjVhZDc3M2IxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKwor
I2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCisKKyNpbmNsdWRlICJXZWJHTENvbnRleHRH
cm91cC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1dlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHRHcm91cChjb250ZXh0LT5j
b250ZXh0R3JvdXAoKSkKK3sKK30KKworV2ViR0xTaGFyZWRPYmplY3Q6On5XZWJHTFNoYXJlZE9i
amVjdCgpCit7CisgICAgaWYgKG1fY29udGV4dEdyb3VwKQorICAgICAgICBtX2NvbnRleHRHcm91
cC0+cmVtb3ZlT2JqZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMU2hhcmVkT2JqZWN0OjpkZXRh
Y2hDb250ZXh0R3JvdXAoKQoreworICAgIGRldGFjaCgpOworICAgIGlmIChtX2NvbnRleHRHcm91
cCkgeworICAgICAgICBkZWxldGVPYmplY3QoMCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5y
ZW1vdmVPYmplY3QodGhpcyk7CisgICAgICAgIG1fY29udGV4dEdyb3VwID0gMDsKKyAgICB9Cit9
CisKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTFNoYXJlZE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0R3JvdXAgPyBtX2NvbnRleHRH
cm91cC0+Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgOiAwOworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFNoYXJlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRP
YmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hODg5YTZhNTYxNzVjODY2NjJlYTY5YjYzNzljODZhMDM3MDY3
NTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFyZWRPYmplY3QuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdMU2hh
cmVkT2JqZWN0X2gKKyNkZWZpbmUgV2ViR0xTaGFyZWRPYmplY3RfaAorCisjaW5jbHVkZSAiV2Vi
R0xPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKK2NsYXNzIFdlYkdMQ29udGV4dEdyb3VwOworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OworCitjbGFzcyBXZWJHTFNoYXJlZE9iamVjdCA6IHB1YmxpYyBXZWJHTE9iamVjdCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2ViR0xTaGFyZWRPYmplY3QoKTsKKworICAgIFdlYkdMQ29u
dGV4dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cDsg
fQorCisgICAgdmlydHVhbCBib29sIGlzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0R3Jv
dXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gY29udGV4dEdyb3VwID09IG1fY29udGV4dEdyb3VwOworICAgIH0KKworICAgIHZvaWQg
ZGV0YWNoQ29udGV4dEdyb3VwKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTFNoYXJlZE9iamVj
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9y
Q29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZXh0R3JvdXA7Cisg
ICAgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4
dDNEKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViR0xDb250ZXh0R3JvdXAqIG1fY29udGV4
dEdyb3VwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViR0xP
YmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKaW5k
ZXggZThlOGJmODI0NWQwMzQwMDcyM2U3Mjc2NmYyMDM5NzJlNDNiMTgyZi4uOWFkNThiNGJjMTY0
NzBlYTA0ZjY0ODk4MGI3Njk1MTI2YTNiZDJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJH
TFRleHR1cmUuaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgog
CkBAIC00MCw3ICs0MSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6
OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKIH0KIAogV2ViR0xUZXh0dXJlOjpX
ZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9iamVj
dChjdHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQog
ICAgICwgbV9taW5GaWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVB
UikKICAgICAsIG1fbWFnRmlsdGVyKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpCkBAIC01MCw3
ICs1MSwxMiBAQCBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGN0eCkKICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAgICAsIG1fbmVlZFRvVXNlQmxh
Y2tUZXh0dXJlKGZhbHNlKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZVRleHR1cmUoKSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+Y3JlYXRlVGV4dHVyZSgpKTsKK30KKworV2ViR0xUZXh0dXJlOjp+V2ViR0xU
ZXh0dXJlKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKIHZvaWQgV2ViR0xUZXh0dXJl
OjpzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKQpAQCAtMjI1LDkg
KzIzMSw5IEBAIGJvb2wgV2ViR0xUZXh0dXJlOjpuZWVkVG9Vc2VCbGFja1RleHR1cmUoKSBjb25z
dAogICAgIHJldHVybiBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZTsKIH0KIAotdm9pZCBXZWJHTFRl
eHR1cmU6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdl
YkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNk
LCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKKyAgICBjb250ZXh0M2QtPmRlbGV0ZVRl
eHR1cmUob2JqZWN0KTsKIH0KIAogaW50IFdlYkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleChH
QzNEZW51bSB0YXJnZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5oCmluZGV4IDZiZDEyNzIzY2M3NGFmZDIyN2ExY2JmYzNhNmZmYzE0ZTU5N2Q5ZDguLmQx
ZGI5NTFmZmMyMGQxOTc4NzE5OTUwMzUwNTIxMzE4ZDFmNjBjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdl
YkdMVGV4dHVyZV9oCiAjZGVmaW5lIFdlYkdMVGV4dHVyZV9oCiAKLSNpbmNsdWRlICJXZWJHTE9i
amVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNCw5ICszNCw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xUZXh0dXJlIDogcHVibGlj
IFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMVGV4dHVyZSA6IHB1YmxpYyBXZWJHTFNoYXJlZE9i
amVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xUZXh0dXJlKCkgeyBkZWxldGVPYmpl
Y3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAg
LTczLDcgKzczLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMVGV4dHVyZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgY2xh
c3MgTGV2ZWxJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKaW5kZXggZDE0Yzk2YzAxZjYxNDdlZjRlODBh
OWI4MWVmOWJiY2IwNjE5Mzc1MC4uNGFhMDNiOGZlYTE1MTliOTcyMjM3MDRjYWZiZmE3NjM4MTMy
YWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgUGFzc1JlZlB0cjxXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTPiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVhdGUo
V2ViR0xSZW4KIH0KIAogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgVmFvVHlwZSB0eXBlKQotICAg
IDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAs
IG1fdHlwZSh0eXBlKQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogICAgICwgbV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlcigwKQpAQCAtNTcsOSArNTcsMTQgQEAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGN0eCwKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6On5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkKIHsKLSAgICBFeHRlbnNp
b25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4
dGVuc2lvbnMoKTsKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3sKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVu
c2lvbnMgPSBjb250ZXh0M2QtPmdldEV4dGVuc2lvbnMoKTsKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgVmFvVHlwZURlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCmlu
ZGV4IGY0OWE3ODA2OTMwODM0OWIxNjUwZWI0YmVkZDgyNDc2ODJiODIwMTIuLjc1YWU0MmZmNzI1
YWNkMWRmZWRiY2U2YTBiYzkyZDNjNDAyOGY0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKQEAgLTI3LDIxICsy
NywyMSBAQAogI2RlZmluZSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTX2gKIAogI2luY2x1ZGUg
IldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJH
TENvbnRleHRPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMgOiBwdWJsaWMgV2ViR0xDb250ZXh0T2JqZWN0IHsKIHB1Ymxp
YzoKICAgICBlbnVtIFZhb1R5cGUgewogICAgICAgICBWYW9UeXBlRGVmYXVsdCwKICAgICAgICAg
VmFvVHlwZVVzZXIsCiAgICAgfTsKICAgICAKLSAgICB2aXJ0dWFsIH5XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVMoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKICAg
ICAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5cGUpOwogCi0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2Jq
ZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnRleEFycmF5KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDE4
ZjQ1MDEzMDIyNDBlNTVlZTgyMjAyNTMyN2NiMGM1YzY0NzY4Y2IuLmQ1ODI4OGE4NThmOWU3ZDdi
ODAzOWQxMzQyMzgwNTg0MmIxOWE0MTAgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNTMgQEAKKzIwMTItMDEtMDkgIEdyZWdnIFRhdmFyZXMgIDxnbWFu
QGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIFdlYkdMQ29udGV4dEdyb3VwIGFzIHN0ZXAgdG93
YXJkIHNoYXJpbmcgV2ViR0wgcmVzb3VyY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NTkwNgorCisgICAgICAgIFRoZSBXZWJHTCBXb3JraW5nIEdy
b3VwIHdpbGwgc29vbiBhZGQgdGhlIGFiaWxpdHkgdG8gc2hhcmUKKyAgICAgICAgV2ViR0wgcmVz
b3VyY2VzIGFtb25nIFdlYkdMIGNvbnRleHRzLiBUaGlzIGlzIHRoZSBuZWNlc3NhcnkKKyAgICAg
ICAgcHJlcCB3b3JrLiBOTyBBUEkgY2hhbmdlcy4KKworICAgICAgICBBZGRlZCBXZWJHTFNoYXJl
ZE9iamVjdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBzaGFyZWQgdnMKKyAgICAgICAgV2ViR0xDb250
ZXh0T2JqZWN0IGZvciBvYmplY3RzIHRoYXQgYXJlIG5vdC4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpjcmVhdGVWZXJ0ZXhB
cnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRl
VmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VTVmVydGV4QXJyYXlPYmplY3Q6
OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VTVmVydGV4QXJyYXlPYmpl
Y3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjp+V2ViR0xCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMQnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OldlYkdMQ29udGV4dEdy
b3VwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjp+V2ViR0xDb250ZXh0
R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmdldEFHcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6YWRkQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjphZGRPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXAp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmguCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xD
b250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xDb250ZXh0T2JqZWN0Ojp+V2ViR0xDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbnRleHRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmguCisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRl
eHRPYmplY3Q6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0
Ojp2YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6Omhhc0dy
b3VwT3JDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6fldlYkdMRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudEZvckJv
dW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0
QXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xG
cmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6b25BY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6ZGVs
ZXRlT2JqZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppbml0
aWFsaXplUmVuZGVyYnVmZmVycyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTE9iamVjdDo6fldlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0
OjpkZWxldGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OmRldGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6b25EZXRhY2hlZCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjp+V2ViR0xQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZl
cjo6fldlYkdMUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVm
ZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1
ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
bml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hT
aGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1l
YnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3ZlQWxs
T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRW
ZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
bG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojps
b3NlQ29udGV4dEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb250ZXh0
R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVy
OjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OldlYkdMU2hhcmVkT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojp+V2ViR0xTaGFyZWRPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmRldGFjaENvbnRleHRHcm91cCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmNvbnRleHRHcm91cCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xTaGFyZWRPYmplY3Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xT
aGFyZWRPYmplY3Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9i
amVjdDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmpl
Y3Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojppc1Rl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpoYXNHcm91cE9yQ29udGV4dCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6fldlYkdMVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6
OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTOjp+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisKIDIwMTItMDEtMDkgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFtBQ10g
U2ltcGxpZnkgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgYnVpbGQgb3B0aW9ucwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122297</attachid>
            <date>2012-01-12 13:28:43 -0800</date>
            <delta_ts>2012-01-12 13:31:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75906-20120112132842.patch</filename>
            <type>text/plain</type>
            <size>78586</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDU5ZmNl
ZTI0NjgwNDc5OTUxNTY1NWIwN2VhNTFjMzdlZDE2NDUyZDkuLjZlZjAwNzJmYmRiNDY4MWJjYTlk
YmIxYjY4ZDI3ODYyZGNjZTIyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTY5LDYgKzIx
NjksOCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAorICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdS
ZW5kZXJlckluZm8uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNw
cAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcApAQCAtMjE3OSw2ICsy
MTgxLDcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCisgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAogICAg
ICAgICBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOWVhYWVjYWUzODg2ZDM1OGVhYjUwMDllZWY1MmY4MWM0
NjgyMjdjNS4uYmQ0YjVlNTQ4MWRjMjczM2I1YWJlY2I5NDdkZWQ4MGQ4M2M3OWYzOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NTY3LDYgKzU1NjcsMTAgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaCBc
CisJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIFwKQEAgLTU1ODcsNiArNTU5MSw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDRiZWMyMTRmYWRjNGY2ZGE4
NDY5MTQxODcwMDExOGMxNDNkYzE2MzMuLmUyY2ZmYjFhNDM5MTAxNzE0OTQ0NWZlZGI2YjgyM2Y2
NjlkYjQyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzY3Miw2ICszNjcyLDggQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZXMuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmggXAorICAgICAg
ICBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oIFwKKyAgICAgICAgaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oIFwK
ICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaCBcCkBAIC0zNjgyLDYgKzM2ODQs
NyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oIFwKKyAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaCBcCiAgICAgICAgIGh0bWwvY2Fu
dmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL09FU1Rl
eHR1cmVGbG9hdC5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3Qu
aCBcCkBAIC0zNzA5LDYgKzM3MTIsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9
MSkgewogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5jcHAgXAog
ICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCiAgICAgICAg
IGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcCBcCisgICAgICAgIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmNwcCBcCisgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4
dE9iamVjdC5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZv
LmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcCBcCiAgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcCBcCkBAIC0zNzE5LDYgKzM3MjQsNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwIFwK
KyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwIFwKICAgICAgICAgaHRt
bC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgXAogICAgICAgICBodG1sL2NhbnZh
cy9PRVNUZXh0dXJlRmxvYXQuY3BwIFwKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YXlPYmplY3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2MzJhZmVlYjgxMzdlYmE0ZWZhZWEx
YWRlNTc5N2MyMTQxODM4MTExLi4wYjE4YWE5YjI3ODBmMmQ4OGRiMDYzZjM5ODFhMmI5MTg5M2Vk
YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01ODE2LDYgKzU4MTYsMTAgQEAKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgnLAogICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0RXZlbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0R3JvdXAuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwJywKQEAgLTU4MzgsNiArNTg0Miw4
IEBACiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgnLAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xTaGFyZWRPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFNoYXJl
ZE9iamVjdC5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwJywK
ICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAppbmRleCBhMjZkNzA2
OWY2ZWNkNWE4YjQxOGI5YWNlODIyY2FkMzIyYWE1YmYzLi5jZWE1MjVjMzk5MDEzZDUyNmU0Y2Vi
NzNiOTkxNTUzNGUxMDVmMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIFBhc3NSZWZQdHI8
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gT0VTVmVydGV4QXJyYXlPYmplY3Q6OmNyZWF0ZVZl
cnRleEFycmF5T0VTCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIFJlZlB0cjxXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTPiBvID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRl
KG1fY29udGV4dCwgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmFvVHlwZVVzZXIpOwotICAg
IG1fY29udGV4dC0+YWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIG1fY29udGV4dC0+YWRkQ29udGV4
dE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gby5yZWxlYXNlKCk7CiB9CiAKQEAgLTY5LDcg
KzY5LDcgQEAgdm9pZCBPRVNWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMo
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXkKICAgICBpZiAoIWFycmF5T2JqZWN0IHx8
IG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
YXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdCgpOworICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmpl
Y3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKTsKIH0KIAogR0MzRGJvb2xlYW4gT0VT
VmVydGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyogYXJyYXlPYmplY3QpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgT0VTVmVydGV4QXJyYXlP
YmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKiBhcnJh
eU9iCiAgICAgaWYgKG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgaWYgKGFycmF5T2JqZWN0ICYmIGFycmF5T2JqZWN0LT5jb250ZXh0KCkgIT0g
bV9jb250ZXh0KSB7CisgICAgaWYgKGFycmF5T2JqZWN0ICYmICFhcnJheU9iamVjdC0+dmFsaWRh
dGUoMCwgY29udGV4dCgpKSkgewogICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ1ZmZlci5jcHAKaW5kZXggOTk3ZGJhNTAwZWQ1MDM4M2M2NDNlOGUxZjA5MDY1ZGIwZjZi
Njg2MS4uZmM2ZDQwODYwNjc1ZDZmMTZhOTYzNGMyYzYxNmQ1NmFlY2I1MWYzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAKICNpbmNsdWRlICJDaGVja2VkSW50LmgiCisjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXJWaWV3Lmg+CiAKQEAgLTQxLDE4ICs0Miwy
MyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAgOiBXZWJH
TFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQogICAgICwgbV9ieXRlTGVuZ3Ro
KDApCiAgICAgLCBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5KDApCiB7Ci0gICAgc2V0T2JqZWN0
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCkpOworICAgIHNl
dE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpKTsKICAgICBj
bGVhckNhY2hlZE1heEluZGljZXMoKTsKIH0KIAotdm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMQnVmZmVyOjp+V2ViR0xCdWZm
ZXIoKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVy
KG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdlYkdMQnVmZmVyOjpk
ZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KQoreworICAgICAgY29udGV4dDNkLT5kZWxldGVCdWZmZXIob2JqZWN0KTsK
IH0KIAogYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoQXJyYXlCdWZm
ZXIqIGFycmF5LCBHQzNEaW50cHRyIGJ5dGVPZmZzZXQsIEdDM0RzaXplaXB0ciBieXRlTGVuZ3Ro
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKaW5kZXggMDE1N2VjZTY1
ZjBjZTRiN2M0MDdiN2JjYjU5ZDc5Njg3NTE0MGMwNy4uODQ5YzM1ODJiZDc5Y2E4YzE1MDUxNDc1
MzBmZDkwZTdkY2I1ZTk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkdMQnVmZmVyX2gKICNkZWZpbmUgV2Vi
R0xCdWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFNo
YXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KQEAgLTM1LDkgKzM1LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitjbGFzcyBXZWJHTEJ1
ZmZlciA6IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
V2ViR0xCdWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xCdWZm
ZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmpl
Y3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kM2FmMmJiYmUwYjE3N2EzZTY1YzQwODEzMzk5NmQ5MTJj
YmNmMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0R3JvdXAuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJXZWJHTENvbnRleHRH
cm91cC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgorCisj
aWYgUExBVEZPUk0oUVQpCisjdW5kZWYgZW1pdAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gV2ViR0xDb250ZXh0R3JvdXA6OmNy
ZWF0ZSgpCit7CisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjb250ZXh0R3JvdXAgPSBh
ZG9wdFJlZihuZXcgV2ViR0xDb250ZXh0R3JvdXAoKSk7CisgICAgcmV0dXJuIGNvbnRleHRHcm91
cC5yZWxlYXNlKCk7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjpXZWJHTENvbnRleHRHcm91cCgp
Cit7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjp+V2ViR0xDb250ZXh0R3JvdXAoKQoreworICAg
IGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIFdl
YkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0cy5pc0VtcHR5KCkpOworICAgIEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOworICAgIHJldHVybiAoKml0KS0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKK30KKwordm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkQ29u
dGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9jb250ZXh0cy5h
ZGQoY29udGV4dCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIFdlIG11c3QgY2FsbCBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzIGJlZm9yZSByZW1vdmluZyB0aGUgbGFzdCBjb250ZXh0
LgorICAgIGlmIChtX2NvbnRleHRzLnNpemUoKSA9PSAxICYmIG1fY29udGV4dHMuY29udGFpbnMo
Y29udGV4dCkpCisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKworICAgIG1f
Y29udGV4dHMucmVtb3ZlKGNvbnRleHQpOworfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpy
ZW1vdmVPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBtX2dyb3VwT2Jq
ZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7CisgICAgbV9ncm91cE9iamVjdHMuYWRk
KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUFs
bE9iamVjdHMoKQoreworICAgIHdoaWxlICghbV9ncm91cE9iamVjdHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEhhc2hTZXQ8V2ViR0xTaGFyZWRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2dyb3Vw
T2JqZWN0cy5iZWdpbigpOworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dEdyb3VwKCk7Cisg
ICAgfQorfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpsb3NlQ29udGV4dEdyb3VwKFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgZm9yIChIYXNo
U2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVn
aW4oKTsgaXQgIT0gbV9jb250ZXh0cy5lbmQoKTsgKytpdCkKKyAgICAgICAgKCppdCktPmxvc2VD
b250ZXh0SW1wbChtb2RlKTsKKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWE3MDM2YWU2NGU1ODI1OTkwMzQwYTEyOWIzNGI3MWMzM2FkYzY2MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENvbnRleHRHcm91cF9oCisjZGVm
aW5lIFdlYkdMQ29udGV4dEdyb3VwX2gKKworI2luY2x1ZGUgPFdlYkdMUmVuZGVyaW5nQ29udGV4
dC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBX
ZWJHTFNoYXJlZE9iamVjdDsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKKwordHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXAgOiBwdWJsaWMg
UmVmQ291bnRlZDxXZWJHTENvbnRleHRHcm91cD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5XZWJHTENv
bnRleHRHcm91cCgpOworCisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKwor
ICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVP
YmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRB
R3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgIHZvaWQgbG9zZUNvbnRleHRHcm91cChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSk7CisKKyAgcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgV2ViR0xPYmplY3Q7CisKKyAgICBXZWJHTENvbnRleHRHcm91cCgpOworCisgICAg
dm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICBIYXNoU2V0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxXZWJHTFNoYXJlZE9iamVj
dCo+IG1fZ3JvdXBPYmplY3RzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gV2ViR0xDb250ZXh0R3JvdXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWIzYWIwYjljNmU0ZDEzYmM1
MmFlNmIxNGI4NjRhODZkZDFhM2RiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJHTENvbnRleHRPYmplY3Q6OldlYkdM
Q29udGV4dE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBXZWJH
TE9iamVjdChjb250ZXh0KQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1dlYkdM
Q29udGV4dE9iamVjdDo6fldlYkdMQ29udGV4dE9iamVjdCgpCit7CisgICAgaWYgKG1fY29udGV4
dCkKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVDb250ZXh0T2JqZWN0KHRoaXMpOworfQorCit2
b2lkIFdlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCgpCit7CisgICAgZGV0YWNoKCk7
CisgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICBkZWxldGVPYmplY3QobV9jb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVDb250ZXh0T2Jq
ZWN0KHRoaXMpOworICAgICAgICBtX2NvbnRleHQgPSAwOworICAgIH0KK30KKworR3JhcGhpY3ND
b250ZXh0M0QqIFdlYkdMQ29udGV4dE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ID8gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQz
RCgpIDogMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjdm
NTA3MDU1MGMwNjg4NjRjOWE4MTQ1Mjc4YmQ1NTJhY2M1OTM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENvbnRleHRPYmplY3RfaAorI2RlZmluZSBX
ZWJHTENvbnRleHRPYmplY3RfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJXZWJHTE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworCisvLyBXZWJH
TENvbnRleHRPYmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBhcmUgb3duZWQg
YnkgYSBzcGVjaWZpYworLy8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LgorY2xhc3MgV2ViR0xDb250
ZXh0T2JqZWN0IDogcHVibGljIFdlYkdMT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5X
ZWJHTENvbnRleHRPYmplY3QoKTsKKworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdmlydHVhbCBib29sIHZhbGlk
YXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQgPT0gbV9jb250
ZXh0OworICAgIH0KKworICAgIHZvaWQgZGV0YWNoQ29udGV4dCgpOworCitwcm90ZWN0ZWQ6Cisg
ICAgV2ViR0xDb250ZXh0T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworCisgICAgdmly
dHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2NvbnRleHQ7CisgICAgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0
QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX29iamVjdDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkdMQ29udGV4dE9iamVj
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CmluZGV4IGQxYWY1MThjMDUxNjU1ZjkzNDFkMmRmYmJhYzE2OWM2MzFiNTYyYmYuLjM2ODNmMTM5
YmZmNmQ4OGU1NTgyZDY5MDk4NWI2MzcwM2RiZDg3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0yOSwxMyArMjksMTQgQEAKIAog
I2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotICAgIGJvb2wgaXNBdHRhY2htZW50Q29tcGxldGUo
V2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAgIGJv
b2wgaXNBdHRhY2htZW50Q29tcGxldGUoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0
LCBHQzNEZW51bSBhdHRhY2htZW50KQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2Jq
ZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhdHRhY2hl
ZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CkBAIC02Miw3ICs2Myw3IEBAIG5hbWVzcGFjZSB7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEdDM0RzaXplaSBnZXRJbWFnZVdp
ZHRoKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VX
aWR0aChXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBB
U1NFUlQoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3QtPm9iamVjdCgpKTsKICAgICAg
ICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKTsKQEAgLTcwLDcgKzcx
LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAg
ICB9CiAKLSAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VIZWlnaHQoV2ViR0xPYmplY3QqIGF0dGFjaGVk
T2JqZWN0KQorICAgIEdDM0RzaXplaSBnZXRJbWFnZUhlaWdodChXZWJHTFNoYXJlZE9iamVjdCog
YXR0YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QgJiYg
YXR0YWNoZWRPYmplY3QtPm9iamVjdCgpKTsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0
LT5pc1JlbmRlcmJ1ZmZlcigpKTsKQEAgLTc4LDcgKzc5LDcgQEAgbmFtZXNwYWNlIHsKICAgICAg
ICAgcmV0dXJuIGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgfQogCi0gICAgYm9vbCBpc1VuaW5p
dGlhbGl6ZWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAgIGJvb2wgaXNVbmluaXRp
YWxpemVkKFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKICAgICB7CiAgICAgICAg
IGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkgJiYgYXR0YWNo
ZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkKICAgICAgICAgICAgICYmICEocmVpbnRlcnByZXRf
Y2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFjaGVkT2JqZWN0KSktPmlzSW5pdGlhbGl6ZWQo
KSkKQEAgLTg2LDEzICs4NywxMyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRJbml0aWFsaXplZChXZWJHTE9iamVjdCogYXR0YWNoZWRP
YmplY3QpCisgICAgdm9pZCBzZXRJbml0aWFsaXplZChXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNo
ZWRPYmplY3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRP
YmplY3QtPm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKQogICAg
ICAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9i
amVjdCkpLT5zZXRJbml0aWFsaXplZCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZChXZWJH
TE9iamVjdCogYXR0YWNoZWRPYmplY3QpCisgICAgYm9vbCBpc1ZhbGlkUmVuZGVyYnVmZmVyKFdl
YkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKICAgICB7CiAgICAgICAgIGlmIChhdHRh
Y2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkgJiYgYXR0YWNoZWRPYmplY3Qt
PmlzUmVuZGVyYnVmZmVyKCkpIHsKICAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9iamVjdCkpLT5pc1ZhbGlkKCkpCkBAIC0xMDks
MTIgKzExMCwxNyBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJhbWVidWZm
ZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eAogfQogCiBXZWJHTEZyYW1lYnVm
ZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQotICAgIDog
V2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAsIG1f
aGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKICAgICAsIG1fdGV4VGFyZ2V0KDApCiAgICAgLCBtX3Rl
eExldmVsKC0xKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgIHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworfQorCitXZWJHTEZyYW1lYnVmZmVyOjp+
V2ViR0xGcmFtZWJ1ZmZlcigpCit7CisgICAgZGVsZXRlT2JqZWN0KDApOwogfQogCiB2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBH
QzNEaW50IGxldmVsKQpAQCAtMTc5LDcgKzE4NSw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6
c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2Vi
CiAgICAgICAgIHJlbmRlcmJ1ZmZlci0+b25BdHRhY2hlZCgpOwogfQogCi1XZWJHTE9iamVjdCog
V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KSBjb25z
dAorV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQoR0Mz
RGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIwMywxMCArMjA5LDEyIEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAg
ICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKICAgICAgICAgaWYgKG1fY29sb3JBdHRh
Y2htZW50KSB7Ci0gICAgICAgICAgICBtX2NvbG9yQXR0YWNobWVudC0+b25EZXRhY2hlZCgpOwor
ICAgICAgICAgICAgbV9jb2xvckF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAg
ICAgICAgICAgIG1fY29sb3JBdHRhY2htZW50ID0gMDsKICAgICAgICAgICAgIG1fdGV4VGFyZ2V0
ID0gMDsKICAgICAgICAgICAgIG1fdGV4TGV2ZWwgPSAtMTsKQEAgLTIxNCwxOSArMjIyLDE5IEBA
IHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVm
ZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgIGlmIChtX2RlcHRoQXR0YWNo
bWVudCkgewotICAgICAgICAgICAgbV9kZXB0aEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAg
ICAgICAgICAgIG1fZGVwdGhBdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAg
ICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAg
ICBpZiAobV9zdGVuY2lsQXR0YWNobWVudCkgewotICAgICAgICAgICAgbV9zdGVuY2lsQXR0YWNo
bWVudC0+b25EZXRhY2hlZCgpOworICAgICAgICAgICAgbV9zdGVuY2lsQXR0YWNobWVudC0+b25E
ZXRhY2hlZChjb250ZXh0M2QpOwogICAgICAgICAgICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IDA7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxBdHRh
Y2htZW50KSB7Ci0gICAgICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNo
ZWQoKTsKKyAgICAgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZChj
b250ZXh0M2QpOwogICAgICAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gMDsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIzNiwxNCArMjQ0LDE2IEBAIHZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IGF0dGFjaG1lbnQpCiAgICAgfQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTE9iamVjdCogYXR0YWNobWVudCkKK3Zv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVy
KFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2htZW50KQogewogICAgIEFTU0VSVChpc0JvdW5kKCkp
OwogICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWF0dGFjaG1l
bnQpCiAgICAgICAgIHJldHVybjsKKwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnYzNkID0gY29u
dGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gbV9j
b2xvckF0dGFjaG1lbnQuZ2V0KCkpIHsKICAgICAgICAgaWYgKGF0dGFjaG1lbnQtPmlzUmVuZGVy
YnVmZmVyKCkpCiAgICAgICAgICAgICBnYzNkLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CkBAIC0zMzcsNyAr
MzQ3LDcgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoKSBjb25zdAog
ICAgIGlmIChpc0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkpIHsKICAgICAgICAgaWYgKCFpc0F0dGFj
aG1lbnRDb21wbGV0ZShtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpKQogICAgICAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAg
ICAgIGlmICghaXNWYWxpZChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpKQorICAgICAg
ICBpZiAoIWlzVmFsaWRSZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CiAgICAgICAgIGlmICghY291bnQpIHsKICAgICAgICAgICAgIHdpZHRoID0gZ2V0
SW1hZ2VXaWR0aChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpOwpAQCAtMzY5LDI5ICsz
NzksMjkgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoKSBjb25zdAog
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CiB9CiAK
LWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVu
ZGVyYnVmZmVycykKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzZCwgYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycykKIHsK
ICAgICBpZiAoY2hlY2tTdGF0dXMoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
Q09NUExFVEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVycygp
OworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoY29udGV4dDNkKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQogewogICAgIGlmIChtX2NvbG9yQXR0YWNobWVudCkKLSAgICAgICAgbV9jb2xv
ckF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9jb2xvckF0dGFjaG1lbnQtPm9u
RGV0YWNoZWQoY29udGV4dDNkKTsKICAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQpCi0gICAgICAg
IG1fZGVwdGhBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fZGVwdGhBdHRhY2ht
ZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgaWYgKG1fc3RlbmNpbEF0dGFjaG1lbnQp
Ci0gICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9z
dGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgIGlmIChtX2RlcHRo
U3RlbmNpbEF0dGFjaG1lbnQpCi0gICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25E
ZXRhY2hlZCgpOwotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlRnJh
bWVidWZmZXIob2JqZWN0KTsKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vbkRl
dGFjaGVkKGNvbnRleHQzZCk7CisgICAgY29udGV4dDNkLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmpl
Y3QpOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJz
KCkKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoR3JhcGhp
Y3NDb250ZXh0M0QqIGczZCkKIHsKICAgICBBU1NFUlQob2JqZWN0KCkpOwogICAgIGJvb2wgaW5p
dENvbG9yID0gZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9IGZhbHNlOwpA
QCAtNDE4LDcgKzQyOCw2IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRl
cmJ1ZmZlcnMoKQogCiAgICAgLy8gV2Ugb25seSBjbGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJi
dWZmZXJzIHdoZW4gdGhleSBhcmUgcmVhZHkgdG8gYmUKICAgICAvLyByZWFkLCBpLmUuLCB3aGVu
IHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4KLSAgICBHcmFwaGljc0NvbnRleHQzRCogZzNk
ID0gY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChnM2QtPmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCmluZGV4
IDExMGY1MTM5NWY5Yjc4NDQxYjgxOWQ5MzQ1NTk2MDMyODFkMGI0ZmQuLjY2YTFmZmE0OWUwZTkz
MTRiNTJkMmE5OWQ2YzRkYzAxN2ZhNDFmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgV2ViR0xG
cmFtZWJ1ZmZlcl9oCiAjZGVmaW5lIFdlYkdMRnJhbWVidWZmZXJfaAogCi0jaW5jbHVkZSAiV2Vi
R0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsMTkgKzM3LDE5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwogY2xhc3MgV2ViR0xUZXh0dXJlOwogCi1j
bGFzcyBXZWJHTEZyYW1lYnVmZmVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdM
RnJhbWVidWZmZXIgOiBwdWJsaWMgV2ViR0xDb250ZXh0T2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5XZWJHTEZyYW1lYnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1
YWwgfldlYkdMRnJhbWVidWZmZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZvaWQgc2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsKTsKICAgICB2b2lkIHNl
dEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdlYkdM
UmVuZGVyYnVmZmVyKik7CiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGF0dGFjaGVkIHRvIHRoZSBj
dXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KLSAgICB2b2lkIHJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTE9iamVjdCopOworICAgIHZvaWQgcmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0Kik7CiAg
ICAgLy8gSWYgYSBnaXZlbiBhdHRhY2htZW50IHBvaW50IGZvciB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyIGlzIG5vdCBudWxsLCByZW1vdmUgdGhlIGF0dGFjaGVkIG9iamVjdC4KICAg
ICB2b2lkIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSk7Ci0g
ICAgV2ViR0xPYmplY3QqIGdldEF0dGFjaG1lbnQoR0MzRGVudW0pIGNvbnN0OworICAgIFdlYkdM
U2hhcmVkT2JqZWN0KiBnZXRBdHRhY2htZW50KEdDM0RlbnVtKSBjb25zdDsKIAogICAgIEdDM0Rl
bnVtIGdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3Q7CiAgICAgR0MzRHNpemVpIGdldENvbG9y
QnVmZmVyV2lkdGgoKSBjb25zdDsKQEAgLTYwLDcgKzYxLDcgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3aXNlIGlu
aXRpYWxpemUKICAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBpbml0aWFs
aXplZCBhbmQKICAgICAvLyBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycyBpcyB0cnVlLgot
ICAgIGJvb2wgb25BY2Nlc3MoYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycyk7Cisg
ICAgYm9vbCBvbkFjY2VzcyhHcmFwaGljc0NvbnRleHQzRCosIGJvb2wgbmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMpOwogCiAgICAgLy8gU29mdHdhcmUgdmVyc2lvbiBvZiBnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXMoKSwgZXhjZXB0IHRoYXQgd2hlbgogICAgIC8vIEZSQU1FQlVGRkVSX0NP
TVBMRVRFIGlzIHJldHVybmVkLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSBmb3IKQEAgLTc1LDEzICs3
NiwxMyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBs
YXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzRnJhbWVidWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZS4KLSAgICBib29sIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKCk7CisgICAgYm9vbCBpbml0aWFsaXplUmVuZGVyYnVmZmVycyhH
cmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlz
IGN1cnJlbnRseSBib3VuZC4KICAgICBib29sIGlzQm91bmQoKSBjb25zdDsKQEAgLTkxLDEwICs5
MiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJl
dHVybiAobV9zdGVuY2lsQXR0YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3Qo
KSk7IH0KICAgICBib29sIGlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAo
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2Jq
ZWN0KCkpOyB9CiAKLSAgICBSZWZQdHI8V2ViR0xPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50Owot
ICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aEF0dGFjaG1lbnQ7Ci0gICAgUmVmUHRyPFdl
YkdMT2JqZWN0PiBtX3N0ZW5jaWxBdHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4g
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIFJlZlB0cjxXZWJHTFNoYXJlZE9iamVjdD4g
bV9jb2xvckF0dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRo
QXR0YWNobWVudDsKKyAgICBSZWZQdHI8V2ViR0xTaGFyZWRPYmplY3Q+IG1fc3RlbmNpbEF0dGFj
aG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFj
aG1lbnQ7CiAKICAgICBib29sIG1faGFzRXZlckJlZW5Cb3VuZDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCmluZGV4IDdiNjI5YTY5Yzc0MzZjMDkwOWMzOTY3
M2IwYjUwNDFhNDM4ZTIxZTEuLmZkOTkzMGYzYWMwNDZkNTI1YzdlMmY5ZWFjMTdhMmVkNWZkYTUy
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKQEAgLTI5
LDEzICsyOSwyMCBAQAogCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKIAorI2luY2x1ZGUgIk9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNp
bmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVzLmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNsdWRlICJX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIK
KyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2ViR0xPYmplY3Q6OldlYkdMT2Jq
ZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fb2JqZWN0KDApCi0g
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fYXR0YWNobWVudENvdW50KDApCiAgICAg
LCBtX2RlbGV0ZWQoZmFsc2UpCiB7CkBAIC00Myw4ICs1MCw2IEBAIFdlYkdMT2JqZWN0OjpXZWJH
TE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAKIFdlYkdMT2JqZWN0Ojp+
V2ViR0xPYmplY3QoKQogewotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+
cmVtb3ZlT2JqZWN0KHRoaXMpOwogfQogCiB2b2lkIFdlYkdMT2JqZWN0OjpzZXRPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC01NCwyNiArNTksMzggQEAgdm9pZCBXZWJHTE9iamVj
dDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogICAgIG1fb2JqZWN0ID0gb2Jq
ZWN0OwogfQogCi12b2lkIFdlYkdMT2JqZWN0OjpkZWxldGVPYmplY3QoKQordm9pZCBXZWJHTE9i
amVjdDo6ZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCiB7CiAgICAg
bV9kZWxldGVkID0gdHJ1ZTsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9vYmplY3QpCisgICAg
aWYgKCFtX29iamVjdCkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFoYXNHcm91cE9yQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50KSB7
Ci0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgICAgIGRlbGV0ZU9iamVjdEltcGwobV9vYmplY3QpOworICAgICAgICBpZiAo
IWNvbnRleHQzZCkKKyAgICAgICAgICAgIGNvbnRleHQzZCA9IGdldEFHcmFwaGljc0NvbnRleHQz
RCgpOworCisgICAgICAgIGlmIChjb250ZXh0M2QpCisgICAgICAgICAgICBkZWxldGVPYmplY3RJ
bXBsKGNvbnRleHQzZCwgbV9vYmplY3QpOworCiAgICAgICAgIG1fb2JqZWN0ID0gMDsKICAgICB9
CiB9CiAKLXZvaWQgV2ViR0xPYmplY3Q6OmRldGFjaENvbnRleHQoKQordm9pZCBXZWJHTE9iamVj
dDo6ZGV0YWNoKCkKIHsKICAgICBtX2F0dGFjaG1lbnRDb3VudCA9IDA7IC8vIE1ha2Ugc3VyZSBP
cGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRlZC4KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAg
IGRlbGV0ZU9iamVjdCgpOwotICAgICAgICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsK
LSAgICAgICAgbV9jb250ZXh0ID0gMDsKICAgICB9CisKKwordm9pZCBXZWJHTE9iamVjdDo6b25E
ZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQoreworICAgIGlmIChtX2F0dGFj
aG1lbnRDb3VudCkKKyAgICAgICAgLS1tX2F0dGFjaG1lbnRDb3VudDsKKyAgICBpZiAobV9kZWxl
dGVkKQorICAgICAgICBkZWxldGVPYmplY3QoY29udGV4dDNkKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKaW5kZXggNDRjYzM2ZjZiZmUyNGFjMDRmZTkx
ZGU2OGM4ODEwNGI0OWQwNzYzYS4uODQxZDBmOWZjOGNmYmNhODgyNmQ0MjFiM2JiNmI0NmNkZjMx
MTMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCkBAIC0zMyw2
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDsKIAogY2xhc3MgV2ViR0xPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTE9iamVjdD4g
ewpAQCAtNDQsMzMgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICAvLyBkZWxldGVPYmplY3QgbWF5IG5v
dCBhbHdheXMgZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2UuICBGb3IgcHJvZ3JhbXMgYW5kCiAg
ICAgLy8gc2hhZGVycywgZGVsZXRpb24gaXMgZGVsYXllZCB1bnRpbCB0aGV5IGFyZSBubyBsb25n
ZXIgYXR0YWNoZWQuCiAgICAgLy8gRklYTUU6IHJldmlzaXQgdGhpcyB3aGVuIHJlc291cmNlIHNo
YXJpbmcgYmV0d2VlbiBjb250ZXh0cyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgdm9pZCBkZWxldGVP
YmplY3QoKTsKLQotICAgIHZvaWQgZGV0YWNoQ29udGV4dCgpOwotCi0gICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJidWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkZWxldGVP
YmplY3QoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIHZvaWQgb25BdHRhY2hlZCgpIHsgKytt
X2F0dGFjaG1lbnRDb3VudDsgfQotICAgIHZvaWQgb25EZXRhY2hlZCgpCi0gICAgewotICAgICAg
ICBpZiAobV9hdHRhY2htZW50Q291bnQpCi0gICAgICAgICAgICAtLW1fYXR0YWNobWVudENvdW50
OwotICAgICAgICBpZiAobV9kZWxldGVkKQotICAgICAgICAgICAgZGVsZXRlT2JqZWN0KCk7Ci0g
ICAgfQorICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgLy8g
VGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IHNpZGUgaXNzdWUgYSBkZWxldGUgY2Fs
bCBhbHJlYWR5LCBub3QKICAgICAvLyB3aGV0aGVyIHRoZSBPcGVuR0wgcmVzb3VyY2UgaXMgZGVs
ZXRlZC4KICAgICAvLyBvYmplY3QoKT09MCBpbmRpY2F0ZXMgdGhlIE9wZW5HTCByZXNvdXJjZSBp
cyBkZWxldGVkLgogICAgIGJvb2wgaXNEZWxldGVkKCkgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAK
KyAgICAvLyBUcnVlIGlmIHRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8gdGhlIGdyb3VwIG9yIGNvbnRl
eHQuCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwg
Y29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTc4LDExICs2Niwx
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAK
ICAgICAvLyBkZWxldGVPYmplY3RJbXBsIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHRvIGRl
bGV0ZSB0aGUgT3BlbkdMIHJlc291cmNlLgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2goKTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFw
aGljc0NvbnRleHQzRCgpIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fb2JqZWN0OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwogICAg
IHVuc2lnbmVkIG1fYXR0YWNobWVudENvdW50OwogICAgIGJvb2wgbV9kZWxldGVkOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCmluZGV4IGQzZWZkYTQ3
ZGVlNDYzNjU1NGRiYzA3Nzg5ZDQzMmQzOThhY2MyMGYuLmY2ODU0M2NlNGQ5OTBkYjU4ZTE1N2Uw
MzRlYzI3MDVkNDI1NTY3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgi
CiAKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwzMiArNDAsMzYgQEAg
UGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdM
U2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fbGlua1N0YXR1cyhmYWxzZSkKICAgICAsIG1fbGlu
a0NvdW50KDApCiB7Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+Y3JlYXRlUHJvZ3JhbSgpKTsKKyAgICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQz
RCgpLT5jcmVhdGVQcm9ncmFtKCkpOwogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iaikKK1dlYkdMUHJvZ3JhbTo6fldlYkdMUHJvZ3Jh
bSgpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVQcm9ncmFt
KG9iaik7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2Jq
ZWN0IG9iaikKK3sKKyAgICBjb250ZXh0M2QtPmRlbGV0ZVByb2dyYW0ob2JqKTsKICAgICBpZiAo
bV92ZXJ0ZXhTaGFkZXIpIHsKLSAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoKTsK
KyAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAg
bV92ZXJ0ZXhTaGFkZXIgPSAwOwogICAgIH0KICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikgewot
ICAgICAgICBtX2ZyYWdtZW50U2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fZnJhZ21l
bnRTaGFkZXItPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgbV9mcmFnbWVudFNoYWRl
ciA9IDA7CiAgICAgfQogfQogCi1ib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJM
b2NhdGlvbnMoKQorYm9vbCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25z
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCiB7CiAgICAgbV9hY3RpdmVBdHRyaWJMb2Nh
dGlvbnMuY2xlYXIoKTsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKIAogICAgIC8vIEFzc3VtZSBsaW5rIHN0YXR1cyBoYXMgYWxyZWFkeSBiZWVu
IGNhY2hlZC4KICAgICBpZiAoIW1fbGlua1N0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmgKaW5kZXggMGRkM2JhMGZhYWZiOWQ3MDZhYzkzNjFkMTlhNWYwODkz
MTY5NjIzNi4uMTUwNTAxMTAwNWQ0Zjg5Y2ZkZDY1M2JkY2I4NTU3NTQ0OTExOTBjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgV2ViR0xQcm9ncmFtX2gKICNkZWZpbmUgV2ViR0xQcm9ncmFtX2gKIAotI2luY2x1
ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2lu
Y2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKQEAgLTM2LDE1ICszNiwxNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUHJvZ3JhbSA6IHB1YmxpYyBXZWJHTE9iamVjdCB7Citj
bGFzcyBXZWJHTFByb2dyYW0gOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgot
ICAgIHZpcnR1YWwgfldlYkdMUHJvZ3JhbSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0
dWFsIH5XZWJHTFByb2dyYW0oKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgLy8gY2FjaGVBY3RpdmVB
dHRyaWJMb2NhdGlvbigpIGlzIG9ubHkgY2FsbGVkIG9uY2UgYWZ0ZXIgbGlua1Byb2dyYW0oKQog
ICAgIC8vIHN1Y2NlZWRzLgotICAgIGJvb2wgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsK
KyAgICBib29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKik7
CiAgICAgdW5zaWduZWQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkgY29uc3Q7CiAgICAgR0Mz
RGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCkgY29uc3Q7CiAKQEAg
LTY3LDcgKzY3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAppbmRleCA5M2I5MTY1
Yzk5NDc0OWY2M2RjNTAzYTM2MjA4YzUxZmJlZGI2NDcwLi5kYWFmOWQ0ZWU1OWIzY2E2NmIxY2Rj
Yzg3YWIwMGExOTdmMDE3YjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJidWZmZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJH
TFJlbmRlcmJ1ZmZlci5oIgogCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzgsOCArMzksMTMgQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJi
dWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGMKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVyKGN0eCkpOwogfQogCitXZWJHTFJlbmRlcmJ1ZmZlcjo6
fldlYkdMUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKIFdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkK
ICAgICAsIG1faW50ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQogICAgICwg
bV9pbml0aWFsaXplZChmYWxzZSkKICAgICAsIG1fd2lkdGgoMCkKQEAgLTQ3LDEyICs1MywxMiBA
QCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjdHgpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1faGFzRXZlckJlZW5Cb3Vu
ZChmYWxzZSkKIHsKLSAgICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyYnVm
ZmVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJH
TFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNz
Q29udGV4dDNEKCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOworICAgIGNvbnRleHQzZC0+
ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCmluZGV4IDRiNDdiZjVkMzJlODQ2OGQwZjky
ZWE5MWU1YThkNjQzM2NjZmNmMTkuLmUxNjllMmU4YmJmZTVmMTY3ZWNmNTI4MDNiZTJlZjdkOWJm
N2M4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
YnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaApAQCAtMjYsMTYgKzI2LDE2IEBACiAjaWZuZGVmIFdlYkdMUmVuZGVyYnVmZmVyX2gKICNk
ZWZpbmUgV2ViR0xSZW5kZXJidWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNp
bmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdl
YkdMUmVuZGVyYnVmZmVyIDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2
aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1ZmZlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNjcs
NyArNjcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1w
bChQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChH
cmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CmluZGV4IGRjYjE4MTg4MzQ1YmFmOTRhMDU2MzQ5NzYzYWIzNWU4ZDMwMWY4MDAuLmZjNmZkYmRh
NWU2MjNkNTQzODNlNTgyNTk1NzE1MGE5N2ZjMWM4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNTcsNiArNTcs
NyBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgiCiAjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEV2ZW50LmgiCisj
aW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKICNpbmNsdWRlICJXZWJH
TEZyYW1lYnVmZmVyLmgiCkBAIC00MTYsNiArNDE3LDggQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
UGEKICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVChtX2NvbnRl
eHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSgpOwor
ICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgLy8gQ3JlYXRlIHRoZSBEcmF3aW5nQnVmZmVyIGFuZCBpbml0aWFsaXplIHRo
ZSBwbGF0Zm9ybSBsYXllci4KQEAgLTQ4MCw3ICs0ODMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGlt
cyk7CiAKICAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkT2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdDsKICAgICAKICAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0
dHJpYnMpOwpAQCAtNTI1LDggKzUyOCwyNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCiB7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVu
Y2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAg
ICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgorICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Cisg
ICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSAwOworICAgIG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdCA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gMDsKKyAgICBtX2N1cnJl
bnRQcm9ncmFtID0gMDsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLm1fdGV4dHVy
ZTJEQmluZGluZyA9IDA7CisgICAgICBtX3RleHR1cmVVbml0c1tpXS5tX3RleHR1cmVDdWJlTWFw
QmluZGluZyA9IDA7CisgICAgfQorCisgICAgbV9ibGFja1RleHR1cmUyRCA9IDA7CisgICAgbV9i
bGFja1RleHR1cmVDdWJlTWFwID0gMDsKKwogICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMo
KTsKICAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7CisgICAg
bV9jb250ZXh0R3JvdXAtPnJlbW92ZUNvbnRleHQodGhpcyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQpAQCAtNzk4LDcgKzgyMCw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3VuZChXZWJHTE9iamVj
dCogb2JqZWN0LCBib29sJiBkZWxlCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKG9iamVjdC0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRH
cm91cCgpLCB0aGlzKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTA1LDcgKzExMjcsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNj
ZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTkwLDcg
KzEyMTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vzcyhn
cmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIzNiw3ICsxMjU4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdy
YXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjg0LDcgKzEzMDYs
NyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUJ1ZmZlcigpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAg
ICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAg
IHJldHVybiBvOwogfQogCkBAIC0xMjkzLDcgKzEzMTUsNyBAQCBQYXNzUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFk
ZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOwogICAgIHJl
dHVybiBvOwogfQogCkBAIC0xMzAyLDcgKzEzMjQsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBv
ID0gV2ViR0xUZXh0dXJlOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTMx
MSw3ICsxMzMzLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3Jl
YXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMjAsNyArMTM0Miw3IEBAIFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3Jl
YXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMzUsNyArMTM1Nyw3IEBAIFBhc3NS
ZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdD
M0RlbnVtIHR5cGUsIEV4Y2VwCiAgICAgfQogCiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0g
V2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7
CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0x
MzUxLDEyICsxMzczLDE0IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmpl
Y3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFv
YmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkg
IT0gdGhpcykgeworICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhp
cykpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdCgp
OworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ug
d2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisgICAgICAg
IG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xNDczLDcgKzE0OTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25E
ZXRhY2hlZCgpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xNjg1LDcgKzE3
MDksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChX
ZWJHTE9iamVjdCogb2JqZWN0KQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgIGlmICgh
b2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTcyNiw3ICsxNzUwLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGMKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jl
c291cmNlU2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xODAwLDcgKzE4MjQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3Mo
Z3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4NzcsNyArMTkw
MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvbnRleHQoKSAhPSB0aGlz
KSB7CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwg
dGhpcykpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTk0OCw3ICsxOTcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWMKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKKyAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUo
Y29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTIxNjQsNyArMjE4OCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAKLSAgICBXZWJHTE9iamVj
dCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnQoYXR0YWNobWVu
dCk7CisgICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpOwogICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRSkKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUpOwpAQCAtMjk0MCw3ICsyOTY0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYg
ZWMKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJnZhbHVlKTsKICAgICBwcm9ncmFtLT5zZXRM
aW5rU3RhdHVzKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CiAgICAgLy8gTmVlZCB0byBjYWNo
ZSBsaW5rIHN0YXR1cyBiZWZvcmUgY2FjaGluZyBhY3RpdmUgYXR0cmlidXRlIGxvY2F0aW9ucy4K
LSAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOworICAgIHByb2dyYW0t
PmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKGdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTMwMzEsNyArMzA1NSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGlj
c0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzk0MCw3ICszOTY0LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAgICAgaWYgKG1fY3VycmVudFByb2dyYW0g
IT0gcHJvZ3JhbSkgewogICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgICAg
IG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBy
b2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgICAgIG1fY3VycmVu
dFByb2dyYW0gPSBwcm9ncmFtOwogICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0
T3JaZXJvKHByb2dyYW0pKTsKICAgICAgICAgaWYgKHByb2dyYW0pCkBAIC00MDkwLDYgKzQxMTQs
MTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIG1fY29udGV4dEdyb3VwLT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CiAgICAgbV9jb250ZXh0
TG9zdE1vZGUgPSBtb2RlOwogCkBAIC00MTQzLDIyICs0MTc1LDMyIEBAIFBsYXRmb3JtTGF5ZXIq
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB9CiAjZW5kaWYK
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZU9iamVjdChXZWJHTE9iamVjdCog
b2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChX
ZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVP
YmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJl
ZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghaXNDb250
ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29u
dGV4dE9iamVjdCogb2JqZWN0KQogewotICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2JqZWN0
KTsKKyAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3Qq
IG9iamVjdCkKIHsKICAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0gICAgcmVtb3ZlT2Jq
ZWN0KG9iamVjdCk7Ci0gICAgbV9jYW52YXNPYmplY3RzLmFkZChvYmplY3QpOworICAgIG1fY29u
dGV4dE9iamVjdHMuYWRkKG9iamVjdCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKIHsKLSAgICB3aGlsZSAobV9jYW52YXNPYmpl
Y3RzLnNpemUoKSA+IDApIHsKLSAgICAgICAgSGFzaFNldDxXZWJHTE9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG1fY2FudmFzT2JqZWN0cy5iZWdpbigpOworICAgIHdoaWxlIChtX2NvbnRleHRPYmpl
Y3RzLnNpemUoKSA+IDApIHsKKyAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRPYmplY3RzLmJlZ2luKCk7CiAgICAgICAgICgqaXQpLT5k
ZXRhY2hDb250ZXh0KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA4ZjFlZmQ5YjA0NGJmYzAwZWFkNGFh
NDQwOWY0YTA4M2JiNGY4ZjE1Li41ZjYzY2YxYWU2Y2ZkYTgwNThhYmRiNmI2MTcxZDBmZDBjYmRh
NjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaApAQCAtNTAsNiArNTAsOCBAQCBjbGFzcyBPRVNUZXh0dXJlRmxvYXQ7CiBjbGFz
cyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKIGNsYXNzIFdl
YkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJHTENvbnRleHRP
YmplY3Q7CiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlczsKIGNsYXNzIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXM7CiBjbGFzcyBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOwpAQCAtNjEsNiArNjMs
NyBAQCBjbGFzcyBXZWJHTE9iamVjdDsKIGNsYXNzIFdlYkdMUHJvZ3JhbTsKIGNsYXNzIFdlYkdM
UmVuZGVyYnVmZmVyOwogY2xhc3MgV2ViR0xTaGFkZXI7CitjbGFzcyBXZWJHTFNoYXJlZE9iamVj
dDsKIGNsYXNzIFdlYkdMVGV4dHVyZTsKIGNsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xh
c3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKQEAgLTI5Miw4ICsyOTUsMTAgQEAgcHVibGlj
OgogICAgIH07CiAgICAgdm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7CiAg
ICAgdm9pZCBmb3JjZVJlc3RvcmVDb250ZXh0KCk7CisgICAgdm9pZCBsb3NlQ29udGV4dEltcGwo
TG9zdENvbnRleHRNb2RlKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIFdlYkdMQ29udGV4
dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQo
KTsgfQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgpAQCAtMzA0LDcgKzMwOSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSgpOwogCi0gICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xPYmplY3Qq
KTsKKyAgICB2b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOworICAg
IHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKICAgICAKICAg
ICB1bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhWZXJ0
ZXhBdHRyaWJzOyB9CiAKQEAgLTMxOSw3ICszMjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3Q29udGV4dCgpOwogICAgIHZvaWQgc2V0dXBGbGFncygpOwogCi0gICAgdm9pZCBh
ZGRPYmplY3QoV2ViR0xPYmplY3QqKTsKKyAgICB2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNo
YXJlZE9iamVjdCopOworICAgIHZvaWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmpl
Y3QqKTsKICAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIAogICAgIHZvaWQg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CkBAIC0zNjIsNiArMzY5LDcgQEAgcHVibGljOgogI2VuZGlm
CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8
V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3VwOwogCiAgICAgLy8gT3B0aW9uYWwgc3Ry
dWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVj
dGx5CiAgICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KQEAgLTM3OCw3ICsz
ODYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG1fbmVlZHNVcGRhdGU7CiAgICAgYm9vbCBtX21h
cmtlZENhbnZhc0RpcnR5OwotICAgIEhhc2hTZXQ8V2ViR0xPYmplY3QqPiBtX2NhbnZhc09iamVj
dHM7CisgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwog
CiAgICAgLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0
IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJS
QVlfQlVGRkVSCiAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKaW5kZXggNTk2OTVlNGM5
M2JmNTRjOTgyMGE1YTc3ZWVkOTgzNjJmMTk0MjBiNi4uMzUwNjhlYmNkY2EyZWU2NjU3YWE2YmIx
MWFhZDgyNDhlMjU5ZTM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xTaGFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIAor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDE2ICs0MCwyMSBAQCBQYXNz
UmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY3R4LCBHQzNEZW51bQogfQogCiBXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtIHR5cGUpCi0gICAgOiBXZWJHTE9iamVjdChj
dHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAg
ICAsIG1fc291cmNlKCIiKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZVNoYWRlcih0eXBlKSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsKIH0KIAotdm9pZCBXZWJHTFNoYWRl
cjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMU2hhZGVy
Ojp+V2ViR0xTaGFkZXIoKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
ZGVsZXRlU2hhZGVyKG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdl
YkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2Qs
IFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQzZC0+ZGVsZXRlU2hhZGVy
KG9iamVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5o
CmluZGV4IDFkN2ExMGMxYzRiOWQ5OWFmMGNhYzdmMjFlY2M0Zjk3OGY5MzRhNDguLjkyZDFkMWM0
OGExOWMxYzlkMGI2MDYxMGZlZmMyNWJhZTY3OGI0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaGFkZXIuaApAQCAtMjYsMTYgKzI2LDE2IEBACiAjaWZuZGVmIFdlYkdMU2hh
ZGVyX2gKICNkZWZpbmUgV2ViR0xTaGFkZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIK
KyNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFdlYkdMU2hhZGVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdM
U2hhZGVyIDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5XZWJHTFNoYWRlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFNo
YWRlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHQzNE
ZW51bSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2Jq
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQz
RCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFNoYXJlZE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY3NmNhZTc3YjRmOTE3NmM1ODlmYWYy
YTY1ZTU1MDYyOTZmNmM5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJXZWJH
TFNoYXJlZE9iamVjdC5oIgorCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
ZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KQorICAgIDogV2ViR0xPYmplY3QoY29udGV4dCksCisgICAgICBtX2NvbnRleHRH
cm91cChjb250ZXh0LT5jb250ZXh0R3JvdXAoKSkKK3sKK30KKworV2ViR0xTaGFyZWRPYmplY3Q6
On5XZWJHTFNoYXJlZE9iamVjdCgpCit7CisgICAgaWYgKG1fY29udGV4dEdyb3VwKQorICAgICAg
ICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMU2hh
cmVkT2JqZWN0OjpkZXRhY2hDb250ZXh0R3JvdXAoKQoreworICAgIGRldGFjaCgpOworICAgIGlm
IChtX2NvbnRleHRHcm91cCkgeworICAgICAgICBkZWxldGVPYmplY3QoMCk7CisgICAgICAgIG1f
Y29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3QodGhpcyk7CisgICAgICAgIG1fY29udGV4dEdyb3Vw
ID0gMDsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTFNoYXJlZE9iamVjdDo6
Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0R3Jv
dXAgPyBtX2NvbnRleHRHcm91cC0+Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgOiAwOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xTaGFyZWRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTk2NjEzMzIwOGIzYTg2MjI0YmI4
OGRiYTc3Njc5Y2MxZDRjYmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYkdMU2hhcmVkT2JqZWN0X2gKKyNkZWZpbmUgV2ViR0xTaGFyZWRPYmplY3RfaAor
CisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFdlYkdMQ29udGV4dEdyb3VwOworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OworCisvLyBXZWJHTFNoYXJlZE9iamVjdCB0aGUgYmFzZSBjbGFz
cyBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUKKy8vIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dHMuCitjbGFzcyBXZWJHTFNoYXJlZE9iamVjdCA6IHB1YmxpYyBXZWJHTE9i
amVjdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViR0xTaGFyZWRPYmplY3QoKTsKKworICAg
IFdlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHRHcm91cDsgfQorCisgICAgdmlydHVhbCBib29sIGlzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiBj
b250ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29udGV4dEdyb3VwID09IG1fY29udGV4dEdyb3VwOworICAgIH0KKwor
ICAgIHZvaWQgZGV0YWNoQ29udGV4dEdyb3VwKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTFNo
YXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBo
YXNHcm91cE9yQ29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZXh0
R3JvdXA7CisgICAgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViR0xDb250ZXh0R3JvdXAq
IG1fY29udGV4dEdyb3VwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gV2ViR0xTaGFyZWRPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VGV4dHVyZS5jcHAKaW5kZXggZThlOGJmODI0NWQwMzQwMDcyM2U3Mjc2NmYyMDM5NzJlNDNiMTgy
Zi4uOWFkNThiNGJjMTY0NzBlYTA0ZjY0ODk4MGI3Njk1MTI2YTNiZDJiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3Vw
LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCkBAIC00MCw3ICs0MSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJl
PiBXZWJHTFRleHR1cmU6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKIH0KIAog
V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0g
ICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAg
LCBtX3RhcmdldCgwKQogICAgICwgbV9taW5GaWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJF
U1RfTUlQTUFQX0xJTkVBUikKICAgICAsIG1fbWFnRmlsdGVyKEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpCkBAIC01MCw3ICs1MSwxMiBAQCBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAgICAs
IG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlKGZhbHNlKQogewotICAgIHNldE9iamVjdChjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVRleHR1cmUoKSk7CisgICAgc2V0T2JqZWN0
KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlVGV4dHVyZSgpKTsKK30KKworV2ViR0xU
ZXh0dXJlOjp+V2ViR0xUZXh0dXJlKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKIHZv
aWQgV2ViR0xUZXh0dXJlOjpzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExl
dmVsKQpAQCAtMjI1LDkgKzIzMSw5IEBAIGJvb2wgV2ViR0xUZXh0dXJlOjpuZWVkVG9Vc2VCbGFj
a1RleHR1cmUoKSBjb25zdAogICAgIHJldHVybiBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZTsKIH0K
IAotdm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBv
YmplY3QpCit2b2lkIFdlYkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKKyAgICBjb250
ZXh0M2QtPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKIH0KIAogaW50IFdlYkdMVGV4dHVyZTo6bWFw
VGFyZ2V0VG9JbmRleChHQzNEZW51bSB0YXJnZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5oCmluZGV4IDZiZDEyNzIzY2M3NGFmZDIyN2ExY2JmYzNhNmZm
YzE0ZTU5N2Q5ZDguLmQxZGI5NTFmZmMyMGQxOTc4NzE5OTUwMzUwNTIxMzE4ZDFmNjBjNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIFdlYkdMVGV4dHVyZV9oCiAjZGVmaW5lIFdlYkdMVGV4dHVyZV9oCiAKLSNp
bmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xU
ZXh0dXJlIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMVGV4dHVyZSA6IHB1Ymxp
YyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xUZXh0dXJl
KCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CiAKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdl
YkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHBy
aXZhdGU6CiAgICAgY2xhc3MgTGV2ZWxJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKaW5kZXggZDE0Yzk2
YzAxZjYxNDdlZjRlODBhOWI4MWVmOWJiY2IwNjE5Mzc1MC4uNGFhMDNiOGZlYTE1MTliOTcyMjM3
MDRjYWZiZmE3NjM4MTMyYWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKQEAgLTQwLDcgKzQwLDcgQEAg
UGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpjcmVhdGUoV2ViR0xSZW4KIH0KIAogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgVmFv
VHlwZSB0eXBlKQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xDb250ZXh0T2Jq
ZWN0KGN0eCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZh
bHNlKQogICAgICwgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcigwKQpAQCAtNTcsOSArNTcsMTQg
QEAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
K1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6On5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkK
IHsKLSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3Zv
aWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3sKKyAgICBFeHRl
bnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0M2QtPmdldEV4dGVuc2lvbnMoKTsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVmFvVHlwZURlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oCmluZGV4IGY0OWE3ODA2OTMwODM0OWIxNjUwZWI0YmVkZDgyNDc2ODJiODIw
MTIuLjc1YWU0MmZmNzI1YWNkMWRmZWRiY2U2YTBiYzkyZDNjNDAyOGY0MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmgKQEAgLTI3LDIxICsyNywyMSBAQAogI2RlZmluZSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
X2gKIAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIK
KyNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTIDogcHVibGljIFdlYkdMT2JqZWN0
IHsKK2NsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMgOiBwdWJsaWMgV2ViR0xDb250ZXh0
T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIFZhb1R5cGUgewogICAgICAgICBWYW9UeXBlRGVm
YXVsdCwKICAgICAgICAgVmFvVHlwZVVzZXIsCiAgICAgfTsKICAgICAKLSAgICB2aXJ0dWFsIH5X
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1
YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
LCBWYW9UeXBlKTsKICAgICAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5
cGUpOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
LCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnRleEFycmF5KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hh
bmdlTG9nCmluZGV4IGRiMjgzNTgzYjlkYWNhNTc1NjI1ZmI3OTM4YWFiMDBjNDM4NmI5ZWUuLmFj
NGQyMzM2ZmFkZjljZGZhMzk4MGVhNWVlMWY5MjM5YTFkN2ZiMTYgMTAwNjQ0Ci0tLSBhL0NoYW5n
ZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTMgQEAKKzIwMTItMDEtMDkgIEdyZWdn
IFRhdmFyZXMgIDxnbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIFdlYkdMQ29udGV4dEdy
b3VwIGFzIHN0ZXAgdG93YXJkIHNoYXJpbmcgV2ViR0wgcmVzb3VyY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkwNgorCisgICAgICAgIFRoZSBX
ZWJHTCBXb3JraW5nIEdyb3VwIHdpbGwgc29vbiBhZGQgdGhlIGFiaWxpdHkgdG8gc2hhcmUKKyAg
ICAgICAgV2ViR0wgcmVzb3VyY2VzIGFtb25nIFdlYkdMIGNvbnRleHRzLiBUaGlzIGlzIHRoZSBu
ZWNlc3NhcnkKKyAgICAgICAgcHJlcCB3b3JrLiBOTyBBUEkgY2hhbmdlcy4KKworICAgICAgICBB
ZGRlZCBXZWJHTFNoYXJlZE9iamVjdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBzaGFyZWQgdnMKKyAg
ICAgICAgV2ViR0xDb250ZXh0T2JqZWN0IGZvciBvYmplY3RzIHRoYXQgYXJlIG5vdC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRl
eEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0
OjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJh
eU9iamVjdDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VTVmVy
dGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VT
VmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6Oldl
YkdMQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjp+V2ViR0xCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0R3JvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29u
dGV4dEdyb3VwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6
OldlYkdMQ29udGV4dEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3Vw
Ojp+V2ViR0xDb250ZXh0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3Jv
dXA6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRl
eHRHcm91cDo6YWRkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91
cDo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6
cmVtb3ZlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjphZGRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJl
bW92ZUFsbE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6Omxv
c2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3Vw
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojp+V2ViR0xDb250ZXh0T2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0Lmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmguCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTENvbnRleHRPYmplY3Q6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xDb250ZXh0T2JqZWN0Ojp2YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRl
eHRPYmplY3Q6Omhhc0dyb3VwT3JDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6Oldl
YkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6fldl
YkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6c2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xG
cmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1l
YnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xG
cmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZy
YW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycyk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6fldlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMT2JqZWN0OjpkZWxldGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xP
YmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6b25EZXRhY2hl
ZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFt
OjpXZWJHTFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjp+V2ViR0xQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9j
YXRpb25zKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmJ1ZmZlcjo6fldlYkdMUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG9zaXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQ
cmVjaXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250
ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0
YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFNoYWRlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJi
dWZmZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OldlYkdMU2hh
cmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojp+V2ViR0xT
aGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmRldGFj
aENvbnRleHRHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6Z2V0
QUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9i
amVjdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmNvbnRleHRHcm91cCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFNoYXJlZE9iamVjdDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xTaGFyZWRPYmplY3Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hh
cmVkT2JqZWN0Ojppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmpl
Y3Q6OnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpoYXNH
cm91cE9yQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6fldlYkdMVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjp+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisKIDIw
MTItMDEtMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ4MDUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122300</attachid>
            <date>2012-01-12 13:31:07 -0800</date>
            <delta_ts>2012-01-13 11:02:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75906-20120112133106.patch</filename>
            <type>text/plain</type>
            <size>78586</size>
            <attacher name="Gregg Tavares">gman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDU5ZmNl
ZTI0NjgwNDc5OTUxNTY1NWIwN2VhNTFjMzdlZDE2NDUyZDkuLjZlZjAwNzJmYmRiNDY4MWJjYTlk
YmIxYjY4ZDI3ODYyZGNjZTIyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMTY5LDYgKzIx
NjksOCBAQCBJRiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAorICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdS
ZW5kZXJlckluZm8uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNw
cAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcApAQCAtMjE3OSw2ICsy
MTgxLDcgQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCisgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcAogICAg
ICAgICBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOWVhYWVjYWUzODg2ZDM1OGVhYjUwMDllZWY1MmY4MWM0
NjgyMjdjNS4uYmQ0YjVlNTQ4MWRjMjczM2I1YWJlY2I5NDdkZWQ4MGQ4M2M3OWYzOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NTY3LDYgKzU1NjcsMTAgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaCBc
CisJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIFwKQEAgLTU1ODcsNiArNTU5MSw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xVbmlmb3JtTG9jYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDRiZWMyMTRmYWRjNGY2ZGE4
NDY5MTQxODcwMDExOGMxNDNkYzE2MzMuLmUyY2ZmYjFhNDM5MTAxNzE0OTQ0NWZlZGI2YjgyM2Y2
NjlkYjQyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzY3Miw2ICszNjcyLDggQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZXMuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmggXAorICAgICAg
ICBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oIFwKKyAgICAgICAgaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oIFwK
ICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaCBcCkBAIC0zNjgyLDYgKzM2ODQs
NyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmggXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oIFwKKyAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaCBcCiAgICAgICAgIGh0bWwvY2Fu
dmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCBcCiAgICAgICAgIGh0bWwvY2FudmFzL09FU1Rl
eHR1cmVGbG9hdC5oIFwKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3Qu
aCBcCkBAIC0zNzA5LDYgKzM3MTIsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9
MSkgewogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlcy5jcHAgXAog
ICAgICAgICBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBcCiAgICAgICAg
IGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcCBcCisgICAgICAgIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmNwcCBcCisgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4
dE9iamVjdC5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZv
LmNwcCBcCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcCBcCiAgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcCBcCkBAIC0zNzE5LDYgKzM3MjQsNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAgXAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwIFwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwIFwK
KyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwIFwKICAgICAgICAgaHRt
bC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgXAogICAgICAgICBodG1sL2NhbnZh
cy9PRVNUZXh0dXJlRmxvYXQuY3BwIFwKICAgICAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YXlPYmplY3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2MzJhZmVlYjgxMzdlYmE0ZWZhZWEx
YWRlNTc5N2MyMTQxODM4MTExLi4wYjE4YWE5YjI3ODBmMmQ4OGRiMDYzZjM5ODFhMmI5MTg5M2Vk
YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01ODE2LDYgKzU4MTYsMTAgQEAKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgnLAogICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0RXZlbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0R3JvdXAuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwJywKQEAgLTU4MzgsNiArNTg0Miw4
IEBACiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgnLAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xTaGFyZWRPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFNoYXJl
ZE9iamVjdC5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwJywK
ICAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAppbmRleCBhMjZkNzA2
OWY2ZWNkNWE4YjQxOGI5YWNlODIyY2FkMzIyYWE1YmYzLi5jZWE1MjVjMzk5MDEzZDUyNmU0Y2Vi
NzNiOTkxNTUzNGUxMDVmMjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIFBhc3NSZWZQdHI8
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gT0VTVmVydGV4QXJyYXlPYmplY3Q6OmNyZWF0ZVZl
cnRleEFycmF5T0VTCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIFJlZlB0cjxXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTPiBvID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRl
KG1fY29udGV4dCwgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmFvVHlwZVVzZXIpOwotICAg
IG1fY29udGV4dC0+YWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIG1fY29udGV4dC0+YWRkQ29udGV4
dE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gby5yZWxlYXNlKCk7CiB9CiAKQEAgLTY5LDcg
KzY5LDcgQEAgdm9pZCBPRVNWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMo
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXkKICAgICBpZiAoIWFycmF5T2JqZWN0IHx8
IG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
YXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdCgpOworICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmpl
Y3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKTsKIH0KIAogR0MzRGJvb2xlYW4gT0VT
VmVydGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyogYXJyYXlPYmplY3QpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgT0VTVmVydGV4QXJyYXlP
YmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKiBhcnJh
eU9iCiAgICAgaWYgKG1fY29udGV4dC0+aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgaWYgKGFycmF5T2JqZWN0ICYmIGFycmF5T2JqZWN0LT5jb250ZXh0KCkgIT0g
bV9jb250ZXh0KSB7CisgICAgaWYgKGFycmF5T2JqZWN0ICYmICFhcnJheU9iamVjdC0+dmFsaWRh
dGUoMCwgY29udGV4dCgpKSkgewogICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ1ZmZlci5jcHAKaW5kZXggOTk3ZGJhNTAwZWQ1MDM4M2M2NDNlOGUxZjA5MDY1ZGIwZjZi
Njg2MS4uZmM2ZDQwODYwNjc1ZDZmMTZhOTYzNGMyYzYxNmQ1NmFlY2I1MWYzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAKICNpbmNsdWRlICJDaGVja2VkSW50LmgiCisjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXJWaWV3Lmg+CiAKQEAgLTQxLDE4ICs0Miwy
MyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0gICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAgOiBXZWJH
TFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQogICAgICwgbV9ieXRlTGVuZ3Ro
KDApCiAgICAgLCBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5KDApCiB7Ci0gICAgc2V0T2JqZWN0
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCkpOworICAgIHNl
dE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpKTsKICAgICBj
bGVhckNhY2hlZE1heEluZGljZXMoKTsKIH0KIAotdm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMQnVmZmVyOjp+V2ViR0xCdWZm
ZXIoKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVy
KG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdlYkdMQnVmZmVyOjpk
ZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KQoreworICAgICAgY29udGV4dDNkLT5kZWxldGVCdWZmZXIob2JqZWN0KTsK
IH0KIAogYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoQXJyYXlCdWZm
ZXIqIGFycmF5LCBHQzNEaW50cHRyIGJ5dGVPZmZzZXQsIEdDM0RzaXplaXB0ciBieXRlTGVuZ3Ro
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKaW5kZXggMDE1N2VjZTY1
ZjBjZTRiN2M0MDdiN2JjYjU5ZDc5Njg3NTE0MGMwNy4uODQ5YzM1ODJiZDc5Y2E4YzE1MDUxNDc1
MzBmZDkwZTdkY2I1ZTk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFdlYkdMQnVmZmVyX2gKICNkZWZpbmUgV2Vi
R0xCdWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFNo
YXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KQEAgLTM1LDkgKzM1LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CitjbGFzcyBXZWJHTEJ1
ZmZlciA6IHB1YmxpYyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
V2ViR0xCdWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgdmlydHVhbCB+V2ViR0xCdWZm
ZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmpl
Y3QpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dEdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kM2FmMmJiYmUwYjE3N2EzZTY1YzQwODEzMzk5NmQ5MTJj
YmNmMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0R3JvdXAuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJXZWJHTENvbnRleHRH
cm91cC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgorCisj
aWYgUExBVEZPUk0oUVQpCisjdW5kZWYgZW1pdAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gV2ViR0xDb250ZXh0R3JvdXA6OmNy
ZWF0ZSgpCit7CisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjb250ZXh0R3JvdXAgPSBh
ZG9wdFJlZihuZXcgV2ViR0xDb250ZXh0R3JvdXAoKSk7CisgICAgcmV0dXJuIGNvbnRleHRHcm91
cC5yZWxlYXNlKCk7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjpXZWJHTENvbnRleHRHcm91cCgp
Cit7Cit9CisKK1dlYkdMQ29udGV4dEdyb3VwOjp+V2ViR0xDb250ZXh0R3JvdXAoKQoreworICAg
IGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIFdl
YkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIEFTU0VSVCgh
bV9jb250ZXh0cy5pc0VtcHR5KCkpOworICAgIEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOworICAgIHJldHVybiAoKml0KS0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKK30KKwordm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkQ29u
dGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbV9jb250ZXh0cy5h
ZGQoY29udGV4dCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIFdlIG11c3QgY2FsbCBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzIGJlZm9yZSByZW1vdmluZyB0aGUgbGFzdCBjb250ZXh0
LgorICAgIGlmIChtX2NvbnRleHRzLnNpemUoKSA9PSAxICYmIG1fY29udGV4dHMuY29udGFpbnMo
Y29udGV4dCkpCisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKworICAgIG1f
Y29udGV4dHMucmVtb3ZlKGNvbnRleHQpOworfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpy
ZW1vdmVPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBtX2dyb3VwT2Jq
ZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7CisgICAgbV9ncm91cE9iamVjdHMuYWRk
KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJlbW92ZUFs
bE9iamVjdHMoKQoreworICAgIHdoaWxlICghbV9ncm91cE9iamVjdHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEhhc2hTZXQ8V2ViR0xTaGFyZWRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2dyb3Vw
T2JqZWN0cy5iZWdpbigpOworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dEdyb3VwKCk7Cisg
ICAgfQorfQorCit2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpsb3NlQ29udGV4dEdyb3VwKFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgZm9yIChIYXNo
U2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMuYmVn
aW4oKTsgaXQgIT0gbV9jb250ZXh0cy5lbmQoKTsgKytpdCkKKyAgICAgICAgKCppdCktPmxvc2VD
b250ZXh0SW1wbChtb2RlKTsKKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWE3MDM2YWU2NGU1ODI1OTkwMzQwYTEyOWIzNGI3MWMzM2FkYzY2MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENvbnRleHRHcm91cF9oCisjZGVm
aW5lIFdlYkdMQ29udGV4dEdyb3VwX2gKKworI2luY2x1ZGUgPFdlYkdMUmVuZGVyaW5nQ29udGV4
dC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBX
ZWJHTFNoYXJlZE9iamVjdDsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKKwordHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXAgOiBwdWJsaWMg
UmVmQ291bnRlZDxXZWJHTENvbnRleHRHcm91cD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsKKyAgICB2aXJ0dWFsIH5XZWJHTENv
bnRleHRHcm91cCgpOworCisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKwor
ICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVP
YmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRB
R3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgIHZvaWQgbG9zZUNvbnRleHRHcm91cChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSk7CisKKyAgcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgV2ViR0xPYmplY3Q7CisKKyAgICBXZWJHTENvbnRleHRHcm91cCgpOworCisgICAg
dm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICBIYXNoU2V0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxXZWJHTFNoYXJlZE9iamVj
dCo+IG1fZ3JvdXBPYmplY3RzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gV2ViR0xDb250ZXh0R3JvdXBfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWIzYWIwYjljNmU0ZDEzYmM1
MmFlNmIxNGI4NjRhODZkZDFhM2RiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0T2JqZWN0LmgiCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJHTENvbnRleHRPYmplY3Q6OldlYkdM
Q29udGV4dE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBXZWJH
TE9iamVjdChjb250ZXh0KQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1dlYkdM
Q29udGV4dE9iamVjdDo6fldlYkdMQ29udGV4dE9iamVjdCgpCit7CisgICAgaWYgKG1fY29udGV4
dCkKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVDb250ZXh0T2JqZWN0KHRoaXMpOworfQorCit2
b2lkIFdlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCgpCit7CisgICAgZGV0YWNoKCk7
CisgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICBkZWxldGVPYmplY3QobV9jb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVDb250ZXh0T2Jq
ZWN0KHRoaXMpOworICAgICAgICBtX2NvbnRleHQgPSAwOworICAgIH0KK30KKworR3JhcGhpY3ND
b250ZXh0M0QqIFdlYkdMQ29udGV4dE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ID8gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQz
RCgpIDogMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjdm
NTA3MDU1MGMwNjg4NjRjOWE4MTQ1Mjc4YmQ1NTJhY2M1OTM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTENvbnRleHRPYmplY3RfaAorI2RlZmluZSBX
ZWJHTENvbnRleHRPYmplY3RfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJXZWJHTE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworCisvLyBXZWJH
TENvbnRleHRPYmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBhcmUgb3duZWQg
YnkgYSBzcGVjaWZpYworLy8gV2ViR0xSZW5kZXJpbmdDb250ZXh0LgorY2xhc3MgV2ViR0xDb250
ZXh0T2JqZWN0IDogcHVibGljIFdlYkdMT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5X
ZWJHTENvbnRleHRPYmplY3QoKTsKKworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgdmlydHVhbCBib29sIHZhbGlk
YXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQgPT0gbV9jb250
ZXh0OworICAgIH0KKworICAgIHZvaWQgZGV0YWNoQ29udGV4dCgpOworCitwcm90ZWN0ZWQ6Cisg
ICAgV2ViR0xDb250ZXh0T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworCisgICAgdmly
dHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2NvbnRleHQ7CisgICAgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0
QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX29iamVjdDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkdMQ29udGV4dE9iamVj
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CmluZGV4IGQxYWY1MThjMDUxNjU1ZjkzNDFkMmRmYmJhYzE2OWM2MzFiNTYyYmYuLjM2ODNmMTM5
YmZmNmQ4OGU1NTgyZDY5MDk4NWI2MzcwM2RiZDg3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0yOSwxMyArMjksMTQgQEAKIAog
I2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotICAgIGJvb2wgaXNBdHRhY2htZW50Q29tcGxldGUo
V2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAgIGJv
b2wgaXNBdHRhY2htZW50Q29tcGxldGUoV2ViR0xTaGFyZWRPYmplY3QqIGF0dGFjaGVkT2JqZWN0
LCBHQzNEZW51bSBhdHRhY2htZW50KQogICAgIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2Jq
ZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhdHRhY2hl
ZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CkBAIC02Miw3ICs2Myw3IEBAIG5hbWVzcGFjZSB7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEdDM0RzaXplaSBnZXRJbWFnZVdp
ZHRoKFdlYkdMT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKKyAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VX
aWR0aChXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBB
U1NFUlQoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3QtPm9iamVjdCgpKTsKICAgICAg
ICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKTsKQEAgLTcwLDcgKzcx
LDcgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAg
ICB9CiAKLSAgICBHQzNEc2l6ZWkgZ2V0SW1hZ2VIZWlnaHQoV2ViR0xPYmplY3QqIGF0dGFjaGVk
T2JqZWN0KQorICAgIEdDM0RzaXplaSBnZXRJbWFnZUhlaWdodChXZWJHTFNoYXJlZE9iamVjdCog
YXR0YWNoZWRPYmplY3QpCiAgICAgewogICAgICAgICBBU1NFUlQoYXR0YWNoZWRPYmplY3QgJiYg
YXR0YWNoZWRPYmplY3QtPm9iamVjdCgpKTsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0
LT5pc1JlbmRlcmJ1ZmZlcigpKTsKQEAgLTc4LDcgKzc5LDcgQEAgbmFtZXNwYWNlIHsKICAgICAg
ICAgcmV0dXJuIGJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgfQogCi0gICAgYm9vbCBpc1VuaW5p
dGlhbGl6ZWQoV2ViR0xPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQorICAgIGJvb2wgaXNVbmluaXRp
YWxpemVkKFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKICAgICB7CiAgICAgICAg
IGlmIChhdHRhY2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkgJiYgYXR0YWNo
ZWRPYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkKICAgICAgICAgICAgICYmICEocmVpbnRlcnByZXRf
Y2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFjaGVkT2JqZWN0KSktPmlzSW5pdGlhbGl6ZWQo
KSkKQEAgLTg2LDEzICs4NywxMyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRJbml0aWFsaXplZChXZWJHTE9iamVjdCogYXR0YWNoZWRP
YmplY3QpCisgICAgdm9pZCBzZXRJbml0aWFsaXplZChXZWJHTFNoYXJlZE9iamVjdCogYXR0YWNo
ZWRPYmplY3QpCiAgICAgewogICAgICAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRP
YmplY3QtPm9iamVjdCgpICYmIGF0dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKQogICAg
ICAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9i
amVjdCkpLT5zZXRJbml0aWFsaXplZCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZChXZWJH
TE9iamVjdCogYXR0YWNoZWRPYmplY3QpCisgICAgYm9vbCBpc1ZhbGlkUmVuZGVyYnVmZmVyKFdl
YkdMU2hhcmVkT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKICAgICB7CiAgICAgICAgIGlmIChhdHRh
Y2hlZE9iamVjdCAmJiBhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkgJiYgYXR0YWNoZWRPYmplY3Qt
PmlzUmVuZGVyYnVmZmVyKCkpIHsKICAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9iamVjdCkpLT5pc1ZhbGlkKCkpCkBAIC0xMDks
MTIgKzExMCwxNyBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJhbWVidWZm
ZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eAogfQogCiBXZWJHTEZyYW1lYnVm
ZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQotICAgIDog
V2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAsIG1f
aGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKICAgICAsIG1fdGV4VGFyZ2V0KDApCiAgICAgLCBtX3Rl
eExldmVsKC0xKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgIHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworfQorCitXZWJHTEZyYW1lYnVmZmVyOjp+
V2ViR0xGcmFtZWJ1ZmZlcigpCit7CisgICAgZGVsZXRlT2JqZWN0KDApOwogfQogCiB2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBH
QzNEaW50IGxldmVsKQpAQCAtMTc5LDcgKzE4NSw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6
c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2Vi
CiAgICAgICAgIHJlbmRlcmJ1ZmZlci0+b25BdHRhY2hlZCgpOwogfQogCi1XZWJHTE9iamVjdCog
V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KSBjb25z
dAorV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnQoR0Mz
RGVudW0gYXR0YWNobWVudCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIwMywxMCArMjA5LDEyIEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAg
ICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKICAgICAgICAgaWYgKG1fY29sb3JBdHRh
Y2htZW50KSB7Ci0gICAgICAgICAgICBtX2NvbG9yQXR0YWNobWVudC0+b25EZXRhY2hlZCgpOwor
ICAgICAgICAgICAgbV9jb2xvckF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAg
ICAgICAgICAgIG1fY29sb3JBdHRhY2htZW50ID0gMDsKICAgICAgICAgICAgIG1fdGV4VGFyZ2V0
ID0gMDsKICAgICAgICAgICAgIG1fdGV4TGV2ZWwgPSAtMTsKQEAgLTIxNCwxOSArMjIyLDE5IEBA
IHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVm
ZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgIGlmIChtX2RlcHRoQXR0YWNo
bWVudCkgewotICAgICAgICAgICAgbV9kZXB0aEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAg
ICAgICAgICAgIG1fZGVwdGhBdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAg
ICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAg
ICBpZiAobV9zdGVuY2lsQXR0YWNobWVudCkgewotICAgICAgICAgICAgbV9zdGVuY2lsQXR0YWNo
bWVudC0+b25EZXRhY2hlZCgpOworICAgICAgICAgICAgbV9zdGVuY2lsQXR0YWNobWVudC0+b25E
ZXRhY2hlZChjb250ZXh0M2QpOwogICAgICAgICAgICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IDA7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxBdHRh
Y2htZW50KSB7Ci0gICAgICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNo
ZWQoKTsKKyAgICAgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZChj
b250ZXh0M2QpOwogICAgICAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gMDsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIzNiwxNCArMjQ0LDE2IEBAIHZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IGF0dGFjaG1lbnQpCiAgICAgfQogfQogCi12b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTE9iamVjdCogYXR0YWNobWVudCkKK3Zv
aWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVy
KFdlYkdMU2hhcmVkT2JqZWN0KiBhdHRhY2htZW50KQogewogICAgIEFTU0VSVChpc0JvdW5kKCkp
OwogICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWF0dGFjaG1l
bnQpCiAgICAgICAgIHJldHVybjsKKwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBnYzNkID0gY29u
dGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gbV9j
b2xvckF0dGFjaG1lbnQuZ2V0KCkpIHsKICAgICAgICAgaWYgKGF0dGFjaG1lbnQtPmlzUmVuZGVy
YnVmZmVyKCkpCiAgICAgICAgICAgICBnYzNkLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CkBAIC0zMzcsNyAr
MzQ3LDcgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoKSBjb25zdAog
ICAgIGlmIChpc0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkpIHsKICAgICAgICAgaWYgKCFpc0F0dGFj
aG1lbnRDb21wbGV0ZShtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpKQogICAgICAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAg
ICAgIGlmICghaXNWYWxpZChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpKQorICAgICAg
ICBpZiAoIWlzVmFsaWRSZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CiAgICAgICAgIGlmICghY291bnQpIHsKICAgICAgICAgICAgIHdpZHRoID0gZ2V0
SW1hZ2VXaWR0aChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQuZ2V0KCkpOwpAQCAtMzY5LDI5ICsz
NzksMjkgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoKSBjb25zdAog
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CiB9CiAK
LWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVu
ZGVyYnVmZmVycykKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzZCwgYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycykKIHsK
ICAgICBpZiAoY2hlY2tTdGF0dXMoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
Q09NUExFVEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMpCi0gICAgICAgIHJldHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVycygp
OworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoY29udGV4dDNkKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQogewogICAgIGlmIChtX2NvbG9yQXR0YWNobWVudCkKLSAgICAgICAgbV9jb2xv
ckF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9jb2xvckF0dGFjaG1lbnQtPm9u
RGV0YWNoZWQoY29udGV4dDNkKTsKICAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQpCi0gICAgICAg
IG1fZGVwdGhBdHRhY2htZW50LT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fZGVwdGhBdHRhY2ht
ZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgaWYgKG1fc3RlbmNpbEF0dGFjaG1lbnQp
Ci0gICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9z
dGVuY2lsQXR0YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgIGlmIChtX2RlcHRo
U3RlbmNpbEF0dGFjaG1lbnQpCi0gICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b25E
ZXRhY2hlZCgpOwotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlRnJh
bWVidWZmZXIob2JqZWN0KTsKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vbkRl
dGFjaGVkKGNvbnRleHQzZCk7CisgICAgY29udGV4dDNkLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmpl
Y3QpOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJz
KCkKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoR3JhcGhp
Y3NDb250ZXh0M0QqIGczZCkKIHsKICAgICBBU1NFUlQob2JqZWN0KCkpOwogICAgIGJvb2wgaW5p
dENvbG9yID0gZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9IGZhbHNlOwpA
QCAtNDE4LDcgKzQyOCw2IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRl
cmJ1ZmZlcnMoKQogCiAgICAgLy8gV2Ugb25seSBjbGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJi
dWZmZXJzIHdoZW4gdGhleSBhcmUgcmVhZHkgdG8gYmUKICAgICAvLyByZWFkLCBpLmUuLCB3aGVu
IHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4KLSAgICBHcmFwaGljc0NvbnRleHQzRCogZzNk
ID0gY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChnM2QtPmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCmluZGV4
IDExMGY1MTM5NWY5Yjc4NDQxYjgxOWQ5MzQ1NTk2MDMyODFkMGI0ZmQuLjY2YTFmZmE0OWUwZTkz
MTRiNTJkMmE5OWQ2YzRkYzAxN2ZhNDFmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgV2ViR0xG
cmFtZWJ1ZmZlcl9oCiAjZGVmaW5lIFdlYkdMRnJhbWVidWZmZXJfaAogCi0jaW5jbHVkZSAiV2Vi
R0xPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsMTkgKzM3LDE5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwogY2xhc3MgV2ViR0xUZXh0dXJlOwogCi1j
bGFzcyBXZWJHTEZyYW1lYnVmZmVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdM
RnJhbWVidWZmZXIgOiBwdWJsaWMgV2ViR0xDb250ZXh0T2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5XZWJHTEZyYW1lYnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1
YWwgfldlYkdMRnJhbWVidWZmZXIoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZvaWQgc2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsKTsKICAgICB2b2lkIHNl
dEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQsIFdlYkdM
UmVuZGVyYnVmZmVyKik7CiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGF0dGFjaGVkIHRvIHRoZSBj
dXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KLSAgICB2b2lkIHJlbW92ZUF0
dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTE9iamVjdCopOworICAgIHZvaWQgcmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0Kik7CiAg
ICAgLy8gSWYgYSBnaXZlbiBhdHRhY2htZW50IHBvaW50IGZvciB0aGUgY3VycmVudGx5IGJvdW5k
IGZyYW1lYnVmZmVyIGlzIG5vdCBudWxsLCByZW1vdmUgdGhlIGF0dGFjaGVkIG9iamVjdC4KICAg
ICB2b2lkIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSk7Ci0g
ICAgV2ViR0xPYmplY3QqIGdldEF0dGFjaG1lbnQoR0MzRGVudW0pIGNvbnN0OworICAgIFdlYkdM
U2hhcmVkT2JqZWN0KiBnZXRBdHRhY2htZW50KEdDM0RlbnVtKSBjb25zdDsKIAogICAgIEdDM0Rl
bnVtIGdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3Q7CiAgICAgR0MzRHNpemVpIGdldENvbG9y
QnVmZmVyV2lkdGgoKSBjb25zdDsKQEAgLTYwLDcgKzYxLDcgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3aXNlIGlu
aXRpYWxpemUKICAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBpbml0aWFs
aXplZCBhbmQKICAgICAvLyBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycyBpcyB0cnVlLgot
ICAgIGJvb2wgb25BY2Nlc3MoYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycyk7Cisg
ICAgYm9vbCBvbkFjY2VzcyhHcmFwaGljc0NvbnRleHQzRCosIGJvb2wgbmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMpOwogCiAgICAgLy8gU29mdHdhcmUgdmVyc2lvbiBvZiBnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXMoKSwgZXhjZXB0IHRoYXQgd2hlbgogICAgIC8vIEZSQU1FQlVGRkVSX0NP
TVBMRVRFIGlzIHJldHVybmVkLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSBmb3IKQEAgLTc1LDEzICs3
NiwxMyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKFBs
YXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzRnJhbWVidWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZS4KLSAgICBib29sIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKCk7CisgICAgYm9vbCBpbml0aWFsaXplUmVuZGVyYnVmZmVycyhH
cmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlz
IGN1cnJlbnRseSBib3VuZC4KICAgICBib29sIGlzQm91bmQoKSBjb25zdDsKQEAgLTkxLDEwICs5
MiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJl
dHVybiAobV9zdGVuY2lsQXR0YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3Qo
KSk7IH0KICAgICBib29sIGlzRGVwdGhTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAo
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+b2Jq
ZWN0KCkpOyB9CiAKLSAgICBSZWZQdHI8V2ViR0xPYmplY3Q+IG1fY29sb3JBdHRhY2htZW50Owot
ICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aEF0dGFjaG1lbnQ7Ci0gICAgUmVmUHRyPFdl
YkdMT2JqZWN0PiBtX3N0ZW5jaWxBdHRhY2htZW50OwotICAgIFJlZlB0cjxXZWJHTE9iamVjdD4g
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIFJlZlB0cjxXZWJHTFNoYXJlZE9iamVjdD4g
bV9jb2xvckF0dGFjaG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRo
QXR0YWNobWVudDsKKyAgICBSZWZQdHI8V2ViR0xTaGFyZWRPYmplY3Q+IG1fc3RlbmNpbEF0dGFj
aG1lbnQ7CisgICAgUmVmUHRyPFdlYkdMU2hhcmVkT2JqZWN0PiBtX2RlcHRoU3RlbmNpbEF0dGFj
aG1lbnQ7CiAKICAgICBib29sIG1faGFzRXZlckJlZW5Cb3VuZDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCmluZGV4IDdiNjI5YTY5Yzc0MzZjMDkwOWMzOTY3
M2IwYjUwNDFhNDM4ZTIxZTEuLmZkOTkzMGYzYWMwNDZkNTI1YzdlMmY5ZWFjMTdhMmVkNWZkYTUy
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKQEAgLTI5
LDEzICsyOSwyMCBAQAogCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKIAorI2luY2x1ZGUgIk9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNp
bmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVzLmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNsdWRlICJX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIK
KyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2ViR0xPYmplY3Q6OldlYkdMT2Jq
ZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fb2JqZWN0KDApCi0g
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fYXR0YWNobWVudENvdW50KDApCiAgICAg
LCBtX2RlbGV0ZWQoZmFsc2UpCiB7CkBAIC00Myw4ICs1MCw2IEBAIFdlYkdMT2JqZWN0OjpXZWJH
TE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAKIFdlYkdMT2JqZWN0Ojp+
V2ViR0xPYmplY3QoKQogewotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+
cmVtb3ZlT2JqZWN0KHRoaXMpOwogfQogCiB2b2lkIFdlYkdMT2JqZWN0OjpzZXRPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC01NCwyNiArNTksMzggQEAgdm9pZCBXZWJHTE9iamVj
dDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogICAgIG1fb2JqZWN0ID0gb2Jq
ZWN0OwogfQogCi12b2lkIFdlYkdMT2JqZWN0OjpkZWxldGVPYmplY3QoKQordm9pZCBXZWJHTE9i
amVjdDo6ZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCiB7CiAgICAg
bV9kZWxldGVkID0gdHJ1ZTsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9vYmplY3QpCisgICAg
aWYgKCFtX29iamVjdCkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFoYXNHcm91cE9yQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50KSB7
Ci0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgICAgIGRlbGV0ZU9iamVjdEltcGwobV9vYmplY3QpOworICAgICAgICBpZiAo
IWNvbnRleHQzZCkKKyAgICAgICAgICAgIGNvbnRleHQzZCA9IGdldEFHcmFwaGljc0NvbnRleHQz
RCgpOworCisgICAgICAgIGlmIChjb250ZXh0M2QpCisgICAgICAgICAgICBkZWxldGVPYmplY3RJ
bXBsKGNvbnRleHQzZCwgbV9vYmplY3QpOworCiAgICAgICAgIG1fb2JqZWN0ID0gMDsKICAgICB9
CiB9CiAKLXZvaWQgV2ViR0xPYmplY3Q6OmRldGFjaENvbnRleHQoKQordm9pZCBXZWJHTE9iamVj
dDo6ZGV0YWNoKCkKIHsKICAgICBtX2F0dGFjaG1lbnRDb3VudCA9IDA7IC8vIE1ha2Ugc3VyZSBP
cGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRlZC4KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAg
IGRlbGV0ZU9iamVjdCgpOwotICAgICAgICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsK
LSAgICAgICAgbV9jb250ZXh0ID0gMDsKICAgICB9CisKKwordm9pZCBXZWJHTE9iamVjdDo6b25E
ZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQoreworICAgIGlmIChtX2F0dGFj
aG1lbnRDb3VudCkKKyAgICAgICAgLS1tX2F0dGFjaG1lbnRDb3VudDsKKyAgICBpZiAobV9kZWxl
dGVkKQorICAgICAgICBkZWxldGVPYmplY3QoY29udGV4dDNkKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKaW5kZXggNDRjYzM2ZjZiZmUyNGFjMDRmZTkx
ZGU2OGM4ODEwNGI0OWQwNzYzYS4uODQxZDBmOWZjOGNmYmNhODgyNmQ0MjFiM2JiNmI0NmNkZjMx
MTMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCkBAIC0zMyw2
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDsKIAogY2xhc3MgV2ViR0xPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTE9iamVjdD4g
ewpAQCAtNDQsMzMgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICAvLyBkZWxldGVPYmplY3QgbWF5IG5v
dCBhbHdheXMgZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2UuICBGb3IgcHJvZ3JhbXMgYW5kCiAg
ICAgLy8gc2hhZGVycywgZGVsZXRpb24gaXMgZGVsYXllZCB1bnRpbCB0aGV5IGFyZSBubyBsb25n
ZXIgYXR0YWNoZWQuCiAgICAgLy8gRklYTUU6IHJldmlzaXQgdGhpcyB3aGVuIHJlc291cmNlIHNo
YXJpbmcgYmV0d2VlbiBjb250ZXh0cyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgdm9pZCBkZWxldGVP
YmplY3QoKTsKLQotICAgIHZvaWQgZGV0YWNoQ29udGV4dCgpOwotCi0gICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJidWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBkZWxldGVP
YmplY3QoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAogICAgIHZvaWQgb25BdHRhY2hlZCgpIHsgKytt
X2F0dGFjaG1lbnRDb3VudDsgfQotICAgIHZvaWQgb25EZXRhY2hlZCgpCi0gICAgewotICAgICAg
ICBpZiAobV9hdHRhY2htZW50Q291bnQpCi0gICAgICAgICAgICAtLW1fYXR0YWNobWVudENvdW50
OwotICAgICAgICBpZiAobV9kZWxldGVkKQotICAgICAgICAgICAgZGVsZXRlT2JqZWN0KCk7Ci0g
ICAgfQorICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgLy8g
VGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IHNpZGUgaXNzdWUgYSBkZWxldGUgY2Fs
bCBhbHJlYWR5LCBub3QKICAgICAvLyB3aGV0aGVyIHRoZSBPcGVuR0wgcmVzb3VyY2UgaXMgZGVs
ZXRlZC4KICAgICAvLyBvYmplY3QoKT09MCBpbmRpY2F0ZXMgdGhlIE9wZW5HTCByZXNvdXJjZSBp
cyBkZWxldGVkLgogICAgIGJvb2wgaXNEZWxldGVkKCkgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAK
KyAgICAvLyBUcnVlIGlmIHRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8gdGhlIGdyb3VwIG9yIGNvbnRl
eHQuCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwg
Y29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKQEAgLTc4LDExICs2Niwx
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAK
ICAgICAvLyBkZWxldGVPYmplY3RJbXBsIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHRvIGRl
bGV0ZSB0aGUgT3BlbkdMIHJlc291cmNlLgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2goKTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFw
aGljc0NvbnRleHQzRCgpIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fb2JqZWN0OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwogICAg
IHVuc2lnbmVkIG1fYXR0YWNobWVudENvdW50OwogICAgIGJvb2wgbV9kZWxldGVkOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCmluZGV4IGQzZWZkYTQ3
ZGVlNDYzNjU1NGRiYzA3Nzg5ZDQzMmQzOThhY2MyMGYuLmY2ODU0M2NlNGQ5OTBkYjU4ZTE1N2Uw
MzRlYzI3MDVkNDI1NTY3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgi
CiAKKyNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwzMiArNDAsMzYgQEAg
UGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY3R4KQogfQogCiBXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdM
U2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fbGlua1N0YXR1cyhmYWxzZSkKICAgICAsIG1fbGlu
a0NvdW50KDApCiB7Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+Y3JlYXRlUHJvZ3JhbSgpKTsKKyAgICBzZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQz
RCgpLT5jcmVhdGVQcm9ncmFtKCkpOwogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iaikKK1dlYkdMUHJvZ3JhbTo6fldlYkdMUHJvZ3Jh
bSgpCiB7Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVQcm9ncmFt
KG9iaik7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2Jq
ZWN0IG9iaikKK3sKKyAgICBjb250ZXh0M2QtPmRlbGV0ZVByb2dyYW0ob2JqKTsKICAgICBpZiAo
bV92ZXJ0ZXhTaGFkZXIpIHsKLSAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoKTsK
KyAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAg
bV92ZXJ0ZXhTaGFkZXIgPSAwOwogICAgIH0KICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikgewot
ICAgICAgICBtX2ZyYWdtZW50U2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fZnJhZ21l
bnRTaGFkZXItPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKICAgICAgICAgbV9mcmFnbWVudFNoYWRl
ciA9IDA7CiAgICAgfQogfQogCi1ib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJM
b2NhdGlvbnMoKQorYm9vbCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25z
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCiB7CiAgICAgbV9hY3RpdmVBdHRyaWJMb2Nh
dGlvbnMuY2xlYXIoKTsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKIAogICAgIC8vIEFzc3VtZSBsaW5rIHN0YXR1cyBoYXMgYWxyZWFkeSBiZWVu
IGNhY2hlZC4KICAgICBpZiAoIW1fbGlua1N0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmgKaW5kZXggMGRkM2JhMGZhYWZiOWQ3MDZhYzkzNjFkMTlhNWYwODkz
MTY5NjIzNi4uMTUwNTAxMTAwNWQ0Zjg5Y2ZkZDY1M2JkY2I4NTU3NTQ0OTExOTBjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgV2ViR0xQcm9ncmFtX2gKICNkZWZpbmUgV2ViR0xQcm9ncmFtX2gKIAotI2luY2x1
ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2lu
Y2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKQEAgLTM2LDE1ICszNiwxNSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUHJvZ3JhbSA6IHB1YmxpYyBXZWJHTE9iamVjdCB7Citj
bGFzcyBXZWJHTFByb2dyYW0gOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgot
ICAgIHZpcnR1YWwgfldlYkdMUHJvZ3JhbSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0
dWFsIH5XZWJHTFByb2dyYW0oKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgLy8gY2FjaGVBY3RpdmVB
dHRyaWJMb2NhdGlvbigpIGlzIG9ubHkgY2FsbGVkIG9uY2UgYWZ0ZXIgbGlua1Byb2dyYW0oKQog
ICAgIC8vIHN1Y2NlZWRzLgotICAgIGJvb2wgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsK
KyAgICBib29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKik7
CiAgICAgdW5zaWduZWQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkgY29uc3Q7CiAgICAgR0Mz
RGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCkgY29uc3Q7CiAKQEAg
LTY3LDcgKzY3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAppbmRleCA5M2I5MTY1
Yzk5NDc0OWY2M2RjNTAzYTM2MjA4YzUxZmJlZGI2NDcwLi5kYWFmOWQ0ZWU1OWIzY2E2NmIxY2Rj
Yzg3YWIwMGExOTdmMDE3YjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJidWZmZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJH
TFJlbmRlcmJ1ZmZlci5oIgogCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzgsOCArMzksMTMgQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJi
dWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGMKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVyKGN0eCkpOwogfQogCitXZWJHTFJlbmRlcmJ1ZmZlcjo6
fldlYkdMUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKIFdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKLSAgICA6IFdlYkdMT2JqZWN0KGN0eCkKKyAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkK
ICAgICAsIG1faW50ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQogICAgICwg
bV9pbml0aWFsaXplZChmYWxzZSkKICAgICAsIG1fd2lkdGgoMCkKQEAgLTQ3LDEyICs1MywxMiBA
QCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjdHgpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1faGFzRXZlckJlZW5Cb3Vu
ZChmYWxzZSkKIHsKLSAgICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyYnVm
ZmVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJH
TFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNz
Q29udGV4dDNEKCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOworICAgIGNvbnRleHQzZC0+
ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCmluZGV4IDRiNDdiZjVkMzJlODQ2OGQwZjky
ZWE5MWU1YThkNjQzM2NjZmNmMTkuLmUxNjllMmU4YmJmZTVmMTY3ZWNmNTI4MDNiZTJlZjdkOWJm
N2M4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
YnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaApAQCAtMjYsMTYgKzI2LDE2IEBACiAjaWZuZGVmIFdlYkdMUmVuZGVyYnVmZmVyX2gKICNk
ZWZpbmUgV2ViR0xSZW5kZXJidWZmZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNp
bmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdl
YkdMUmVuZGVyYnVmZmVyIDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2
aXJ0dWFsIH5XZWJHTFJlbmRlcmJ1ZmZlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNjcs
NyArNjcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1w
bChQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChH
cmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CmluZGV4IGRjYjE4MTg4MzQ1YmFmOTRhMDU2MzQ5NzYzYWIzNWU4ZDMwMWY4MDAuLmZjNmZkYmRh
NWU2MjNkNTQzODNlNTgyNTk1NzE1MGE5N2ZjMWM4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNTcsNiArNTcs
NyBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVzLmgiCiAjaW5jbHVkZSAiV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEV2ZW50LmgiCisj
aW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKICNpbmNsdWRlICJXZWJH
TEZyYW1lYnVmZmVyLmgiCkBAIC00MTYsNiArNDE3LDggQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
UGEKICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVChtX2NvbnRl
eHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSgpOwor
ICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgLy8gQ3JlYXRlIHRoZSBEcmF3aW5nQnVmZmVyIGFuZCBpbml0aWFsaXplIHRo
ZSBwbGF0Zm9ybSBsYXllci4KQEAgLTQ4MCw3ICs0ODMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGlt
cyk7CiAKICAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkT2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdDsKICAgICAKICAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0
dHJpYnMpOwpAQCAtNTI1LDggKzUyOCwyNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCiB7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVu
Y2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAg
ICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgorICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Cisg
ICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSAwOworICAgIG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdCA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gMDsKKyAgICBtX2N1cnJl
bnRQcm9ncmFtID0gMDsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLm1fdGV4dHVy
ZTJEQmluZGluZyA9IDA7CisgICAgICBtX3RleHR1cmVVbml0c1tpXS5tX3RleHR1cmVDdWJlTWFw
QmluZGluZyA9IDA7CisgICAgfQorCisgICAgbV9ibGFja1RleHR1cmUyRCA9IDA7CisgICAgbV9i
bGFja1RleHR1cmVDdWJlTWFwID0gMDsKKwogICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMo
KTsKICAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7CisgICAg
bV9jb250ZXh0R3JvdXAtPnJlbW92ZUNvbnRleHQodGhpcyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQpAQCAtNzk4LDcgKzgyMCw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3VuZChXZWJHTE9iamVj
dCogb2JqZWN0LCBib29sJiBkZWxlCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKG9iamVjdC0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRH
cm91cCgpLCB0aGlzKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTA1LDcgKzExMjcsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNj
ZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTkwLDcg
KzEyMTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vzcyhn
cmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIzNiw3ICsxMjU4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgeworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdy
YXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjg0LDcgKzEzMDYs
NyBAQCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUJ1ZmZlcigpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAg
ICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAg
IHJldHVybiBvOwogfQogCkBAIC0xMjkzLDcgKzEzMTUsNyBAQCBQYXNzUmVmUHRyPFdlYkdMRnJh
bWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFk
ZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOwogICAgIHJl
dHVybiBvOwogfQogCkBAIC0xMzAyLDcgKzEzMjQsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBv
ID0gV2ViR0xUZXh0dXJlOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTMx
MSw3ICsxMzMzLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3Jl
YXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMjAsNyArMTM0Miw3IEBAIFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3Jl
YXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAKQEAgLTEzMzUsNyArMTM1Nyw3IEBAIFBhc3NS
ZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdD
M0RlbnVtIHR5cGUsIEV4Y2VwCiAgICAgfQogCiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0g
V2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7
CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwogfQogCkBAIC0x
MzUxLDEyICsxMzczLDE0IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmpl
Y3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICFv
YmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkg
IT0gdGhpcykgeworICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhp
cykpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdCgp
OworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ug
d2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisgICAgICAg
IG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xNDczLDcgKzE0OTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25E
ZXRhY2hlZCgpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xNjg1LDcgKzE3
MDksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChX
ZWJHTE9iamVjdCogb2JqZWN0KQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBpZiAob2JqZWN0LT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgIGlmICgh
b2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTcyNiw3ICsxNzUwLDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGMKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jl
c291cmNlU2FmZSgpKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xODAwLDcgKzE4MjQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CisgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3Mo
Z3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4NzcsNyArMTkw
MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvbnRleHQoKSAhPSB0aGlz
KSB7CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwg
dGhpcykpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTk0OCw3ICsxOTcyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWMKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKKyAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUo
Y29udGV4dEdyb3VwKCksIHRoaXMpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTIxNjQsNyArMjE4OCw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0
CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICB9CiAKLSAgICBXZWJHTE9iamVj
dCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnQoYXR0YWNobWVu
dCk7CisgICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpOwogICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRSkKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUpOwpAQCAtMjk0MCw3ICsyOTY0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYg
ZWMKICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJnZhbHVlKTsKICAgICBwcm9ncmFtLT5zZXRM
aW5rU3RhdHVzKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CiAgICAgLy8gTmVlZCB0byBjYWNo
ZSBsaW5rIHN0YXR1cyBiZWZvcmUgY2FjaGluZyBhY3RpdmUgYXR0cmlidXRlIGxvY2F0aW9ucy4K
LSAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOworICAgIHByb2dyYW0t
PmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKGdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTMwMzEsNyArMzA1NSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGlj
c0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzk0MCw3ICszOTY0LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAgICAgaWYgKG1fY3VycmVudFByb2dyYW0g
IT0gcHJvZ3JhbSkgewogICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgICAg
IG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBy
b2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgICAgIG1fY3VycmVu
dFByb2dyYW0gPSBwcm9ncmFtOwogICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0
T3JaZXJvKHByb2dyYW0pKTsKICAgICAgICAgaWYgKHByb2dyYW0pCkBAIC00MDkwLDYgKzQxMTQs
MTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIG1fY29udGV4dEdyb3VwLT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CiAgICAgbV9jb250ZXh0
TG9zdE1vZGUgPSBtb2RlOwogCkBAIC00MTQzLDIyICs0MTc1LDMyIEBAIFBsYXRmb3JtTGF5ZXIq
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB9CiAjZW5kaWYK
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZU9iamVjdChXZWJHTE9iamVjdCog
b2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChX
ZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVP
YmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJl
ZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghaXNDb250
ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29u
dGV4dE9iamVjdCogb2JqZWN0KQogewotICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2JqZWN0
KTsKKyAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3Qq
IG9iamVjdCkKIHsKICAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0gICAgcmVtb3ZlT2Jq
ZWN0KG9iamVjdCk7Ci0gICAgbV9jYW52YXNPYmplY3RzLmFkZChvYmplY3QpOworICAgIG1fY29u
dGV4dE9iamVjdHMuYWRkKG9iamVjdCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKIHsKLSAgICB3aGlsZSAobV9jYW52YXNPYmpl
Y3RzLnNpemUoKSA+IDApIHsKLSAgICAgICAgSGFzaFNldDxXZWJHTE9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG1fY2FudmFzT2JqZWN0cy5iZWdpbigpOworICAgIHdoaWxlIChtX2NvbnRleHRPYmpl
Y3RzLnNpemUoKSA+IDApIHsKKyAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRPYmplY3RzLmJlZ2luKCk7CiAgICAgICAgICgqaXQpLT5k
ZXRhY2hDb250ZXh0KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA4ZjFlZmQ5YjA0NGJmYzAwZWFkNGFh
NDQwOWY0YTA4M2JiNGY4ZjE1Li41ZjYzY2YxYWU2Y2ZkYTgwNThhYmRiNmI2MTcxZDBmZDBjYmRh
NjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaApAQCAtNTAsNiArNTAsOCBAQCBjbGFzcyBPRVNUZXh0dXJlRmxvYXQ7CiBjbGFz
cyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKIGNsYXNzIFdl
YkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJHTENvbnRleHRP
YmplY3Q7CiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlczsKIGNsYXNzIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXM7CiBjbGFzcyBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOwpAQCAtNjEsNiArNjMs
NyBAQCBjbGFzcyBXZWJHTE9iamVjdDsKIGNsYXNzIFdlYkdMUHJvZ3JhbTsKIGNsYXNzIFdlYkdM
UmVuZGVyYnVmZmVyOwogY2xhc3MgV2ViR0xTaGFkZXI7CitjbGFzcyBXZWJHTFNoYXJlZE9iamVj
dDsKIGNsYXNzIFdlYkdMVGV4dHVyZTsKIGNsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xh
c3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKQEAgLTI5Miw4ICsyOTUsMTAgQEAgcHVibGlj
OgogICAgIH07CiAgICAgdm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7CiAg
ICAgdm9pZCBmb3JjZVJlc3RvcmVDb250ZXh0KCk7CisgICAgdm9pZCBsb3NlQ29udGV4dEltcGwo
TG9zdENvbnRleHRNb2RlKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIFdlYkdMQ29udGV4
dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQo
KTsgfQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgpAQCAtMzA0LDcgKzMwOSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSgpOwogCi0gICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xPYmplY3Qq
KTsKKyAgICB2b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOworICAg
IHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKICAgICAKICAg
ICB1bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhWZXJ0
ZXhBdHRyaWJzOyB9CiAKQEAgLTMxOSw3ICszMjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3Q29udGV4dCgpOwogICAgIHZvaWQgc2V0dXBGbGFncygpOwogCi0gICAgdm9pZCBh
ZGRPYmplY3QoV2ViR0xPYmplY3QqKTsKKyAgICB2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNo
YXJlZE9iamVjdCopOworICAgIHZvaWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmpl
Y3QqKTsKICAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIAogICAgIHZvaWQg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CkBAIC0zNjIsNiArMzY5LDcgQEAgcHVibGljOgogI2VuZGlm
CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8
V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3VwOwogCiAgICAgLy8gT3B0aW9uYWwgc3Ry
dWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVj
dGx5CiAgICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KQEAgLTM3OCw3ICsz
ODYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG1fbmVlZHNVcGRhdGU7CiAgICAgYm9vbCBtX21h
cmtlZENhbnZhc0RpcnR5OwotICAgIEhhc2hTZXQ8V2ViR0xPYmplY3QqPiBtX2NhbnZhc09iamVj
dHM7CisgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwog
CiAgICAgLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0
IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJS
QVlfQlVGRkVSCiAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKaW5kZXggNTk2OTVlNGM5
M2JmNTRjOTgyMGE1YTc3ZWVkOTgzNjJmMTk0MjBiNi4uMzUwNjhlYmNkY2EyZWU2NjU3YWE2YmIx
MWFhZDgyNDhlMjU5ZTM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xTaGFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIAor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDE2ICs0MCwyMSBAQCBQYXNz
UmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY3R4LCBHQzNEZW51bQogfQogCiBXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVtIHR5cGUpCi0gICAgOiBXZWJHTE9iamVjdChj
dHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAg
ICAsIG1fc291cmNlKCIiKQogewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZVNoYWRlcih0eXBlKSk7CisgICAgc2V0T2JqZWN0KGN0eC0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsKIH0KIAotdm9pZCBXZWJHTFNoYWRl
cjo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK1dlYkdMU2hhZGVy
Ojp+V2ViR0xTaGFkZXIoKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
ZGVsZXRlU2hhZGVyKG9iamVjdCk7CisgICAgZGVsZXRlT2JqZWN0KDApOworfQorCit2b2lkIFdl
YkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2Qs
IFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQzZC0+ZGVsZXRlU2hhZGVy
KG9iamVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5o
CmluZGV4IDFkN2ExMGMxYzRiOWQ5OWFmMGNhYzdmMjFlY2M0Zjk3OGY5MzRhNDguLjkyZDFkMWM0
OGExOWMxYzlkMGI2MDYxMGZlZmMyNWJhZTY3OGI0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaGFkZXIuaApAQCAtMjYsMTYgKzI2LDE2IEBACiAjaWZuZGVmIFdlYkdMU2hh
ZGVyX2gKICNkZWZpbmUgV2ViR0xTaGFkZXJfaAogCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIK
KyNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFdlYkdMU2hhZGVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdM
U2hhZGVyIDogcHVibGljIFdlYkdMU2hhcmVkT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5XZWJHTFNoYWRlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFNo
YWRlcigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHQzNE
ZW51bSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2Jq
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQz
RCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFNoYXJlZE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY3NmNhZTc3YjRmOTE3NmM1ODlmYWYy
YTY1ZTU1MDYyOTZmNmM5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJXZWJH
TFNoYXJlZE9iamVjdC5oIgorCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
ZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KQorICAgIDogV2ViR0xPYmplY3QoY29udGV4dCksCisgICAgICBtX2NvbnRleHRH
cm91cChjb250ZXh0LT5jb250ZXh0R3JvdXAoKSkKK3sKK30KKworV2ViR0xTaGFyZWRPYmplY3Q6
On5XZWJHTFNoYXJlZE9iamVjdCgpCit7CisgICAgaWYgKG1fY29udGV4dEdyb3VwKQorICAgICAg
ICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KHRoaXMpOworfQorCit2b2lkIFdlYkdMU2hh
cmVkT2JqZWN0OjpkZXRhY2hDb250ZXh0R3JvdXAoKQoreworICAgIGRldGFjaCgpOworICAgIGlm
IChtX2NvbnRleHRHcm91cCkgeworICAgICAgICBkZWxldGVPYmplY3QoMCk7CisgICAgICAgIG1f
Y29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3QodGhpcyk7CisgICAgICAgIG1fY29udGV4dEdyb3Vw
ID0gMDsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBXZWJHTFNoYXJlZE9iamVjdDo6
Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0R3Jv
dXAgPyBtX2NvbnRleHRHcm91cC0+Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgOiAwOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xTaGFyZWRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTk2NjEzMzIwOGIzYTg2MjI0YmI4
OGRiYTc3Njc5Y2MxZDRjYmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYkdMU2hhcmVkT2JqZWN0X2gKKyNkZWZpbmUgV2ViR0xTaGFyZWRPYmplY3RfaAor
CisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFdlYkdMQ29udGV4dEdyb3VwOworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OworCisvLyBXZWJHTFNoYXJlZE9iamVjdCB0aGUgYmFzZSBjbGFz
cyBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUKKy8vIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dHMuCitjbGFzcyBXZWJHTFNoYXJlZE9iamVjdCA6IHB1YmxpYyBXZWJHTE9i
amVjdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViR0xTaGFyZWRPYmplY3QoKTsKKworICAg
IFdlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHRHcm91cDsgfQorCisgICAgdmlydHVhbCBib29sIGlzQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiBj
b250ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29udGV4dEdyb3VwID09IG1fY29udGV4dEdyb3VwOworICAgIH0KKwor
ICAgIHZvaWQgZGV0YWNoQ29udGV4dEdyb3VwKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJHTFNo
YXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBo
YXNHcm91cE9yQ29udGV4dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZXh0
R3JvdXA7CisgICAgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgV2ViR0xDb250ZXh0R3JvdXAq
IG1fY29udGV4dEdyb3VwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gV2ViR0xTaGFyZWRPYmplY3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VGV4dHVyZS5jcHAKaW5kZXggZThlOGJmODI0NWQwMzQwMDcyM2U3Mjc2NmYyMDM5NzJlNDNiMTgy
Zi4uOWFkNThiNGJjMTY0NzBlYTA0ZjY0ODk4MGI3Njk1MTI2YTNiZDJiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKIAorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3Vw
LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCkBAIC00MCw3ICs0MSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJl
PiBXZWJHTFRleHR1cmU6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKIH0KIAog
V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCi0g
ICAgOiBXZWJHTE9iamVjdChjdHgpCisgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAg
LCBtX3RhcmdldCgwKQogICAgICwgbV9taW5GaWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJF
U1RfTUlQTUFQX0xJTkVBUikKICAgICAsIG1fbWFnRmlsdGVyKEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpCkBAIC01MCw3ICs1MSwxMiBAQCBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAgICAs
IG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlKGZhbHNlKQogewotICAgIHNldE9iamVjdChjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVRleHR1cmUoKSk7CisgICAgc2V0T2JqZWN0
KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlVGV4dHVyZSgpKTsKK30KKworV2ViR0xU
ZXh0dXJlOjp+V2ViR0xUZXh0dXJlKCkKK3sKKyAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKIHZv
aWQgV2ViR0xUZXh0dXJlOjpzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExl
dmVsKQpAQCAtMjI1LDkgKzIzMSw5IEBAIGJvb2wgV2ViR0xUZXh0dXJlOjpuZWVkVG9Vc2VCbGFj
a1RleHR1cmUoKSBjb25zdAogICAgIHJldHVybiBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZTsKIH0K
IAotdm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBv
YmplY3QpCit2b2lkIFdlYkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKLSAgICBjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKKyAgICBjb250
ZXh0M2QtPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKIH0KIAogaW50IFdlYkdMVGV4dHVyZTo6bWFw
VGFyZ2V0VG9JbmRleChHQzNEZW51bSB0YXJnZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5oCmluZGV4IDZiZDEyNzIzY2M3NGFmZDIyN2ExY2JmYzNhNmZm
YzE0ZTU5N2Q5ZDguLmQxZGI5NTFmZmMyMGQxOTc4NzE5OTUwMzUwNTIxMzE4ZDFmNjBjNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIFdlYkdMVGV4dHVyZV9oCiAjZGVmaW5lIFdlYkdMVGV4dHVyZV9oCiAKLSNp
bmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xU
ZXh0dXJlIDogcHVibGljIFdlYkdMT2JqZWN0IHsKK2NsYXNzIFdlYkdMVGV4dHVyZSA6IHB1Ymxp
YyBXZWJHTFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViR0xUZXh0dXJl
KCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CiAKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdl
YkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKIHBy
aXZhdGU6CiAgICAgY2xhc3MgTGV2ZWxJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKaW5kZXggZDE0Yzk2
YzAxZjYxNDdlZjRlODBhOWI4MWVmOWJiY2IwNjE5Mzc1MC4uNGFhMDNiOGZlYTE1MTliOTcyMjM3
MDRjYWZiZmE3NjM4MTMyYWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKQEAgLTQwLDcgKzQwLDcgQEAg
UGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpjcmVhdGUoV2ViR0xSZW4KIH0KIAogV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgVmFv
VHlwZSB0eXBlKQotICAgIDogV2ViR0xPYmplY3QoY3R4KQorICAgIDogV2ViR0xDb250ZXh0T2Jq
ZWN0KGN0eCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZh
bHNlKQogICAgICwgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcigwKQpAQCAtNTcsOSArNTcsMTQg
QEAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
K1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6On5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkK
IHsKLSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKKyAgICBkZWxldGVPYmplY3QoMCk7Cit9CisKK3Zv
aWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3sKKyAgICBFeHRl
bnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0M2QtPmdldEV4dGVuc2lvbnMoKTsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVmFvVHlwZURlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oCmluZGV4IGY0OWE3ODA2OTMwODM0OWIxNjUwZWI0YmVkZDgyNDc2ODJiODIw
MTIuLjc1YWU0MmZmNzI1YWNkMWRmZWRiY2U2YTBiYzkyZDNjNDAyOGY0MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmgKQEAgLTI3LDIxICsyNywyMSBAQAogI2RlZmluZSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
X2gKIAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIK
KyNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTIDogcHVibGljIFdlYkdMT2JqZWN0
IHsKK2NsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMgOiBwdWJsaWMgV2ViR0xDb250ZXh0
T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIFZhb1R5cGUgewogICAgICAgICBWYW9UeXBlRGVm
YXVsdCwKICAgICAgICAgVmFvVHlwZVVzZXIsCiAgICAgfTsKICAgICAKLSAgICB2aXJ0dWFsIH5X
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgIHZpcnR1
YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
LCBWYW9UeXBlKTsKICAgICAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5
cGUpOwogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
LCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnRleEFycmF5KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hh
bmdlTG9nCmluZGV4IGRiMjgzNTgzYjlkYWNhNTc1NjI1ZmI3OTM4YWFiMDBjNDM4NmI5ZWUuLmFj
NGQyMzM2ZmFkZjljZGZhMzk4MGVhNWVlMWY5MjM5YTFkN2ZiMTYgMTAwNjQ0Ci0tLSBhL0NoYW5n
ZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTMgQEAKKzIwMTItMDEtMDkgIEdyZWdn
IFRhdmFyZXMgIDxnbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIFdlYkdMQ29udGV4dEdy
b3VwIGFzIHN0ZXAgdG93YXJkIHNoYXJpbmcgV2ViR0wgcmVzb3VyY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkwNgorCisgICAgICAgIFRoZSBX
ZWJHTCBXb3JraW5nIEdyb3VwIHdpbGwgc29vbiBhZGQgdGhlIGFiaWxpdHkgdG8gc2hhcmUKKyAg
ICAgICAgV2ViR0wgcmVzb3VyY2VzIGFtb25nIFdlYkdMIGNvbnRleHRzLiBUaGlzIGlzIHRoZSBu
ZWNlc3NhcnkKKyAgICAgICAgcHJlcCB3b3JrLiBOTyBBUEkgY2hhbmdlcy4KKworICAgICAgICBB
ZGRlZCBXZWJHTFNoYXJlZE9iamVjdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBzaGFyZWQgdnMKKyAg
ICAgICAgV2ViR0xDb250ZXh0T2JqZWN0IGZvciBvYmplY3RzIHRoYXQgYXJlIG5vdC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRl
eEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0
OjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpPRVNWZXJ0ZXhBcnJh
eU9iamVjdDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VTVmVy
dGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6T0VT
VmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6Oldl
YkdMQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjp+V2ViR0xCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0R3JvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29u
dGV4dEdyb3VwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6
OldlYkdMQ29udGV4dEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3Vw
Ojp+V2ViR0xDb250ZXh0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3Jv
dXA6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRl
eHRHcm91cDo6YWRkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91
cDo6cmVtb3ZlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRHcm91cDo6
cmVtb3ZlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjphZGRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmRldGFjaEFuZFJl
bW92ZUFsbE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6Omxv
c2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3Vw
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0T2JqZWN0Ojp+V2ViR0xDb250ZXh0T2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTENvbnRleHRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0Lmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmguCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTENvbnRleHRPYmplY3Q6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xDb250ZXh0T2JqZWN0Ojp2YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbnRl
eHRPYmplY3Q6Omhhc0dyb3VwT3JDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6Oldl
YkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6fldl
YkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6c2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xG
cmFtZWJ1ZmZlcjo6Z2V0QXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1l
YnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xG
cmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZy
YW1lYnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycyk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6fldlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMT2JqZWN0OjpkZWxldGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xP
YmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6b25EZXRhY2hl
ZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFt
OjpXZWJHTFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjp+V2ViR0xQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9j
YXRpb25zKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmJ1ZmZlcjo6fldlYkdMUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG9zaXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQ
cmVjaXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb250
ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0
YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFNoYWRlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJi
dWZmZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OldlYkdMU2hh
cmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0Ojp+V2ViR0xT
aGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmRldGFj
aENvbnRleHRHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6Z2V0
QUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9i
amVjdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmNvbnRleHRHcm91cCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6aXNCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xTaGFyZWRPYmplY3Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFNoYXJlZE9iamVjdDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xTaGFyZWRPYmplY3Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hh
cmVkT2JqZWN0Ojppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFyZWRPYmpl
Y3Q6OnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpoYXNH
cm91cE9yQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6fldlYkdMVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjp+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisKIDIw
MTItMDEtMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ4MDUuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>