<?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>150037</bug_id>
          
          <creation_ts>2015-10-12 11:12:50 -0700</creation_ts>
          <short_desc>PDFPlugin should take advantage of threaded scrolling</short_desc>
          <delta_ts>2015-11-02 16:47:45 -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>New Bugs</component>
          <version>WebKit 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="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1132374</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-10-12 11:12:50 -0700</bug_when>
    <thetext>PDFPlugin should take advantage of threaded scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132377</commentid>
    <comment_count>1</comment_count>
      <attachid>262905</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-10-12 11:14:37 -0700</bug_when>
    <thetext>Created attachment 262905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134785</commentid>
    <comment_count>2</comment_count>
      <attachid>263543</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-10-19 19:34:47 -0700</bug_when>
    <thetext>Created attachment 263543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138700</commentid>
    <comment_count>3</comment_count>
      <attachid>264628</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-02 14:29:25 -0800</bug_when>
    <thetext>Created attachment 264628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138704</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-02 14:32:25 -0800</bug_when>
    <thetext>Attachment 264628 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:1905:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:1724:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:239:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 3 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138726</commentid>
    <comment_count>5</comment_count>
      <attachid>264635</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-02 15:21:28 -0800</bug_when>
    <thetext>Created attachment 264635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138728</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-02 15:24:44 -0800</bug_when>
    <thetext>Attachment 264635 did not pass style-queue:


ERROR: Source/WebKit2/WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:1905:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:1724:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:240:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 3 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138756</commentid>
    <comment_count>7</comment_count>
      <attachid>264635</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-11-02 16:19:08 -0800</bug_when>
    <thetext>Comment on attachment 264635
Patch

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

&gt; Source/WebKit2/WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:536
&gt; +    m_accessibilityObject.get().pdfLayerController = m_pdfLayerController.get();
&gt; +    m_accessibilityObject.get().parent = webFrame()-&gt;page()-&gt;accessibilityRemoteObject();

.get(). :|

&gt; Source/WebKit2/WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:1423
&gt; +        }

Weird that there&apos;s a fall-through here. I&apos;d add a break; just to be sure. Same for all outer cases.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:1749
&gt; +    PDFSelection *selectionForInitialSearch = [initialSelection copy];

Please use a RetainPtr here.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:374
&gt; +    std::function&lt;void(bool)&gt; _completionHandler;

void (bool).

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:882
&gt; +//    context.translate(0, -m_size.height());

What.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138758</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-02 16:27:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/191922</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138765</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-11-02 16:47:45 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/191926
http://trac.webkit.org/changeset/191927</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262905</attachid>
            <date>2015-10-12 11:14:37 -0700</date>
            <delta_ts>2015-10-19 19:34:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150037-20151012111405.patch</filename>
            <type>text/plain</type>
            <size>245252</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk2NGZmNGE3OWFmYTc5
MWU3NmMzMGY0YTU0YWI1MzViN2RhYWFjNy4uMjFkMmY5MDRiZDc3MGJhYWIxMzk4ODRiNzQ2YjI2
YWQxYzgyYTNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE1LTEwLTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFBERlBsdWdpbiBz
aG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhyZWFkZWQgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50
KToKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheTo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZUZvcmNl
U3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyk6CisgICAgICAgICogcGxhdGZv
cm0vV2lkZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmJvdW5kc1JlY3QpOgorCiAy
MDE1LTEwLTA4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYnVpbGQgZml4IGZvciBFTkFCTEUoTUVESUFfU0VTU0lPTikgYWZ0ZXIgcjE5MDAz
MC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCBjMzkzNzNlZGM1OWYyNTJhZGQ4MzMzOWU0YTVlMDc5YzMyYjg4M2Jk
Li5mZDkzZDE5MWU1NDVkNDUyY2IzNTg1NTNmOTFkN2RmOGNhNzhiZDA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzA5IEBACisyMDE1LTEwLTEyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25A
YXBwbGUuY29tPgorCisgICAgICAgIFBERlBsdWdpbiBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2Yg
dGhyZWFkZWQgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTAwMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpyZXF1aXJlc1VuaWZpZWRTY2Fs
ZUZhY3Rvcik6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
aDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBTaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpwYWdlWm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGFnZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2Fk
Rm9yRnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyRGV0
YWlscy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBs
dWdpbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRl
ZFBERlBsdWdpbi5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0uCisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0
eU9iamVjdCBpbml0V2l0aFBERlBsdWdpbjpdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nl
c3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdKToKKyAgICAgICAgKC1bV0tQ
REZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpd
KToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2lu
QWNjZXNzaWJpbGl0eU9iamVjdCByZWFkaW5nTW9kZWxdKToKKyAgICAgICAgKC1bV0tQREZQbHVn
aW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAg
ICAgICAoLVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eUFjdGlv
bk5hbWVzXSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nl
c3NpYmlsaXR5UGVyZm9ybUFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3Np
YmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOl0pOgorICAgICAg
ICAoLVtXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eVNldFZhbHVl
OmZvckF0dHJpYnV0ZTpdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2Jq
ZWN0IGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAg
KC1bV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlF
bGVtZW50XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nl
c3NpYmlsaXR5SGl0VGVzdDpdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5TY3JvbGxiYXJMYXll
ciBpbml0V2l0aFBERlBsdWdpbjpdKToKKyAgICAgICAgKC1bV0tQREZQbHVnaW5TY3JvbGxiYXJM
YXllciBhY3Rpb25Gb3JLZXk6XSk6CisgICAgICAgICgtW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5
ZXIgZHJhd0luQ29udGV4dDpdKToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxl
Z2F0ZSBpbml0V2l0aFBERlBsdWdpbjpdKToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xs
ZXJEZWxlZ2F0ZSB1cGRhdGVTY3JvbGxQb3NpdGlvbjpdKToKKyAgICAgICAgKC1bV0tQREZMYXll
ckNvbnRyb2xsZXJEZWxlZ2F0ZSB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOndpdGhUeXBlczpdKToK
KyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzaG93RGVmaW5pdGlvbkZv
ckF0dHJpYnV0ZWRTdHJpbmc6YXRQb2ludDpdKToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRy
b2xsZXJEZWxlZ2F0ZSBwZXJmb3JtV2ViU2VhcmNoOl0pOgorICAgICAgICAoLVtXS1BERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlIHBlcmZvcm1TcG90bGlnaHRTZWFyY2g6XSk6CisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbl0p
OgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNhdmVUb1BERl0pOgor
ICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHBkZkxheWVyQ29udHJvbGxl
cjpjbGlja2VkTGlua1dpdGhVUkw6XSk6CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGUgcGRmTGF5ZXJDb250cm9sbGVyOmRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246XSk6
CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGRmTGF5ZXJDb250cm9s
bGVyOmRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcjpdKToKKyAgICAgICAgKC1bV0tQREZMYXll
ckNvbnRyb2xsZXJEZWxlZ2F0ZSBwZGZMYXllckNvbnRyb2xsZXI6ZGlkQ2hhbmdlRGlzcGxheU1v
ZGU6XSk6CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGRmTGF5ZXJD
b250cm9sbGVyOmRpZENoYW5nZVNlbGVjdGlvbjpdKToKKyAgICAgICAgKGFwcGVuZFZhbHVlc0lu
UERGTmFtZVN1YnRyZWVUb1ZlY3Rvcik6CisgICAgICAgIChnZXRBbGxWYWx1ZXNJblBERk5hbWVU
cmVlKToKKyAgICAgICAgKGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OlBE
RlBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6flBERlBsdWdpbik6CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGx1Z2luSW5mbyk6CisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
cGx1Z2luVmlldyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlU2Nyb2xs
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzY3JvbGxDb3JuZXJSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmZvcmNlVXBkYXRl
U2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpz
Y3JvbGxiYXJTdHlsZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmFkZEFy
Y2hpdmVSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OmpzUERGRG9jSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OmpzUERGRG9jRmluYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OmpzUERGRG9jUHJpbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1ha2VK
U1BERkRvYyk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQb3N0U2NyaXB0RGF0YVRvUERGKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpzdHJlYW1EaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpydW5TY3JpcHRzSW5QREZEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6Y3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmF0dGVtcHRUb1VubG9ja1BERik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBk
YXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmNvbXB1dGVQYWdlQm94ZXMpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1
bGF0ZVNpemVzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95KToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjp1cGRhdGVDb250cm9sVGludHMpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpzbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGx1Z2luTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVn
aW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9v
dFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1Rv
U2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpib3VuZHNPblNjcmVlbik6Cisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6ZnJhbWVEaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQpOgorICAgICAgICAoV2ViS2l0Ojptb2RpZmllckZsYWdz
RnJvbVdlYkV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Z2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBkYXRlQ3Vyc29yKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpoYW5kbGVNb3VzZUVudGVyRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmhhbmRsZU1vdXNlTGVhdmVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
c2hvd0NvbnRleHRNZW51QXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFu
ZGxlQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxl
S2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlRWRpdGlu
Z0NvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmlzRWRpdGluZ0NvbW1hbmRF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzZXRTY3JvbGxPZmZzZXQpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aXNGdWxsRnJhbWVQbHVnaW4pOgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW46OmNsaWNrZWRMaW5rKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpzZXRBY3RpdmVBbm5vdGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzdXBw
b3J0c0Zvcm1zKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpub3RpZnlDb250ZW50U2Nh
bGVGYWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpub3RpZnlEaXNw
bGF5TW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmxpdmVSZXNvdXJj
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNhdmVUb1BERik6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6c2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb3VudEZpbmRNYXRjaGVzKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OmZpbmRTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6Zm9jdXNOZXh0QW5ub3RhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Zm9j
dXNQcmV2aW91c0Fubm90YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om5vdGlm
eVNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmdldFNlbGVj
dGlvblN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uRm9y
V29yZEF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmV4aXN0aW5nU2VsZWN0
aW9uQ29udGFpbnNQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OnBvaW50SW5MYXlvdXRTcGFjZUZv
clBvaW50SW5XaW5kb3dTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bG9va3Vw
VGV4dEF0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpyZWN0SW5WaWV3U3BhY2VGb3JSZWN0
SW5MYXlvdXRTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cmVjdEZvclNlbGVj
dGlvbkluUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwZXJmb3JtV2ViU2VhcmNoKToKKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjpwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoKToKKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpsaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YWNjZXNz
aWJpbGl0eU9iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXll
ckNvbnRyb2xsZXJTUEkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVs
ZWdhdGUgcGRmTGF5ZXJDb250cm9sbGVyOnNjcm9sbFRvUG9pbnQ6XSk6CisgICAgICAgICgtW1dL
UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGRmTGF5ZXJDb250cm9sbGVyOmNvcHlJdGVtczp3
aXRoVHlwZXM6XSk6CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGRm
TGF5ZXJDb250cm9sbGVyOnNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdFBvaW50
Ol0pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHBkZkxheWVyQ29u
dHJvbGxlcjpwZXJmb3JtV2ViU2VhcmNoRm9yU3RyaW5nOl0pOgorICAgICAgICAoLVtXS1BERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlIHBkZkxheWVyQ29udHJvbGxlcjpwZXJmb3JtU3BvdGxpZ2h0
U2VhcmNoRm9yU3RyaW5nOl0pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVn
YXRlIHBkZkxheWVyQ29udHJvbGxlck9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb246XSk6CisgICAg
ICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGRmTGF5ZXJDb250cm9sbGVyU2F2
ZVRvUERGOl0pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHBkZkxh
eWVyQ29udHJvbGxlcjpkaWRDbGlja0xpbmtXaXRoVVJMOl0pOgorICAgICAgICAoLVtXS1BERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlIHBkZkxheWVyQ29udHJvbGxlcjppbnZhbGlkYXRlUmVjdDpd
KToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBwZGZMYXllckNvbnRy
b2xsZXJJbnZhbGlkYXRlSFVEOl0pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRl
bGVnYXRlIHBkZkxheWVyQ29udHJvbGxlclpvb21JbjpdKToKKyAgICAgICAgKC1bV0tQREZMYXll
ckNvbnRyb2xsZXJEZWxlZ2F0ZSBwZGZMYXllckNvbnRyb2xsZXJab29tT3V0Ol0pOgorICAgICAg
ICAoLVtXS1BERkhVREFuaW1hdGlvbkRlbGVnYXRlIGluaXRXaXRoQW5pbWF0aW9uQ29tcGxldGlv
bkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLUERGSFVEQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0
aW9uRGlkU3RvcDpmaW5pc2hlZDpdKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpQREZQ
bHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aXNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OmludmFsaWRhdGVQREZSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjppbnZhbGlkYXRlSFVEKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjcmVhdGVQ
YXNzd29yZEVudHJ5Rm9ybSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXR0ZW1wdFRv
VW5sb2NrUERGKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGlkQ2FsY3VsYXRlU2l6ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmRlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzbmFwc2hvdCk6CisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpib3VuZHNPblNjcmVlbik6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46Om5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjp1cGRhdGVDdXJzb3IpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRs
ZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZU1vdXNlRW50
ZXJFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2hvd0NvbnRleHRNZW51QXRQ
b2ludCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aXNGdWxsRnJhbWVQbHVnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNldEFjdGl2ZUFubm90YXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46Om5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZXhpc3RpbmdTZWxlY3Rpb25Db250YWluc1BvaW50
KToKKyAgICAgICAgKFdlYktpdDo6cG9pbnRJbkxheW91dFNwYWNlRm9yUG9pbnRJbldpbmRvd1Nw
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OnJlY3RJblZpZXdTcGFjZUZvclJlY3RJbkxheW91dFNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpyZWN0Rm9yU2VsZWN0aW9uSW5Sb290Vmlldyk6
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bGl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OmFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OnNjcm9sbFRvUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNjYWxl
RmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp6b29tSW4pOgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46Onpvb21PdXQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OkhVRDo6SFVEKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpIVUQ6On5IVUQpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkhVRDo6cGFnZU92ZXJsYXlEZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkhVRDo6d2lsbE1vdmVUb1BhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46OkhVRDo6ZGlkTW92ZVRvUGFnZSk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6SFVEOjpmcmFtZUluUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OkhVRDo6ZnJhbWVJblBERlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OkhVRDo6Y29udGFpbnNQb2ludEluUm9vdFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OkhVRDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OkhVRDo6aW52
YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6SFVEOjpzZXRWaXNpYmxlKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpIVUQ6Om1vdXNlRXZlbnQpOgorICAgICAgICAo
LVtXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGluaXRXaXRoUERGUGx1Z2luOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFjdGlvbkZvcktleTpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBkcmF3SW5Db250
ZXh0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRl
IHVwZGF0ZVNjcm9sbFBvc2l0aW9uOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1BERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlIHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6d2l0aFR5cGVzOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdFBvaW50Ol0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHBlcmZvcm1XZWJTZWFyY2g6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGVyZm9ybVNwb3Rs
aWdodFNlYXJjaDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJE
ZWxlZ2F0ZSBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGRmTGF5ZXJDb250cm9sbGVyOmNs
aWNrZWRMaW5rV2l0aFVSTDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRy
b2xsZXJEZWxlZ2F0ZSBwZGZMYXllckNvbnRyb2xsZXI6ZGlkQ2hhbmdlQ29udGVudFNjYWxlRmFj
dG9yOl0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVwZGF0ZVNjcm9s
bGJhcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNyZWF0ZVNjcm9s
bGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGVzdHJveVNjcm9s
bGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZVNjcm9sbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsQ29ybmVyUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNjcm9sbFNpemUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmlzQWN0aXZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJl
YWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OnNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46Om1heGltdW1TY3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjp1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hh
bmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29tcHV0ZVBhZ2VC
b3hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBkYXRlQ29udHJv
bFRpbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRy
b2xGb3JMYXllckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6cGx1Z2luTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpnZXRFdmVudFR5cGVG
cm9tV2ViRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRs
ZU1vdXNlTGVhdmVFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
aGFuZGxlS2V5Ym9hcmRFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpZXdSZWN0Rm9yU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpoYW5kbGVXaGVlbEV2
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bkFubm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbkFubm90YXRpb246OnVw
ZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bkNob2ljZUFubm90YXRpb24ubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5QYXNzd29yZEZpZWxkLm1tOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpbi5oOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW46OmNhbkNyZWF0ZVRyYW5zaWVu
dFBhaW50aW5nU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW46OnJlcXVpcmVzVW5p
ZmllZFNjYWxlRmFjdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZh
Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5OjpyZXF1aXJlc1VuaWZpZWRTY2Fs
ZUZhY3Rvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5WaWV3OjpyZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpblZpZXc6OnNob3VsZENyZWF0ZVRyYW5zaWVudFBhaW50aW5nU25hcHNob3Qp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lOjpyZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rvcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp0ZXh0Wm9vbUZhY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFRleHRab29tRmFjdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGFnZVpvb21GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzZXRQYWdlWm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNl
dFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBv
cHVwSW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKToKKwogMjAxNS0xMC0wOCAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgRm9ybWF0IHN0cmlu
ZyBpc3N1ZXMgaW4gTmV0d29ya0NhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCmluZGV4IGMwYjFmNWQ1MmExZjRlMjYwOTU0MzQ5NGFlYmI3NTI0NWZlZDUxYTcuLjUzMzE4
Y2Q5NzA1NTUzODIyMmRmY2E0NmRlYmVkZThhYmQyNTI3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTE4MDUsNyArMTgwNSwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1N
b3VzZQogCiAgICAgaWYgKHN3YWxsb3dFdmVudCkgewogICAgICAgICAvLyBzY3JvbGxiYXJzIHNo
b3VsZCBnZXQgZXZlbnRzIGFueXdheSwgZXZlbiBkaXNhYmxlZCBjb250cm9scyBtaWdodCBiZSBz
Y3JvbGxhYmxlCi0gICAgICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbW91c2VFdmVudC5zY3Jv
bGxiYXIoKTsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAg
ICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gdmlldyA/IHZpZXctPnNjcm9sbGJhckF0UG9pbnQo
cGxhdGZvcm1Nb3VzZUV2ZW50LnBvc2l0aW9uKCkpIDogMDsKKyAgICAgICAgaWYgKCFzY3JvbGxi
YXIpCisgICAgICAgICAgICBzY3JvbGxiYXIgPSBtb3VzZUV2ZW50LnNjcm9sbGJhcigpOwogCiAg
ICAgICAgIHVwZGF0ZUxhc3RTY3JvbGxiYXJVbmRlck1vdXNlKHNjcm9sbGJhciwgdHJ1ZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKaW5kZXggZTU2NjAwYmMwMGUwNDk3ZjEyMDg0
NDQwYjAwZWQwOTYyMmRkNzI5ZS4uYWRmMDc4MmU3NmYxNGVmMmFhYTc2ODM1MjFiYmRlY2EzYWM2
MmJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTUzLDE0ICs1MywxMCBA
QCBSZWY8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoQ2xpZW50JiBjbGllbnQsIE92
ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQogCiBQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoQ2xpZW50
JiBjbGllbnQsIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQogICAgIDogbV9jbGllbnQoY2xpZW50
KQotICAgICwgbV9wYWdlKG51bGxwdHIpCiAgICAgLCBtX2ZhZGVBbmltYXRpb25UaW1lcigqdGhp
cywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFu
aW1hdGlvblN0YXJ0VGltZSgwKQogICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFu
aW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikK
LSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCisgICAgLCBtX25lZWRzU3luY2hyb25vdXNTY3Jv
bGxpbmcob3ZlcmxheVR5cGUgPT0gT3ZlcmxheVR5cGU6OlZpZXcpCiAgICAgLCBtX292ZXJsYXlU
eXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFy
ZW50KQogICAgICwgbV9wYWdlT3ZlcmxheUlEKGdlbmVyYXRlUGFnZU92ZXJsYXlJRCgpKQogewog
fQpAQCAtMTYzLDcgKzE1OSw4IEBAIHZvaWQgUGFnZU92ZXJsYXk6OnNldFBhZ2UoUGFnZSogcGFn
ZSkKIHZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpCiB7CiAgICAgaWYgKGF1dG8gcGFnZU92ZXJsYXlDb250cm9sbGVyID0gY29udHJvbGxl
cigpKSB7Ci0gICAgICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci0+c2V0UGFnZU92ZXJsYXlPcGFj
aXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisgICAgICAgIGlmIChtX2ZhZGVBbmltYXRp
b25UeXBlICE9IEZhZGVBbmltYXRpb25UeXBlOjpOb0FuaW1hdGlvbikKKyAgICAgICAgICAgIHBh
Z2VPdmVybGF5Q29udHJvbGxlci0+c2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0
aW9uRmFkZWRJbik7CiAgICAgICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci0+c2V0UGFnZU92ZXJs
YXlOZWVkc0Rpc3BsYXkoKnRoaXMsIGRpcnR5UmVjdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlT3ZlcmxheS5oCmluZGV4IGY3MjM2NTAyZTc3ZDdkYzA2ZDhjNGIyODNkYzJhZTE5NTg5YTZj
MDIuLmJhNjc0N2JmMDlhODIxNzFmMjkxZWRjODgxN2NjMDNlOWQ4N2MzYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5LmgKQEAgLTExMyw2ICsxMTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IFBhZ2VPdmVybGF5IHNob3VsZCBvd24gaXRzIGxheWVyLCBpbnN0ZWFkIG9mIFBhZ2VPdmVy
bGF5Q29udHJvbGxlci4KICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0xheWVyJiBsYXllcigp
OwogCisgICAgYm9vbCBuZWVkc1N5bmNocm9ub3VzU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc1N5bmNocm9ub3VzU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXROZWVkc1N5bmNocm9u
b3VzU2Nyb2xsaW5nKGJvb2wgbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZykgeyBtX25lZWRzU3lu
Y2hyb25vdXNTY3JvbGxpbmcgPSBuZWVkc1N5bmNocm9ub3VzU2Nyb2xsaW5nOyB9CisKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50JiwgT3ZlcmxheVR5cGUpOwogCkBA
IC0xMjAsMTAgKzEyMywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVy
RmlyZWQoKTsKIAogICAgIENsaWVudCYgbV9jbGllbnQ7Ci0gICAgUGFnZSogbV9wYWdlOworICAg
IFBhZ2UqIG1fcGFnZSB7IG51bGxwdHIgfTsKIAogICAgIFRpbWVyIG1fZmFkZUFuaW1hdGlvblRp
bWVyOwotICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7CisgICAgZG91YmxlIG1f
ZmFkZUFuaW1hdGlvblN0YXJ0VGltZSB7IDAgfTsKICAgICBkb3VibGUgbV9mYWRlQW5pbWF0aW9u
RHVyYXRpb247CiAKICAgICBlbnVtIEZhZGVBbmltYXRpb25UeXBlIHsKQEAgLTEzMiwxMyArMTM1
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEZhZGVPdXRBbmltYXRpb24sCiAgICAgfTsKIAotICAg
IEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5cGU7Ci0gICAgZmxvYXQgbV9mcmFj
dGlvbkZhZGVkSW47CisgICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0aW9uVHlwZSB7
IE5vQW5pbWF0aW9uIH07CisgICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW4geyAxIH07CisKKyAg
ICBib29sIG1fbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZzsKIAogICAgIE92ZXJsYXlUeXBlIG1f
b3ZlcmxheVR5cGU7CiAgICAgSW50UmVjdCBtX292ZXJyaWRlRnJhbWU7CiAKLSAgICBSR0JBMzIg
bV9iYWNrZ3JvdW5kQ29sb3I7CisgICAgUkdCQTMyIG1fYmFja2dyb3VuZENvbG9yIHsgQ29sb3I6
OnRyYW5zcGFyZW50IH07CiAgICAgUGFnZU92ZXJsYXlJRCBtX3BhZ2VPdmVybGF5SUQ7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKaW5kZXgg
NDJjNzgwYzA0Nzk1ZjUxMzY0NDdjODJkYjJiN2JmN2U0ODI2OGE0YS4uZmNkOWQ3ZWIzZWNiMGNi
YzBmODdjNWZjZjhhMWZjMmU0Yjg0ODk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVw
ZGF0ZXMoKQogICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzID0gZmFsc2U7CiAKICAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykg
ewotICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OlZpZXcpCisgICAgICAgIGlmIChvdmVybGF5LT5uZWVkc1N5bmNocm9ub3VzU2Ny
b2xsaW5nKCkpCiAgICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlv
blVwZGF0ZXMgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCAw
N2U0MmM4MTI0Mzc5M2I4Y2E2YTk4ODRjOWJjZGIxNzUyZDkxMGVhLi5kY2M5ZTJjYTllMTRlOGVl
MTljODAxYzEwNmUwODdmODYzNmIxNTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAt
MTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEludFJl
Y3QgZnJhbWVSZWN0KCkgY29uc3Q7Ci0gICAgSW50UmVjdCBib3VuZHNSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCAgaGVpZ2h0KCkpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBib3VuZHNSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCB3
aWR0aCgpLCAgaGVpZ2h0KCkpOyB9CiAKICAgICB2b2lkIHJlc2l6ZShpbnQgdywgaW50IGgpIHsg
c2V0RnJhbWVSZWN0KEludFJlY3QoeCgpLCB5KCksIHcsIGgpKTsgfQogICAgIHZvaWQgcmVzaXpl
KGNvbnN0IEludFNpemUmIHMpIHsgc2V0RnJhbWVSZWN0KEludFJlY3QobG9jYXRpb24oKSwgcykp
OyB9CkBAIC0xNTEsNyArMTUxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eVdpZGdldChXaWRnZXROb3RpZmljYXRpb24pIHsgfQogCi0gICAgSW50UmVjdCBjb252ZXJ0VG9S
b290Vmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVj
dCBjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgSW50UmVjdCBj
b252ZXJ0RnJvbVJvb3RWaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAogICAgIEludFBvaW50
IGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKaW5k
ZXggMTZjM2E0NzlhNTIzZTFiYmM0ZmE3NzVlYTkwOWRiMDhkMTBjMmM3Yi4uZGM2ZDM0MzI2NzMz
NTJiYTQ3YzU2ZWNlZmEwNWI0M2M1N2I3MWI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcApAQCAtNTY1LDYgKzU2
NSwxMSBAQCB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rv
cihib29sJiBpc0hhbmRsZWQpCiAgICAgaXNIYW5kbGVkID0gbV9wbHVnaW4tPmhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoKTsKIH0KIAordm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnJlcXVpcmVz
VW5pZmllZFNjYWxlRmFjdG9yKGJvb2wmIHJlcXVpcmVkKQoreworICAgIHJlcXVpcmVkID0gbV9w
bHVnaW4tPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCk7Cit9CisKIHZvaWQgUGx1Z2luQ29u
dHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdpbigpCiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6
ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuaAppbmRleCAyZjYzODU2YWY2MTk5NzFkMGQxY2YwNWJlNTJiODk2
NGRmMTIzMzU3Li4zNmJmMDczYjY1MDJmZDBhNThkOTdmZGNkNzlhYjNmMDZhMzAzMDRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmgKQEAgLTE0NCw2ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlRWRpdGlu
Z0NvbW1hbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCYpOwogICAgIHZvaWQg
aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiwgYm9vbCYpOwogICAgIHZvaWQg
aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcihib29sJik7CisgICAgdm9pZCByZXF1aXJlc1VuaWZpZWRT
Y2FsZUZhY3Rvcihib29sJik7CiAgICAgdm9pZCBwYWludEVudGlyZVBsdWdpbigpOwogICAgIHZv
aWQgc3VwcG9ydHNTbmFwc2hvdHRpbmcoYm9vbCYpOwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGJhY2tpbmdTdG9yZUhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1l
c3NhZ2VzLmluCmluZGV4IGI1YTA2MzY4ZmM0YTVjMzc2MjBiY2VlZDc2ZmYwMDRmNTI1ZThiYmUu
LjE4ZThjODBiNmZiN2EzODdiOTVmZmRiNzk4YTU2YmJjZWRkNDdjODEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC04OSw2ICs4OSw5IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRy
b2xsZXJQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgIyBSZXR1cm4gd2hldGhlciBvciBub3Qg
YSBwbHVnaW4gd2FudHMgdG8gaGFuZGxlIHBhZ2Ugc2NhbGUgZmFjdG9yIGl0c2VsZi4KICAgICBI
YW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgLT4gKGJvb2wgZW5hYmxlZCk7CiAKKyAgICAjIFJldHVy
biB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyBwYWdlIHNjYWxlLCBwYWdlIHpvb20sIGFu
ZCB0ZXh0IHpvb20gYWxsIHRvIGFmZmVjdCBwYWdlIHNjYWxlLgorICAgIFJlcXVpcmVzVW5pZmll
ZFNjYWxlRmFjdG9yKCkgLT4gKGJvb2wgcmVxdWlyZWQpOworCiAgICAgIyBTZW50IHdoZW4gdGhl
IHBsdWctaW4gZm9jdXMgY2hhbmdlcy4KICAgICBTZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAppbmRleCBhMWExM2QzZDhh
NzY3ZDY2MTM0YmMzODZmODg0N2Q0ODdjZmNhYjJmLi41MDFmMzc1MWUzZWE0ZDFiMWUyNjg3NDVi
YzJlODYxODk0NjFhYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BE
RktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9y
dHMuaApAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5kZWYgUERGS2l0SW1wb3J0c19oCiAjZGVmaW5l
IFBERktpdEltcG9ydHNfaAogCisjaWYgX19oYXNfaW5jbHVkZSg8UERGS2l0L1BERkxheWVyQ29u
dHJvbGxlclZlcnNpb25pbmdQcml2Lmg+KQorI2ltcG9ydCA8UERGS2l0L1BERkxheWVyQ29udHJv
bGxlclZlcnNpb25pbmdQcml2Lmg+CisjZW5kaWYKKworI2RlZmluZSBVU0VfREVQUkVDQVRFRF9Q
REZfUExVR0lOICghZGVmaW5lZChQREZLSVRfSEFTX1BERkxBWUVSQ09OVFJPTExFUl8yKSB8fCAh
UERGS0lUX0hBU19QREZMQVlFUkNPTlRST0xMRVJfMikKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IE5TU3RyaW5nICpwZGZLaXRGcmFtZXdvcmtQYXRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGMyNzY1ZGVmMDBjNTkxZmMyMWJhMDgxMTRkNTM5MWM1
Y2IzMjdiNTYuLjNhNjBkZDY4MzNlNjQ3NDAyOGM2ZDQ5NDYwZTJmODUwNGYwZDViNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yMjI4LDcgKzIyMjgs
NyBAQCBkb3VibGUgV2ViUGFnZVByb3h5OjpwYWdlWm9vbUZhY3RvcigpIGNvbnN0CiB7CiAgICAg
Ly8gWm9vbSBmYWN0b3IgZm9yIG5vbi1QREYgcGFnZXMgcGVyc2lzdHMgYWNyb3NzIHBhZ2UgbG9h
ZHMuIFdlIG1haW50YWluIGEgc2VwYXJhdGUgbWVtYmVyIHZhcmlhYmxlIGZvciBQREYKICAgICAv
LyB6b29tIHdoaWNoIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIFBERiB6b29tIGZvciBh
IG5vcm1hbCBwYWdlLgotICAgIGlmIChtX21haW5GcmFtZSAmJiBtX21haW5GcmFtZS0+aXNEaXNw
bGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAobV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFn
ZVNjYWxlR2VzdHVyZSkKICAgICAgICAgcmV0dXJuIG1fcGx1Z2luWm9vbUZhY3RvcjsKICAgICBy
ZXR1cm4gbV9wYWdlWm9vbUZhY3RvcjsKIH0KQEAgLTIyMzcsNyArMjIzNyw3IEBAIGRvdWJsZSBX
ZWJQYWdlUHJveHk6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgLy8gUERGIGRvY3Vt
ZW50cyB1c2Ugem9vbSBhbmQgc2NhbGUgZmFjdG9ycyB0byBzaXplIHRoZW1zZWx2ZXMgYXBwcm9w
cmlhdGVseSBpbiB0aGUgd2luZG93LiBXZSBzdG9yZSB0aGVtCiAgICAgLy8gc2VwYXJhdGVseSBi
dXQgZGVjaWRlIHdoaWNoIHRvIHJldHVybiBiYXNlZCBvbiB0aGUgbWFpbiBmcmFtZS4KLSAgICBp
ZiAobV9tYWluRnJhbWUgJiYgbV9tYWluRnJhbWUtPmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkp
CisgICAgaWYgKG1fbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUpCiAgICAg
ICAgIHJldHVybiBtX3BsdWdpblNjYWxlRmFjdG9yOwogICAgIHJldHVybiBtX3BhZ2VTY2FsZUZh
Y3RvcjsKIH0KQEAgLTI5MzQsNyArMjkzNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckxv
YWREZXBlbmRlbnRDYWxsYmFja3MoKQogICAgIH0KIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9u
SUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJv
dmlkZXIsIHVpbnQzMl90IG9wYXF1ZUZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBib29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQs
IGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRM
b2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGZyYW1lSGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCBi
b29sIHBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlLCB1aW50MzJfdCBvcGFxdWVGcmFtZUxv
YWRUeXBlLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywg
Ym9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7
CiAgICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90ZWN0b3IobV9wYWdlQ2xpZW50KTsKIApAQCAt
Mjk5Myw5ICsyOTkzLDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJh
bWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklECiAgICAgLy8gV2ViUGFn
ZVByb3h5J3MgY2FjaGUgb2YgdGhlIHZhbHVlIGNhbiBnZXQgb3V0IG9mIHN5bmMgKGUuZy4gaW4g
dGhlIGNhc2Ugd2hlcmUgYQogICAgIC8vIHBsdWdpbiBpcyBoYW5kbGluZyBwYWdlIHNjYWxpbmcg
aXRzZWxmKSBzbyB3ZSBzaG91bGQgcmVzZXQgaXQgdG8gdGhlIGRlZmF1bHQKICAgICAvLyBmb3Ig
c3RhbmRhcmQgbWFpbiBmcmFtZSBsb2Fkcy4KLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkg
JiYgc3RhdGljX2Nhc3Q8RnJhbWVMb2FkVHlwZT4ob3BhcXVlRnJhbWVMb2FkVHlwZSkgPT0gRnJh
bWVMb2FkVHlwZTo6U3RhbmRhcmQpIHsKLSAgICAgICAgbV9wYWdlU2NhbGVGYWN0b3IgPSAxOwot
ICAgICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0gMTsKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZy
YW1lKCkpIHsKKyAgICAgICAgbV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVy
ZSA9IHBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlOworCisgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxGcmFtZUxvYWRUeXBlPihvcGFxdWVGcmFtZUxvYWRUeXBlKSA9PSBGcmFtZUxvYWRUeXBl
OjpTdGFuZGFyZCkgeworICAgICAgICAgICAgbV9wYWdlU2NhbGVGYWN0b3IgPSAxOworICAgICAg
ICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7CisgICAgICAgIH0KICAgICB9CiAKICAgICBt
X3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCmluZGV4IDUzYjdmOTNmMjdkOGMwMjlkMWNlMjMzYWEzYWVmMDZjYWYxZmFi
OGIuLmVhZGM1M2UyY2MyZGEzMTNlMWU0YzhiMWRjZjcyMzE2OTI3YTg3ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTExMDgsNyArMTEwOCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRG
b3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VQcm92aXNpb25hbFVS
TEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3Qg
U3RyaW5nJiB1cmwpOwogICAgIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVT
ZWN1cml0eU9yaWdpbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBTdHJpbmcmIHByb3Zp
c2lvbmFsVVJMLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEm
KTsKLSAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXND
dXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29udGFpbnNQbHVnaW5Eb2N1bWVudCwgY29uc3Qg
VXNlckRhdGEmKTsKKyAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
ZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIGJvb2wgbWFpbkZyYW1lUGx1Z2luSGFuZGxl
c1BhZ2VTY2FsZUdlc3R1cmUsIHVpbnQzMl90IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29udGFpbnNQbHVnaW5Eb2N1bWVudCwgY29uc3QgVXNl
ckRhdGEmKTsKICAgICB2b2lkIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2
b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBkaWRGYWlsTG9hZEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYsIGNvbnN0IFVzZXJEYXRhJik7CkBAIC0xNzE2LDYgKzE3MTYsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRSZWNvcmROYXZpZ2F0aW9uU25hcHNob3RzOwogICAg
IGJvb2wgbV9pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90OwogCisgICAgYm9vbCBt
X21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlIHsgZmFsc2UgfTsKKwogICAg
IHVuc2lnbmVkIG1fcGFnZUNvdW50OwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVT
Y3JvbGxlclRodW1iUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDY4ZmQwNTNhZjA2NzVlYTU5NmZhMzllMzE2NzJhM2Rl
ZGNkNGI2NTguLmRiNzZmNTQwY2FhYmE5MDkwYmUxOTUyZmVjNTk0YjIyMGE5ODU0NWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpA
QCAtMTMwLDcgKzEzMCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBTdHJpbmcgdXJsLCBXZWJLaXQ6OlVzZXJEYXRh
IHVzZXJEYXRhKQogICAgIERpZENoYW5nZVByb3Zpc2lvbmFsVVJMRm9yRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBTdHJpbmcgdXJsKQogICAgIERpZEZhaWxQ
cm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhIGZyYW1lU2VjdXJpdHlPcmlnaW4sIHVpbnQ2NF90IG5hdmlnYXRp
b25JRCwgU3RyaW5nIHByb3Zpc2lvbmFsVVJMLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9y
LCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQotICAgIERpZENvbW1pdExvYWRGb3JGcmFtZSh1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIFN0cmluZyBtaW1lVHlwZSwg
Ym9vbCBoYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90IGxvYWRUeXBlLCBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvLCBib29sIGNvbnRhaW5zUGx1Z2luRG9j
dW1lbnQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCisgICAgRGlkQ29tbWl0TG9hZEZvckZy
YW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgU3RyaW5nIG1pbWVU
eXBlLCBib29sIGhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgYm9vbCBwbHVnaW5IYW5kbGVzUGFn
ZVNjYWxlR2VzdHVyZSwgdWludDMyX3QgbG9hZFR5cGUsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgY29udGFpbnNQbHVnaW5Eb2N1bWVudCwgV2ViS2l0OjpV
c2VyRGF0YSB1c2VyRGF0YSkKICAgICBEaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwg
V2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKICAgICBEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIFdlYktpdDo6VXNl
ckRhdGEgdXNlckRhdGEpCiAgICAgRGlkRmluaXNoTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA2ZWNkNDM0MDdkNzI3OTBjN2ZkZmNjZjhmZWY2MTY0MTIwMjA4OTJkLi43YTEwY2I3NzUyMjNm
ODM5YjVhMTIxZGNlZGY1OTU1MTdlNjhjM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMTQsOCArMzE0LDggQEAKIAkJMUE4
MUIzODAxOEJENjZBRDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTgxQjM3RTE4QkQ2NkFEMDAw
N0ZEQUMgLyogX1dLVmlzaXRlZExpbmtTdG9yZS5tbSAqLzsgfTsKIAkJMUE4MUIzODExOEJENjZB
RDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBODFCMzdGMThCRDY2QUQwMDA3RkRBQyAvKiBfV0tW
aXNpdGVkTGlua1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMUE4MUIzODUxOEJENjczQTAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3Rv
cmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE4MUIzODQxOEJENjczQTAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5h
bC5oICovOyB9OwotCQkxQThCNjZCMDFCQzQzQzg2MDA4MkRGNzcgLyogUGFnZUxvYWRTdGF0ZU9i
c2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QThCNjZBRTFCQzQzQzg2MDA4MkRGNzcgLyogUGFnZUxvYWRTdGF0ZU9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKLQkJMUE4QjY2QjMxQkM0NUIwMTAwODJE
Rjc3IC8qIFdLQnVuZGxlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE4QjY2QjExQkM0NUIwMTAwODJERjc3IC8qIFdLQnVuZGxlTWFjLm1tICov
OyBzZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0gKCk7IH07IH07CisJCTFBOEI2NkIwMUJDNDNDODYw
MDgyREY3NyAvKiBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEI2NkFFMUJDNDNDODYwMDgyREY3NyAvKiBQYWdl
TG9hZFN0YXRlT2JzZXJ2ZXIuaCAqLzsgfTsKKwkJMUE4QjY2QjMxQkM0NUIwMTAwODJERjc3IC8q
IFdLQnVuZGxlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE4QjY2QjExQkM0NUIwMTAwODJERjc3IC8qIFdLQnVuZGxlTWFjLm1tICovOyB9Owog
CQkxQThCNjZCNDFCQzQ1QjAxMDA4MkRGNzcgLyogV0tCdW5kbGVNYWMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEI2NkIyMUJDNDVCMDEwMDgyREY3
NyAvKiBXS0J1bmRsZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFBOEM3MjhDMTczODQ3N0MwMDBBNjU1NCAvKiBMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE4QzcyOEExNzM4NDc3QzAwMEE2NTU0IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlci5jcHAgKi87IH07CiAJCTFBOEM3MjhEMTczODQ3N0MwMDBBNjU1NCAvKiBMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOEM3MjhCMTczODQ3N0MwMDBBNjU1NCAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIuaCAqLzsgfTsKQEAgLTYwMiw2ICs2MDIsNyBAQAogCQkyRDJBREYwOTE2MzYyREQ1
MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJBREYwNjE2MzYyREM3MDAxOTdFNDcgLyog
UERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0gKi87IH07CiAJCTJEMkFERjBCMTYzNjJEREIwMDE5
N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyQURGMDMxNjM2MjQzNTAwMTk3RTQ3IC8qIFBERlBsdWdp
bkFubm90YXRpb24ubW0gKi87IH07CiAJCTJEMkFERjEwMTYzNjREODIwMDE5N0U0NyAvKiBQREZQ
bHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQyQURGMEUxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2lj
ZUFubm90YXRpb24ubW0gKi87IH07CisJCTJEMzQ5NDY0MUJDQzJFQzMwMDY0RjBCRSAvKiBEZXBy
ZWNhdGVkUERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQwMDM1MjMxQkM3NDE0ODAwREE4NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4u
bW0gKi87IH07CiAJCTJEM0E2NURBMUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rp
b25SZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQzQTY1RDgxQTdDM0ExRjAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlvbkFjdGlvblJlZi5jcHAgKi87
IH07CiAJCTJEM0E2NURCMUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0E2NUQ5
MUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDNBNjVERTFBN0MzQTdEMDBD
QUM2MzcgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VSZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQzQTY1REMxQTdDM0E3RDAwQ0FDNjM3IC8qIFdL
TmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcCAqLzsgfTsKQEAgLTI3MjUsNiArMjcyNiw4IEBACiAJ
CTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUdyb3Vw
UHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDAwMzUyMjFC
Qzc0MTQ4MDBEQTg3MTYgLyogRGVwcmVjYXRlZFBERlBsdWdpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBEZXByZWNhdGVkUERGUGx1Z2luLmg7IHBhdGggPSBQREYvRGVwcmVj
YXRlZFBERlBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDAwMzUyMzFC
Qzc0MTQ4MDBEQTg3MTYgLyogRGVwcmVjYXRlZFBERlBsdWdpbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERlcHJlY2F0ZWRQREZQbHVnaW4ubW07IHBhdGggPSBQ
REYvRGVwcmVjYXRlZFBERlBsdWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzQyLDkgKzI3NDUsMTAgQEAKIAkJMkQy
QURGMDMxNjM2MjQzNTAwMTk3RTQ3IC8qIFBERlBsdWdpbkFubm90YXRpb24ubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tOyBw
YXRoID0gUERGL1BERlBsdWdpbkFubm90YXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMkFERjA1MTYzNjJEQzcwMDE5N0U0NyAvKiBQREZQbHVnaW5UZXh0QW5ub3RhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQREZQbHVnaW5UZXh0QW5ub3Rh
dGlvbi5oOyBwYXRoID0gUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMkFERjA2MTYzNjJEQzcwMDE5N0U0NyAvKiBQREZQbHVnaW5U
ZXh0QW5ub3RhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFBERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tOyBwYXRoID0gUERGL1BERlBsdWdpblRleHRBbm5v
dGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDJBREYwQzE2MzYzREVD
MDAxOTdFNDcgLyogUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQ
REZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmg7IHBhdGggPSBQREYvUERGTGF5ZXJDb250cm9sbGVy
RGV0YWlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDJBREYwQzE2MzYzREVD
MDAxOTdFNDcgLyogRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxlclNQSS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7IHBhdGggPSBQREYvRGVwcmVj
YXRlZFBERkxheWVyQ29udHJvbGxlclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDJBREYwRDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQREZQbHVnaW5DaG9pY2VBbm5vdGF0
aW9uLmg7IHBhdGggPSBQREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyRDJBREYwRTE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2lu
Q2hvaWNlQW5ub3RhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFBERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW07IHBhdGggPSBQREYvUERGUGx1Z2luQ2hv
aWNlQW5ub3RhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQzNDk0NjMx
QkNDMjNCRjAwNjRGMEJFIC8qIFBERkxheWVyQ29udHJvbGxlclNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBQREZMYXllckNvbnRyb2xsZXJTUEkuaDsgcGF0aCA9IFBERi9QREZMYXllckNvbnRyb2xsZXJT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQzQTY1RDgxQTdDM0ExRjAwQ0FD
NjM3IC8qIFdLTmF2aWdhdGlvbkFjdGlvblJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXS05hdmlnYXRpb25BY3Rpb25SZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDNBNjVEOTFBN0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0
aW9uUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvbkFj
dGlvblJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDNBNjVEQzFBN0MzQTdE
MDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VSZWYuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0tOYXZpZ2F0aW9uUmVzcG9uc2VSZWYuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM5OSw3ICs3NDAzLDEwIEBACiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTM1NzRCMzdGMTY2NTkzMkMwMDg1OUJCNyAvKiBQ
REZBbm5vdGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCAqLywKLQkJCQkyRDJBREYwQzE2MzYzREVD
MDAxOTdFNDcgLyogUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oICovLAorCQkJCTJEMkFERjBD
MTYzNjNERUMwMDE5N0U0NyAvKiBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmggKi8s
CisJCQkJMkQwMDM1MjIxQkM3NDE0ODAwREE4NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4uaCAq
LywKKwkJCQkyRDAwMzUyMzFCQzc0MTQ4MDBEQTg3MTYgLyogRGVwcmVjYXRlZFBERlBsdWdpbi5t
bSAqLywKKwkJCQkyRDM0OTQ2MzFCQ0MyM0JGMDA2NEYwQkUgLyogUERGTGF5ZXJDb250cm9sbGVy
U1BJLmggKi8sCiAJCQkJMkQ4NzBEMEQxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5oICov
LAogCQkJCTJEODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gKi8sCiAJCQkJ
MkQyQURGMDIxNjM2MjQzNTAwMTk3RTQ3IC8qIFBERlBsdWdpbkFubm90YXRpb24uaCAqLywKQEAg
LTEwMDY1LDYgKzEwMDcyLDcgQEAKIAkJCQlCQ0JBQUNFQzE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQ
cm9jZXNzR3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTE1ODQxOTE4OTA0NEY1MDAxNzYx
NkMgLyogV0tQcm9jZXNzUG9vbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMkY1OEZCMTJBODhB
NTQwMDYyOTUzMCAvKiBXS1Byb3RlY3Rpb25TcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQky
RDM0OTQ2NDFCQ0MyRUMzMDA2NEYwQkUgLyogRGVwcmVjYXRlZFBERlBsdWdpbi5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBRDAxQkNDMTkwNUQ1NDkwMEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJy
b3JSZWNvdmVyeUF0dGVtcHRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOUUzMjlBMTgyMkUx
Q0MwMEY1RDA0QyAvKiBXS1JlbW90ZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOUUz
MjlFMTgyMkZFREQwMEY1RDA0QyAvKiBXS1JlbW90ZU9iamVjdENvZGVyLm1tIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCAzM2I5MTNhOWZiZDk2NzM4ZmE1OGNm
NzVkNTBhMTUxMjc0ZDBhNTI4Li41Zjc4OTYzN2VhNGI2ODQwZjQ0YjI1NGYyODAyOWIxMjJjOWM0
NThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTk5Nyw3ICs5OTcsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luOjpzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpCitib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCmluZGV4IDI5
ZTIyYzljZWQ2NmUwN2VmZTk1NWE1ZjFmZjM4NjBiOTc3YjU5ZTUuLmRlMmVmZjRlNTdiMGY1OGVj
Y2E5MjU3MjQxY2VmOTQzNWMwMmUwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCkBAIC0yMjks
NyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRp
bmcoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJv
bURyYWdzKCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2Ny
aXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGU7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJT
UEkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBE
RkxheWVyQ29udHJvbGxlclNQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4MDQyZTIxMzIxZDIwMDk3ZWRhZGEx
YmI4Zjg2NWIzODI1NDY5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEkuaApAQCAt
MCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVwcmVjYXRlZFBERkxh
eWVyQ29udHJvbGxlclNQSV9oCisjZGVmaW5lIERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJT
UElfaAorCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmIFVTRShERVBSRUNBVEVEX1BERl9Q
TFVHSU4pCisKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKworQGNsYXNzIENQUmVhZGluZ01v
ZGVsOworQGNsYXNzIFBERlZpZXdMYXlvdXQ7CisKK0Bwcm90b2NvbCBQREZMYXllckNvbnRyb2xs
ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CisKKy0gKHZvaWQpdXBkYXRlU2Nyb2xsUG9zaXRpb246KENH
UG9pbnQpbmV3UG9zaXRpb247CistICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6KE5TQXJy
YXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsKKy0gKHZvaWQpc2hvd0RlZmlu
aXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQ
b2ludDooQ0dQb2ludClwb2ludDsKKy0gKHZvaWQpcGVyZm9ybVdlYlNlYXJjaDooTlNTdHJpbmcg
KilzdHJpbmc7CistICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nICopc3Ry
aW5nOworLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uOworLSAodm9pZClzYXZlVG9Q
REY7CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilw
ZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3RhdGlvbjooUERGQW5ub3RhdGlv
biAqKWFubm90YXRpb247CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1
cmw7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2Fs
ZUZhY3RvcjsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIg
KilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGludCltb2RlOworLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29u
dHJvbGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKwor
QGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0CitAZW5kCisK
K0BpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyICgpCisKK0Bwcm9wZXJ0eSAocmV0YWluKSBD
QUxheWVyICpwYXJlbnRMYXllcjsKK0Bwcm9wZXJ0eSAocmV0YWluKSBQREZEb2N1bWVudCAqZG9j
dW1lbnQ7CitAcHJvcGVydHkgKHJldGFpbikgaWQ8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+
IGRlbGVnYXRlOworCistICh2b2lkKXNldEZyYW1lU2l6ZTooQ0dTaXplKXNpemU7CisKKy0gKFBE
RkRpc3BsYXlNb2RlKWRpc3BsYXlNb2RlOworLSAodm9pZClzZXREaXNwbGF5TW9kZTooUERGRGlz
cGxheU1vZGUpbW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheXNQYWdlQnJlYWtzOihCT09MKXBhZ2VC
cmVha3M7CisKKy0gKENHRmxvYXQpY29udGVudFNjYWxlRmFjdG9yOworLSAodm9pZClzZXRDb250
ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CisKKy0gKENHRmxvYXQpZGV2aWNl
U2NhbGVGYWN0b3I7CistICh2b2lkKXNldERldmljZVNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxl
RmFjdG9yOworCistIChDR1NpemUpY29udGVudFNpemU7CistIChDR1NpemUpY29udGVudFNpemVS
ZXNwZWN0aW5nWm9vbTsKKworLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVm
KWNvbnRleHQ7CisKKy0gKHZvaWQpbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0KW1h
Z25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBpbW1lZGlhdGVseTooQk9PTClpbW1l
ZGlhdGVseTsKKworLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlvbjsKKy0gKHZvaWQpc2V0U2Nyb2xs
UG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247CistICh2b2lkKXNjcm9sbFdpdGhEZWx0YToo
Q0dTaXplKWRlbHRhOworCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAo
dm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZU1vdmVk
OihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudDsKKy0g
KHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRW50ZXJl
ZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50
OworCistIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNB
cnJheSAqKWZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wp
aXNDYXNlU2Vuc2l0aXZlIGhpZ2hsaWdodE1hdGNoZXM6KEJPT0wpc2hvdWxkSGlnaGxpZ2h0TWF0
Y2hlczsKKworLSAoUERGU2VsZWN0aW9uICopY3VycmVudFNlbGVjdGlvbjsKKy0gKHZvaWQpc2V0
Q3VycmVudFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoUERGU2VsZWN0
aW9uICopc2VhcmNoU2VsZWN0aW9uOworLSAodm9pZClzZXRTZWFyY2hTZWxlY3Rpb246KFBERlNl
bGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKHZvaWQpZ290b1NlbGVjdGlvbjooUERGU2VsZWN0aW9u
ICopc2VsZWN0aW9uOworLSAoUERGU2VsZWN0aW9uICopZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9p
bnQ6KENHUG9pbnQpcG9pbnQ7CistIChOU0FycmF5ICopcmVjdHNGb3JTZWxlY3Rpb25JbkxheW91
dFNwYWNlOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CistIChOU0FycmF5ICopcmVjdHNGb3JB
bm5vdGF0aW9uSW5MYXlvdXRTcGFjZTooUERGQW5ub3RhdGlvbiAqKWFubm90YXRpb247CistIChQ
REZWaWV3TGF5b3V0ICopbGF5b3V0OworLSAoTlNSZWN0KWZyYW1lOworCistIChQREZQYWdlICop
Y3VycmVudFBhZ2U7CistIChOU1VJbnRlZ2VyKWxhc3RQYWdlSW5kZXg7CistIChOU1VJbnRlZ2Vy
KWN1cnJlbnRQYWdlSW5kZXg7CistICh2b2lkKWdvdG9OZXh0UGFnZTsKKy0gKHZvaWQpZ290b1By
ZXZpb3VzUGFnZTsKKworLSAodm9pZCljb3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7
CisKKy0gKGJvb2wpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50OworCistICh2b2lkKXNldEhVREVu
YWJsZWQ6KEJPT0wpZW5hYmxlZDsKKy0gKEJPT0wpaHVkRW5hYmxlZDsKKworLSAoQ0dSZWN0KWJv
dW5kc0ZvckFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOworLSAodm9pZClh
Y3RpdmF0ZU5leHRBbm5vdGF0aW9uOihCT09MKXByZXZpb3VzOworCistICh2b2lkKWF0dGVtcHRU
b1VubG9ja1dpdGhQYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZDsKKworLSAodm9pZClzZWFy
Y2hJbkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CisK
Ky8vIEFjY2Vzc2liaWxpdHkKKworLSAoQ1BSZWFkaW5nTW9kZWwgKilyZWFkaW5nTW9kZWw7Cist
IChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudDsKKy0gKE5TQXJyYXkgKilhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXM7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNl
dHRhYmxlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZh
bHVlOihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlOworLSAoTlNB
cnJheSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXM7CistIChOU1N0
cmluZyAqKWFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlOworLSAoTlNTdHJpbmcgKilhY2Nlc3Np
YmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5VmFsdWVBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc1ZhbHVlQXR0cmlidXRl
U2V0dGFibGU7CistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1
dGU7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc1NlbGVjdGVkVGV4dEF0dHJpYnV0ZVNldHRhYmxl
OworLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZTsK
Ky0gKE5TTnVtYmVyICopYWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZTsK
Ky0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzTnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlU2V0dGFi
bGU7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJp
YnV0ZTsKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzVmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmli
dXRlU2V0dGFibGU7CistIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlMaW5lRm9ySW5kZXhBdHRy
aWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKKy0gKE5TVmFsdWUgKilhY2Nlc3NpYmls
aXR5UmFuZ2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7CistIChO
U1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRl
cjooaWQpcGFyYW1ldGVyOworLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5n
ZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworCitAZW5kCisKKyNlbmRpZgor
CisjZW5kaWYgLy8gRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxlclNQSV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVn
aW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBE
RlBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhZmVjNmI2ZmQyMGNiMDM4Zjc4YmY3NmM3NjdkZjU5NWYw
MzYxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaApAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRGVwcmVjYXRlZFBERlBsdWdpbl9oCisjZGVmaW5lIERl
cHJlY2F0ZWRQREZQbHVnaW5faAorCisjaW5jbHVkZSAiUERGS2l0SW1wb3J0cy5oIgorCisjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pICYmIFVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4pCisKKyNp
bmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYkhp
dFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFi
bGVBcmVhLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1
ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1
ZSogSlNWYWx1ZVJlZjsKKworT0JKQ19DTEFTUyBOU0FycmF5OworT0JKQ19DTEFTUyBOU0F0dHJp
YnV0ZWRTdHJpbmc7CitPQkpDX0NMQVNTIE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNTdHJpbmc7CitP
QkpDX0NMQVNTIFBERkFubm90YXRpb247CitPQkpDX0NMQVNTIFBERkxheWVyQ29udHJvbGxlcjsK
K09CSkNfQ0xBU1MgUERGU2VsZWN0aW9uOworT0JKQ19DTEFTUyBXS1BERlBsdWdpbkFjY2Vzc2li
aWxpdHlPYmplY3Q7CitPQkpDX0NMQVNTIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7CisK
K25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgRWxlbWVudDsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgUERGUGx1Z2luQW5ub3RhdGlvbjsKK2NsYXNzIFBERlBsdWdp
blBhc3N3b3JkRmllbGQ7CitjbGFzcyBQbHVnaW5WaWV3OworY2xhc3MgV2ViRnJhbWU7CisKK2Ns
YXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Ny
b2xsYWJsZUFyZWEgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UERGUGx1Z2luPiBjcmVhdGUo
V2ViRnJhbWUqKTsKKyAgICB+UERGUGx1Z2luKCk7CisKKyAgICBzdGF0aWMgV2ViQ29yZTo6UGx1
Z2luSW5mbyBwbHVnaW5JbmZvKCk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgZGlkTXV0YXRlUERGRG9jdW1lbnQoKSB7
IG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkID0gdHJ1ZTsgfQorCisgICAgdm9pZCBwYWludENvbnRy
b2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBz
ZXRBY3RpdmVBbm5vdGF0aW9uKFBERkFubm90YXRpb24gKik7CisgICAgCisgICAgdXNpbmcgU2Ny
b2xsYWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZDsKKyAgICB2b2lkIG5vdGlm
eUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgdm9p
ZCBub3RpZnlEaXNwbGF5TW9kZUNoYW5nZWQoaW50KTsKKworICAgIHZvaWQgbm90aWZ5U2VsZWN0
aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKik7CisKKyAgICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJM
ICopOworICAgIHZvaWQgc2F2ZVRvUERGKCk7CisgICAgdm9pZCBvcGVuV2l0aE5hdGl2ZUFwcGxp
Y2F0aW9uKCk7CisgICAgdm9pZCB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0
ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJyYXkgKnR5cGVzKTsKKyAgICB2b2lkIHNo
b3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQ
b2ludCk7CisgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOworICAgIHZvaWQg
cGVyZm9ybVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAqKTsKKworICAgIHZvaWQgZm9jdXNOZXh0
QW5ub3RhdGlvbigpOworICAgIHZvaWQgZm9jdXNQcmV2aW91c0Fubm90YXRpb24oKTsKKworICAg
IHZvaWQgYXR0ZW1wdFRvVW5sb2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOworCisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzT25TY3Jl
ZW4oKSBjb25zdDsKKyAgICAKKyAgICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKworICAgIFN0cmluZyBsb29rdXBUZXh0QXRMb2NhdGlvbihj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIFBERlNl
bGVjdGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoqKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdEZvclNlbGVjdGlvbkluUm9vdFZpZXcoUERGU2VsZWN0aW9uICopIGNvbnN0OworCisg
ICAgQ0dGbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IFBERlBsdWdpbihXZWJGcmFtZSopOworCisgICAgLy8gUGx1Z2luIGZ1bmN0aW9ucy4KKyAgICB2
aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlS
ZWN0SW5XaW5kb3dDb29yZGluYXRlcykgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hv
dCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc3BhcmVudCgpIG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZp
ZXdUcmFuc2Zvcm0pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFj
dG9yQ2hhbmdlZChmbG9hdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlE
aWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtV2lsbFNlbmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3Jl
OjpVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIGludCBy
ZXNwb25zZVN0YXR1cykgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJl
Y2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6VVJMJiByZXNw
b25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1l
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGlu
dCBsZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKHVpbnQ2NF90IHN0cmVhbUlEKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
RGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2Vi
Q29yZTo6VVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6
U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxT
dHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1hbnVh
bFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIG92ZXJyaWRlIHsgfQor
ICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJyaWRl
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wp
IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdl
ZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpIG92
ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29s
KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkgb3ZlcnJp
ZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5n
TW9kZSkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6
b250YWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIu
Z2V0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92
ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFs
dWUpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNj
cm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGxp
dmVSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0Jl
aW5nQXN5bmNocm9ub3VzbHlJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRG
b3JQcmludGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KKyAg
ICB2aXJ0dWFsIE5TT2JqZWN0ICphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIFdlYkNvcmU6OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
V2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpIG92ZXJyaWRlOwor
CisgICAgUERGU2VsZWN0aW9uICpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIEJPT0wgc2VhcmNoRm9yd2FyZCwgQk9PTCBjYXNlU2Vuc2l0aXZlLCBCT09MIHdyYXBTZWFy
Y2gsIFBERlNlbGVjdGlvbiAqaW5pdGlhbFNlbGVjdGlvbiwgQk9PTCBzdGFydEluU2VsZWN0aW9u
KTsKKworICAgIGJvb2wgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uU3Ry
aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldFNlbGVjdGlvbkZvcldvcmRBdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRp
bmcoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRB
bGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHNob3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOyB9Cisg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2Vi
Q29yZTo6U2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlzaWJsZVNpemUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFNpemUgY29udGVudHNTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVu
dFNpemU7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQo
KTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0
b3JNYWMgd2lsbCBrZWVwIGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdv
b2QgdGltZSB0byBhbmltYXRlLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5n
ZWQoV2ViQ29yZTo6U2Nyb2xsYmFyU3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc2Nyb2xsYmFyUmVjdCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJl
bnRQb2ludCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxM
YXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFBERlBsdWdpbiBm
dW5jdGlvbnMuCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9y
aWVudGF0aW9uKTsKKyAgICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgYWRk
QXJjaGl2ZVJlc291cmNlKCk7CisgICAgdm9pZCBjb21wdXRlUGFnZUJveGVzKCk7CisgICAgdm9p
ZCBjYWxjdWxhdGVTaXplcygpOworICAgIHZvaWQgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsK
KworICAgIE5TRXZlbnQgKm5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNv
bnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICAKKyAgICBib29sIHN1cHBvcnRzRm9y
bXMoKTsKKyAgICBib29sIGlzRnVsbEZyYW1lUGx1Z2luKCkgY29uc3Q7CisKKyAgICB2b2lkIHVw
ZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKworICAgIHZvaWQgY3JlYXRlUGFzc3dv
cmRFbnRyeUZvcm0oKTsKKworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisgICAgdm9pZCBzZXRQREZEb2N1bWVu
dChSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IGRvY3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1
bWVudDsgfQorCisgICAgV2ViQ29yZTo6SW50U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7
IHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsgfQorICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXpl
KFdlYkNvcmU6OkludFNpemUgc2l6ZSkgeyBtX3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KKwor
ICAgIE5TRGF0YSAqbGl2ZURhdGEoKSBjb25zdDsKKyAgICBOU0RhdGEgKnJhd0RhdGEoKSBjb25z
dCB7IHJldHVybiAoTlNEYXRhICopbV9kYXRhLmdldCgpOyB9CisKKyAgICBXZWJGcmFtZSogd2Vi
RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBlbnVtIFVwZGF0ZUN1cnNv
ck1vZGUgeworICAgICAgICBVcGRhdGVJZk5lZWRlZCwKKyAgICAgICAgRm9yY2VVcGRhdGUKKyAg
ICB9OworCisgICAgZW51bSBIaXRUZXN0UmVzdWx0IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAg
VGV4dAorICAgIH07CisKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50
JiwgVXBkYXRlQ3Vyc29yTW9kZSA9IFVwZGF0ZUlmTmVlZGVkKTsKKworICAgIEpTT2JqZWN0UmVm
IG1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERG
RG9jUHJpbnQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGNvbnZlcnRQb3N0U2Ny
aXB0RGF0YUlmTmVlZGVkKCk7CisKKyAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQg
YWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVW
aWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcuCisgICAgUGx1Z2luVmlldyogcGx1Z2luVmll
dygpOworICAgIGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKKworICAgIFdl
YkZyYW1lKiBtX2ZyYW1lOworCisgICAgYm9vbCBtX2lzUG9zdFNjcmlwdDsKKyAgICBib29sIG1f
cGRmRG9jdW1lbnRXYXNNdXRhdGVkOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9m
ZnNldDsKKworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2NvbnRhaW5lckxheWVyOworICAgIFJl
dGFpblB0cjxDQUxheWVyPiBtX2NvbnRlbnRMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdmVy
dGljYWxTY3JvbGxiYXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxDb3Ju
ZXJMYXllcjsKKyAgICBSZXRhaW5QdHI8UERGTGF5ZXJDb250cm9sbGVyPiBtX3BkZkxheWVyQ29u
dHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8V0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0PiBt
X2FjY2Vzc2liaWxpdHlPYmplY3Q7CisgICAgCisgICAgUmVmUHRyPFBERlBsdWdpbkFubm90YXRp
b24+IG1fYWN0aXZlQW5ub3RhdGlvbjsKKyAgICBSZWZQdHI8UERGUGx1Z2luUGFzc3dvcmRGaWVs
ZD4gbV9wYXNzd29yZEZpZWxkOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX2Fubm90
YXRpb25Db250YWluZXI7CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9yb290Vmll
d1RvUGx1Z2luVHJhbnNmb3JtOworICAgIFdlYk1vdXNlRXZlbnQgbV9sYXN0TW91c2VFdmVudDsK
KyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGlu
YXRlczsKKworICAgIFN0cmluZyBtX3RlbXBvcmFyeVBERlVVSUQ7CisKKyAgICBTdHJpbmcgbV9s
YXN0Rm91bmRTdHJpbmc7CisKKyAgICBIaXRUZXN0UmVzdWx0IG1fbGFzdEhpdFRlc3RSZXN1bHQ7
CisgICAgCisgICAgUmV0YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fcGRm
TGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsK
KworICAgIFdlYkNvcmU6OlVSTCBtX3NvdXJjZVVSTDsKKworICAgIFN0cmluZyBtX3N1Z2dlc3Rl
ZEZpbGVuYW1lOworICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGE7CisKKyAg
ICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CisgICAgVmVjdG9yPFdlYkNv
cmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOworICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1
bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCisKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJTihQREZQbHVnaW4sIFBERlBs
dWdpblR5cGUpCisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKKworI2VuZGlmIC8v
IERlcHJlY2F0ZWRQREZQbHVnaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM4OTNlOTE4YzI1ODA2NWQwZTNhY2I3MGRjYWViMDY0MTJlZjU3MzkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQ
bHVnaW4ubW0KQEAgLTAsMCArMSwyMDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDExLCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJEZXByZWNhdGVkUERGUGx1Z2luLmgiCisK
KyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgVVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikK
KworI2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIK
KyNpbXBvcnQgIlBERkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgorI2ltcG9ydCAiUERG
TGF5ZXJDb250cm9sbGVyU1BJLmgiCisjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9uLmgiCisj
aW1wb3J0ICJQREZQbHVnaW5QYXNzd29yZEZpZWxkLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3Lmgi
CisjaW1wb3J0ICJXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLmgiCisjaW1wb3J0ICJX
S1BhZ2VGaW5kTWF0Y2hlc0NsaWVudC5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCisjaW1wb3J0ICJXZWJFdmVudC5oIgorI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgi
CisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgor
I2ltcG9ydCAiV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlByb2Nl
c3MuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+Cisj
aW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0Nocm9tZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RGljdGlvbmFyeUxvb2t1cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9y
bVN0YXRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hU
TUxQbHVnSW5FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZl
bnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJv
YXJkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGx1Z2luRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
U2Nyb2xsYmFyVGhlbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvVVVJRC5oPgorI2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIu
aD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTZXQgb3ZlcmZsb3c6
IGhpZGRlbiBvbiB0aGUgYW5ub3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBz
Y3JvbGxlZCBvdXQgb2YgdmlldyBkb24ndCBzaG93CisvLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5
LiBXZSBjYW4ndCBhZGQgYW5ub3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ug
b3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUgYm9keQorLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGlu
Zy4KK3N0YXRpYyBjb25zdCBjaGFyKiBhbm5vdGF0aW9uU3R5bGUgPQorIiNhbm5vdGF0aW9uQ29u
dGFpbmVyIHsiCisiICAgIG92ZXJmbG93OiBoaWRkZW47ICIKKyIgICAgcG9zaXRpb246IGFic29s
dXRlOyAiCisiICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAiCisiICAgIHRvcDogMDsgIgorIiAg
ICBsZWZ0OiAwOyAiCisiICAgIHJpZ2h0OiAwOyAiCisiICAgIGJvdHRvbTogMDsgIgorIiAgICBk
aXNwbGF5OiAtd2Via2l0LWJveDsgIgorIiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOyAi
CisiICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsgIgorIn0gIgorIi5hbm5vdGF0aW9uIHsg
IgorIiAgICBwb3NpdGlvbjogYWJzb2x1dGU7ICIKKyIgICAgcG9pbnRlci1ldmVudHM6IGF1dG87
ICIKKyJ9ICIKKyJ0ZXh0YXJlYS5hbm5vdGF0aW9uIHsgIgorIiAgICByZXNpemU6IG5vbmU7ICIK
KyJ9ICIKKyJpbnB1dC5hbm5vdGF0aW9uW3R5cGU9J3Bhc3N3b3JkJ10geyAiCisiICAgIHBvc2l0
aW9uOiBzdGF0aWM7ICIKKyIgICAgd2lkdGg6IDIwMHB4OyAiCisiICAgIG1hcmdpbi10b3A6IDEw
MHB4OyAiCisifSAiOworCisvLyBJbiBub24tY29udGludW91cyBtb2RlcywgYSBzaW5nbGUgc2Ny
b2xsIGV2ZW50IHdpdGggYSBtYWduaXR1ZGUgb2YgPj0gMjBweAorLy8gd2lsbCBqdW1wIHRvIHRo
ZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UsIHRvIG1hdGNoIFBERktpdCBiZWhhdmlvci4KK3N0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0g
MjA7CisKK0BpbnRlcmZhY2UgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IDogTlNPYmpl
Y3QgeworICAgIFBERkxheWVyQ29udHJvbGxlciAqX3BkZkxheWVyQ29udHJvbGxlcjsKKyAgICBO
U09iamVjdCAqX3BhcmVudDsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30K
KworQHByb3BlcnR5IChhc3NpZ24pIFBERkxheWVyQ29udHJvbGxlciAqcGRmTGF5ZXJDb250cm9s
bGVyOworQHByb3BlcnR5IChhc3NpZ24pIE5TT2JqZWN0ICpwYXJlbnQ7CitAcHJvcGVydHkgKGFz
c2lnbikgV2ViS2l0OjpQREZQbHVnaW4qIHBkZlBsdWdpbjsKKworLSAoaWQpaW5pdFdpdGhQREZQ
bHVnaW46KFdlYktpdDo6UERGUGx1Z2luICopcGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QKKworQHN5bnRoZXNpemUgcGRmTGF5
ZXJDb250cm9sbGVyPV9wZGZMYXllckNvbnRyb2xsZXI7CitAc3ludGhlc2l6ZSBwYXJlbnQ9X3Bh
cmVudDsKK0BzeW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClpbml0V2l0
aFBERlBsdWdpbjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9wZGZQbHVnaW4g
PSBwbHVnaW47CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkCit7CisgICAgcmV0dXJuIE5POworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlCit7CisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pCisgICAgICAg
IHJldHVybiBfcGFyZW50OworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29u
dHJvbGxlciBhY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVNlbGVjdGVk
VGV4dEF0dHJpYnV0ZV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtf
cGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0
ZV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU51
bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29u
dHJvbGxlciBhY2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXTsKKyAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJh
Y3RlclJhbmdlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVy
IGFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdOworICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVu
dEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmli
dXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlS
b2xlQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRm
TGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOwor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlXaW5kb3dB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV07CisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdKQorICAgICAg
ICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoU2l6ZTpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVl
bigpLnNpemUoKV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdOwor
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVk
QXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQor
ICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRz
T25TY3JlZW4oKS5sb2NhdGlvbigpXTsKKworICAgIHJldHVybiAwOworfQorCistIChpZClhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlIGZvclBhcmFtZXRl
cjooaWQpcGFyYW1ldGVyCit7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgTlNSZWN0IGJvdW5kc0luUERGVmlld0Nvb3JkaW5hdGVzID0gW1tfcGRmTGF5ZXJDb250
cm9sbGVyIGFjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpw
YXJhbWV0ZXJdIHJlY3RWYWx1ZV07CisgICAgICAgIE5TUmVjdCBib3VuZHNJblNjcmVlbkNvb3Jk
aW5hdGVzID0gX3BkZlBsdWdpbi0+Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oYm91bmRzSW5Q
REZWaWV3Q29vcmRpbmF0ZXMpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVj
dDpib3VuZHNJblNjcmVlbkNvb3JkaW5hdGVzXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4UGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3Np
YmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07CisgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJhbmdlRm9yTGlu
ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRy
b2xsZXIgYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJh
bWV0ZXJdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
W19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlQXR0cmlidXRl
Rm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07CisKKyAgICByZXR1cm4gMDsKK30KKworLSAoQ1BSZWFk
aW5nTW9kZWwgKilyZWFkaW5nTW9kZWwKK3sKKyAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xs
ZXIgcmVhZGluZ01vZGVsXTsKK30KKworLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcworeworICAgIHN0YXRpYyBOU0FycmF5ICphdHRyaWJ1dGVOYW1lcyA9IDA7CisKKyAg
ICBpZiAoIWF0dHJpYnV0ZU5hbWVzKSB7CisgICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFtOU0Fj
Y2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkVGV4dEF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVk
VGV4dFJhbmdlQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5TnVtYmVyT2ZD
aGFyYWN0ZXJzQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNo
YXJhY3RlclJhbmdlQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50
QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5T
QWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgTlNB
Y2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nl
c3NpYmlsaXR5U2l6ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUZvY3Vz
ZWRBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRl
LAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdOworICAgICAg
ICBbYXR0cmlidXRlTmFtZXMgcmV0YWluXTsKKyAgICB9CisKKyAgICByZXR1cm4gYXR0cmlidXRl
TmFtZXM7Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKK3sKKyAg
ICBzdGF0aWMgTlNBcnJheSAqYWN0aW9uTmFtZXMgPSAwOworICAgIAorICAgIGlmICghYWN0aW9u
TmFtZXMpCisgICAgICAgIGFjdGlvbk5hbWVzID0gW1tOU0FycmF5IGFycmF5V2l0aE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlTaG93TWVudUFjdGlvbl0gcmV0YWluXTsKKyAgICAKKyAgICByZXR1cm4g
YWN0aW9uTmFtZXM7Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246KE5T
U3RyaW5nICopYWN0aW9uCit7CisgICAgaWYgKFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVNob3dNZW51QWN0aW9uXSkKKyAgICAgICAgX3BkZlBsdWdpbi0+c2hvd0NvbnRl
eHRNZW51QXRQb2ludChJbnRSZWN0KEludFBvaW50KCksIF9wZGZQbHVnaW4tPnNpemUoKSkuY2Vu
dGVyKCkpOworfQorCistIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihO
U1N0cmluZyAqKWF0dHJpYnV0ZQoreworICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBh
Y2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTphdHRyaWJ1dGVdOworfQorCistICh2b2lk
KWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAq
KWF0dHJpYnV0ZQoreworICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmls
aXR5U2V0VmFsdWU6dmFsdWUgZm9yQXR0cmlidXRlOmF0dHJpYnV0ZV07Cit9CisKKy0gKE5TQXJy
YXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCit7CisgICAgcmV0
dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmli
dXRlTmFtZXNdOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAorewor
ICAgIHJldHVybiBzZWxmOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2lu
dClwb2ludAoreworICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCisKKworQGludGVyZmFjZSBX
S1BERlBsdWdpblNjcm9sbGJhckxheWVyIDogQ0FMYXllciB7CisgICAgV2ViS2l0OjpQREZQbHVn
aW4qIF9wZGZQbHVnaW47Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OlBERlBsdWdp
biogcGRmUGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdpblNjcm9s
bGJhckxheWVyCisKK0BzeW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClp
bml0V2l0aFBERlBsdWdpbjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBf
cGRmUGx1Z2luID0gcGx1Z2luOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistIChpZDxD
QUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIHJldHVybiBuaWw7
Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAoreworICAgIF9w
ZGZQbHVnaW4tPnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Cit9CisK
K0BlbmQKKworQGludGVyZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmpl
Y3Q8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiog
X3BkZlBsdWdpbjsKK30KKworQHByb3BlcnR5IChhc3NpZ24pIFdlYktpdDo6UERGUGx1Z2luKiBw
ZGZQbHVnaW47CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLUERGTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGUKKworQHN5bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47CisKKy0gKGlkKWlu
aXRXaXRoUERGUGx1Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9w
ZGZQbHVnaW4gPSBwbHVnaW47CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
dXBkYXRlU2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmUGx1
Z2luLT5ub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsK
K30KKworLSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0
aFR5cGVzOihOU0FycmF5ICopdHlwZXMKK3sKKyAgICBfcGRmUGx1Z2luLT53cml0ZUl0ZW1zVG9Q
YXN0ZWJvYXJkKE5TR2VuZXJhbFBib2FyZCwgaXRlbXMsIHR5cGVzKTsKK30KKworLSAodm9pZClz
aG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0
cmluZyBhdFBvaW50OihDR1BvaW50KXBvaW50Cit7CisgICAgX3BkZlBsdWdpbi0+c2hvd0RlZmlu
aXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZywgcG9pbnQpOworfQorCistICh2b2lkKXBl
cmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgX3BkZlBsdWdpbi0+cGVy
Zm9ybVdlYlNlYXJjaChzdHJpbmcpOworfQorCistICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFy
Y2g6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVNwb3RsaWdo
dFNlYXJjaChzdHJpbmcpOworfQorCistICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24K
K3sKKyAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7Cit9CisKKy0g
KHZvaWQpc2F2ZVRvUERGCit7CisgICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7Cit9CisKKy0g
KHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNv
bnRyb2xsZXIgY2xpY2tlZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybAoreworICAgIF9wZGZQbHVn
aW4tPmNsaWNrZWRMaW5rKHVybCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQ
REZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5u
b3RhdGlvbjooUERGQW5ub3RhdGlvbiAqKWFubm90YXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5z
ZXRBY3RpdmVBbm5vdGF0aW9uKGFubm90YXRpb24pOworfQorCistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5n
ZUNvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcgoreworICAgIF9wZGZQbHVn
aW4tPm5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoc2NhbGVGYWN0b3IpOworfQorCist
ICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJD
b250cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZQoreworICAgIF9wZGZQbHVn
aW4tPm5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChtb2RlKTsKK30KKworLSAodm9pZClwZGZMYXll
ckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRD
aGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIF9wZGZQbHVn
aW4tPm5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uKTsKK30KKworQGVuZAorCitAaW50
ZXJmYWNlIFBERlZpZXdMYXlvdXQKKy0gKE5TUG9pbnQpY29udmVydFBvaW50OihOU1BvaW50KXBv
aW50IHRvUGFnZTooUERGUGFnZSAqKXBhZ2UgZm9yU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVG
YWN0b3I7CistIChOU1JlY3QpY29udmVydFJlY3Q6KE5TUmVjdClyZWN0IGZyb21QYWdlOihQREZQ
YWdlICopIHBhZ2UgZm9yU2NhbGVGYWN0b3I6KENHRmxvYXQpIHNjYWxlRmFjdG9yOworLSAoUERG
UGFnZSAqKXBhZ2VOZWFyZXN0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgY3VycmVudFBhZ2U6KFBERlBh
Z2UgKiljdXJyZW50UGFnZTsKK0BlbmQKKworc3RhdGljIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHRN
SU1FVHlwZSA9ICJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IjsKK2NvbnN0IHVpbnQ2NF90IHBkZkRv
Y3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5n
IG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCisKK3N0YXRp
YyB2b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25h
cnlSZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENH
UERGQXJyYXlSZWYgbmFtZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRy
ZWUsICJOYW1lcyIsICZuYW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERG
QXJyYXlHZXRDb3VudChuYW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7Cisg
ICAgICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3Qp
OworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBDR1BERkFycmF5UmVmIGtpZHM7CisgICAgaWYgKCFDR1BE
RkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgeworICAgICAgICBDR1BE
RkRpY3Rpb25hcnlSZWYga2lkOworICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5
KGtpZHMsIGksICZraWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0
cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCit7CisgICAgYXBwZW5kVmFs
dWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Cit9CisKK3N0YXRp
YyB2b2lkIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9j
dW1lbnQsIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiYgc2NyaXB0cykKK3sKKyAgICBp
ZiAoIXBkZkRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlS
ZWYgcGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAg
ICBpZiAoIXBkZkNhdGFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGlj
dGlvbmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rp
b25hcnlSZWYgbmFtZXNEaWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGlj
dGlvbmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFt
ZSB0cmVlLgorICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAg
aWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFT
Y3JpcHQiLCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
VGhlIG5hbWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZh
bHVlcy4KKyAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFs
dWVzSW5QREZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVf
dCBvYmplY3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZh
U2NyaXB0QWN0aW9uOworICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnBy
ZXRfY2FzdDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0
aW9uYXJ5LCAmamF2YVNjcmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAvLyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAi
SmF2YVNjcmlwdCIuCisgICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlm
ICghQ0dQREZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25U
eXBlKSB8fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5k
ZXggbGVuZ3RoOworICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERG
U3RyaW5nUmVmIHN0cmluZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAg
ICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMi
LCAmc3RyZWFtKSkgeworICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAg
ICAgICAgIGRhdGEgPSBhZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0
KSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAgICAg
ICAgICBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZz
dHJpbmcpKSB7CisgICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJp
bmcpOworICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVz
WzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNv
ZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gc2NyaXB0ID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBieXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNj
cmlwdCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc2NyaXB0cy5h
cHBlbmQoc2NyaXB0KTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitSZWY8UERGUGx1Z2luPiBQREZQbHVnaW46OmNyZWF0ZShX
ZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUERGUGx1Z2luKGZy
YW1lKSk7Cit9CisKK1BERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6
IFBsdWdpbihQREZQbHVnaW5UeXBlKQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1faXNQ
b3N0U2NyaXB0KGZhbHNlKQorICAgICwgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQoZmFsc2UpCisg
ICAgLCBtX2NvbnRhaW5lckxheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCisg
ICAgLCBtX2NvbnRlbnRMYXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQorICAg
ICwgbV9zY3JvbGxDb3JuZXJMYXllcihhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXll
ciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pKQorICAgICwgbV9wZGZMYXllckNvbnRy
b2xsZXIoYWRvcHROUyhbW3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkK
KyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dLUERGTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKK3sKKyAg
ICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9s
bGVyRGVsZWdhdGUuZ2V0KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50
TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKKworICAgIGlmIChzdXBwb3J0c0Zvcm1zKCkp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCkt
PmRvY3VtZW50KCk7CisgICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IGRvY3VtZW50LT5j
cmVhdGVFbGVtZW50KGRpdlRhZywgZmFsc2UpOworICAgICAgICBtX2Fubm90YXRpb25Db250YWlu
ZXItPnNldEF0dHJpYnV0ZShpZEF0dHIsICJhbm5vdGF0aW9uQ29udGFpbmVyIik7CisKKyAgICAg
ICAgUmVmPEVsZW1lbnQ+IGFubm90YXRpb25TdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRl
RWxlbWVudChzdHlsZVRhZywgZmFsc2UpOworICAgICAgICBhbm5vdGF0aW9uU3R5bGVFbGVtZW50
LT5zZXRUZXh0Q29udGVudChhbm5vdGF0aW9uU3R5bGUsIEFTU0VSVF9OT19FWENFUFRJT04pOwor
CisgICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoV1RGOjptb3ZlKGFu
bm90YXRpb25TdHlsZUVsZW1lbnQpKTsKKyAgICAgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0
KCktPmFwcGVuZENoaWxkKCptX2Fubm90YXRpb25Db250YWluZXIpOworICAgIH0KKworICAgIG1f
YWNjZXNzaWJpbGl0eU9iamVjdCA9IGFkb3B0TlMoW1tXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlP
YmplY3QgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICBtX2FjY2Vzc2liaWxp
dHlPYmplY3QuZ2V0KCkucGRmTGF5ZXJDb250cm9sbGVyID0gbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCk7CisgICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpLnBhcmVudCA9IHdlYkZyYW1l
KCktPnBhZ2UoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworCisgICAgW21fY29udGFp
bmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOworICAgIFttX2NvbnRh
aW5lckxheWVyIGFkZFN1YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOworfQorCitQ
REZQbHVnaW46On5QREZQbHVnaW4oKQoreworfQorCitQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1
Z2luSW5mbygpCit7CisgICAgUGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0
SW5QREZQbHVnaW5OYW1lKCk7CisgICAgaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luID0gdHJ1ZTsK
KyAgICBpbmZvLmNsaWVudExvYWRQb2xpY3kgPSBQbHVnaW5Mb2FkQ2xpZW50UG9saWN5VW5kZWZp
bmVkOworCisgICAgTWltZUNsYXNzSW5mbyBwZGZNaW1lQ2xhc3NJbmZvOworICAgIHBkZk1pbWVD
bGFzc0luZm8udHlwZSA9ICJhcHBsaWNhdGlvbi9wZGYiOworICAgIHBkZk1pbWVDbGFzc0luZm8u
ZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgcGRmTWltZUNsYXNzSW5m
by5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisgICAgaW5mby5taW1lcy5hcHBlbmQocGRmTWlt
ZUNsYXNzSW5mbyk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIHRleHRQREZNaW1lQ2xhc3NJbmZvOwor
ICAgIHRleHRQREZNaW1lQ2xhc3NJbmZvLnR5cGUgPSAidGV4dC9wZGYiOworICAgIHRleHRQREZN
aW1lQ2xhc3NJbmZvLmRlc2MgPSBwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHRl
eHRQREZNaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKKyAgICBpbmZvLm1p
bWVzLmFwcGVuZCh0ZXh0UERGTWltZUNsYXNzSW5mbyk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIHBv
c3RTY3JpcHRNaW1lQ2xhc3NJbmZvOworICAgIHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvLnR5cGUg
PSBwb3N0U2NyaXB0TUlNRVR5cGU7CisgICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8uZGVzYyA9
IHBvc3RTY3JpcHREb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHBvc3RTY3JpcHRNaW1l
Q2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwcyIpOworICAgIGluZm8ubWltZXMuYXBwZW5k
KHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvKTsKKyAgICAKKyAgICByZXR1cm4gaW5mbzsKK30KKwor
dm9pZCBQREZQbHVnaW46OnVwZGF0ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFkU2Nyb2xs
YmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAobV9zaXplLndpZHRo
KCkgPj0gbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgo
KSA8IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9w
ZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRm
RG9jdW1lbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3Jl
YXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkg
PyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3RlcCA9
IG1fcGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKKwor
ICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53
aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgo
KSk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1
Z2luVmlldygpLT55KCkgKyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpLCBtX3NpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQo
KSk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xs
YmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Cisg
ICAgfQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0
ZXApOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5o
ZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhl
aWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmll
dygpLT54KCkgKyBtX3NpemUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCks
IHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
ICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxi
YXJSZWN0KTsKKyAgICB9CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNv
cmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsK
KworICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3Zl
cnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMp
IHsKKyAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFk
ZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZVZp
ZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmlldy0+c2V0
TmVlZHNMYXlvdXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJM
YXllcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2
ZXJ0aWNhbFNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgW21fdmVydGljYWxTY3Jv
bGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXldOworICAgIH0KKyAgICAKKyAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIuZ2V0KCkuZnJhbWUgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAg
ICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9
CisgICAgCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXJMYXllci5nZXQoKS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgW21f
c2Nyb2xsQ29ybmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1BsdWdpblZp
ZXcqIFBERlBsdWdpbjo6cGx1Z2luVmlldygpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBs
dWdpblZpZXcqPihjb250cm9sbGVyKCkpOworfQorCitjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVn
aW46OnBsdWdpblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQ
bHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBE
RlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAg
aWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXll
ciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pOworICAgICAgICBbbV9jb250YWluZXJM
YXllciBhZGRTdWJsYXllcjptX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dL
UERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsK
KyAgICAgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyLmdldCgpXTsKKyAgICB9CisgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwg
b3JpZW50YXRpb24pOworICAgIGlmIChGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJh
bWUoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAg
ICAgICAgIGlmIChwYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJzKCkpCisgICAgICAgICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIocGFnZS0+dGVz
dFRyaWdnZXIoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxi
YXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9y
aWVudGF0aW9uKTsKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3Jv
bGxiYXIgPSBudWxscHRyOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAg
IH0gZWxzZSB7CisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1
cGVybGF5ZXJdOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0K
K30KKworSW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFy
UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJl
Y3QubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkgLSBwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkp
OworCisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJv
bVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+
cmVuZGVyZXIoKSwgcmVjdCk7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcGx1Z2lu
VmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRl
cmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxlbWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRSZWN0
KTsKKyAgICByZWN0Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5s
b2NhdGlvbigpKTsKKworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBQREZQbHVnaW46
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIElu
dFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXIt
PmxvY2F0aW9uKCkgLSBwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBs
dWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWlu
aW5nVmlldyhwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcG9pbnQp
OworfQorCitJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFt
ZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZp
ZXcoKS0+cGx1Z2luRWxlbWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9p
bnQubW92ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkp
OworICAgIAorICAgIHJldHVybiBwb2ludDsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZVNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQor
CitJbnRSZWN0IFBERlBsdWdpbjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aGVpZ2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogUERGUGx1Z2luOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdhbGsgdXAg
dGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJlbnQgZnJhbWUgb3Ig
UmVuZGVyTGF5ZXIuCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ludFJlY3QgUERGUGx1Z2lu
OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGx1Z2lu
VmlldygpLT5mcmFtZVJlY3QoKTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xsU2l6ZShTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNj
cm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6
b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4g
c2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKK30KKworYm9vbCBQREZQbHVnaW46OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7CisgICAgICAg
IGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4g
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5U
aHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBjb3JlRnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygp
LmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygp
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xs
UG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4g
bV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVp
Z2h0KCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0lu
dFBvaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJ
bnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7
Cit9CisKK0ludFBvaW50IFBERlBsdWdpbjo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworSW50UG9pbnQgUERGUGx1Z2luOjptYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgp
IDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xs
YmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIEludFBvaW50IG1heGltdW1PZmZz
ZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fc2l6ZS53aWR0aCgpICsgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3NpemUuaGVpZ2h0
KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1w
TmVnYXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKK30KKwordm9pZCBQ
REZQbHVnaW46OnNjcm9sbGJhclN0eWxlQ2hhbmdlZChTY3JvbGxiYXJTdHlsZSBzdHlsZSwgYm9v
bCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20g
cmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdh
bnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KKyAg
ICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hy
dW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9sbE9mZnNldChuZXdT
Y3JvbGxPZmZzZXQpOworICAgIAorICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJTdHlsZUNo
YW5nZWQoc3R5bGUsIGZvcmNlVXBkYXRlKTsKKyAgICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50
IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBw
ZWFyLgorICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46OmFkZEFy
Y2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFk
ZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0
IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdo
IGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsu
CisgICAgTlNEaWN0aW9uYXJ5KiBoZWFkZXJzID0gQHsgQCJDb250ZW50LURpc3Bvc2l0aW9uIjog
KE5TU3RyaW5nICopbV9zdWdnZXN0ZWRGaWxlbmFtZSwgQCJDb250ZW50LVR5cGUiIDogQCJhcHBs
aWNhdGlvbi9wZGYiIH07CisgICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlID0g
YWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDptX3NvdXJjZVVS
TCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjooTlNTdHJpbmcqKWtDRkhUVFBWZXJzaW9uMV8x
IGhlYWRlckZpZWxkczpoZWFkZXJzXSk7CisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXpl
ZFJlc3BvbnNlKHJlc3BvbnNlLmdldCgpKTsKKworICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+
IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZE
YXRhKG1fZGF0YS5nZXQoKSksIG1fc291cmNlVVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5n
KCksIFN0cmluZygpLCBzeW50aGVzaXplZFJlc3BvbnNlKTsKKyAgICBwbHVnaW5WaWV3KCktPmZy
YW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigpLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2Uu
cmVsZWFzZSgpKTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpTQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcg
PSBzdGF0aWNfY2FzdDxQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Cisg
ICAgcGRmVmlldy0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxpemUoSlNP
YmplY3RSZWYgb2JqZWN0KQoreworICAgIFBERlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0
PFBERlBsdWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5k
ZXJlZigpOworfQorCitKU1ZhbHVlUmVmIFBERlBsdWdpbjo6anNQREZEb2NQcmludChKU0NvbnRl
eHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2Fz
dDxQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgV2Vi
RnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgUGFnZSogcGFnZSA9IGNvcmVG
cmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGN0eCk7CisKKyAgICBwYWdlLT5jaHJvbWUoKS5wcmludChjb3JlRnJhbWUpOwor
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK0pTT2JqZWN0UmVm
IFBERlBsdWdpbjo6bWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCit7CisgICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAg
eyAicHJpbnQiLCBqc1BERkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCB9LAor
ICAgIH07CisKKyAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24ganNQREZEb2NDbGFzc0RlZmlu
aXRpb24gPSB7CisgICAgICAgIDAsCisgICAgICAgIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwKKyAg
ICAgICAgIkRvYyIsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIGpzUERGRG9jU3Rh
dGljRnVuY3Rpb25zLAorICAgICAgICBqc1BERkRvY0luaXRpYWxpemUsIGpzUERGRG9jRmluYWxp
emUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xh
c3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9jQ2xhc3NEZWZpbml0
aW9uKTsKKworICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4LCBqc1BERkRvY0NsYXNzLCB0aGlz
KTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBjb252ZXJ0UG9zdFNj
cmlwdERhdGFUb1BERihSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwb3N0U2NyaXB0RGF0YSkKK3sKKyAg
ICAvLyBDb252ZXJ0IFBvc3RTY3JpcHQgdG8gUERGIHVzaW5nIHRoZSBRdWFydHogMkQgQVBJLgor
ICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vR3JhcGhpY3NJ
bWFnaW5nL0NvbmNlcHR1YWwvZHJhd2luZ3dpdGhxdWFydHoyZC9kcV9wc19jb252ZXJ0L2NoYXB0
ZXJfMTZfc2VjdGlvbl8xLmh0bWwKKworICAgIENHUFNDb252ZXJ0ZXJDYWxsYmFja3MgY2FsbGJh
Y2tzID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgICAgUmV0YWluUHRyPENHUFNDb252
ZXJ0ZXJSZWY+IGNvbnZlcnRlciA9IGFkb3B0Q0YoQ0dQU0NvbnZlcnRlckNyZWF0ZSgwLCAmY2Fs
bGJhY2tzLCAwKSk7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKHBvc3RTY3JpcHREYXRhLmdl
dCgpKSk7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IHBkZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIFJldGFp
blB0cjxDR0RhdGFDb25zdW1lclJlZj4gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVy
Q3JlYXRlV2l0aENGRGF0YShwZGZEYXRhLmdldCgpKSk7CisgICAgCisgICAgQ0dQU0NvbnZlcnRl
ckNvbnZlcnQoY29udmVydGVyLmdldCgpLCBwcm92aWRlci5nZXQoKSwgY29uc3VtZXIuZ2V0KCks
IDApOworICAgIAorICAgIHJldHVybiBwZGZEYXRhOworfQorCit2b2lkIFBERlBsdWdpbjo6Y29u
dmVydFBvc3RTY3JpcHREYXRhSWZOZWVkZWQoKQoreworICAgIGlmICghbV9pc1Bvc3RTY3JpcHQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBTdHJpbmcobV9z
dWdnZXN0ZWRGaWxlbmFtZSArICIucGRmIik7CisgICAgbV9kYXRhID0gY29udmVydFBvc3RTY3Jp
cHREYXRhVG9QREYobV9kYXRhKTsKK30KKwordm9pZCBQREZQbHVnaW46OnBkZkRvY3VtZW50RGlk
TG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisgICAgCisgICAgUmV0YWluUHRy
PFBERkRvY3VtZW50PiBkb2N1bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxs
b2NdIGluaXRXaXRoRGF0YTpyYXdEYXRhKCldKTsKKworICAgIHNldFBERkRvY3VtZW50KGRvY3Vt
ZW50KTsKKworICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKworICAgIFtt
X3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6c2l6ZSgpXTsKKyAgICBtX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKS5kb2N1bWVudCA9IGRvY3VtZW50LmdldCgpOworCisgICAgaWYgKGhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkKKyAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2Nh
bGVGYWN0b3IoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0sIEludFBv
aW50KCkpOworCisgICAgbm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KFttX3Bk
ZkxheWVyQ29udHJvbGxlciBzY3JvbGxQb3NpdGlvbl0pKTsKKworICAgIGNhbGN1bGF0ZVNpemVz
KCk7CisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworCisgICAgcnVuU2NyaXB0c0luUERGRG9jdW1l
bnQoKTsKKworICAgIGlmIChbZG9jdW1lbnQgaXNMb2NrZWRdKQorICAgICAgICBjcmVhdGVQYXNz
d29yZEVudHJ5Rm9ybSgpOworfQorCit2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJl
c3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmLCB1aW50MzJfdCwgdWludDMyX3Qs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQg
PT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZEZpbGVuYW1lOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCBw
b3N0U2NyaXB0TUlNRVR5cGUpKQorICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7Cit9CisK
K3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwg
Y29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJl
YW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2Rh
dGEpCisgICAgICAgIG1fZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7
CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVT
RUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIGNv
bnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBi
b29sIHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1J
RCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX2RhdGEuY2xlYXIoKTsKK30KKwor
dm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwm
IHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZp
ZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFt
ZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVU
eXBlLCBwb3N0U2NyaXB0TUlNRVR5cGUpKQorICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgbV9k
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFw
cGVuZEJ5dGVzKG1fZGF0YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5
dGVzKSwgbGVuZ3RoKTsKK30KKwordm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZpbmlz
aExvYWRpbmcoKQoreworICAgIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7CisgICAg
cGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1E
aWRGYWlsKGJvb2wpCit7CisgICAgbV9kYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjpydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpCit7CisgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0
cmluZ1JlZj4+IHNjcmlwdHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRm
RG9jdW1lbnQgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3Vu
dCA9IHNjcmlwdHMuc2l6ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUo
MCk7CisgICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0
cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ldLmdl
dCgpKTsKKyAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAs
IDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisgICAgCisg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOworfQorCit2b2lkIFBERlBsdWdpbjo6Y3Jl
YXRlUGFzc3dvcmRFbnRyeUZvcm0oKQoreworICAgIG1fcGFzc3dvcmRGaWVsZCA9IFBERlBsdWdp
blBhc3N3b3JkRmllbGQ6OmNyZWF0ZShtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7
CisgICAgbV9wYXNzd29yZEZpZWxkLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgp
KTsKK30KKwordm9pZCBQREZQbHVnaW46OmF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcm
IHBhc3N3b3JkKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tX
aXRoUGFzc3dvcmQ6cGFzc3dvcmRdOworCisgICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tl
ZF0pIHsKKyAgICAgICAgbV9wYXNzd29yZEZpZWxkID0gbnVsbHB0cjsKKworICAgICAgICBjYWxj
dWxhdGVTaXplcygpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgfQorfQorCit2
b2lkIFBERlBsdWdpbjo6dXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpCit7CisgICAg
ZG91YmxlIG5ld1NjYWxlRmFjdG9yID0gY29udHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9y
KCk7CisgICAgaWYgKCFoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgIG5ld1NjYWxl
RmFjdG9yICo9IHdlYkZyYW1lKCktPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICBp
ZiAobmV3U2NhbGVGYWN0b3IgIT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGRldmljZVNjYWxlRmFj
dG9yXSkKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldERldmljZVNjYWxlRmFjdG9y
Om5ld1NjYWxlRmFjdG9yXTsKK30KKwordm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0
b3JDaGFuZ2VkKGZsb2F0KQoreworICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMo
KTsKK30KKwordm9pZCBQREZQbHVnaW46OmNvbXB1dGVQYWdlQm94ZXMoKQoreworICAgIHNpemVf
dCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVu
dCBkb2N1bWVudFJlZl0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyAr
K2kpIHsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFn
ZShbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBk
ZlBhZ2UpOworCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBh
Z2UsIGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAg
ICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJv
eCk7CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KK30K
Kwordm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICBpZiAoW3BkZkRvY3Vt
ZW50KCkgaXNMb2NrZWRdKSB7CisgICAgICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKDAs
IDApKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBjb21lIHN0cmFpZ2h0IGZyb20gUERGS2l0LgorICAgIGNvbXB1dGVQYWdlQm94ZXMoKTsKKwor
ICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250
ZW50U2l6ZVJlc3BlY3Rpbmdab29tXSkpOworfQorCitib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6
ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIG1fc291cmNlVVJMID0gcGFy
YW1ldGVycy51cmw7CisgICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAm
JiAhcGFyYW1ldGVycy51cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVyKCktPmxvYWRV
UkwocGRmRG9jdW1lbnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwg
U3RyaW5nKCksIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNlKTsKKwor
ICAgIGNvbnRyb2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFBERlBsdWdpbjo6ZGVzdHJveSgpCit7CisgICAgbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSAwOworCisgICAgaWYgKHdlYkZyYW1lKCkpIHsKKyAgICAg
ICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZp
ZXcoKSkKKyAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7
CisgICAgfQorCisgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKKyAgICBtX2Fubm90
YXRpb25Db250YWluZXIgPSBudWxscHRyOworCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsK
KyAgICAKKyAgICBbbV9zY3JvbGxDb3JuZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cisg
ICAgW21fY29udGVudExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKwordm9pZCBQREZQ
bHVnaW46OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCkKK3sKKyAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LnVwZGF0aW5nQ29udHJvbFRpbnRzKCkp
OworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpw
YWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250
ZXh0KTsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVl
KTsKKyAgICAKKyAgICBpZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3JuZXJMYXllcikgeworICAgICAg
ICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QgPSB0aGlzLT5zY3JvbGxDb3JuZXJSZWN0KCk7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lclJlY3QueCgpLCAt
c2Nyb2xsQ29ybmVyUmVjdC55KCkpOworICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5w
YWludFNjcm9sbENvcm5lcihudWxscHRyLCBncmFwaGljc0NvbnRleHQsIHNjcm9sbENvcm5lclJl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFNjcm9sbGJhciogc2Nyb2xs
YmFyID0gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAobGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyKQorICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGVs
c2UgaWYgKGxheWVyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorICAgICAgICBzY3Jv
bGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9s
bGJhci0+eCgpLCAtc2Nyb2xsYmFyLT55KCkpOworICAgIHNjcm9sbGJhci0+cGFpbnQoZ3JhcGhp
Y3NDb250ZXh0LCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKK30KKworUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gUERGUGx1Z2luOjpzbmFwc2hvdCgpCit7CisgICAgaWYgKHNpemUoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZmxvYXQgY29udGVudHNTY2FsZUZh
Y3RvciA9IGNvbnRyb2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOworICAgIEludFNpemUg
YmFja2luZ1N0b3JlU2l6ZSA9IHNpemUoKTsKKyAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNv
bnRlbnRzU2NhbGVGYWN0b3IpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hh
cmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworCisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KGNvbnRlbnRzU2NhbGVGYWN0b3IsIC1jb250ZW50c1NjYWxlRmFjdG9yKSk7CisgICAgY29udGV4
dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkgKyBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBbbV9wZGZMYXllckNv
bnRyb2xsZXIgc25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCldOwor
CisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworUGxhdGZvcm1MYXllciogUERGUGx1Z2luOjpwbHVn
aW5MYXllcigpCit7CisgICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7Cit9CisKK0lu
dFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCksIHNpemUo
KS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7Cit9CisKK0ludFBvaW50IFBERlBsdWdpbjo6Y29udmVy
dEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKK30K
KworSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0
IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29v
cmRpbmF0ZXMocG9pbnQueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOworICAgIHJl
dHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50
SW5QbHVnaW5Db29yZGluYXRlcyk7Cit9CisKK0Zsb2F0UmVjdCBQREZQbHVnaW46OmNvbnZlcnRG
cm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisK
KyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAg
RmxvYXRQb2ludCBvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCBzaXplKCkuaGVp
Z2h0KCkgLSByZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2Uo
KS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzLCByZWN0LnNpemUo
KSkpOworCisgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJ
bnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30KKworSW50UmVjdCBQREZQbHVn
aW46OmJvdW5kc09uU2NyZWVuKCkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmll
d0Nvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBS
ZWN0KGJvdW5kcyk7CisgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNs
b3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30KKwordm9pZCBQREZQ
bHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0pCit7CisgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFn
ZVNjYWxlRmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rv
cl0pCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9y
b290Vmlld1RvUGx1Z2luVHJhbnNmb3JtID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5pbnZl
cnNlKCk7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTpwbHVnaW5TaXpl
XTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRE
aXNhYmxlQWN0aW9uczpZRVNdOworICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFu
c2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwgMSk7CisgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0z
RFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIDAsIC1wbHVnaW5TaXplLmhlaWdodCgpLCAwKTsKKyAgICAK
KyAgICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKSB7CisgICAgICAgIENHRmxvYXQgbWFn
bmlmaWNhdGlvbiA9IHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXll
ckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsKKworICAgICAgICAvLyBGSVhNRTogSW5z
dGVhZCBvZiBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcywgd2Ugc2hvdWxk
IHVzZSB0aGUgem9vbSBvcmlnaW4gZnJvbSBQbHVnaW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3Iu
CisgICAgICAgIGlmIChtYWduaWZpY2F0aW9uKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyIG1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjptYWduaWZpY2F0aW9uIGF0UG9pbnQ6Y29u
dmVydEZyb21QbHVnaW5Ub1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRp
bmF0ZXMpIGltbWVkaWF0ZWx5Ok5PXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBk
b24ndCBoYW5kbGUgcGFnZSBzY2FsZSBvdXJzZWx2ZXMsIHdlIG5lZWQgdG8gcmVzcGVjdCBvdXIg
cGFyZW50IHBhZ2UncworICAgICAgICAvLyBzY2FsZSwgd2hpY2ggbWF5IGhhdmUgY2hhbmdlZC4K
KyAgICAgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOworICAgIH0gCisKKyAg
ICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGlmICht
X2FjdGl2ZUFubm90YXRpb24pCisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2Vv
bWV0cnkoKTsKKworICAgIFttX2NvbnRlbnRMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0cmFu
c2Zvcm1dOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QsIGJvb2wp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRF
dmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworICAgIAorc3RhdGljIE5TVUludGVnZXIgbW9kaWZp
ZXJGbGFnc0Zyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJu
IChldmVudC5zaGlmdEtleSgpID8gTlNTaGlmdEtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVu
dC5jb250cm9sS2V5KCkgPyBOU0NvbnRyb2xLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQu
YWx0S2V5KCkgPyBOU0FsdGVybmF0ZUtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5tZXRh
S2V5KCkgPyBOU0NvbW1hbmRLZXlNYXNrIDogMCk7Cit9CisgICAgCitzdGF0aWMgYm9vbCBnZXRF
dmVudFR5cGVGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYg
ZXZlbnRUeXBlKQoreworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJF
dmVudDo6S2V5RG93bjoKKyAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlEb3duOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdlYkV2ZW50OjpLZXlVcDoKKyAgICAgICAgZXZlbnRUeXBl
ID0gTlNLZXlVcDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXZWJFdmVudDo6TW91
c2VEb3duOgorICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQm
PihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0
dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNMZWZ0TW91c2VEb3duOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246
CisgICAgICAgICAgICBldmVudFR5cGUgPSBOU1JpZ2h0TW91c2VEb3duOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAg
ICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRU
eXBlID0gTlNMZWZ0TW91c2VVcDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0g
TlNSaWdodE1vdXNlVXA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3Vz
ZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6
TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5TTGVmdE1vdXNlRHJhZ2dlZDsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJp
Z2h0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNSaWdodE1vdXNlRHJhZ2dlZDsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5v
QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNNb3VzZU1vdmVkOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorICAgIAorTlNFdmVudCAqUERGUGx1Z2luOjpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBtX2xhc3RNb3VzZVBvc2l0aW9uSW5Q
bHVnaW5Db29yZGluYXRlcyA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5wb3Np
dGlvbigpKTsKKworICAgIEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMoY29u
dmVydEZyb21QbHVnaW5Ub1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRp
bmF0ZXMpKTsKKworICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKKworICAgIGlmICghZ2V0RXZl
bnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZl
bnQoZXZlbnQpOworCisgICAgcmV0dXJuIFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVu
dFR5cGUgbG9jYXRpb246cG9zaXRpb25JblBERlZpZXdDb29yZGluYXRlcyBtb2RpZmllckZsYWdz
Om1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4dDpuaWwgZXZl
bnROdW1iZXI6MCBjbGlja0NvdW50OmV2ZW50LmNsaWNrQ291bnQoKSBwcmVzc3VyZTowXTsKK30K
Kwordm9pZCBQREZQbHVnaW46OnVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVu
dCwgVXBkYXRlQ3Vyc29yTW9kZSBtb2RlKQoreworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJl
c3VsdCA9IE5vbmU7CisKKyAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvblVuZGVyTW91c2UgPSBb
bV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29udmVydEZy
b21QbHVnaW5Ub1BERlZpZXcoZXZlbnQucG9zaXRpb24oKSldOworICAgIGlmIChzZWxlY3Rpb25V
bmRlck1vdXNlICYmIFtbc2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmddIGxlbmd0aF0pCisgICAg
ICAgIGhpdFRlc3RSZXN1bHQgPSBUZXh0OworCisgICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9s
YXN0SGl0VGVzdFJlc3VsdCAmJiBtb2RlID09IFVwZGF0ZUlmTmVlZGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2V0Q3Vyc29yKGhpdFRlc3RSZXN1bHQgPT0gVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiBwb2lu
dGVyQ3Vyc29yKCkpKTsKKyAgICBtX2xhc3RIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsK
K30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0
Zm9ybShldmVudCk7CisgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbiA9IGNvbnZlcnRGcm9tUm9v
dFZpZXdUb1BsdWdpbihldmVudC5wb3NpdGlvbigpKTsKKworICAgIG1fbGFzdE1vdXNlRXZlbnQg
PSBldmVudDsKKworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHRhcmdldFNjcm9sbGJhcjsKKyAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbjsKKwor
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCB2ZXJ0
aWNhbFNjcm9sbGJhckZyYW1lKG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7
CisgICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRp
b24pKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsK
KyAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQ
b3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFy
Rm9yTGFzdE1vdXNlUG9zaXRpb24gPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIH0KKworICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBJbnRSZWN0IGhvcml6
b250YWxTY3JvbGxiYXJGcmFtZShtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFt
ZSk7CisgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobW91c2VQ
b3NpdGlvbikpCisgICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xs
YmFyKCk7CisgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9s
YXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgdGFyZ2V0
U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb24gPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Cisg
ICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIgJiYgSW50UmVjdChtX3Njcm9sbENv
cm5lckxheWVyLmdldCgpLmZyYW1lKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmlnaHQtY2xpY2tzIGFuZCBDb250cm9sLWNsaWNr
cyBhbHdheXMgY2FsbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50IGFzIHdlbGwuCisgICAgaWYgKGV2
ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uIHx8IChldmVudC5idXR0
b24oKSA9PSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uICYmIGV2ZW50LmNvbnRyb2xLZXkoKSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgTlNFdmVudCAqbnNFdmVudCA9IG5zRXZlbnRG
b3JXZWJNb3VzZUV2ZW50KGV2ZW50KTsKKworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7Cisg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYSgpOworICAgICAgICB1cGRhdGVDdXJzb3IoZXZlbnQpOworCisgICAgICAgIGlmICh0YXJn
ZXRTY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIGlmICghdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1v
dXNlUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRW50
ZXJlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRhcmdldFNjcm9sbGJhci0+bW91c2VNb3ZlZChwbGF0Zm9ybUV2ZW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGFyZ2V0U2Nyb2xsYmFyICYmIHRhcmdldFNj
cm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFy
Rm9yTGFzdE1vdXNlUG9zaXRpb24tPm1vdXNlRXhpdGVkKCk7CisKKyAgICAgICAgc3dpdGNoIChl
dmVudC5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246
CisgICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VEcmFnZ2VkOm5zRXZlbnRd
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6
UmlnaHRCdXR0b246CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5v
QnV0dG9uOgorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlTW92ZWQ6bnNF
dmVudF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIGNhc2UgV2Vi
RXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgeworICAg
ICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBpZiAodGFy
Z2V0U2Nyb2xsYmFyKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1v
dXNlRG93bihwbGF0Zm9ybUV2ZW50KTsKKworICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIG1vdXNlRG93bjpuc0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgW21fcGRmTGF5
ZXJDb250cm9sbGVyIHJpZ2h0TW91c2VEb3duOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAg
ICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAgICAgICAgc3dpdGNo
IChldmVudC5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b246CisgICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisKKyAgICAgICAg
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246Cisg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICBjYXNlIFdl
Yk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7Cisg
ICAgdXBkYXRlQ3Vyc29yKGV2ZW50LCBGb3JjZVVwZGF0ZSk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKQoreworICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisgICAgCitib29sIFBERlBsdWdpbjo6c2hvd0NvbnRleHRNZW51QXRQb2ludChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFt
ZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBm
cmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhwb2ludCk7CisgICAgV2ViTW91c2VFdmVudCBl
dmVudChXZWJFdmVudDo6TW91c2VEb3duLCBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiwgY29u
dGVudHNQb2ludCwgY29udGVudHNQb2ludCwgMCwgMCwgMCwgMSwgc3RhdGljX2Nhc3Q8V2ViRXZl
bnQ6Ok1vZGlmaWVycz4oMCksIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCBXZWJDb3Jl
OjpGb3JjZUF0Q2xpY2spOworICAgIHJldHVybiBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50
KTsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2Vi
TW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFt
ZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIEludFBvaW50IHBvaW50ID0gZnJhbWVWaWV3
LT5jb250ZW50c1RvU2NyZWVuKEludFJlY3QoZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2
ZW50LnBvc2l0aW9uKCkpLCBJbnRTaXplKCkpKS5sb2NhdGlvbigpOworICAgIAorICAgIGlmIChO
U01lbnUgKm5zTWVudSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBtZW51Rm9yRXZlbnQ6bnNFdmVu
dEZvcldlYk1vdXNlRXZlbnQoZXZlbnQpXSkgeworICAgICAgICBXS1BvcHVwQ29udGV4dE1lbnUo
bnNNZW51LCBwb2ludCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNv
bnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlw
ZTsKKworICAgIGlmICghZ2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3Mg
PSBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGV2ZW50KTsKKyAgICAKKyAgICBOU0V2ZW50ICpm
YWtlRXZlbnQgPSBbTlNFdmVudCBrZXlFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2NhdGlvbjpO
U1plcm9Qb2ludCBtb2RpZmllckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93
TnVtYmVyOjAgY29udGV4dDowIGNoYXJhY3RlcnM6ZXZlbnQudGV4dCgpIGNoYXJhY3RlcnNJZ25v
cmluZ01vZGlmaWVyczpldmVudC51bm1vZGlmaWVkVGV4dCgpIGlzQVJlcGVhdDpldmVudC5pc0F1
dG9SZXBlYXQoKSBrZXlDb2RlOmV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCldOworICAgIAor
ICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoK
KyAgICAgICAgcmV0dXJuIFttX3BkZkxheWVyQ29udHJvbGxlciBrZXlEb3duOmZha2VFdmVudF07
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29sIFBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sK
KyAgICBpZiAoY29tbWFuZE5hbWUgPT0gImNvcHkiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIgY29weVNlbGVjdGlvbl07CisgICAgZWxzZSBpZiAoY29tbWFuZE5hbWUgPT0gInNlbGVj
dEFsbCIpCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZWxlY3RBbGxdOworICAgIGVs
c2UgaWYgKGNvbW1hbmROYW1lID09ICJ0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24iKSB7Cisg
ICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNl
bGVjdGlvbl0uc3RyaW5nOworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAg
IHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNGaW5kUGJvYXJkLCBAWyBbc3RyaW5nIGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBdLCBAWyBOU1Bhc3RlYm9hcmRUeXBlU3Ry
aW5nIF0pOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBERlBsdWdpbjo6
aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAg
ICBpZiAoY29tbWFuZE5hbWUgPT0gImNvcHkiIHx8IGNvbW1hbmROYW1lID09ICJ0YWtlRmluZFN0
cmluZ0Zyb21TZWxlY3Rpb24iKQorICAgICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGN1cnJlbnRTZWxlY3Rpb25dOworCisgICAgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwi
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQ
REZQbHVnaW46OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKworICAg
IFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2Ny
b2xsUG9zaXRpb246b2Zmc2V0XTsKKworICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCisgICAg
ICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKKworICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgZWxzZSBpZiAoc2Nyb2xs
YmFyID09IHZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVT
Y3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgW21fc2Nyb2xsQ29y
bmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzRnVsbEZy
YW1lUGx1Z2luKCkgY29uc3QKK3sKKyAgICAvLyA8b2JqZWN0PiBvciA8ZW1iZWQ+IHBsdWdpbnMg
d2lsbCBhcHBlYXIgdG8gYmUgaW4gdGhlaXIgcGFyZW50IGZyYW1lLCBzbyB3ZSBoYXZlIHRvCisg
ICAgLy8gY2hlY2sgd2hldGhlciBvdXIgZnJhbWUncyB3aWRnZXQgaXMgZXhhY3RseSBvdXIgUGx1
Z2luVmlldy4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUo
KS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSAm
JiBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KGRvY3VtZW50KS0+cGx1Z2luV2lkZ2V0KCkg
PT0gcGx1Z2luVmlldygpOworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHdlYkZyYW1lKCktPmlzTWFpbkZyYW1lKCkgJiYg
aXNGdWxsRnJhbWVQbHVnaW4oKTsKK30KKwordm9pZCBQREZQbHVnaW46OmNsaWNrZWRMaW5rKE5T
VVJMICp1cmwpCit7CisgICAgVVJMIGNvcmVVUkwgPSB1cmw7CisgICAgaWYgKHByb3RvY29sSXNK
YXZhU2NyaXB0KGNvcmVVUkwpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUg
PSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKTsKKworICAgIFJlZlB0cjxFdmVudD4gY29yZUV2ZW50
OworICAgIGlmIChtX2xhc3RNb3VzZUV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6Tm9UeXBlKQor
ICAgICAgICBjb3JlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQsIGZyYW1lLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybShtX2xhc3RN
b3VzZUV2ZW50KSwgMCwgMCk7CisKKyAgICBmcmFtZS0+bG9hZGVyKCkudXJsU2VsZWN0ZWQoY29y
ZVVSTCwgZW1wdHlTdHJpbmcoKSwgY29yZUV2ZW50LmdldCgpLCBMb2NrSGlzdG9yeTo6Tm8sIExv
Y2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgU2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2V0QWN0
aXZlQW5ub3RhdGlvbihQREZBbm5vdGF0aW9uICphbm5vdGF0aW9uKQoreworICAgIGlmICghc3Vw
cG9ydHNGb3JtcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0
aW9uKQorICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworCisgICAgaWYgKGFu
bm90YXRpb24pIHsKKyAgICAgICAgaWYgKFthbm5vdGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5u
b3RhdGlvblRleHRXaWRnZXRDbGFzcygpXSAmJiBzdGF0aWNfY2FzdDxQREZBbm5vdGF0aW9uVGV4
dFdpZGdldCAqPihhbm5vdGF0aW9uKS5pc1JlYWRPbmx5KSB7CisgICAgICAgICAgICBtX2FjdGl2
ZUFubm90YXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gUERGUGx1Z2luQW5ub3RhdGlvbjo6Y3JlYXRl
KGFubm90YXRpb24sIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsKKyAgICAgICAg
bV9hY3RpdmVBbm5vdGF0aW9uLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKK30KKwor
Ym9vbCBQREZQbHVnaW46OnN1cHBvcnRzRm9ybXMoKQoreworICAgIC8vIEZJWE1FOiBXZSBzdXBw
b3J0IGZvcm1zIGZvciBmdWxsLW1haW4tZnJhbWUgYW5kIDxpZnJhbWU+IFBERnMsIGJ1dCBub3Qg
PGVtYmVkPiBvciA8b2JqZWN0PiwgYmVjYXVzZSB0aG9zZSBjYXNlcyBkbyBub3QgaGF2ZSB0aGVp
ciBvd24gRG9jdW1lbnQgaW50byB3aGljaCB0byBpbmplY3QgZm9ybSBlbGVtZW50cy4KKyAgICBy
ZXR1cm4gaXNGdWxsRnJhbWVQbHVnaW4oKTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlmeUNv
bnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3RvcikKK3sKKyAgICBpZiAo
aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICBwbHVnaW5WaWV3KCktPnNldFBhZ2VT
Y2FsZUZhY3RvcihzY2FsZUZhY3RvciwgSW50UG9pbnQoKSk7CisKKyAgICBjYWxjdWxhdGVTaXpl
cygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlm
eURpc3BsYXlNb2RlQ2hhbmdlZChpbnQpCit7CisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1
cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBERlBsdWdpbjo6
bGl2ZVJlc291cmNlRGF0YSgpIGNvbnN0Cit7CisgICAgTlNEYXRhICpwZGZEYXRhID0gbGl2ZURh
dGEoKTsKKworICAgIGlmICghcGRmRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKHBkZkRhdGEpOworfQorCit2b2lkIFBE
RlBsdWdpbjo6c2F2ZVRvUERGKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5
IG5vdGlmeSB0aGUgdXNlciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50
IGlzIGZpbmlzaGVkIGxvYWRpbmcuCisgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBO
U0JlZXAoKSwgYnV0IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgIGlmICghcGRmRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsK
KyAgICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlciht
X3N1Z2dlc3RlZEZpbGVuYW1lLCB3ZWJGcmFtZSgpLT51cmwoKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhciAqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKK30KKwordm9p
ZCBQREZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKQoreworICAgIGlmICghbV90
ZW1wb3JhcnlQREZVVUlEKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkg
bm90aWZ5IHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCBzYXZlIGJlZm9yZSB0aGUgZG9jdW1lbnQg
aXMgZmluaXNoZWQgbG9hZGluZy4KKyAgICAgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBh
biBOU0JlZXAoKSwgYnV0IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgICAgICBpZiAoIXBk
ZkRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNEYXRhICpkYXRh
ID0gbGl2ZURhdGEoKTsKKworICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBXZWJDb3JlOjpj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgICAgIEFTU0VSVChtX3RlbXBvcmFyeVBE
RlVVSUQpOworCisgICAgICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2F2ZVBERlRvVGVtcG9yYXJ5
Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX3N1Z2dlc3RlZEZpbGVuYW1lLCB3
ZWJGcmFtZSgpLT51cmwoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihbZGF0
YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdLCBtX3RlbXBvcmFyeVBERlVVSUQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6Ok9wZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0
aW9uKG1fdGVtcG9yYXJ5UERGVVVJRCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVt
c1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBO
U0FycmF5ICp0eXBlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXM7CisK
KyAgICBmb3IgKE5TU3RyaW5nICp0eXBlIGluIHR5cGVzKQorICAgICAgICBwYXN0ZWJvYXJkVHlw
ZXMuYXBwZW5kKHR5cGUpOworCisgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7CisgICAgYXV0
byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIHdlYlByb2Nlc3Mu
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlw
ZXMpLAorICAgICAgICBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJk
VHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisKKyAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDAsIGNvdW50ID0gaXRlbXMuY291bnQ7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5T
U3RyaW5nICp0eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIE5TRGF0YSAq
ZGF0YSA9IFtpdGVtcyBvYmplY3RBdEluZGV4OmldOworCisgICAgICAgIC8vIFdlIGRvbid0IGV4
cGVjdCB0aGUgZGF0YSBmb3IgYW55IGl0ZW1zIHRvIGJlIGVtcHR5LCBidXQgYXJlbid0IGNvbXBs
ZXRlbHkgc3VyZS4KKyAgICAgICAgLy8gQXZvaWQgY3Jhc2hpbmcgaW4gdGhlIFNoYXJlZE1lbW9y
eSBjb25zdHJ1Y3RvciBpbiByZWxlYXNlIGJ1aWxkcyBpZiB3ZSdyZSB3cm9uZy4KKyAgICAgICAg
QVNTRVJUKGRhdGEubGVuZ3RoKTsKKyAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJp
bmdQYm9hcmRUeXBlXSB8fCBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0
cmluZ10pIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5n
ID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ10pOworICAgICAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpT
ZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0
U3RyaW5nLmdldCgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2Fy
ZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZm
ZXI6OndyYXBOU0RhdGEoZGF0YSk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBo
YW5kbGU7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBT
aGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNw
eShzaGFyZWRNZW1vcnktPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgICAgICAgICB3ZWJQcm9jZXNzLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBoYW5k
bGUsIGJ1ZmZlci0+c2l6ZSgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFz
dGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0
ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIENHUG9pbnQgcG9pbnQpCit7Cisg
ICAgRGljdGlvbmFyeVBvcHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGRpY3Rpb25h
cnlQb3B1cEluZm8ub3JpZ2luID0gY29udmVydEZyb21QREZWaWV3VG9Sb290VmlldyhJbnRQb2lu
dChwb2ludCkpOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHN0
cmluZzsKKworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvKSk7Cit9
CisKK3Vuc2lnbmVkIFBERlBsdWdpbjo6Y291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRh
cmdldCwgV2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dCkKK3sKKyAgICBpZiAoIXRhcmdldC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpbnQgbnNPcHRpb25zID0gKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkg
PyBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaCA6IDA7CisKKyAgICByZXR1cm4gW1twZGZEb2N1bWVu
dCgpIGZpbmRTdHJpbmc6dGFyZ2V0IHdpdGhPcHRpb25zOm5zT3B0aW9uc10gY291bnRdOworfQor
CitQREZTZWxlY3Rpb24gKlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBCT09MIHNlYXJjaEZvcndhcmQsIEJPT0wgY2FzZVNlbnNpdGl2ZSwgQk9PTCB3
cmFwU2VhcmNoLCBQREZTZWxlY3Rpb24gKmluaXRpYWxTZWxlY3Rpb24sIEJPT0wgc3RhcnRJblNl
bGVjdGlvbikKK3sKKyAgICBpZiAoIXRhcmdldC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIE5TU3RyaW5nQ29tcGFyZU9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgaWYgKCFz
ZWFyY2hGb3J3YXJkKQorICAgICAgICBvcHRpb25zIHw9IE5TQmFja3dhcmRzU2VhcmNoOworCisg
ICAgaWYgKCFjYXNlU2Vuc2l0aXZlKQorICAgICAgICBvcHRpb25zIHw9IE5TQ2FzZUluc2Vuc2l0
aXZlU2VhcmNoOworCisgICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0gcGRmRG9jdW1lbnQoKS5n
ZXQoKTsKKworICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCA9IFtp
bml0aWFsU2VsZWN0aW9uIGNvcHldOworICAgIGlmIChzdGFydEluU2VsZWN0aW9uKSB7CisgICAg
ICAgIC8vIEluaXRpYWxseSB3ZSB3YW50IHRvIGluY2x1ZGUgdGhlIHNlbGVjdGVkIHRleHQgaW4g
dGhlIHNlYXJjaC4gU28gd2UgbXVzdCBtb2RpZnkgdGhlIHN0YXJ0aW5nIHNlYXJjaAorICAgICAg
ICAvLyBzZWxlY3Rpb24gdG8gZml0IFBERkRvY3VtZW50J3Mgc2VhcmNoIHJlcXVpcmVtZW50czog
c2VsZWN0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+PSAxLCBiZWdpbiBiZWZvcmUKKyAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBzZWFyY2hpbmcgZm9yd2FyZHMpIG9yIGFmdGVy
IChpZiBzZWFyY2hpbmcgYmFja3dhcmRzKS4KKyAgICAgICAgaW50IGluaXRpYWxTZWxlY3Rpb25M
ZW5ndGggPSBbW2luaXRpYWxTZWxlY3Rpb24gc3RyaW5nXSBsZW5ndGhdOworICAgICAgICBpZiAo
c2VhcmNoRm9yd2FyZCkgeworICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2gg
ZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDoxXTsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0
aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlvbkF0RW5kOi1pbml0aWFsU2VsZWN0aW9uTGVuZ3RoXTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNo
IGV4dGVuZFNlbGVjdGlvbkF0RW5kOjFdOworICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRp
YWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDotaW5pdGlhbFNlbGVjdGlvbkxlbmd0aF07
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0g
W2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246c2VsZWN0aW9uRm9ySW5p
dGlhbFNlYXJjaCB3aXRoT3B0aW9uczpvcHRpb25zXTsKKyAgICBbc2VsZWN0aW9uRm9ySW5pdGlh
bFNlYXJjaCByZWxlYXNlXTsKKworICAgIC8vIElmIHdlIGZpcnN0IHNlYXJjaGVkIGluIHRoZSBz
ZWxlY3Rpb24sIGFuZCB3ZSBmb3VuZCB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggYWdhaW4gZnJvbSBq
dXN0IHBhc3QgdGhlIHNlbGVjdGlvbi4KKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBbZm91
bmRTZWxlY3Rpb24gaXNFcXVhbDppbml0aWFsU2VsZWN0aW9uXSkKKyAgICAgICAgZm91bmRTZWxl
Y3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjppbml0aWFs
U2VsZWN0aW9uIHdpdGhPcHRpb25zOm9wdGlvbnNdOworCisgICAgaWYgKCFmb3VuZFNlbGVjdGlv
biAmJiB3cmFwU2VhcmNoKQorICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5k
U3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOm5pbCB3aXRoT3B0aW9uczpvcHRpb25zXTsKKwor
ICAgIHJldHVybiBmb3VuZFNlbGVjdGlvbjsKK30KKworYm9vbCBQREZQbHVnaW46OmZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMsIHVu
c2lnbmVkIG1heE1hdGNoQ291bnQpCit7CisgICAgQk9PTCBzZWFyY2hGb3J3YXJkID0gIShvcHRp
b25zICYgRmluZE9wdGlvbnNCYWNrd2FyZHMpOworICAgIEJPT0wgY2FzZVNlbnNpdGl2ZSA9ICEo
b3B0aW9ucyAmIEZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICBCT09MIHdyYXBTZWFy
Y2ggPSBvcHRpb25zICYgRmluZE9wdGlvbnNXcmFwQXJvdW5kOworCisgICAgdW5zaWduZWQgbWF0
Y2hDb3VudDsKKyAgICBpZiAoIW1heE1hdGNoQ291bnQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1h
eCB3YXMgemVybywgYW55IHJlc3VsdCBtZWFucyB3ZSBleGNlZWRlZCB0aGUgbWF4LiBXZSBjYW4g
c2tpcCBjb21wdXRpbmcgdGhlIGFjdHVhbCBjb3VudC4KKyAgICAgICAgbWF0Y2hDb3VudCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhhbk1heGltdW1NYXRjaENvdW50KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtYXRjaENvdW50ID0gY291bnRGaW5kTWF0Y2hlcyh0YXJnZXQsIG9w
dGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgICAgICBpZiAobWF0Y2hDb3VudCA+IG1heE1hdGNo
Q291bnQpCisgICAgICAgICAgICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtX
S01vcmVUaGFuTWF4aW11bU1hdGNoQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXQuaXNF
bXB0eSgpKSB7CisgICAgICAgIFBERlNlbGVjdGlvbiogc2VhcmNoU2VsZWN0aW9uID0gW21fcGRm
TGF5ZXJDb250cm9sbGVyIHNlYXJjaFNlbGVjdGlvbl07CisgICAgICAgIFttX3BkZkxheWVyQ29u
dHJvbGxlciBmaW5kU3RyaW5nOnRhcmdldCBjYXNlU2Vuc2l0aXZlOmNhc2VTZW5zaXRpdmUgaGln
aGxpZ2h0TWF0Y2hlczpZRVNdOworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2Vh
cmNoU2VsZWN0aW9uOnNlYXJjaFNlbGVjdGlvbl07CisgICAgICAgIG1fbGFzdEZvdW5kU3RyaW5n
ID0gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChtX2xhc3RGb3VuZFN0cmluZyA9PSB0YXJnZXQpIHsKKyAgICAgICAgUERGU2VsZWN0aW9uICpz
ZWxlY3Rpb24gPSBuZXh0TWF0Y2hGb3JTdHJpbmcodGFyZ2V0LCBzZWFyY2hGb3J3YXJkLCBjYXNl
U2Vuc2l0aXZlLCB3cmFwU2VhcmNoLCBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2VhcmNoU2VsZWN0
aW9uXSwgTk8pOworICAgICAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2VhcmNoU2VsZWN0aW9u
OnNlbGVjdGlvbl07CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvU2VsZWN0aW9u
OnNlbGVjdGlvbl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVy
IGZpbmRTdHJpbmc6dGFyZ2V0IGNhc2VTZW5zaXRpdmU6Y2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRN
YXRjaGVzOllFU107CisgICAgICAgIG1fbGFzdEZvdW5kU3RyaW5nID0gdGFyZ2V0OworICAgIH0K
KworICAgIHJldHVybiBtYXRjaENvdW50ID4gMDsKK30KKworYm9vbCBQREZQbHVnaW46OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gY29udmVydEZyb21Sb290Vmlld1Rv
UGx1Z2luKHJvdW5kZWRJbnRQb2ludChwb2ludCkpOworICAgIFBERlNlbGVjdGlvbiogbG9va3Vw
U2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBv
aW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGxvY2FsUG9pbnQpXTsKKworICAgIGlmIChb
W2xvb2t1cFNlbGVjdGlvbiBzdHJpbmddIGxlbmd0aF0pCisgICAgICAgIFttX3BkZkxheWVyQ29u
dHJvbGxlciBzZWFyY2hJbkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOmxvb2t1cFNlbGVjdGlvbl07
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQREZQbHVnaW46OmZvY3VzTmV4dEFubm90
YXRpb24oKQoreworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0
aW9uOmZhbHNlXTsKK30KKwordm9pZCBQREZQbHVnaW46OmZvY3VzUHJldmlvdXNBbm5vdGF0aW9u
KCkKK3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjp0
cnVlXTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2Vs
ZWN0aW9uICopCit7CisgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5kaWRDaGFuZ2VTZWxlY3Rpb24o
KTsKK30KKworU3RyaW5nIFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gW1ttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXSBzdHJp
bmddOworfQorCitTdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBw
b2ludEluVmlldyA9IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BsdWdpbihyb3VuZGVkSW50UG9pbnQocG9pbnQpKSk7CisgICAgUERGU2VsZWN0aW9uICpz
ZWxlY3Rpb25Gb3JXb3JkID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldv
cmRBdFBvaW50OnBvaW50SW5WaWV3XTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3Vy
cmVudFNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JXb3JkXTsKKyAgICAKKyAgICByZXR1cm4gW3NlbGVj
dGlvbkZvcldvcmQgc3RyaW5nXTsKK30KKworYm9vbCBQREZQbHVnaW46OmV4aXN0aW5nU2VsZWN0
aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmll
d0Nvb3JkaW5hdGVzKSBjb25zdAoreworICAgIFBERlNlbGVjdGlvbiAqY3VycmVudFNlbGVjdGlv
biA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKKyAgICBpZiAoIWN1
cnJlbnRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBJbnRQb2lu
dCBwb2ludEluUERGVmlldyA9IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9t
Um9vdFZpZXdUb1BsdWdpbihyb3VuZGVkSW50UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRl
cykpKTsKKyAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvbkZvcldvcmQgPSBbbV9wZGZMYXllckNv
bnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9pbnRJblBERlZpZXddOworCisg
ICAgTlNVSW50ZWdlciBjdXJyZW50UGFnZUluZGV4ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1
cnJlbnRQYWdlSW5kZXhdOworICAgIAorICAgIE5TQXJyYXkgKnNlbGVjdGlvblJlY3RzID0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIHJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTpjdXJyZW50
U2VsZWN0aW9uXTsKKyAgICBpZiAoIXNlbGVjdGlvblJlY3RzIHx8ICFzZWxlY3Rpb25SZWN0cy5j
b3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChjdXJyZW50UGFnZUlu
ZGV4ID49IHNlbGVjdGlvblJlY3RzLmNvdW50KQorICAgICAgICBjdXJyZW50UGFnZUluZGV4ID0g
c2VsZWN0aW9uUmVjdHMuY291bnQgLSAxOworCisgICAgTlNBcnJheSAqd29yZFNlbGVjdGlvblJl
Y3RzID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIHJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFj
ZTpzZWxlY3Rpb25Gb3JXb3JkXTsKKyAgICBpZiAoIXdvcmRTZWxlY3Rpb25SZWN0cyB8fCAhd29y
ZFNlbGVjdGlvblJlY3RzLmNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1Zh
bHVlICpzZWxlY3Rpb25Cb3VuZHMgPSBbc2VsZWN0aW9uUmVjdHMgb2JqZWN0QXRJbmRleDpjdXJy
ZW50UGFnZUluZGV4XTsKKyAgICBOU1ZhbHVlICp3b3JkU2VsZWN0aW9uQm91bmRzID0gW3dvcmRT
ZWxlY3Rpb25SZWN0cyBvYmplY3RBdEluZGV4OjBdOworCisgICAgTlNSZWN0IHNlbGVjdGlvbkJv
dW5kc1JlY3QgPSBzZWxlY3Rpb25Cb3VuZHMucmVjdFZhbHVlOworICAgIE5TUmVjdCB3b3JkU2Vs
ZWN0aW9uQm91bmRzUmVjdCA9IHdvcmRTZWxlY3Rpb25Cb3VuZHMucmVjdFZhbHVlOworICAgIHJl
dHVybiBOU0ludGVyc2VjdHNSZWN0KHdvcmRTZWxlY3Rpb25Cb3VuZHNSZWN0LCBzZWxlY3Rpb25C
b3VuZHNSZWN0KTsKK30KKworc3RhdGljIE5TUG9pbnQgcG9pbnRJbkxheW91dFNwYWNlRm9yUG9p
bnRJbldpbmRvd1NwYWNlKFBERkxheWVyQ29udHJvbGxlciogcGRmTGF5ZXJDb250cm9sbGVyLCBO
U1BvaW50IHBvaW50SW5WaWV3KQoreworICAgIENHUG9pbnQgcG9pbnQgPSBOU1BvaW50VG9DR1Bv
aW50KHBvaW50SW5WaWV3KTsKKyAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IFtwZGZMYXllckNv
bnRyb2xsZXIgc2Nyb2xsUG9zaXRpb25dOworICAgIENHRmxvYXQgc2NhbGVGYWN0b3IgPSBbcGRm
TGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl07CisKKyAgICBzY3JvbGxPZmZzZXQu
eSA9IFtwZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0uaGVpZ2h0
IC0gTlNSZWN0VG9DR1JlY3QoW3BkZkxheWVyQ29udHJvbGxlciBmcmFtZV0pLnNpemUuaGVpZ2h0
IC0gc2Nyb2xsT2Zmc2V0Lnk7CisgICAgCisgICAgQ0dQb2ludCBuZXdQb2ludCA9IENHUG9pbnRN
YWtlKHNjcm9sbE9mZnNldC54ICsgcG9pbnQueCwgc2Nyb2xsT2Zmc2V0LnkgKyBwb2ludC55KTsK
KyAgICBuZXdQb2ludC54IC89IHNjYWxlRmFjdG9yOworICAgIG5ld1BvaW50LnkgLz0gc2NhbGVG
YWN0b3I7CisgICAgcmV0dXJuIE5TUG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7Cit9CisKK1N0
cmluZyBQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEm
IGRhdGEsIFBERlNlbGVjdGlvbiAqKnNlbGVjdGlvblB0ciwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9u
cykgY29uc3QKK3sKKyAgICBQREZTZWxlY3Rpb24qJiBzZWxlY3Rpb24gPSAqc2VsZWN0aW9uUHRy
OworCisgICAgc2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRTZWxlY3Rp
b25dOworICAgIGlmIChleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQobG9jYXRpb25JblZp
ZXdDb29yZGluYXRlcykpCisgICAgICAgIHJldHVybiBzZWxlY3Rpb24uc3RyaW5nOworICAgICAg
ICAKKyAgICBJbnRQb2ludCBwb2ludEluUERGVmlldyA9IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZW
aWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihyb3VuZGVkSW50UG9pbnQobG9jYXRpb25J
blZpZXdDb29yZGluYXRlcykpKTsKKyAgICBzZWxlY3Rpb24gPSBbbV9wZGZMYXllckNvbnRyb2xs
ZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9pbnRJblBERlZpZXddOworICAgIGlmICgh
c2VsZWN0aW9uKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBOU1BvaW50IHBvaW50SW5MYXlv
dXRTcGFjZSA9IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5XaW5kb3dTcGFjZShtX3BkZkxh
eWVyQ29udHJvbGxlci5nZXQoKSwgcG9pbnRJblBERlZpZXcpOworCisgICAgUERGUGFnZSAqY3Vy
cmVudFBhZ2UgPSBbW21fcGRmTGF5ZXJDb250cm9sbGVyIGxheW91dF0gcGFnZU5lYXJlc3RQb2lu
dDpwb2ludEluTGF5b3V0U3BhY2UgY3VycmVudFBhZ2U6W21fcGRmTGF5ZXJDb250cm9sbGVyIGN1
cnJlbnRQYWdlXV07CisgICAgCisgICAgTlNQb2ludCBwb2ludEluUGFnZVNwYWNlID0gW1ttX3Bk
ZkxheWVyQ29udHJvbGxlciBsYXlvdXRdIGNvbnZlcnRQb2ludDpwb2ludEluTGF5b3V0U3BhY2Ug
dG9QYWdlOmN1cnJlbnRQYWdlIGZvclNjYWxlRmFjdG9yOjEuMF07CisgICAgCisgICAgZm9yIChQ
REZBbm5vdGF0aW9uICphbm5vdGF0aW9uIGluIGN1cnJlbnRQYWdlLmFubm90YXRpb25zKSB7Cisg
ICAgICAgIGlmICghW2Fubm90YXRpb24gaXNLaW5kT2ZDbGFzczpwZGZBbm5vdGF0aW9uTGlua0Ns
YXNzKCldKQorICAgICAgICAgICAgY29udGludWU7CisgICAgCisgICAgICAgIE5TUmVjdCBib3Vu
ZHMgPSBhbm5vdGF0aW9uLmJvdW5kczsKKyAgICAgICAgaWYgKCFOU1BvaW50SW5SZWN0KHBvaW50
SW5QYWdlU3BhY2UsIGJvdW5kcykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIFBERkFubm90YXRpb25MaW5rICpsaW5rQW5ub3RhdGlvbiA9IChQREZBbm5vdGF0aW9u
TGluayAqKWFubm90YXRpb247CisgICAgICAgIE5TVVJMICp1cmwgPSBsaW5rQW5ub3RhdGlvbi5V
Ukw7CisgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBkYXRhLmFic29sdXRlTGlua1VSTCA9IHVybC5hYnNvbHV0ZVN0cmluZzsKKyAgICAg
ICAgZGF0YS5saW5rTGFiZWwgPSBzZWxlY3Rpb24uc3RyaW5nOworICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uLnN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNTdHJpbmcgKmxvb2t1cFRleHQgPSBE
aWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25z
KTsKKyAgICBpZiAoIWxvb2t1cFRleHQgfHwgIWxvb2t1cFRleHQubGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gIiI7CisKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudFNlbGVjdGlv
bjpzZWxlY3Rpb25dOworICAgIHJldHVybiBsb29rdXBUZXh0OworfQorCitzdGF0aWMgTlNSZWN0
IHJlY3RJblZpZXdTcGFjZUZvclJlY3RJbkxheW91dFNwYWNlKFBERkxheWVyQ29udHJvbGxlciog
cGRmTGF5ZXJDb250cm9sbGVyLCBOU1JlY3QgbGF5b3V0U3BhY2VSZWN0KQoreworICAgIENHUmVj
dCBuZXdSZWN0ID0gTlNSZWN0VG9DR1JlY3QobGF5b3V0U3BhY2VSZWN0KTsKKyAgICBDR0Zsb2F0
IHNjYWxlRmFjdG9yID0gcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTY2FsZUZhY3RvcjsKKyAg
ICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IHBkZkxheWVyQ29udHJvbGxlci5zY3JvbGxQb3NpdGlv
bjsKKworICAgIHNjcm9sbE9mZnNldC55ID0gcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTaXpl
UmVzcGVjdGluZ1pvb20uaGVpZ2h0IC0gTlNSZWN0VG9DR1JlY3QocGRmTGF5ZXJDb250cm9sbGVy
LmZyYW1lKS5zaXplLmhlaWdodCAtIHNjcm9sbE9mZnNldC55OworCisgICAgbmV3UmVjdC5vcmln
aW4ueCAqPSBzY2FsZUZhY3RvcjsKKyAgICBuZXdSZWN0Lm9yaWdpbi55ICo9IHNjYWxlRmFjdG9y
OworICAgIG5ld1JlY3Quc2l6ZS53aWR0aCAqPSBzY2FsZUZhY3RvcjsKKyAgICBuZXdSZWN0LnNp
emUuaGVpZ2h0ICo9IHNjYWxlRmFjdG9yOworCisgICAgbmV3UmVjdC5vcmlnaW4ueCAtPSBzY3Jv
bGxPZmZzZXQueDsKKyAgICBuZXdSZWN0Lm9yaWdpbi55IC09IHNjcm9sbE9mZnNldC55OworCisg
ICAgcmV0dXJuIE5TUmVjdEZyb21DR1JlY3QobmV3UmVjdCk7Cit9CisKK1dlYkNvcmU6OkZsb2F0
UmVjdCBQREZQbHVnaW46OnJlY3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAq
c2VsZWN0aW9uKSBjb25zdAoreworICAgIFBERlBhZ2UgKmN1cnJlbnRQYWdlID0gbmlsOworICAg
IE5TQXJyYXkqIHBhZ2VzID0gc2VsZWN0aW9uLnBhZ2VzOworICAgIGlmIChwYWdlcy5jb3VudCkK
KyAgICAgICAgY3VycmVudFBhZ2UgPSAoUERGUGFnZSAqKVtwYWdlcyBvYmplY3RBdEluZGV4OjBd
OworCisgICAgaWYgKCFjdXJyZW50UGFnZSkKKyAgICAgICAgY3VycmVudFBhZ2UgPSBbbV9wZGZM
YXllckNvbnRyb2xsZXIgY3VycmVudFBhZ2VdOworICAgIAorICAgIE5TUmVjdCByZWN0SW5QYWdl
U3BhY2UgPSBbc2VsZWN0aW9uIGJvdW5kc0ZvclBhZ2U6Y3VycmVudFBhZ2VdOworICAgIE5TUmVj
dCByZWN0SW5MYXlvdXRTcGFjZSA9IFtbbV9wZGZMYXllckNvbnRyb2xsZXIgbGF5b3V0XSBjb252
ZXJ0UmVjdDpyZWN0SW5QYWdlU3BhY2UgZnJvbVBhZ2U6Y3VycmVudFBhZ2UgZm9yU2NhbGVGYWN0
b3I6MS4wXTsKKyAgICBOU1JlY3QgcmVjdEluVmlldyA9IHJlY3RJblZpZXdTcGFjZUZvclJlY3RJ
bkxheW91dFNwYWNlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCByZWN0SW5MYXlvdXRTcGFj
ZSk7CisKKyAgICByZWN0SW5WaWV3Lm9yaWdpbiA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZp
ZXcoSW50UG9pbnQocmVjdEluVmlldy5vcmlnaW4pKTsKKworICAgIHJldHVybiBXZWJDb3JlOjpG
bG9hdFJlY3QocmVjdEluVmlldyk7Cit9CisKK0NHRmxvYXQgUERGUGx1Z2luOjpzY2FsZUZhY3Rv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2Nh
bGVGYWN0b3JdOworfQorCit2b2lkIFBERlBsdWdpbjo6cGVyZm9ybVdlYlNlYXJjaChOU1N0cmlu
ZyAqc3RyaW5nKQoreworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZWFyY2hUaGVXZWIoc3RyaW5nKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpw
ZXJmb3JtU3BvdGxpZ2h0U2VhcmNoKE5TU3RyaW5nICpzdHJpbmcpCit7CisgICAgd2ViRnJhbWUo
KS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlYXJjaFdpdGhTcG90bGln
aHQoc3RyaW5nKSk7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0
IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIFBERkRpc3BsYXlNb2RlIGRpc3BsYXlNb2Rl
ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGRpc3BsYXlNb2RlXTsKKworICAgIGlmIChkaXNwbGF5
TW9kZSA9PSBrUERGRGlzcGxheVNpbmdsZVBhZ2VDb250aW51b3VzIHx8IGRpc3BsYXlNb2RlID09
IGtQREZEaXNwbGF5VHdvVXBDb250aW51b3VzKQorICAgICAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKKworICAgIE5TVUludGVnZXIg
Y3VycmVudFBhZ2VJbmRleCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZUluZGV4
XTsKKyAgICBib29sIGluRmlyc3RQYWdlID0gIWN1cnJlbnRQYWdlSW5kZXg7CisgICAgYm9vbCBp
bkxhc3RQYWdlID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGxhc3RQYWdlSW5kZXhdID09IGN1cnJl
bnRQYWdlSW5kZXg7CisKKyAgICBib29sIGF0U2Nyb2xsVG9wID0gIXNjcm9sbFBvc2l0aW9uKCku
eSgpOworICAgIGJvb2wgYXRTY3JvbGxCb3R0b20gPSBzY3JvbGxQb3NpdGlvbigpLnkoKSA9PSBt
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7CisKKyAgICBib29sIGluTW9tZW50dW1TY3JvbGwg
PSBldmVudC5tb21lbnR1bVBoYXNlKCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VOb25lOworCisg
ICAgaW50IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gZGVmYXVsdFNjcm9s
bE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwOworCisgICAgLy8gSW1wcmVjaXNlIGlucHV0
IGRldmljZXMgc2hvdWxkIGhhdmUgYSBsb3dlciB0aHJlc2hvbGQgc28gdGhhdCAiY2xpY2t5IiBz
Y3JvbGwgd2hlZWxzIGNhbiBmbGlwIHBhZ2VzLgorICAgIGlmICghZXZlbnQuaGFzUHJlY2lzZVNj
cm9sbGluZ0RlbHRhcygpKQorICAgICAgICBzY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdl
RmxpcCA9IDA7CisKKyAgICBpZiAoYXRTY3JvbGxCb3R0b20gJiYgIWluTGFzdFBhZ2UgJiYgZXZl
bnQuZGVsdGEoKS5oZWlnaHQoKSA8IDApIHsKKyAgICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVp
Z2h0KCkgPD0gLXNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1vbWVu
dHVtU2Nyb2xsKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGdvdG9OZXh0UGFn
ZV07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdFNjcm9sbFRvcCAm
JiAhaW5GaXJzdFBhZ2UgJiYgZXZlbnQuZGVsdGEoKS5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAg
aWYgKGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPj0gc2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9y
UGFnZUZsaXAgJiYgIWluTW9tZW50dW1TY3JvbGwpIHsKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvUHJldmlv
dXNQYWdlXTsKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybShldmVudCkpOworfQorCitO
U0RhdGEgKlBERlBsdWdpbjo6bGl2ZURhdGEoKSBjb25zdAoreworICAgIGlmIChtX2FjdGl2ZUFu
bm90YXRpb24pCisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+Y29tbWl0KCk7CisKKyAgICAv
LyBTYXZlIGRhdGEgc3RyYWlnaHQgZnJvbSB0aGUgcmVzb3VyY2UgaW5zdGVhZCBvZiBQREZLaXQg
aWYgdGhlIGRvY3VtZW50IGlzCisgICAgLy8gdW50b3VjaGVkIGJ5IHRoZSB1c2VyLCBzbyB0aGF0
IFBERnMgd2hpY2ggUERGS2l0IGNhbid0IGRpc3BsYXkgd2lsbCBzdGlsbCBiZSBkb3dubG9hZGFi
bGUuCisgICAgaWYgKG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKQorICAgICAgICByZXR1cm4gW21f
cGRmRG9jdW1lbnQgZGF0YVJlcHJlc2VudGF0aW9uXTsKKyAgICAKKyAgICByZXR1cm4gcmF3RGF0
YSgpOworfQorCitOU09iamVjdCAqUERGUGx1Z2luOjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNv
bnRyb2xsZXJEZXRhaWxzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERkxheWVyQ29udHJvbGxlckRldGFpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2EzNTAyMmI5MzVlMjVkYjA1YWFlZWQwMGU5NWY1MDVhNzAxZmNhOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlckRldGFpbHMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8UERGS2l0L1BE
RktpdC5oPgotCi1AY2xhc3MgQ1BSZWFkaW5nTW9kZWw7Ci1AY2xhc3MgUERGVmlld0xheW91dDsK
LQotQHByb3RvY29sIFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KLQotLSAo
dm9pZCl1cGRhdGVTY3JvbGxQb3NpdGlvbjooQ0dQb2ludCluZXdQb3NpdGlvbjsKLS0gKHZvaWQp
d3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNBcnJh
eSAqKXR5cGVzOwotLSAodm9pZClzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6KE5T
QXR0cmlidXRlZFN0cmluZyAqKXN0cmluZyBhdFBvaW50OihDR1BvaW50KXBvaW50OwotLSAodm9p
ZClwZXJmb3JtV2ViU2VhcmNoOihOU1N0cmluZyAqKXN0cmluZzsKLS0gKHZvaWQpcGVyZm9ybVNw
b3RsaWdodFNlYXJjaDooTlNTdHJpbmcgKilzdHJpbmc7Ci0tICh2b2lkKW9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb247Ci0tICh2b2lkKXNhdmVUb1BERjsKLQotLSAodm9pZClwZGZMYXllckNvbnRy
b2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VB
Y3RpdmVBbm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKLS0gKHZvaWQpcGRm
TGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIg
Y2xpY2tlZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybDsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQ29u
dGVudFNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yOwotLSAodm9pZClwZGZMYXllckNv
bnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFu
Z2VEaXNwbGF5TW9kZTooaW50KW1vZGU7Ci0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERG
TGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZVNlbGVjdGlvbjoo
UERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgUERGTGF5ZXJD
b250cm9sbGVyIDogTlNPYmplY3QKLUBlbmQKLQotQGludGVyZmFjZSBQREZMYXllckNvbnRyb2xs
ZXIgKERldGFpbHMpCi0KLUBwcm9wZXJ0eShyZXRhaW4pIENBTGF5ZXIgKnBhcmVudExheWVyOwot
QHByb3BlcnR5KHJldGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OwotQHByb3BlcnR5KHJldGFp
bikgaWQ8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRlOwotCi0tICh2b2lkKXNl
dEZyYW1lU2l6ZTooQ0dTaXplKXNpemU7Ci0KLS0gKFBERkRpc3BsYXlNb2RlKWRpc3BsYXlNb2Rl
OwotLSAodm9pZClzZXREaXNwbGF5TW9kZTooUERGRGlzcGxheU1vZGUpbW9kZTsKLS0gKHZvaWQp
c2V0RGlzcGxheXNQYWdlQnJlYWtzOihCT09MKXBhZ2VCcmVha3M7Ci0KLS0gKENHRmxvYXQpY29u
dGVudFNjYWxlRmFjdG9yOwotLSAodm9pZClzZXRDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQp
c2NhbGVGYWN0b3I7Ci0KLS0gKENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3I7Ci0tICh2b2lkKXNl
dERldmljZVNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yOwotCi0tIChDR1NpemUpY29u
dGVudFNpemU7Ci0tIChDR1NpemUpY29udGVudFNpemVSZXNwZWN0aW5nWm9vbTsKLQotLSAodm9p
ZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7Ci0KLS0gKHZvaWQpbWFn
bmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0KW1hZ25pZmljYXRpb24gYXRQb2ludDooQ0dQ
b2ludClwb2ludCBpbW1lZGlhdGVseTooQk9PTClpbW1lZGlhdGVseTsKLQotLSAoQ0dQb2ludClz
Y3JvbGxQb3NpdGlvbjsKLS0gKHZvaWQpc2V0U2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9z
aXRpb247Ci0tICh2b2lkKXNjcm9sbFdpdGhEZWx0YTooQ0dTaXplKWRlbHRhOwotCi0tICh2b2lk
KW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNF
dmVudCAqKWV2ZW50OwotLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2
b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2
ZW50ICopZXZlbnQ7Ci0tICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50OwotLSAo
dm9pZCltb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50OwotCi0tIChOU01lbnUgKiltZW51Rm9y
RXZlbnQ6KE5TRXZlbnQgKilldmVudDsKLQotLSAoTlNBcnJheSAqKWZpbmRTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpaXNDYXNlU2Vuc2l0aXZlIGhpZ2hsaWdo
dE1hdGNoZXM6KEJPT0wpc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlczsKLQotLSAoUERGU2VsZWN0aW9u
ICopY3VycmVudFNlbGVjdGlvbjsKLS0gKHZvaWQpc2V0Q3VycmVudFNlbGVjdGlvbjooUERGU2Vs
ZWN0aW9uICopc2VsZWN0aW9uOwotLSAoUERGU2VsZWN0aW9uICopc2VhcmNoU2VsZWN0aW9uOwot
LSAodm9pZClzZXRTZWFyY2hTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKLS0g
KHZvaWQpZ290b1NlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwotLSAoUERGU2Vs
ZWN0aW9uICopZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6KENHUG9pbnQpcG9pbnQ7Ci0tIChO
U0FycmF5ICopcmVjdHNGb3JTZWxlY3Rpb25JbkxheW91dFNwYWNlOihQREZTZWxlY3Rpb24gKilz
ZWxlY3Rpb247Ci0tIChOU0FycmF5ICopcmVjdHNGb3JBbm5vdGF0aW9uSW5MYXlvdXRTcGFjZToo
UERGQW5ub3RhdGlvbiAqKWFubm90YXRpb247Ci0tIChQREZWaWV3TGF5b3V0ICopbGF5b3V0Owot
LSAoTlNSZWN0KWZyYW1lOwotCi0tIChQREZQYWdlICopY3VycmVudFBhZ2U7Ci0tIChOU1VJbnRl
Z2VyKWxhc3RQYWdlSW5kZXg7Ci0tIChOU1VJbnRlZ2VyKWN1cnJlbnRQYWdlSW5kZXg7Ci0tICh2
b2lkKWdvdG9OZXh0UGFnZTsKLS0gKHZvaWQpZ290b1ByZXZpb3VzUGFnZTsKLQotLSAodm9pZClj
b3B5U2VsZWN0aW9uOwotLSAodm9pZClzZWxlY3RBbGw7Ci0KLS0gKGJvb2wpa2V5RG93bjooTlNF
dmVudCAqKWV2ZW50OwotCi0tICh2b2lkKXNldEhVREVuYWJsZWQ6KEJPT0wpZW5hYmxlZDsKLS0g
KEJPT0wpaHVkRW5hYmxlZDsKLQotLSAoQ0dSZWN0KWJvdW5kc0ZvckFubm90YXRpb246KFBERkFu
bm90YXRpb24gKilhbm5vdGF0aW9uOwotLSAodm9pZClhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOihC
T09MKXByZXZpb3VzOwotCi0tICh2b2lkKWF0dGVtcHRUb1VubG9ja1dpdGhQYXNzd29yZDooTlNT
dHJpbmcgKilwYXNzd29yZDsKLQotLSAodm9pZClzZWFyY2hJbkRpY3Rpb25hcnlXaXRoU2VsZWN0
aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0KLS8vIEFjY2Vzc2liaWxpdHkKLQotLSAo
Q1BSZWFkaW5nTW9kZWwgKilyZWFkaW5nTW9kZWw7Ci0tIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNl
ZFVJRWxlbWVudDsKLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXM7Ci0t
IChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmluZyAqKWF0dHJp
YnV0ZTsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZhbHVlOihpZCl2YWx1ZSBmb3JBdHRyaWJ1
dGU6KE5TU3RyaW5nICopYXR0cmlidXRlOwotLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlQYXJh
bWV0ZXJpemVkQXR0cmlidXRlTmFtZXM7Ci0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlSb2xl
QXR0cmlidXRlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0
cmlidXRlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGU7Ci0tIChC
T09MKWFjY2Vzc2liaWxpdHlJc1ZhbHVlQXR0cmlidXRlU2V0dGFibGU7Ci0tIChOU1N0cmluZyAq
KWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxp
dHlJc1NlbGVjdGVkVGV4dEF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNWYWx1ZSAqKWFjY2Vzc2li
aWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZTsKLS0gKE5TTnVtYmVyICopYWNjZXNzaWJp
bGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZTsKLS0gKEJPT0wpYWNjZXNzaWJpbGl0eUlz
TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlU2V0dGFibGU7Ci0tIChOU1ZhbHVlICopYWNjZXNz
aWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZTsKLS0gKEJPT0wpYWNjZXNzaWJp
bGl0eUlzVmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlU2V0dGFibGU7Ci0tIChOU051bWJl
ciAqKWFjY2Vzc2liaWxpdHlMaW5lRm9ySW5kZXhBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBh
cmFtZXRlcjsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5UmFuZ2VGb3JMaW5lQXR0cmlidXRl
Rm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7Ci0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlT
dHJpbmdGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOwotLSAoTlNW
YWx1ZSAqKWFjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjoo
aWQpcGFyYW1ldGVyOwotCi1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERkxheWVyQ29udHJvbGxlclNQSS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYjcxNjVmYzIyYzQ4MTI5YzI2MDUwMzkwOTlhNGZiMWVhZTEzYzY5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRy
b2xsZXJTUEkuaApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UERGTGF5ZXJDb250cm9sbGVyU1BJX2gKKyNkZWZpbmUgUERGTGF5ZXJDb250cm9sbGVyU1BJX2gK
KworI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFBE
RkxheWVyQ29udHJvbGxlclNQSS5oIgorCisjZWxzZQorCisjaW1wb3J0IDxQREZLaXQvUERGS2l0
Lmg+CisKK0BjbGFzcyBDUFJlYWRpbmdNb2RlbDsKK0BjbGFzcyBQREZWaWV3TGF5b3V0OworCitA
cHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgorCitAb3B0aW9u
YWwKKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBk
ZkxheWVyQ29udHJvbGxlciBzY3JvbGxUb1BvaW50OihDR1BvaW50KW5ld1Bvc2l0aW9uOworLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29u
dHJvbGxlciBpbnZhbGlkYXRlUmVjdDooQ0dSZWN0KXJlY3Q7CistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlckludmFsaWRhdGVIVUQ6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJv
bGxlcjsKKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJab29tSW46KFBERkxheWVyQ29udHJv
bGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyWm9v
bU91dDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyOworCistICh2b2lk
KXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyIGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9u
OworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxh
eWVyQ29udHJvbGxlciBkaWRDbGlja0xpbmtXaXRoVVJMOihOU1VSTCAqKXVybDsKKy0gKHZvaWQp
cGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xs
ZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGludCltb2RlOworLSAodm9pZClwZGZMYXllckNvbnRy
b2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VT
ZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKworLSAodm9pZClwZGZMYXllckNv
bnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjb3B5SXRl
bXM6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsKKy0gKHZvaWQp
cGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xs
ZXIgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgcGVyZm9ybVdlYlNl
YXJjaEZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lkKXBkZkxheWVyQ29udHJv
bGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHBlcmZvcm1TcG90
bGlnaHRTZWFyY2hGb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9pZClwZGZMYXll
ckNvbnRyb2xsZXJTYXZlVG9QREY6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJv
bGxlcjsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlv
bjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyOworCistIChOU0NvbG9y
U3BhY2UqKXBkZkxheWVyQ29udHJvbGxlckNvbG9yU3BhY2U6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlcjsKKworQGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJv
bGxlciA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyICgp
CisKK0Bwcm9wZXJ0eSAocmV0YWluKSBQREZEb2N1bWVudCAqZG9jdW1lbnQ7CitAcHJvcGVydHkg
KGFzc2lnbikgaWQ8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRlOworQHByb3Bl
cnR5IChyZXRhaW4pIE5TQXJyYXkgKnNlYXJjaE1hdGNoZXM7CisKKy0gKHZvaWQpc2V0RnJhbWVT
aXplOihDR1NpemUpc2l6ZTsKKworLSAodm9pZClzZXREaXNwbGF5TW9kZTooaW50KW1vZGU7Cist
IChpbnQpZGlzcGxheU1vZGU7CistIChpbnQpcmVhbERpc3BsYXlNb2RlOworCistIChDR1NpemUp
Y29udGVudFNpemU7CistIChDR1NpemUpY29udGVudFNpemVSZXNwZWN0aW5nWm9vbTsKKworLSAo
Q0dGbG9hdCljb250ZW50U2NhbGVGYWN0b3I7CisKKy0gKFBERlZpZXdMYXlvdXQgKilsYXlvdXQ7
CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7CistICh2b2lk
KWRyYXdIVURJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OworCistICh2b2lkKW1vdXNl
RG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7
CistICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50OworCistIChCT09MKW1vdXNl
RG93bjooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5kczooQ0dSZWN0KWJvdW5kczsKKy0g
KEJPT0wpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5kczooQ0dSZWN0KWJv
dW5kczsKKy0gKEJPT0wpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQgaW5IVURXaXRoQm91
bmRzOihDR1JlY3QpYm91bmRzOworCistIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQg
KilldmVudDsKKworLSAoTlNBcnJheSAqKXBhZ2VSZWN0czsKKworLSAodm9pZClzZXRWaXNpYmxl
UmVjdDooQ0dSZWN0KXZpc2libGVSZWN0OworCistICh2b2lkKWdvdG9TZWxlY3Rpb246KFBERlNl
bGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKHZvaWQpZ290b0Rlc3RpbmF0aW9uOihQREZEZXN0aW5h
dGlvbiAqKWRlc3RpbmF0aW9uOworLSAodm9pZClnb3RvUmVjdDooQ0dSZWN0KXJlY3Qgb25QYWdl
OihQREZQYWdlICopcGFnZTsKKworLSAoUERGU2VsZWN0aW9uICopY3VycmVudFNlbGVjdGlvbjsK
Ky0gKHZvaWQpc2V0Q3VycmVudFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwor
CistICh2b2lkKXNlYXJjaEluRGljdGlvbmFyeVdpdGhTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAq
KXNlbGVjdGlvbjsKKy0gKFBERlNlbGVjdGlvbiAqKWdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50
OihDR1BvaW50KXBvaW50OworLSAoTlNBcnJheSAqKXJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRT
cGFjZTooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOworCistIChOU0FycmF5ICopaGlnaGxpZ2h0
czsKKy0gKHZvaWQpc2V0SGlnaGxpZ2h0czooTlNBcnJheSopaGlnaGxpZ2h0czsKKworLSAoUERG
U2VsZWN0aW9uICopc2VhcmNoU2VsZWN0aW9uOworLSAoTlNBcnJheSAqKXNlYXJjaE1hdGNoZXM7
CistICh2b2lkKXNldFNlYXJjaFNlbGVjdGlvbjooUERGU2VsZWN0aW9uKilzZWxlY3Rpb247Cist
IChOU0FycmF5ICopZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZToo
Qk9PTClpc0Nhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hlczooQk9PTClzaG91bGRIaWdobGln
aHRNYXRjaGVzOworCistICh2b2lkKWNvcHlTZWxlY3Rpb247CistICh2b2lkKXNlbGVjdEFsbDsK
KworLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOworLSAoTlNVSW50ZWdlciljdXJyZW50UGFnZUlu
ZGV4OworCistIChCT09MKWRvY3VtZW50SXNMb2NrZWQ7CistICh2b2lkKWF0dGVtcHRUb1VubG9j
a1dpdGhQYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZDsKKworLSAoQ0dSZWN0KWJvdW5kc0Zv
ckFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOworLSAodm9pZClhY3RpdmF0
ZU5leHRBbm5vdGF0aW9uOihCT09MKXByZXZpb3VzOworCistIChOU1JlY3QpZnJhbWU7CisKKy8v
IEFjY2Vzc2liaWxpdHkKKworLSAoQ1BSZWFkaW5nTW9kZWwgKilyZWFkaW5nTW9kZWw7CistIChp
ZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudDsKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXM7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRh
YmxlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZhbHVl
OihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlOworLSAoTlNBcnJh
eSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXM7CistIChOU1N0cmlu
ZyAqKWFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5
VmFsdWVBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc1ZhbHVlQXR0cmlidXRlU2V0
dGFibGU7CistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGU7
CistIChCT09MKWFjY2Vzc2liaWxpdHlJc1NlbGVjdGVkVGV4dEF0dHJpYnV0ZVNldHRhYmxlOwor
LSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZTsKKy0g
KE5TTnVtYmVyICopYWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZTsKKy0g
KEJPT0wpYWNjZXNzaWJpbGl0eUlzTnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlU2V0dGFibGU7
CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0
ZTsKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzVmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRl
U2V0dGFibGU7CistIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlMaW5lRm9ySW5kZXhBdHRyaWJ1
dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKKy0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5
UmFuZ2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7CistIChOU1N0
cmluZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjoo
aWQpcGFyYW1ldGVyOworLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZUF0
dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworCitAZW5kCisKKyNlbmRpZgorCisj
ZW5kaWYgLy8gUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDRjNTI1NmQ1YTFjYWNlZjIy
OTg1ZTU0NmI4MTkxYTA0MWZhNjk4YTMuLjNkM2Q4N2Q1OGY1ZWRkYjcyMzNiZWExYWRiNDZiMDkx
MjA3NDE0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4uaApAQCAtMjYsMTQgKzI2LDIwIEBACiAjaWZuZGVmIFBERlBsdWdpbl9oCiAj
ZGVmaW5lIFBERlBsdWdpbl9oCiAKLSNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKyNpbmNsdWRl
ICJQREZLaXRJbXBvcnRzLmgiCisKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgVVNFKERF
UFJFQ0FURURfUERGX1BMVUdJTikKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRQREZQbHVnaW4uaCIK
KworI2Vsc2UKIAogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJh
bnNmb3JtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFx
dWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKQEAgLTY2LDcgKzcyLDcgQEAgY2xhc3MgUERGUGx1
Z2luUGFzc3dvcmRGaWVsZDsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsKIAot
Y2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYSB7CitjbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1Z2luIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7CiAg
ICAgflBERlBsdWdpbigpOwpAQCAtNzQsMTQgKzgwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
V2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVnaW5JbmZvKCk7CiAKICAgICBXZWJDb3JlOjpJbnRTaXpl
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBmbG9hdCBzY2FsZUZhY3Rvcigp
IGNvbnN0OwogCiAgICAgdm9pZCBkaWRNdXRhdGVQREZEb2N1bWVudCgpIHsgbV9wZGZEb2N1bWVu
dFdhc011dGF0ZWQgPSB0cnVlOyB9CiAKLSAgICB2b2lkIHBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKICAgICB2b2lkIHNldEFjdGl2ZUFubm90
YXRpb24oUERGQW5ub3RhdGlvbiAqKTsKLSAgICAKLSAgICB1c2luZyBTY3JvbGxhYmxlQXJlYTo6
bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkOwotICAgIHZvaWQgbm90aWZ5Q29udGVudFNjYWxl
RmFjdG9yQ2hhbmdlZChDR0Zsb2F0IHNjYWxlRmFjdG9yKTsKKwogICAgIHZvaWQgbm90aWZ5RGlz
cGxheU1vZGVDaGFuZ2VkKGludCk7CiAKICAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQo
UERGU2VsZWN0aW9uICopOwpAQCAtOTMsMjEgKzk3LDM2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNo
b3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQ
b2ludCk7CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwogICAgIHZvaWQg
cGVyZm9ybVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAqKTsKKyAgICB2b2lkIGludmFsaWRhdGVQ
REZSZWN0KFdlYkNvcmU6OkludFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0ZUhVRCgpOworICAg
IHZvaWQgc2Nyb2xsVG9Qb2ludChXZWJDb3JlOjpJbnRQb2ludCk7CisKKyAgICB2b2lkIHpvb21J
bigpOworICAgIHZvaWQgem9vbU91dCgpOwogCiAgICAgdm9pZCBmb2N1c05leHRBbm5vdGF0aW9u
KCk7CiAgICAgdm9pZCBmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpOwogCiAgICAgdm9pZCBhdHRl
bXB0VG9VbmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1Bs
dWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KSBjb25zdDsKKworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGNvbnN0OworCiAgICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0Owog
ICAgIAogICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogCiAgICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgUERGU2VsZWN0aW9uICoqLCBO
U0RpY3Rpb25hcnkgKiopIGNvbnN0OwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB2aWV3UmVjdEZv
clNlbGVjdGlvbihQREZTZWxlY3Rpb24gKikgY29uc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAqKSBjb25zdDsKKworICAg
IFBERkxheWVyQ29udHJvbGxlciAqcGRmTGF5ZXJDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4g
bV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICBXZWJGcmFtZSogd2ViRnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKLSAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yKCkgY29u
c3Q7CisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IFBERlBsdWdpbihXZWJGcmFtZSopOwpAQCAtMTE1LDE1ICsxMzQsMTUgQEAgcHJpdmF0ZToKICAg
ICAvLyBQbHVnaW4gZnVuY3Rpb25zLgogICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKGNvbnN0
IFBhcmFtZXRlcnMmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKSBvdmVy
cmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NuYXBz
aG90dGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBvdmVycmlk
ZSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gc25hcHNob3QoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsdWdp
bkxheWVyKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXll
cigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUcmFu
c3BhcmVudCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHdh
bnRzV2hlZWxFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIHdhbnRzV2hlZWxFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVn
aW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkgb3Zl
cnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkgb3Zl
cnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRf
dCByZXF1ZXN0SUQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZhaWwodWlu
dDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJpZGU7CkBAIC0xMzgsMzAg
KzE1NywzMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZh
aWwoYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVN
b3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpIG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGhh
bmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgTlBP
YmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlk
ZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdl
ZChib29sKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2luZG93QW5kVmlld0ZyYW1l
c0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3Jk
aW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5h
dGVzKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJpbGl0eUNoYW5n
ZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQp
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVy
SG9zdGluZ01vZGUpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLmdldCgpOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsg
fQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkg
b3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmIGZvcm1W
YWx1ZSkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
U2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJp
dHkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Ny
b2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSkgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGxp
dmVSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJvbm91
c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
dmlydHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CkBAIC0xODAsNTYgKzIwMSwy
MCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd1NjcmlwdGluZygpIG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2
aWdhdGlvbkZyb21EcmFncygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQWx3YXlzQXV0b1N0YXJ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXM7IH0KLSAgICB2aXJ0
dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpT
Y3JvbGxiYXIqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBj
b250ZW50c1NpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsg
fQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVlLCBTY3JvbGxBbmltYXRvck1hYyB3
aWxsIGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdhaXRpbmcgZm9yIGEgZ29vZCB0aW1l
IHRvIGFuaW1hdGUuCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhclN0eWxlQ2hhbmdlZChXZWJD
b3JlOjpTY3JvbGxiYXJTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxiYXJSZWN0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9s
bGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
V2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBvaW50
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlc1Njcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1h
bmNlVGVzdGluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBjYW5DcmVhdGVU
cmFuc2llbnRQYWludGluZ1NuYXBzaG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIC8vIFBERlBsdWdpbiBmdW5jdGlvbnMuCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxi
YXJzKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJh
cihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0gICAgdm9pZCBkZXN0cm95U2Nyb2xs
YmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2b2lkIHBkZkRvY3VtZW50
RGlkTG9hZCgpOwogICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7CiAgICAgdm9pZCBjb21w
dXRlUGFnZUJveGVzKCk7CiAgICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOworICAgIHZvaWQgZGlk
Q2FsY3VsYXRlU2l6ZXMoKTsKICAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CiAK
ICAgICBOU0V2ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
Jik7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252
ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgCi0gICAgYm9vbCBzdXBwb3J0c0Zvcm1z
KCk7Ci0gICAgYm9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpOwogCi0gICAgdm9pZCB1cGRhdGVQYWdl
QW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7CisgICAgYm9vbCBzdXBwb3J0c0Zvcm1zKCk7CisgICAg
Ym9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0OwogCiAgICAgdm9pZCBjcmVhdGVQYXNzd29y
ZEVudHJ5Rm9ybSgpOwogCkBAIC0yNDIsNDkgKzIyNyw2OCBAQCBwcml2YXRlOgogICAgIE5TRGF0
YSAqbGl2ZURhdGEoKSBjb25zdDsKICAgICBOU0RhdGEgKnJhd0RhdGEoKSBjb25zdCB7IHJldHVy
biAoTlNEYXRhICopbV9kYXRhLmdldCgpOyB9CiAKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLSAgICBlbnVtIFVwZGF0ZUN1cnNvck1vZGUgewot
ICAgICAgICBVcGRhdGVJZk5lZWRlZCwKLSAgICAgICAgRm9yY2VVcGRhdGUKKyAgICBlbnVtIGNs
YXNzIFVwZGF0ZUN1cnNvciB7CisgICAgICAgIElmTmVlZGVkLAorICAgICAgICBGb3JjZQogICAg
IH07CiAKLSAgICBlbnVtIEhpdFRlc3RSZXN1bHQgeworICAgIGVudW0gY2xhc3MgSGl0VGVzdFJl
c3VsdCB7CiAgICAgICAgIE5vbmUsCi0gICAgICAgIFRleHQKKyAgICAgICAgVGV4dCwKKyAgICAg
ICAgSFVECiAgICAgfTsKIAotICAgIHZvaWQgdXBkYXRlQ3Vyc29yKGNvbnN0IFdlYk1vdXNlRXZl
bnQmLCBVcGRhdGVDdXJzb3JNb2RlID0gVXBkYXRlSWZOZWVkZWQpOworICAgIHZvaWQgdXBkYXRl
Q3Vyc29yKGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBVcGRhdGVDdXJzb3IgPSBVcGRhdGVDdXJzb3I6
OklmTmVlZGVkKTsKIAogICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYp
OwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAKICAgICB2b2lkIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7CiAKLSAgICAv
LyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQg
c2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxp
bmcuCiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOwogICAgIGNvbnN0IFBsdWdpblZpZXcq
IHBsdWdpblZpZXcoKSBjb25zdDsKIAotICAgIFdlYkZyYW1lKiBtX2ZyYW1lOworICAgIGNsYXNz
IEhVRCA6IHB1YmxpYyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIGV4cGxpY2l0IEhVRChQREZQbHVnaW4mIHBsdWdpbik7CisgICAgICAgIHZpcnR1
YWwgfkhVRCgpOworCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgICAgICBib29sIGNv
bnRhaW5zUG9pbnRJblJvb3RWaWV3KFdlYkNvcmU6OkludFBvaW50KTsKIAotICAgIGJvb2wgbV9p
c1Bvc3RTY3JpcHQ7Ci0gICAgYm9vbCBtX3BkZkRvY3VtZW50V2FzTXV0YXRlZDsKKyAgICAgICAg
Ly8gRklYTUU6IEVudW1zLgorICAgICAgICB2b2lkIHNldFZpc2libGUoYm9vbCB2aXNpYmxlLCBi
b29sIGFuaW1hdGUpOwogCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxN
b3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRl
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVh
bCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0
IGZyYW1lSW5Sb290VmlldygpIGNvbnN0OworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1l
SW5QREZWaWV3KCkgY29uc3Q7CisKKyAgICAgICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07
CisgICAgICAgIFJlZjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4gbV9vdmVybGF5OworICAgICAgICBQ
REZQbHVnaW4mIG1fcGx1Z2luOworICAgIH07CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsKKwor
ICAgIGJvb2wgbV9pc1Bvc3RTY3JpcHQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wZGZEb2N1bWVu
dFdhc011dGF0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2luZ0NvbnRpbnVvdXNNb2RlIHsg
dHJ1ZSB9OwogCi0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY29udGFpbmVyTGF5ZXI7Ci0gICAg
UmV0YWluUHRyPENBTGF5ZXI+IG1fY29udGVudExheWVyOwotICAgIFJldGFpblB0cjxDQUxheWVy
PiBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92
ZXJ0aWNhbFNjcm9sbGJhckxheWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbENv
cm5lckxheWVyOwogICAgIFJldGFpblB0cjxQREZMYXllckNvbnRyb2xsZXI+IG1fcGRmTGF5ZXJD
b250cm9sbGVyOwogICAgIFJldGFpblB0cjxXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3Q+
IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKLSAgICAKKwogICAgIFJlZlB0cjxQREZQbHVnaW5Bbm5v
dGF0aW9uPiBtX2FjdGl2ZUFubm90YXRpb247CiAgICAgUmVmUHRyPFBERlBsdWdpblBhc3N3b3Jk
RmllbGQ+IG1fcGFzc3dvcmRGaWVsZDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gbV9h
bm5vdGF0aW9uQ29udGFpbmVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX3Bhc3N3
b3JkQ29udGFpbmVyOwogCiAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcm9vdFZpZXdU
b1BsdWdpblRyYW5zZm9ybTsKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9wbHVnaW5U
b1Jvb3RWaWV3VHJhbnNmb3JtOwogICAgIFdlYk1vdXNlRXZlbnQgbV9sYXN0TW91c2VFdmVudDsK
ICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGlu
YXRlczsKIApAQCAtMzA0LDExICszMDgsOSBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRk11
dGFibGVEYXRhUmVmPiBtX2RhdGE7CiAKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRm
RG9jdW1lbnQ7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOwogICAg
IFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVk
aW5nIGdhcHMuCiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxT
Y3JvbGxiYXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9s
bGJhcjsKKyAgICBIVUQgbV9IVUQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5k
ZXggMTczNDBkZTM2MzQ5NzI3OGEwZDg4ZGU0NWQ1YzZiOTM5NDlmZGNiNy4uNDRlZThkZDY5YmFh
Mzk2ZjkxNzE3ZTA0OWU3ZmQ3MjY0NWFiNWU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTI2LDEzICsyNiwxMiBAQAog
I2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKIAotI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhVVNFKERFUFJFQ0FU
RURfUERGX1BMVUdJTikKIAogI2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIkRh
dGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIlBERkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5o
IgotI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVy
RGV0YWlscy5oIgorI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQ
REZQbHVnaW5Bbm5vdGF0aW9uLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5QYXNzd29yZEZpZWxkLmgi
CiAjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCkBAIC02Miw2ICs2MSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckNBLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVu
dC5oPgpAQCAtNjksMzUgKzY5LDMyIEBACiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1Bhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGx1Z2luRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
U2Nyb2xsYmFyVGhlbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbXBvcnQg
PFdlYkNvcmUvVVVJRC5oPgotI2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIu
aD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBTZXQgb3ZlcmZsb3c6
IGhpZGRlbiBvbiB0aGUgYW5ub3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBz
Y3JvbGxlZCBvdXQgb2YgdmlldyBkb24ndCBzaG93Ci0vLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5
LiBXZSBjYW4ndCBhZGQgYW5ub3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ug
b3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUgYm9keQotLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGlu
Zy4KIHN0YXRpYyBjb25zdCBjaGFyKiBhbm5vdGF0aW9uU3R5bGUgPQotIiNhbm5vdGF0aW9uQ29u
dGFpbmVyIHsiCi0iICAgIG92ZXJmbG93OiBoaWRkZW47ICIKLSIgICAgcG9zaXRpb246IGFic29s
dXRlOyAiCi0iICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAiCisiYm9keSB7ICIKKyIgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiKDE0NiwgMTQ2LCAxNDYpICFpbXBvcnRhbnQ7IgorIn0gIgorIiNw
YXNzd29yZENvbnRhaW5lciB7IgorIiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsgIgorIiAgICAt
d2Via2l0LWJveC1hbGlnbjogY2VudGVyOyAiCisiICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRl
cjsgIgorIiAgICBwb3NpdGlvbjogZml4ZWQ7ICIKICIgICAgdG9wOiAwOyAiCiAiICAgIGxlZnQ6
IDA7ICIKICIgICAgcmlnaHQ6IDA7ICIKICIgICAgYm90dG9tOiAwOyAiCi0iICAgIGRpc3BsYXk6
IC13ZWJraXQtYm94OyAiCi0iICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7ICIKLSIgICAg
LXdlYmtpdC1ib3gtcGFjazogY2VudGVyOyAiCiAifSAiCiAiLmFubm90YXRpb24geyAiCiAiICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsgIgpAQCAtMTEyLDkgKzEwOSw3IEBAIHN0YXRpYyBjb25zdCBj
aGFyKiBhbm5vdGF0aW9uU3R5bGUgPQogIiAgICBtYXJnaW4tdG9wOiAxMDBweDsgIgogIn0gIjsK
IAotLy8gSW4gbm9uLWNvbnRpbnVvdXMgbW9kZXMsIGEgc2luZ2xlIHNjcm9sbCBldmVudCB3aXRo
IGEgbWFnbml0dWRlIG9mID49IDIwcHgKLS8vIHdpbGwganVtcCB0byB0aGUgbmV4dCBvciBwcmV2
aW91cyBwYWdlLCB0byBtYXRjaCBQREZLaXQgYmVoYXZpb3IuCi1zdGF0aWMgY29uc3QgaW50IGRl
ZmF1bHRTY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIwOworY29uc3QgZG91
YmxlIHpvb21CdXR0b25TY2FsZU11bHRpcGxpZXIgPSAxLjE4OTIwOwogCiBAaW50ZXJmYWNlIFdL
UERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCA6IE5TT2JqZWN0IHsKICAgICBQREZMYXllckNv
bnRyb2xsZXIgKl9wZGZMYXllckNvbnRyb2xsZXI7CkBAIC0yNzYsNDEgKzI3MSw2IEBAIHN0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0g
MjA7CiAKIEBlbmQKIAotCi1AaW50ZXJmYWNlIFdLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgOiBD
QUxheWVyIHsKLSAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKLX0KLQotQHByb3Bl
cnR5IChhc3NpZ24pIFdlYktpdDo6UERGUGx1Z2luKiBwZGZQbHVnaW47Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIKLQotQHN5bnRoZXNpemUgcGRm
UGx1Z2luPV9wZGZQbHVnaW47Ci0KLS0gKGlkKWluaXRXaXRoUERGUGx1Z2luOihXZWJLaXQ6OlBE
RlBsdWdpbiAqKXBsdWdpbgotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47Ci0gICAgCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3Ry
aW5nICopa2V5Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0
OihDR0NvbnRleHRSZWYpY3R4Ci17Ci0gICAgX3BkZlBsdWdpbi0+cGFpbnRDb250cm9sRm9yTGF5
ZXJJbkNvbnRleHQoc2VsZiwgY3R4KTsKLX0KLQotQGVuZAotCiBAaW50ZXJmYWNlIFdLUERGTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdDxQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZT4gewogICAgIFdlYktpdDo6UERGUGx1Z2luKiBfcGRmUGx1Z2luOwogfQpAQCAtMzMzLDQyICsy
OTMsNDIgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xk
Rm9yUGFnZUZsaXAgPSAyMDsKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAodm9pZCl1cGRhdGVT
Y3JvbGxQb3NpdGlvbjooQ0dQb2ludCluZXdQb3NpdGlvbgorLSAodm9pZClwZGZMYXllckNvbnRy
b2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBzY3JvbGxUb1Bv
aW50OihDR1BvaW50KW5ld1Bvc2l0aW9uCiB7Ci0gICAgX3BkZlBsdWdpbi0+bm90aWZ5U2Nyb2xs
UG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9uKSk7CisgICAgX3BkZlBsdWdpbi0+
c2Nyb2xsVG9Qb2ludChJbnRQb2ludChuZXdQb3NpdGlvbikpOwogfQogCi0tICh2b2lkKXdyaXRl
SXRlbXNUb1Bhc3RlYm9hcmQ6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0
eXBlcworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBk
ZkxheWVyQ29udHJvbGxlciBjb3B5SXRlbXM6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5T
QXJyYXkgKil0eXBlcwogewogICAgIF9wZGZQbHVnaW4tPndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQo
TlNHZW5lcmFsUGJvYXJkLCBpdGVtcywgdHlwZXMpOwogfQogCi0tICh2b2lkKXNob3dEZWZpbml0
aW9uRm9yQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9p
bnQ6KENHUG9pbnQpcG9pbnQKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNv
bnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVk
U3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2lu
dAogewogICAgIF9wZGZQbHVnaW4tPnNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhz
dHJpbmcsIHBvaW50KTsKIH0KIAotLSAodm9pZClwZXJmb3JtV2ViU2VhcmNoOihOU1N0cmluZyAq
KXN0cmluZworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtV2ViU2VhcmNoRm9yU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZwogewogICAgIF9wZGZQbHVnaW4tPnBlcmZvcm1XZWJTZWFyY2goc3RyaW5nKTsKIH0K
IAotLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZworLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29u
dHJvbGxlciBwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoRm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZwogewogICAgIF9wZGZQbHVnaW4tPnBlcmZvcm1TcG90bGlnaHRTZWFyY2goc3RyaW5nKTsKIH0K
IAotLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uCistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlck9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb246KFBERkxheWVyQ29udHJvbGxlciAqKXBk
ZkxheWVyQ29udHJvbGxlcgogewogICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGlj
YXRpb24oKTsKIH0KIAotLSAodm9pZClzYXZlVG9QREYKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyU2F2ZVRvUERGOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIKIHsK
ICAgICBfcGRmUGx1Z2luLT5zYXZlVG9QREYoKTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRy
b2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjbGlja2VkTGlu
a1dpdGhVUkw6KE5TVVJMICopdXJsCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENsaWNrTGlua1dpdGhVUkw6KE5T
VVJMICopdXJsCiB7CiAgICAgX3BkZlBsdWdpbi0+Y2xpY2tlZExpbmsodXJsKTsKIH0KQEAgLTM3
OCwxMSArMzM4LDYgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhy
ZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsKICAgICBfcGRmUGx1Z2luLT5zZXRBY3RpdmVBbm5vdGF0
aW9uKGFubm90YXRpb24pOwogfQogCi0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZh
Y3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcgotewotICAgIF9wZGZQbHVnaW4tPm5vdGlmeUNvbnRl
bnRTY2FsZUZhY3RvckNoYW5nZWQoc2NhbGVGYWN0b3IpOwotfQotCiAtICh2b2lkKXBkZkxheWVy
Q29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENo
YW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZQogewogICAgIF9wZGZQbHVnaW4tPm5vdGlmeURpc3Bs
YXlNb2RlQ2hhbmdlZChtb2RlKTsKQEAgLTM5Myw2ICszNDgsNTAgQEAgc3RhdGljIGNvbnN0IGlu
dCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsKICAgICBf
cGRmUGx1Z2luLT5ub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbik7CiB9CiAKKy0gKHZv
aWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRy
b2xsZXIgaW52YWxpZGF0ZVJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgX3BkZlBsdWdpbi0+aW52
YWxpZGF0ZVBERlJlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Cit9CisKKy0gKHZvaWQpcGRm
TGF5ZXJDb250cm9sbGVySW52YWxpZGF0ZUhVRDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5
ZXJDb250cm9sbGVyCit7CisgICAgX3BkZlBsdWdpbi0+aW52YWxpZGF0ZUhVRCgpOworfQorCist
ICh2b2lkKXBkZkxheWVyQ29udHJvbGxlclpvb21JbjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyCit7CisgICAgX3BkZlBsdWdpbi0+em9vbUluKCk7Cit9CisKKy0gKHZv
aWQpcGRmTGF5ZXJDb250cm9sbGVyWm9vbU91dDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5
ZXJDb250cm9sbGVyCit7CisgICAgX3BkZlBsdWdpbi0+em9vbU91dCgpOworfQorCitAZW5kCisK
K0BpbnRlcmZhY2UgV0tQREZIVURBbmltYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKKyAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IF9jb21wbGV0aW9uSGFuZGxlcjsKK30KK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdLUERGSFVEQW5pbWF0aW9uRGVsZWdhdGUKKworLSAoaWQpaW5pdFdp
dGhBbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPilj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGOjptb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWFuaW1h
dGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbWF0aW9uIGZpbmlzaGVkOihCT09MKWZsYWcK
K3sKKyAgICBfY29tcGxldGlvbkhhbmRsZXIoZmxhZyk7Cit9CisKIEBlbmQKIAogQGludGVyZmFj
ZSBQREZWaWV3TGF5b3V0CkBAIC01MDksMzUgKzUwOCwyNCBAQCBSZWY8UERGUGx1Z2luPiBQREZQ
bHVnaW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUpCiBQREZQbHVnaW46OlBERlBsdWdpbihXZWJG
cmFtZSogZnJhbWUpCiAgICAgOiBQbHVnaW4oUERGUGx1Z2luVHlwZSkKICAgICAsIG1fZnJhbWUo
ZnJhbWUpCi0gICAgLCBtX2lzUG9zdFNjcmlwdChmYWxzZSkKLSAgICAsIG1fcGRmRG9jdW1lbnRX
YXNNdXRhdGVkKGZhbHNlKQotICAgICwgbV9jb250YWluZXJMYXllcihhZG9wdE5TKFtbQ0FMYXll
ciBhbGxvY10gaW5pdF0pKQotICAgICwgbV9jb250ZW50TGF5ZXIoYWRvcHROUyhbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKSkKLSAgICAsIG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERG
UGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKICAg
ICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFz
cygpIGFsbG9jXSBpbml0XSkpCiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFk
b3B0TlMoW1tXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBs
dWdpbjp0aGlzXSkpCisgICAgLCBtX0hVRCgqdGhpcykKIHsKLSAgICBtX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7
Ci0gICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRM
YXllci5nZXQoKTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV9wZGZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07CiAKICAgICBpZiAoc3VwcG9ydHNGb3Jtcygp
KSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgp
LT5kb2N1bWVudCgpOwotICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBkb2N1bWVudC0+
Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsKLSAgICAgICAgbV9hbm5vdGF0aW9uQ29udGFp
bmVyLT5zZXRBdHRyaWJ1dGUoaWRBdHRyLCAiYW5ub3RhdGlvbkNvbnRhaW5lciIpOwogCiAgICAg
ICAgIFJlZjxFbGVtZW50PiBhbm5vdGF0aW9uU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0
ZUVsZW1lbnQoc3R5bGVUYWcsIGZhbHNlKTsKICAgICAgICAgYW5ub3RhdGlvblN0eWxlRWxlbWVu
dC0+c2V0VGV4dENvbnRlbnQoYW5ub3RhdGlvblN0eWxlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
IAotICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXItPmFwcGVuZENoaWxkKFdURjo6bW92ZShh
bm5vdGF0aW9uU3R5bGVFbGVtZW50KSk7Ci0gICAgICAgIGRvY3VtZW50LT5ib2R5T3JGcmFtZXNl
dCgpLT5hcHBlbmRDaGlsZCgqbV9hbm5vdGF0aW9uQ29udGFpbmVyKTsKKyAgICAgICAgZG9jdW1l
bnQtPmJvZHlPckZyYW1lc2V0KCktPmFwcGVuZENoaWxkKGFubm90YXRpb25TdHlsZUVsZW1lbnQu
Z2V0KCkpOwogICAgIH0KIAogICAgIG1fYWNjZXNzaWJpbGl0eU9iamVjdCA9IGFkb3B0TlMoW1tX
S1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRo
aXNdKTsKLSAgICBtX2FjY2Vzc2liaWxpdHlPYmplY3QuZ2V0KCkucGRmTGF5ZXJDb250cm9sbGVy
ID0gbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0
LmdldCgpLnBhcmVudCA9IHdlYkZyYW1lKCktPnBhZ2UoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9i
amVjdCgpOwotCi0gICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9jb250ZW50TGF5
ZXIuZ2V0KCldOwotICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fc2Nyb2xsQ29y
bmVyTGF5ZXIuZ2V0KCldOworICAgIFttX2FjY2Vzc2liaWxpdHlPYmplY3Qgc2V0UGRmTGF5ZXJD
b250cm9sbGVyOm1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBbbV9hY2Nlc3NpYmls
aXR5T2JqZWN0IHNldFBhcmVudDp3ZWJGcmFtZSgpLT5wYWdlKCktPmFjY2Vzc2liaWxpdHlSZW1v
dGVPYmplY3QoKV07CiB9CiAKIFBERlBsdWdpbjo6flBERlBsdWdpbigpCkBAIC01NzIsNzQgKzU2
MCw2IEBAIFBsdWdpbkluZm8gUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkKICAgICByZXR1cm4gaW5m
bzsKIH0KIAotdm9pZCBQREZQbHVnaW46OnVwZGF0ZVNjcm9sbGJhcnMoKQotewotICAgIGJvb2wg
aGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xs
YmFyOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpZiAobV9z
aXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKLSAgICAgICAgICAgIGRl
c3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3Np
emUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQot
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChtX3NpemUuaGVpZ2h0
KCkgPj0gbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQo
KSA8IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICht
X3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIGludCBw
YWdlU3RlcCA9IG1fcGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWln
aHQoKTsKLQotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KG1fc2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSk7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCkt
PngoKSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmhlaWdodCgpLCBtX3NpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAg
ICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAw
KTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFy
UmVjdCk7Ci0gICAgfQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KG1fc2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1l
bnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3Qo
cGx1Z2luVmlldygpLT54KCkgKyBtX3NpemUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikK
LSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVj
dChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
ZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJh
ciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Nj
cm9sbGJhcnMpIHsKLSAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0gICAgICAgICAgICBmcmFt
ZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0gICAgICAgIGZyYW1l
Vmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxiYXJMYXllcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCku
ZnJhbWUgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgW21fdmVy
dGljYWxTY3JvbGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXldOwotICAgIH0KLSAgICAKLSAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVj
dCgpOwotICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5
XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKLSAgICAgICAg
bV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAg
ICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci19Ci0K
IFBsdWdpblZpZXcqIFBERlBsdWdpbjo6cGx1Z2luVmlldygpCiB7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFBsdWdpblZpZXcqPihjb250cm9sbGVyKCkpOwpAQCAtNjUwLDE3NSArNTcwLDYgQEAg
Y29uc3QgUGx1Z2luVmlldyogUERGUGx1Z2luOjpwbHVnaW5WaWV3KCkgY29uc3QKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7CiB9CiAKLVBh
c3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQg
PSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJl
Z3VsYXJTY3JvbGxiYXIpOwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSB7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dL
UERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsK
LSAgICAgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIuZ2V0KCldOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXJMYXllciA9IGFkb3B0TlMoW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0
V2l0aFBERlBsdWdpbjp0aGlzXSk7Ci0gICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1Ymxh
eWVyOm1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKV07Ci0gICAgfQotICAgIGRpZEFkZFNj
cm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBm
cmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICBpZiAocGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRU
cmlnZ2VycygpKQotICAgICAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVu
dFRlc3RUcmlnZ2VyKHBhZ2UtPnRlc3RUcmlnZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwot
ICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwotfQotCi12b2lkIFBERlBsdWdpbjo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAg
aWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdpbGxSZW1vdmVTY3JvbGxi
YXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAgc2Nyb2xsYmFyLT5yZW1vdmVG
cm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKLQotICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIFttX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBbbV92ZXJ0aWNhbFNjcm9s
bGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhckxheWVyID0gMDsKLSAgICB9Ci19Ci0KLUludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0g
c2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1
Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1l
KCktPnZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcocGx1Z2luVmll
dygpLT5wbHVnaW5FbGVtZW50KCktPnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFBE
RlBsdWdpbjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAotewotICAg
IEludFJlY3QgcmVjdCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcihwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+
cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9j
YXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0K
LQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQ
b2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAg
IHBvaW50Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlv
bigpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVy
dEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50
KCktPnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2lu
dCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9SZW5kZXJlcihwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwg
cGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0g
c2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLWJv
b2wgUERGUGx1Z2luOjpoYW5kbGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKLX0KLQotSW50UmVjdCBQREZQbHVnaW46OnNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdAotewotICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVCht
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVy
biBJbnRSZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lk
dGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0
KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xs
YWJsZUFyZWEqIFBERlBsdWdpbjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9s
bGFibGUgcGFyZW50IGZyYW1lIG9yIFJlbmRlckxheWVyLgotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1JbnRSZWN0IFBERlBsdWdpbjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCk7Ci19Ci0KLWludCBQREZQ
bHVnaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0
Ci17Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJh
cikuZ2V0KCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgp
IC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpp
c0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5j
b3JlRnJhbWUoKSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBERlBsdWdpbjo6Zm9yY2VV
cGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QK
LXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0g
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWludCBQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25z
dAotewotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7Ci0gICAgaWYgKHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiAwOwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9z
Y3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46Om1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KCk7Ci19Ci0KLUlu
dFBvaW50IFBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBp
bnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYg
IW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAg
ICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBtX3Np
emUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhl
aWdodCgpIC0gbV9zaXplLmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0g
ICAgbWF4aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGlt
dW1PZmZzZXQ7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoU2Ny
b2xsYmFyU3R5bGUgc3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFmb3JjZVVw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQg
YWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVy
bGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVy
ZSBzY3JvbGxiYXJzIHdlcmUuCi0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKLSAg
ICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLSAgICAKLSAgICBTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKHN0eWxlLCBmb3JjZVVwZGF0ZSk7Ci0gICAgLy8g
QXMgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQg
dG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVhci4KLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0K
IHZvaWQgUERGUGx1Z2luOjphZGRBcmNoaXZlUmVzb3VyY2UoKQogewogICAgIC8vIEZJWE1FOiBJ
dCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExvYWRlci4gUERG
IGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291cmNlcy4KQEAg
LTkyMCwyMyArNjcxLDIyIEBAIHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQog
CiAgICAgc2V0UERGRG9jdW1lbnQoZG9jdW1lbnQpOwogCi0gICAgdXBkYXRlUGFnZUFuZERldmlj
ZVNjYWxlRmFjdG9ycygpOwotCi0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6
ZTpzaXplKCldOwotICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRvY3VtZW50ID0gZG9j
dW1lbnQuZ2V0KCk7Ci0KLSAgICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAg
ICBwbHVnaW5WaWV3KCktPnNldFBhZ2VTY2FsZUZhY3RvcihbbV9wZGZMYXllckNvbnRyb2xsZXIg
Y29udGVudFNjYWxlRmFjdG9yXSwgSW50UG9pbnQoKSk7Ci0KLSAgICBub3RpZnlTY3JvbGxQb3Np
dGlvbkNoYW5nZWQoSW50UG9pbnQoW21fcGRmTGF5ZXJDb250cm9sbGVyIHNjcm9sbFBvc2l0aW9u
XSkpOworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6d2ViRnJhbWUoKS0+
Y29yZUZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpXTsgLy8vID8/
PworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREb2N1bWVudDpkb2N1bWVudC5nZXQoKV07
CiAKICAgICBjYWxjdWxhdGVTaXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAg
IHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CiAKLSAgICBpZiAoW2RvY3VtZW50IGlzTG9ja2Vk
XSkKKyAgICBpZiAoaXNMb2NrZWQoKSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0o
KTsKKworICAgIG1fSFVELnNldFZpc2libGUoIWlzTG9ja2VkKCksIGZhbHNlKTsKK30KKworYm9v
bCBQREZQbHVnaW46OmlzTG9ja2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fcGRmRG9jdW1l
bnQgaXNMb2NrZWRdOwogfQogCiB2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3Bv
bnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUpCkBAIC0xMDIyLDY0ICs3NzIsOTEgQEAgdm9pZCBQREZQbHVnaW46OnJ1blNj
cmlwdHNJblBERkRvY3VtZW50KCkKICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7CiB9
CiAKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlUERGUmVjdChJbnRSZWN0IHJlY3QpCit7Cisg
ICAgV2lkZ2V0KiB3aWRnZXQgPSBwbHVnaW5WaWV3KCk7CisKKyAgICAvLyBGSVhNRTogT25lIG9m
IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgZG8gdGhpcyAod2l0aCB0aGUgZmxpcHBp
bmcpLgorICAgIEludFJlY3QgaW52YWxpZFJlY3QgPSByZWN0OworICAgIGludmFsaWRSZWN0LnNl
dFkobV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBpbnZhbGlkUmVjdC55KCkgLSBpbnZhbGlk
UmVjdC5oZWlnaHQoKSk7CisKKyAgICB3aWRnZXQtPmludmFsaWRhdGVSZWN0KGludmFsaWRSZWN0
KTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVIVUQoKQoreworICAgIG1fSFVELmlu
dmFsaWRhdGUoKTsKK30KKwogdm9pZCBQREZQbHVnaW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3Jt
KCkKIHsKKyAgICBpZiAoIXN1cHBvcnRzRm9ybXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7
CisgICAgbV9wYXNzd29yZENvbnRhaW5lciA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGRpdlRh
ZywgZmFsc2UpOworICAgIG1fcGFzc3dvcmRDb250YWluZXItPnNldEF0dHJpYnV0ZShpZEF0dHIs
ICJwYXNzd29yZENvbnRhaW5lciIpOworCiAgICAgbV9wYXNzd29yZEZpZWxkID0gUERGUGx1Z2lu
UGFzc3dvcmRGaWVsZDo6Y3JlYXRlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsK
LSAgICBtX3Bhc3N3b3JkRmllbGQtPmF0dGFjaChtX2Fubm90YXRpb25Db250YWluZXIuZ2V0KCkp
OworICAgIG1fcGFzc3dvcmRGaWVsZC0+YXR0YWNoKG1fcGFzc3dvcmRDb250YWluZXIuZ2V0KCkp
OworICAgIGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpLT5hcHBlbmRDaGlsZCgqbV9wYXNzd29y
ZENvbnRhaW5lcik7CiB9CiAKIHZvaWQgUERGUGx1Z2luOjphdHRlbXB0VG9VbmxvY2tQREYoY29u
c3QgU3RyaW5nJiBwYXNzd29yZCkKIHsKICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgYXR0ZW1w
dFRvVW5sb2NrV2l0aFBhc3N3b3JkOnBhc3N3b3JkXTsKIAotICAgIGlmICghW3BkZkRvY3VtZW50
KCkgaXNMb2NrZWRdKSB7CisgICAgaWYgKCFpc0xvY2tlZCgpKSB7CisgICAgICAgIG1fcGFzc3dv
cmRDb250YWluZXIgPSBudWxscHRyOwogICAgICAgICBtX3Bhc3N3b3JkRmllbGQgPSBudWxscHRy
OwogCiAgICAgICAgIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMo
KTsKKworICAgICAgICBtX0hVRC5zZXRWaXNpYmxlKHRydWUsIHRydWUpOwogICAgIH0KIH0KIAot
dm9pZCBQREZQbHVnaW46OnVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKQordm9pZCBQ
REZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKIHsKLSAgICBkb3VibGUgbmV3U2NhbGVGYWN0b3Ig
PSBjb250cm9sbGVyKCktPmNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKLSAgICBpZiAoIWhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IoKSkKLSAgICAgICAgbmV3U2NhbGVGYWN0b3IgKj0gd2ViRnJhbWUoKS0+
cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBzZXRQREZEb2N1bWVudFNpemUoaXNMb2Nr
ZWQoKSA/IEludFNpemUoKSA6IEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRT
aXplUmVzcGVjdGluZ1pvb21dKSk7CiAKLSAgICBpZiAobmV3U2NhbGVGYWN0b3IgIT0gW21fcGRm
TGF5ZXJDb250cm9sbGVyIGRldmljZVNjYWxlRmFjdG9yXSkKLSAgICAgICAgW21fcGRmTGF5ZXJD
b250cm9sbGVyIHNldERldmljZVNjYWxlRmFjdG9yOm5ld1NjYWxlRmFjdG9yXTsKKyAgICAvLyBX
ZSBoYXZlIHRvIGFzeW5jaHJvbm91c2x5IHVwZGF0ZSBzdHlsZXMgYmVjYXVzZSB3ZSBjb3VsZCBi
ZSBpbnNpZGUgbGF5b3V0LgorICAgIFJlZlB0cjxQREZQbHVnaW4+IHJlZmZlZFRoaXMgPSB0aGlz
OworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtyZWZmZWRU
aGlzXSB7CisgICAgICAgIHJlZmZlZFRoaXMtPmRpZENhbGN1bGF0ZVNpemVzKCk7CisgICAgfSk7
CiB9CiAKLXZvaWQgUERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkK
K3ZvaWQgUERGUGx1Z2luOjpkaWRDYWxjdWxhdGVTaXplcygpCiB7Ci0gICAgdXBkYXRlUGFnZUFu
ZERldmljZVNjYWxlRmFjdG9ycygpOwotfQotCi12b2lkIFBERlBsdWdpbjo6Y29tcHV0ZVBhZ2VC
b3hlcygpCi17Ci0gICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXROdW1iZXJP
ZlBhZ2VzKFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9
IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXSwgaSArIDEp
OwotICAgICAgICBBU1NFUlQocGRmUGFnZSk7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdp
bkVsZW1lbnQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKndlYkZyYW1lKCktPmNvcmVGcmFt
ZSgpLT5kb2N1bWVudCgpKS5wbHVnaW5FbGVtZW50KCk7CiAKLSAgICAgICAgQ0dSZWN0IGJveCA9
IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJveCk7Ci0gICAgICAgIGlm
IChDR1JlY3RJc0VtcHR5KGJveCkpCi0gICAgICAgICAgICBib3ggPSBDR1BERlBhZ2VHZXRCb3hS
ZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKLSAgICAgICAgbV9wYWdlQm94ZXMuYXBwZW5k
KEludFJlY3QoYm94KSk7CisgICAgaWYgKGlzTG9ja2VkKCkpIHsKKyAgICAgICAgcGx1Z2luRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCAxMDAsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIHBsdWdpbkVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIDEwMCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLX0KIAotdm9p
ZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKLXsKLSAgICBpZiAoW3BkZkRvY3VtZW50KCkg
aXNMb2NrZWRdKSB7Ci0gICAgICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKDAsIDApKTsK
KyAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgp
OworICAgIHBsdWdpbkVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKTsKKworICAgIC8vIEZJWE1FOiBDYW4ndCBkbyB0aGlzIGluIHRoZSBvdmVyZmxvdy9zdWJm
cmFtZSBjYXNlLiBXaGVyZSBkb2VzIHNjcm9sbC1zbmFwLXR5cGUgZ28/CisgICAgaWYgKG1fdXNp
bmdDb250aW51b3VzTW9kZSB8fCAhbV9mcmFtZS0+aXNNYWluRnJhbWUoKSB8fCAhaXNGdWxsRnJh
bWVQbHVnaW4oKSkKICAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWluUHRyPE5TQXJyYXk+IHBh
Z2VSZWN0cyA9IFttX3BkZkxheWVyQ29udHJvbGxlciBwYWdlUmVjdHNdOworCisgICAgU3RyaW5n
QnVpbGRlciBjb29yZGluYXRlczsKKyAgICBmb3IgKE5TVmFsdWUgKnJlY3QgaW4gcGFnZVJlY3Rz
LmdldCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXaHkgND8KKyAgICAgICAgY29vcmRpbmF0ZXMu
YXBwZW5kTnVtYmVyKChsb25nKVtyZWN0IHJlY3RWYWx1ZV0ub3JpZ2luLnkgLyA0KTsKKyAgICAg
ICAgY29vcmRpbmF0ZXMuYXBwZW5kTGl0ZXJhbCgicHggIik7CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGNvbWUgc3RyYWlnaHQgZnJvbSBQREZLaXQuCi0gICAgY29tcHV0ZVBh
Z2VCb3hlcygpOworICAgIHBsdWdpbkVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRTY3JvbGxTbmFwQ29vcmRpbmF0ZSwgY29vcmRpbmF0ZXMudG9TdHJpbmco
KSk7CiAKLSAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xs
ZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBkb2N1bWVudC0+Ym9k
eU9yRnJhbWVzZXQoKS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFNj
cm9sbFNuYXBUeXBlLCAibWFuZGF0b3J5Iik7CiB9CiAKIGJvb2wgUERGUGx1Z2luOjppbml0aWFs
aXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xMDk0LDkwICs4NzEsMjcgQEAg
Ym9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
IAogdm9pZCBQREZQbHVnaW46OmRlc3Ryb3koKQogewotICAgIG1fcGRmTGF5ZXJDb250cm9sbGVy
LmdldCgpLmRlbGVnYXRlID0gMDsKLQotICAgIGlmICh3ZWJGcmFtZSgpKSB7Ci0gICAgICAgIGlm
IChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCkp
Ci0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAg
IH0KKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKIAogICAgIG1f
YWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9hbm5vdGF0aW9uQ29udGFpbmVyID0g
bnVsbHB0cjsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0g
ICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgCi0gICAgW21fc2Ny
b2xsQ29ybmVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFttX2NvbnRlbnRMYXll
ciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjp1cGRhdGVDb250
cm9sVGludHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCi17Ci0gICAgQVNTRVJU
KGdyYXBoaWNzQ29udGV4dC51cGRhdGluZ0NvbnRyb2xUaW50cygpKTsKLQotICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxp
ZGF0ZSgpOwotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3Jv
bGxDb3JuZXJSZWN0KCkpOwogfQogCi12b2lkIFBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5
ZXJJbkNvbnRleHQoQ0FMYXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBQ
REZQbHVnaW46OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcykKIHsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgIAotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJ
c0NBTGF5ZXJDb250ZXh0KHRydWUpOwotICAgIAotICAgIGlmIChsYXllciA9PSBtX3Njcm9sbENv
cm5lckxheWVyKSB7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCA9IHRoaXMtPnNj
cm9sbENvcm5lclJlY3QoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtc2Ny
b2xsQ29ybmVyUmVjdC54KCksIC1zY3JvbGxDb3JuZXJSZWN0LnkoKSk7Ci0gICAgICAgIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKG51bGxwdHIsIGdyYXBoaWNzQ29u
dGV4dCwgc2Nyb2xsQ29ybmVyUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBudWxscHRyOwotICAgIAotICAgIGlmIChsYXllciA9
PSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCi0gICAgICAgIHNjcm9sbGJhciA9IHZlcnRpY2Fs
U2Nyb2xsYmFyKCk7Ci0gICAgZWxzZSBpZiAobGF5ZXIgPT0gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIpCi0gICAgICAgIHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXIoKTsKLQotICAg
IGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZ3JhcGhpY3NDb250
ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsYmFyLT54KCksIC1zY3JvbGxiYXItPnkoKSk7Ci0gICAgc2Ny
b2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwor
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisvLyAgICBjb250ZXh0LnRyYW5z
bGF0ZSgwLCAtbV9zaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9w
ZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBkcmF3
SW5Db250ZXh0OmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCldOwogfQogCiBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBQREZQbHVnaW46OnNuYXBzaG90KCkKIHsKLSAgICBpZiAoc2l6ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmbG9hdCBjb250ZW50c1NjYWxl
RmFjdG9yID0gY29udHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgSW50U2l6
ZSBiYWNraW5nU3RvcmVTaXplID0gc2l6ZSgpOwotICAgIGJhY2tpbmdTdG9yZVNpemUuc2NhbGUo
Y29udGVudHNTY2FsZUZhY3Rvcik7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVTaXplLCBT
aGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAgIGF1dG8gY29udGV4dCA9IGJpdG1h
cC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0KLSAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoY29udGVudHNTY2FsZUZhY3RvciwgLWNvbnRlbnRzU2NhbGVGYWN0b3IpKTsKLSAgICBjb250
ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3BkZkRvY3VtZW50U2l6
ZS5oZWlnaHQoKSArIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIFttX3BkZkxheWVy
Q29udHJvbGxlciBzbmFwc2hvdEluQ29udGV4dDpjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKV07
Ci0KLSAgICByZXR1cm4gYml0bWFwOwotfQotCi1QbGF0Zm9ybUxheWVyKiBQREZQbHVnaW46OnBs
dWdpbkxheWVyKCkKLXsKLSAgICByZXR1cm4gbV9jb250YWluZXJMYXllci5nZXQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBsdWdp
blRvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElu
dFBvaW50KHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKKyAgICByZXR1
cm4gSW50UG9pbnQocG9pbnQueCgpLCBtX3NpemUuaGVpZ2h0KCkgLSBwb2ludC55KCkpOwogfQog
CiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0xMTg3LDggKzkwMSw4IEBAIEludFBvaW50IFBERlBs
dWdpbjo6Y29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKIAogSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBJbnRQb2ludCBwb2ludEluUGx1
Z2luQ29vcmRpbmF0ZXMocG9pbnQueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOwot
ICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CisgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNv
b3JkaW5hdGVzKHBvaW50LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKKyAgICBy
ZXR1cm4gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50SW5QbHVnaW5D
b29yZGluYXRlcyk7CiB9CiAKIEZsb2F0UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmll
d1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKQEAgLTExOTgsOCArOTEyLDgg
QEAgRmxvYXRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSBjb25zdAogICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBGbG9hdFBvaW50IG9yaWdpbkluUGx1Z2luQ29vcmRpbmF0
ZXMocmVjdC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHJlY3QueSgpIC0gcmVjdC5oZWlnaHQoKSk7
Ci0gICAgRmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBtX3Jvb3RWaWV3VG9Q
bHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0KG9yaWdpbkluUGx1Z2lu
Q29vcmRpbmF0ZXMsIHJlY3Quc2l6ZSgpKSk7CisgICAgRmxvYXRQb2ludCBvcmlnaW5JblBsdWdp
bkNvb3JkaW5hdGVzKHJlY3QueCgpLCBtX3NpemUuaGVpZ2h0KCkgLSByZWN0LnkoKSAtIHJlY3Qu
aGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV9w
bHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KG9yaWdpbkluUGx1Z2lu
Q29vcmRpbmF0ZXMsIHJlY3Quc2l6ZSgpKSk7CiAKICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250
ZW50c1RvU2NyZWVuKGVuY2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykp
OwogfQpAQCAtMTIxMiw0NCArOTI2LDI1IEBAIEludFJlY3QgUERGUGx1Z2luOjpib3VuZHNPblNj
cmVlbigpIGNvbnN0CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICBGbG9hdFJlY3Qg
Ym91bmRzID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKTsKLSAgICBGbG9hdFJlY3Qg
cmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5p
bnZlcnNlKCkubWFwUmVjdChib3VuZHMpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzID0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFJlY3QoYm91bmRzKTsK
ICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKGVuY2xvc2luZ0ludFJlY3Qo
cmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6Z2VvbWV0
cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkKIHsKLSAgICBp
ZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1Z2luVmlldygpLT5wYWdlU2NhbGVGYWN0b3Io
KSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zaXplID0gcGx1Z2luU2l6ZTsKKyAgICBtX3BsdWdpblRvUm9vdFZp
ZXdUcmFuc2Zvcm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtOwogICAgIG1fcm9vdFZpZXdU
b1BsdWdpblRyYW5zZm9ybSA9IHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0uaW52ZXJzZSgpOwot
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6cGx1Z2luU2l6ZV07CisgICAg
bV9zaXplID0gcGx1Z2luU2l6ZTsKIAotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIENBVHJhbnNmb3JtM0Qg
dHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwgMSk7Ci0gICAgdHJhbnNm
b3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIDAsIC1wbHVnaW5TaXplLmhl
aWdodCgpLCAwKTsKLSAgICAKLSAgICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKSB7Ci0g
ICAgICAgIENHRmxvYXQgbWFnbmlmaWNhdGlvbiA9IHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFj
dG9yKCkgLSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CiAK
LSAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2lu
Q29vcmRpbmF0ZXMsIHdlIHNob3VsZCB1c2UgdGhlIHpvb20gb3JpZ2luIGZyb20gUGx1Z2luVmll
dzo6c2V0UGFnZVNjYWxlRmFjdG9yLgotICAgICAgICBpZiAobWFnbmlmaWNhdGlvbikKLSAgICAg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtYWduaWZ5V2l0aE1hZ25pZmljYXRpb246bWFn
bmlmaWNhdGlvbiBhdFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KG1fbGFzdE1vdXNl
UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSBpbW1lZGlhdGVseTpOT107Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGFuZGxlIHBhZ2Ugc2NhbGUgb3Vyc2VsdmVzLCB3
ZSBuZWVkIHRvIHJlc3BlY3Qgb3VyIHBhcmVudCBwYWdlJ3MKLSAgICAgICAgLy8gc2NhbGUsIHdo
aWNoIG1heSBoYXZlIGNoYW5nZWQuCi0gICAgICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZh
Y3RvcnMoKTsKLSAgICB9IAorICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6
ZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS5zaXplKCldOworICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciBzZXRWaXNpYmxlUmVjdDpmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpXTsKIAogICAg
IGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwogCiAgICAgaWYgKG1f
YWN0aXZlQW5ub3RhdGlvbikKICAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uLT51cGRhdGVHZW9t
ZXRyeSgpOwotCi0gICAgW21fY29udGVudExheWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOnRyYW5z
Zm9ybV07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KIAogdm9pZCBQREZQbHVnaW46
OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKQEAgLTEyNjcsNyArOTYyLDYgQEAgdm9p
ZCBQREZQbHVnaW46OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCwgY29uc3QgV1RGOjpT
dHJpbmcmKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi0gICAgCiBzdGF0aWMgTlNV
SW50ZWdlciBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCkK
IHsKICAgICByZXR1cm4gKGV2ZW50LnNoaWZ0S2V5KCkgPyBOU1NoaWZ0S2V5TWFzayA6IDApCkBA
IC0xMjc5LDEyICs5NzMsNiBAQCBzdGF0aWMgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzRnJvbVdl
YkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCkKIHN0YXRpYyBib29sIGdldEV2ZW50VHlwZUZy
b21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQsIE5TRXZlbnRUeXBlJiBldmVudFR5cGUp
CiB7CiAgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50OjpLZXlE
b3duOgotICAgICAgICBldmVudFR5cGUgPSBOU0tleURvd247Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgotICAgICAgICBldmVudFR5cGUgPSBOU0tleVVw
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246CiAg
ICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+KGV2ZW50KS5i
dXR0b24oKSkgewogICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CkBAIC0x
MzI5LDEyNyArMTAxNyw4MCBAQCBzdGF0aWMgYm9vbCBnZXRFdmVudFR5cGVGcm9tV2ViRXZlbnQo
Y29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYgZXZlbnRUeQogTlNFdmVudCAqUERG
UGx1Z2luOjpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVu
dCkKIHsKICAgICBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcyA9IGNvbnZl
cnRGcm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5wb3NpdGlvbigpKTsKLQogICAgIEludFBvaW50
IHBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMoY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXco
bV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKTsKIAogICAgIE5TRXZlbnRU
eXBlIGV2ZW50VHlwZTsKIAogICAgIGlmICghZ2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50
LCBldmVudFR5cGUpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdzRnJvbVdlYkV2
ZW50KGV2ZW50KTsKIAogICAgIHJldHVybiBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6ZXZl
bnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMgbW9kaWZpZXJGbGFn
czptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2
ZW50TnVtYmVyOjAgY2xpY2tDb3VudDpldmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CiB9
CiAKLXZvaWQgUERGUGx1Z2luOjp1cGRhdGVDdXJzb3IoY29uc3QgV2ViTW91c2VFdmVudCYgZXZl
bnQsIFVwZGF0ZUN1cnNvck1vZGUgbW9kZSkKK3ZvaWQgUERGUGx1Z2luOjp1cGRhdGVDdXJzb3Io
Y29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQsIFVwZGF0ZUN1cnNvciBtb2RlKQogewotICAgIEhp
dFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IE5vbmU7CisgICAgLy8gRklYTUU6IFNob3VsZCBo
YXZlIGEgaGFuZCBmb3IgbGlua3MsIGFuZCBzb21ldGhpbmcgc3BlY2lhbCBmb3IgYW5ub3RhdGlv
bnMuCiAKLSAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvblVuZGVyTW91c2UgPSBbbV9wZGZMYXll
ckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5U
b1BERlZpZXcoZXZlbnQucG9zaXRpb24oKSldOwotICAgIGlmIChzZWxlY3Rpb25VbmRlck1vdXNl
ICYmIFtbc2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmddIGxlbmd0aF0pCi0gICAgICAgIGhpdFRl
c3RSZXN1bHQgPSBUZXh0OworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IEhpdFRl
c3RSZXN1bHQ6Ok5vbmU7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5h
dGVzKGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdp
bkNvb3JkaW5hdGVzKSk7CisgICAgaWYgKG1fSFVELmNvbnRhaW5zUG9pbnRJblJvb3RWaWV3KGV2
ZW50LnBvc2l0aW9uKCkpKQorICAgICAgICBoaXRUZXN0UmVzdWx0ID0gSGl0VGVzdFJlc3VsdDo6
SFVEOworICAgIGVsc2UgeworICAgICAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvblVuZGVyTW91
c2UgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9z
aXRpb25JblBERlZpZXdDb29yZGluYXRlc107CisgICAgICAgIGlmIChzZWxlY3Rpb25VbmRlck1v
dXNlICYmIFtbc2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmddIGxlbmd0aF0pCisgICAgICAgICAg
ICBoaXRUZXN0UmVzdWx0ID0gSGl0VGVzdFJlc3VsdDo6VGV4dDsKKyAgICB9CiAKLSAgICBpZiAo
aGl0VGVzdFJlc3VsdCA9PSBtX2xhc3RIaXRUZXN0UmVzdWx0ICYmIG1vZGUgPT0gVXBkYXRlSWZO
ZWVkZWQpCisgICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9sYXN0SGl0VGVzdFJlc3VsdCAmJiBt
b2RlID09IFVwZGF0ZUN1cnNvcjo6SWZOZWVkZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdl
YkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDdXJzb3Io
aGl0VGVzdFJlc3VsdCA9PSBUZXh0ID8gaUJlYW1DdXJzb3IoKSA6IHBvaW50ZXJDdXJzb3IoKSkp
OworICAgIGNvbnN0IEN1cnNvciYgY3Vyc29yID0gW2hpdFRlc3RSZXN1bHRdIHsKKyAgICAgICAg
c3dpdGNoIChoaXRUZXN0UmVzdWx0KSB7CisgICAgICAgIGNhc2UgSGl0VGVzdFJlc3VsdDo6Tm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgSGl0
VGVzdFJlc3VsdDo6VGV4dDoKKyAgICAgICAgICAgIHJldHVybiBpQmVhbUN1cnNvcigpOworICAg
ICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6OkhVRDoKKyAgICAgICAgICAgIHJldHVybiBwb2ludGVy
Q3Vyc29yKCk7CisgICAgICAgIH07CisgICAgfSgpOworCisgICAgd2ViRnJhbWUoKS0+cGFnZSgp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvcihjdXJzb3IpKTsKICAgICBt
X2xhc3RIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKIH0KIAogYm9vbCBQREZQbHVnaW46
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7Ci0gICAgSW50
UG9pbnQgbW91c2VQb3NpdGlvbiA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5w
b3NpdGlvbigpKTsKIAogICAgIG1fbGFzdE1vdXNlRXZlbnQgPSBldmVudDsKIAotICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHRhcmdldFNjcm9sbGJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB0YXJn
ZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbjsKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIpIHsKLSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhckZyYW1lKG1f
dmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7Ci0gICAgICAgIGlmICh2ZXJ0aWNh
bFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQotICAgICAgICAgICAgdGFy
Z2V0U2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgaWYgKHZlcnRpY2Fs
U2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRp
bmF0ZXMpKQotICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb24g
PSB2ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIH0KLQotICAgIGlmIChtX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllcikgewotICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXJGcmFtZSht
X2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7Ci0gICAgICAgIGlmIChob3Jp
em9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobW91c2VQb3NpdGlvbikpCi0gICAgICAgICAg
ICB0YXJnZXRTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIGlmICho
b3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1
Z2luQ29vcmRpbmF0ZXMpKQotICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNl
UG9zaXRpb24gPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fc2Ny
b2xsQ29ybmVyTGF5ZXIgJiYgSW50UmVjdChtX3Njcm9sbENvcm5lckxheWVyLmdldCgpLmZyYW1l
KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkKKyAgICBpZiAoaXNMb2NrZWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmlnaHQtY2xpY2tzIGFuZCBDb250cm9sLWNsaWNr
cyBhbHdheXMgY2FsbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50IGFzIHdlbGwuCiAgICAgaWYgKGV2
ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uIHx8IChldmVudC5idXR0
b24oKSA9PSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uICYmIGV2ZW50LmNvbnRyb2xLZXkoKSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFdlYk1v
dXNlRXZlbnQ6OkxlZnRCdXR0b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIE5TRXZl
bnQgKm5zRXZlbnQgPSBuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChldmVudCk7CiAKICAgICBzd2l0
Y2ggKGV2ZW50LnR5cGUoKSkgewogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAg
ICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKICAgICAgICAgdXBkYXRlQ3Vyc29yKGV2ZW50
KTsKLQotICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBpZiAoIXRh
cmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdGFy
Z2V0U2Nyb2xsYmFyLT5tb3VzZUVudGVyZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1v
dXNlTW92ZWQocGxhdGZvcm1FdmVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRhcmdl
dFNjcm9sbGJhciAmJiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbikKLSAgICAg
ICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uLT5tb3VzZUV4aXRlZCgp
OwotCi0gICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVy
IG1vdXNlRHJhZ2dlZDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29u
dHJvbGxlciBtb3VzZU1vdmVkOm5zRXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRHJhZ2dlZDpuc0V2
ZW50XTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3du
OgotICAgICAgICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbigpKSB7Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIGlmICh0YXJnZXRTY3JvbGxiYXIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFNjcm9sbGJhci0+bW91c2VEb3duKHBsYXRmb3Jt
RXZlbnQpOwotCi0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VEb3duOm5z
RXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VF
dmVudDo6UmlnaHRCdXR0b246Ci0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgcmln
aHRNb3VzZURvd246bnNFdmVudF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Y2FzZSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b246Ci0gICAgICAgIGNhc2UgV2ViTW91c2VF
dmVudDo6Tm9CdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAg
ICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpuc0V2ZW50XTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKLSAgICAgICAgc3dpdGNo
IChldmVudC5idXR0b24oKSkgewotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b246Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7Ci0KLSAgICAgICAg
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246Ci0g
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgotICAgICAgICBjYXNlIFdl
Yk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xNDU5LDE0ICsxMTAwLDEyIEBAIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogCiBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VF
bnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogewotICAgIG1vdXNlRW50ZXJl
ZENvbnRlbnRBcmVhKCk7Ci0gICAgdXBkYXRlQ3Vyc29yKGV2ZW50LCBGb3JjZVVwZGF0ZSk7Cisg
ICAgdXBkYXRlQ3Vyc29yKGV2ZW50LCBVcGRhdGVDdXJzb3I6OkZvcmNlKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpCiB7Ci0gICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KICAgICAKQEAgLTE0NzQsNyArMTExMyw3IEBAIGJvb2wgUERGUGx1Z2lu
OjpzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CiAg
ICAgSW50UG9pbnQgY29udGVudHNQb2ludCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KHBvaW50KTsKLSAgICBXZWJNb3VzZUV2ZW50IGV2ZW50KFdlYkV2ZW50OjpNb3VzZURvd24sIFdl
Yk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uLCBjb250ZW50c1BvaW50LCBjb250ZW50c1BvaW50LCAw
LCAwLCAwLCAxLCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPigwKSwgbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCksIFdlYkNvcmU6OkZvcmNlQXRDbGljayk7CisgICAgV2ViTW91
c2VFdmVudCBldmVudChXZWJFdmVudDo6TW91c2VEb3duLCBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1
dHRvbiwgY29udGVudHNQb2ludCwgY29udGVudHNQb2ludCwgMCwgMCwgMCwgMSwgc3RhdGljX2Nh
c3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4oMCksIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
LCBGb3JjZUF0Q2xpY2spOwogICAgIHJldHVybiBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50
KTsKIH0KIApAQCAtMTQ5MCwyNyArMTEyOSw2IEBAIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVDb250
ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogICAgIAogICAgIHJldHVy
biBmYWxzZTsKIH0KLQotYm9vbCBQREZQbHVnaW46OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCi17Ci0gICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlOwot
Ci0gICAgaWYgKCFnZXRFdmVudFR5cGVGcm9tV2ViRXZlbnQoZXZlbnQsIGV2ZW50VHlwZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1v
ZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZlbnQpOwotICAgIAotICAgIE5TRXZlbnQgKmZha2VF
dmVudCA9IFtOU0V2ZW50IGtleUV2ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVy
b1BvaW50IG1vZGlmaWVyRmxhZ3M6bW9kaWZpZXJGbGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1i
ZXI6MCBjb250ZXh0OjAgY2hhcmFjdGVyczpldmVudC50ZXh0KCkgY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzOmV2ZW50LnVubW9kaWZpZWRUZXh0KCkgaXNBUmVwZWF0OmV2ZW50LmlzQXV0b1Jl
cGVhdCgpIGtleUNvZGU6ZXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUoKV07Ci0gICAgCi0gICAg
c3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgotICAg
ICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVyIGtleURvd246ZmFrZUV2ZW50XTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBmYWxzZTsKLX0KICAgICAKIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewpAQCAt
MTUzOCwzMyArMTE1Niw3IEBAIGJvb2wgUERGUGx1Z2luOjppc0VkaXRpbmdDb21tYW5kRW5hYmxl
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBQREZQbHVnaW46OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQotewot
ICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKLQot
ICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0
U2Nyb2xsUG9zaXRpb246b2Zmc2V0XTsKLQotICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCi0g
ICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKLQotICAgIFtDQVRy
YW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBpZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgW21faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyIHNldE5lZWRzRGlzcGxheV07Ci0gICAgZWxzZSBpZiAoc2Ny
b2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLX0KLQotdm9pZCBQREZQbHVnaW46OmludmFsaWRh
dGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgW21fc2Nyb2xs
Q29ybmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLX0KLQotYm9vbCBQREZQbHVnaW46OmlzRnVs
bEZyYW1lUGx1Z2luKCkKK2Jvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0
CiB7CiAgICAgLy8gPG9iamVjdD4gb3IgPGVtYmVkPiBwbHVnaW5zIHdpbGwgYXBwZWFyIHRvIGJl
IGluIHRoZWlyIHBhcmVudCBmcmFtZSwgc28gd2UgaGF2ZSB0bwogICAgIC8vIGNoZWNrIHdoZXRo
ZXIgb3VyIGZyYW1lJ3Mgd2lkZ2V0IGlzIGV4YWN0bHkgb3VyIFBsdWdpblZpZXcuCkBAIC0xNTcy
LDExICsxMTY0LDYgQEAgYm9vbCBQREZQbHVnaW46OmlzRnVsbEZyYW1lUGx1Z2luKCkKICAgICBy
ZXR1cm4gZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxQbHVnaW5E
b2N1bWVudCo+KGRvY3VtZW50KS0+cGx1Z2luV2lkZ2V0KCkgPT0gcGx1Z2luVmlldygpOwogfQog
Ci1ib29sIFBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpCi17Ci0gICAgcmV0dXJu
IHdlYkZyYW1lKCktPmlzTWFpbkZyYW1lKCkgJiYgaXNGdWxsRnJhbWVQbHVnaW4oKTsKLX0KLQog
dm9pZCBQREZQbHVnaW46OmNsaWNrZWRMaW5rKE5TVVJMICp1cmwpCiB7CiAgICAgVVJMIGNvcmVV
UkwgPSB1cmw7CkBAIC0xNjA3LDcgKzExOTQsOCBAQCB2b2lkIFBERlBsdWdpbjo6c2V0QWN0aXZl
QW5ub3RhdGlvbihQREZBbm5vdGF0aW9uICphbm5vdGF0aW9uKQogICAgICAgICB9CiAKICAgICAg
ICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gUERGUGx1Z2luQW5ub3RhdGlvbjo6Y3JlYXRlKGFubm90
YXRpb24sIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsKLSAgICAgICAgbV9hY3Rp
dmVBbm5vdGF0aW9uLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgpKTsKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50
KCk7CisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+YXR0YWNoKGRvY3VtZW50LT5ib2R5T3JG
cmFtZXNldCgpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVs
bHB0cjsKIH0KQEAgLTE2MTgsMTkgKzEyMDYsMTAgQEAgYm9vbCBQREZQbHVnaW46OnN1cHBvcnRz
Rm9ybXMoKQogICAgIHJldHVybiBpc0Z1bGxGcmFtZVBsdWdpbigpOwogfQogCi12b2lkIFBERlBs
dWdpbjo6bm90aWZ5Q29udGVudFNjYWxlRmFjdG9yQ2hhbmdlZChDR0Zsb2F0IHNjYWxlRmFjdG9y
KQordm9pZCBQREZQbHVnaW46Om5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChpbnQgbW9kZSkKIHsK
LSAgICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAgICBwbHVnaW5WaWV3KCkt
PnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvciwgSW50UG9pbnQoKSk7Ci0KKyAgICBtX3Vz
aW5nQ29udGludW91c01vZGUgPSAobW9kZSA9PSBrUERGRGlzcGxheVNpbmdsZVBhZ2VDb250aW51
b3VzIHx8IG1vZGUgPT0ga1BERkRpc3BsYXlUd29VcENvbnRpbnVvdXMpOwogICAgIGNhbGN1bGF0
ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotfQotCi12b2lkIFBERlBsdWdpbjo6
bm90aWZ5RGlzcGxheU1vZGVDaGFuZ2VkKGludCkKLXsKLSAgICBjYWxjdWxhdGVTaXplcygpOwot
ICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIH0KIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUERGUGx1
Z2luOjpsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3QKQEAgLTE2NjQsNyArMTI0Myw3IEBAIHZvaWQg
UERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCkKIAogICAgICAgICBOU0RhdGEg
KmRhdGEgPSBsaXZlRGF0YSgpOwogCi0gICAgICAgIG1fdGVtcG9yYXJ5UERGVVVJRCA9IFdlYkNv
cmU6OmNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICAgICAgbV90ZW1wb3JhcnlQREZV
VUlEID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwogICAgICAgICBBU1NFUlQobV90ZW1w
b3JhcnlQREZVVUlEKTsKIAogICAgICAgICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNhdmVQREZUb1Rl
bXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24obV9zdWdnZXN0ZWRGaWxl
bmFtZSwgd2ViRnJhbWUoKS0+dXJsKCksIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIg
Kj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKQEAg
LTE4MTQsNyArMTM5Myw3IEBAIGJvb2wgUERGUGx1Z2luOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zLCB1CiAgICAgcmV0dXJuIG1h
dGNoQ291bnQgPiAwOwogfQogCi1ib29sIFBERlBsdWdpbjo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBQREZQ
bHVnaW46OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKIHsKICAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gY29udmVydEZyb21Sb290Vmll
d1RvUGx1Z2luKHJvdW5kZWRJbnRQb2ludChwb2ludCkpOwogICAgIFBERlNlbGVjdGlvbiogbG9v
a3VwU2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRB
dFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGxvY2FsUG9pbnQpXTsKQEAgLTE4MzUs
NyArMTQxNCw3IEBAIHZvaWQgUERGUGx1Z2luOjpmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpCiAg
ICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGFjdGl2YXRlTmV4dEFubm90YXRpb246dHJ1ZV07CiB9
CiAKLXZvaWQgUERGUGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAq
KQordm9pZCBQREZQbHVnaW46Om5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICpz
ZWxlY3Rpb24pCiB7CiAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5kaWRDaGFuZ2VTZWxlY3Rpb24o
KTsKIH0KQEAgLTE4NDUsNyArMTQyNCw3IEBAIFN0cmluZyBQREZQbHVnaW46OmdldFNlbGVjdGlv
blN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIFtbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVu
dFNlbGVjdGlvbl0gc3RyaW5nXTsKIH0KIAotU3RyaW5nIFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9u
Rm9yV29yZEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitT
dHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBwb2ludEluVmlldyA9IGNvbnZlcnRG
cm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihyb3VuZGVkSW50
UG9pbnQocG9pbnQpKSk7CiAgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25Gb3JXb3JkID0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OnBvaW50SW5WaWV3
XTsKQEAgLTE4NTQsNyArMTQzMyw3IEBAIFN0cmluZyBQREZQbHVnaW46OmdldFNlbGVjdGlvbkZv
cldvcmRBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KSBjCiAgICAgcmV0
dXJuIFtzZWxlY3Rpb25Gb3JXb3JkIHN0cmluZ107CiB9CiAKLWJvb2wgUERGUGx1Z2luOjpleGlz
dGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9j
YXRpb25JblZpZXdDb29yZGluYXRlcykgY29uc3QKK2Jvb2wgUERGUGx1Z2luOjpleGlzdGluZ1Nl
bGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29y
ZGluYXRlcykgY29uc3QKIHsKICAgICBQREZTZWxlY3Rpb24gKmN1cnJlbnRTZWxlY3Rpb24gPSBb
bV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl07CiAgICAgaWYgKCFjdXJyZW50
U2VsZWN0aW9uKQpAQCAtMTg4Nyw3ICsxNDY2LDggQEAgYm9vbCBQREZQbHVnaW46OmV4aXN0aW5n
U2VsZWN0aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGkK
IHN0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5XaW5kb3dTcGFjZShQ
REZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxlciwgTlNQb2ludCBwb2ludEluVmll
dykKIHsKICAgICBDR1BvaW50IHBvaW50ID0gTlNQb2ludFRvQ0dQb2ludChwb2ludEluVmlldyk7
Ci0gICAgQ0dQb2ludCBzY3JvbGxPZmZzZXQgPSBbcGRmTGF5ZXJDb250cm9sbGVyIHNjcm9sbFBv
c2l0aW9uXTsKKworICAgIENHUG9pbnQgc2Nyb2xsT2Zmc2V0ID0gQ0dQb2ludFplcm87CiAgICAg
Q0dGbG9hdCBzY2FsZUZhY3RvciA9IFtwZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFj
dG9yXTsKIAogICAgIHNjcm9sbE9mZnNldC55ID0gW3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50
U2l6ZVJlc3BlY3Rpbmdab29tXS5oZWlnaHQgLSBOU1JlY3RUb0NHUmVjdChbcGRmTGF5ZXJDb250
cm9sbGVyIGZyYW1lXSkuc2l6ZS5oZWlnaHQgLSBzY3JvbGxPZmZzZXQueTsKQEAgLTE4OTgsNyAr
MTQ3OCw3IEBAIHN0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5XaW5k
b3dTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxhCiAgICAgcmV0dXJuIE5TUG9pbnRGcm9t
Q0dQb2ludChuZXdQb2ludCk7CiB9CiAKLVN0cmluZyBQREZQbHVnaW46Omxvb2t1cFRleHRBdExv
Y2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0
ZXMsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEsIFBERlNlbGVjdGlvbiAqKnNlbGVjdGlv
blB0ciwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykgY29uc3QKK1N0cmluZyBQREZQbHVnaW46Omxv
b2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRp
bmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGRhdGEsIFBERlNlbGVjdGlvbiAqKnNlbGVj
dGlvblB0ciwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykgY29uc3QKIHsKICAgICBQREZTZWxlY3Rp
b24qJiBzZWxlY3Rpb24gPSAqc2VsZWN0aW9uUHRyOwogCkBAIC0xOTA5LDcgKzE0ODksNyBAQCBT
dHJpbmcgUERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBsb2NhdGlvbkluVmlldwogICAgIEludFBvaW50IHBvaW50SW5QREZWaWV3ID0gY29u
dmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5k
ZWRJbnRQb2ludChsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSkpOwogICAgIHNlbGVjdGlvbiA9
IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpwb2ludElu
UERGVmlld107CiAgICAgaWYgKCFzZWxlY3Rpb24pCi0gICAgICAgIHJldHVybiBAIiI7CisgICAg
ICAgIHJldHVybiAiIjsKIAogICAgIE5TUG9pbnQgcG9pbnRJbkxheW91dFNwYWNlID0gcG9pbnRJ
bkxheW91dFNwYWNlRm9yUG9pbnRJbldpbmRvd1NwYWNlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdl
dCgpLCBwb2ludEluUERGVmlldyk7CiAKQEAgLTE5MzcsNyArMTUxNyw3IEBAIFN0cmluZyBQREZQ
bHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxv
Y2F0aW9uSW5WaWV3CiAgICAgCiAgICAgTlNTdHJpbmcgKmxvb2t1cFRleHQgPSBEaWN0aW9uYXJ5
TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICBp
ZiAoIWxvb2t1cFRleHQgfHwgIWxvb2t1cFRleHQubGVuZ3RoKQotICAgICAgICByZXR1cm4gQCIi
OworICAgICAgICByZXR1cm4gIiI7CiAKICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3Vy
cmVudFNlbGVjdGlvbjpzZWxlY3Rpb25dOwogICAgIHJldHVybiBsb29rdXBUZXh0OwpAQCAtMTk0
Nyw3ICsxNTI3LDcgQEAgc3RhdGljIE5TUmVjdCByZWN0SW5WaWV3U3BhY2VGb3JSZWN0SW5MYXlv
dXRTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ28KIHsKICAgICBDR1JlY3QgbmV3
UmVjdCA9IE5TUmVjdFRvQ0dSZWN0KGxheW91dFNwYWNlUmVjdCk7CiAgICAgQ0dGbG9hdCBzY2Fs
ZUZhY3RvciA9IHBkZkxheWVyQ29udHJvbGxlci5jb250ZW50U2NhbGVGYWN0b3I7Ci0gICAgQ0dQ
b2ludCBzY3JvbGxPZmZzZXQgPSBwZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb247Cisg
ICAgQ0dQb2ludCBzY3JvbGxPZmZzZXQgPSBDR1BvaW50WmVybzsKIAogICAgIHNjcm9sbE9mZnNl
dC55ID0gcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb20uaGVpZ2h0
IC0gTlNSZWN0VG9DR1JlY3QocGRmTGF5ZXJDb250cm9sbGVyLmZyYW1lKS5zaXplLmhlaWdodCAt
IHNjcm9sbE9mZnNldC55OwogCkBAIC0xOTYyLDcgKzE1NDIsNyBAQCBzdGF0aWMgTlNSZWN0IHJl
Y3RJblZpZXdTcGFjZUZvclJlY3RJbkxheW91dFNwYWNlKFBERkxheWVyQ29udHJvbGxlciogcGRm
TGF5ZXJDbwogICAgIHJldHVybiBOU1JlY3RGcm9tQ0dSZWN0KG5ld1JlY3QpOwogfQogCi1XZWJD
b3JlOjpGbG9hdFJlY3QgUERGUGx1Z2luOjp2aWV3UmVjdEZvclNlbGVjdGlvbihQREZTZWxlY3Rp
b24gKnNlbGVjdGlvbikgY29uc3QKK0Zsb2F0UmVjdCBQREZQbHVnaW46OnJlY3RGb3JTZWxlY3Rp
b25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zdAogewogICAgIFBERlBh
Z2UgKmN1cnJlbnRQYWdlID0gbmlsOwogICAgIE5TQXJyYXkqIHBhZ2VzID0gc2VsZWN0aW9uLnBh
Z2VzOwpAQCAtMTk3OCwxMiArMTU1OCw3IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBQREZQbHVnaW46
OnZpZXdSZWN0Rm9yU2VsZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zCiAKICAg
ICByZWN0SW5WaWV3Lm9yaWdpbiA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9p
bnQocmVjdEluVmlldy5vcmlnaW4pKTsKIAotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJlY3Qo
cmVjdEluVmlldyk7Ci19Ci0KLUNHRmxvYXQgUERGUGx1Z2luOjpzY2FsZUZhY3RvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3Jd
OworICAgIHJldHVybiBGbG9hdFJlY3QocmVjdEluVmlldyk7CiB9CiAKIHZvaWQgUERGUGx1Z2lu
OjpwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICpzdHJpbmcpCkBAIC0xOTk2LDYzICsxNTcxLDIw
NSBAQCB2b2lkIFBERlBsdWdpbjo6cGVyZm9ybVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAqc3Ry
aW5nKQogICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTZWFyY2hXaXRoU3BvdGxpZ2h0KHN0cmluZykpOwogfQogCi1ib29sIFBERlBsdWdpbjo6aGFu
ZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK05TRGF0YSAqUERGUGx1
Z2luOjpsaXZlRGF0YSgpIGNvbnN0CiB7Ci0gICAgUERGRGlzcGxheU1vZGUgZGlzcGxheU1vZGUg
PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZGlzcGxheU1vZGVdOworICAgIGlmIChtX2FjdGl2ZUFu
bm90YXRpb24pCisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+Y29tbWl0KCk7CiAKLSAgICBp
ZiAoZGlzcGxheU1vZGUgPT0ga1BERkRpc3BsYXlTaW5nbGVQYWdlQ29udGludW91cyB8fCBkaXNw
bGF5TW9kZSA9PSBrUERGRGlzcGxheVR3b1VwQ29udGludW91cykKLSAgICAgICAgcmV0dXJuIFNj
cm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtKGV2ZW50KSk7CisgICAgLy8g
U2F2ZSBkYXRhIHN0cmFpZ2h0IGZyb20gdGhlIHJlc291cmNlIGluc3RlYWQgb2YgUERGS2l0IGlm
IHRoZSBkb2N1bWVudCBpcworICAgIC8vIHVudG91Y2hlZCBieSB0aGUgdXNlciwgc28gdGhhdCBQ
REZzIHdoaWNoIFBERktpdCBjYW4ndCBkaXNwbGF5IHdpbGwgc3RpbGwgYmUgZG93bmxvYWRhYmxl
LgorICAgIGlmIChtX3BkZkRvY3VtZW50V2FzTXV0YXRlZCkKKyAgICAgICAgcmV0dXJuIFttX3Bk
ZkRvY3VtZW50IGRhdGFSZXByZXNlbnRhdGlvbl07CisgICAgCisgICAgcmV0dXJuIHJhd0RhdGEo
KTsKK30KIAotICAgIE5TVUludGVnZXIgY3VycmVudFBhZ2VJbmRleCA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciBjdXJyZW50UGFnZUluZGV4XTsKLSAgICBib29sIGluRmlyc3RQYWdlID0gIWN1cnJl
bnRQYWdlSW5kZXg7Ci0gICAgYm9vbCBpbkxhc3RQYWdlID0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGxhc3RQYWdlSW5kZXhdID09IGN1cnJlbnRQYWdlSW5kZXg7CitOU09iamVjdCAqUERGUGx1Z2lu
OjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY2Nlc3NpYmls
aXR5T2JqZWN0LmdldCgpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2Nyb2xsVG9Qb2ludChJbnRQ
b2ludCBzY3JvbGxQb2ludCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBwbHVnaW5WaWV3KCktPmZy
YW1lKCk7CisgICAgZmxvYXQgc2NhbGUgPSBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3Io
KTsKKyAgICBzY3JvbGxQb2ludC5zY2FsZShzY2FsZSwgc2NhbGUpOworICAgIGZyYW1lLT52aWV3
KCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzY3JvbGxQb2ludCk7Cit9CisKK2Zs
b2F0IFBERlBsdWdpbjo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIEZyYW1lKiBmcmFtZSA9
IHBsdWdpblZpZXcoKS0+ZnJhbWUoKTsKKyAgICByZXR1cm4gZnJhbWUtPnBhZ2UoKS0+cGFnZVNj
YWxlRmFjdG9yKCk7Cit9CiAKLSAgICBib29sIGF0U2Nyb2xsVG9wID0gIXNjcm9sbFBvc2l0aW9u
KCkueSgpOwotICAgIGJvb2wgYXRTY3JvbGxCb3R0b20gPSBzY3JvbGxQb3NpdGlvbigpLnkoKSA9
PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7Cit2b2lkIFBERlBsdWdpbjo6em9vbUluKCkK
K3sKKyAgICBXZWJQYWdlKiBwYWdlID0gd2ViRnJhbWUoKS0+cGFnZSgpOworICAgIHBhZ2UtPnNj
YWxlUGFnZShwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKSAqIHpvb21CdXR0b25TY2FsZU11bHRpcGxp
ZXIsIEludFBvaW50KCkpOworfQogCi0gICAgYm9vbCBpbk1vbWVudHVtU2Nyb2xsID0gZXZlbnQu
bW9tZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNlTm9uZTsKK3ZvaWQgUERGUGx1
Z2luOjp6b29tT3V0KCkKK3sKKyAgICBXZWJQYWdlKiBwYWdlID0gd2ViRnJhbWUoKS0+cGFnZSgp
OworICAgIHBhZ2UtPnNjYWxlUGFnZShwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKSAvIHpvb21CdXR0
b25TY2FsZU11bHRpcGxpZXIsIEludFBvaW50KCkpOworfQogCi0gICAgaW50IHNjcm9sbE1hZ25p
dHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gZGVmYXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9s
ZEZvclBhZ2VGbGlwOworUERGUGx1Z2luOjpIVUQ6OkhVRChQREZQbHVnaW4mIHBsdWdpbikKKyAg
ICA6IG1fb3ZlcmxheShQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fcGx1Z2lu
KHBsdWdpbikKK3sKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBwbHVnaW4ud2ViRnJhbWUoKTsK
IAotICAgIC8vIEltcHJlY2lzZSBpbnB1dCBkZXZpY2VzIHNob3VsZCBoYXZlIGEgbG93ZXIgdGhy
ZXNob2xkIHNvIHRoYXQgImNsaWNreSIgc2Nyb2xsIHdoZWVscyBjYW4gZmxpcCBwYWdlcy4KLSAg
ICBpZiAoIWV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSkKLSAgICAgICAgc2Nyb2xs
TWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAwOworICAgIC8vIEluIG9yZGVyIHRvIGF2
b2lkIHRoZSBvdmVybGF5IGxhZ2dpbmcgYmVoaW5kIG1haW4tZnJhbWUgc2Nyb2xsaW5nLCB3ZSBu
ZWVkCisgICAgLy8gdG8gZm9yY2Ugc3luY2hyb25vdXMgc2Nyb2xsaW5nIGZvciB0aGUgd2hvbGUg
cGFnZSBpZiB3ZSBoYXZlIGEgSFVEIGluIGEgc3ViZnJhbWUgUERGLgorICAgIG1fb3ZlcmxheS0+
c2V0TmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZyghd2ViRnJhbWUtPmlzTWFpbkZyYW1lKCkpOwog
Ci0gICAgaWYgKGF0U2Nyb2xsQm90dG9tICYmICFpbkxhc3RQYWdlICYmIGV2ZW50LmRlbHRhKCku
aGVpZ2h0KCkgPCAwKSB7Ci0gICAgICAgIGlmIChldmVudC5kZWx0YSgpLmhlaWdodCgpIDw9IC1z
Y3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCAmJiAhaW5Nb21lbnR1bVNjcm9sbCkK
LSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvTmV4dFBhZ2VdOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUgPSB3ZWJGcmFt
ZS0+Y29yZUZyYW1lKCktPm1haW5GcmFtZSgpOworICAgIG1haW5GcmFtZS5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9vdmVybGF5LnB0cigpLCBQYWdlT3Zlcmxh
eTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXko
KTsKIAotICAgIGlmIChhdFNjcm9sbFRvcCAmJiAhaW5GaXJzdFBhZ2UgJiYgZXZlbnQuZGVsdGEo
KS5oZWlnaHQoKSA+IDApIHsKLSAgICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPj0g
c2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgJiYgIWluTW9tZW50dW1TY3JvbGwp
IHsKLSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBnb3RvUHJldmlvdXNQYWdlXTsKLSAgICAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAg
ICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBwbGF0Zm9ybUNBTGF5ZXIg
PSBkb3duY2FzdDxHcmFwaGljc0xheWVyQ0E+KG1fb3ZlcmxheS0+bGF5ZXIoKSkucGxhdGZvcm1D
QUxheWVyKCk7CisgICAgcGxhdGZvcm1DQUxheWVyLT5zZXRPcGFjaXR5KDApOworfQogCi0gICAg
cmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtKGV2ZW50KSk7
CitQREZQbHVnaW46OkhVRDo6fkhVRCgpCit7CisgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUgPSBt
X3BsdWdpbi53ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+bWFpbkZyYW1lKCk7CisgICAgbWFpbkZy
YW1lLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fb3Zlcmxh
eS5wdHIoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCi1OU0RhdGEg
KlBERlBsdWdpbjo6bGl2ZURhdGEoKSBjb25zdAordm9pZCBQREZQbHVnaW46OkhVRDo6cGFnZU92
ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQogewotICAgIGlmIChtX2FjdGl2ZUFubm90YXRp
b24pCi0gICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+Y29tbWl0KCk7Cit9CiAKLSAgICAvLyBT
YXZlIGRhdGEgc3RyYWlnaHQgZnJvbSB0aGUgcmVzb3VyY2UgaW5zdGVhZCBvZiBQREZLaXQgaWYg
dGhlIGRvY3VtZW50IGlzCi0gICAgLy8gdW50b3VjaGVkIGJ5IHRoZSB1c2VyLCBzbyB0aGF0IFBE
RnMgd2hpY2ggUERGS2l0IGNhbid0IGRpc3BsYXkgd2lsbCBzdGlsbCBiZSBkb3dubG9hZGFibGUu
Ci0gICAgaWYgKG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKQotICAgICAgICByZXR1cm4gW21fcGRm
RG9jdW1lbnQgZGF0YVJlcHJlc2VudGF0aW9uXTsKLSAgICAKLSAgICByZXR1cm4gcmF3RGF0YSgp
Owordm9pZCBQREZQbHVnaW46OkhVRDo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdl
KiBwYWdlKQorewogfQogCi1OU09iamVjdCAqUERGUGx1Z2luOjphY2Nlc3NpYmlsaXR5T2JqZWN0
KCkgY29uc3QKK3ZvaWQgUERGUGx1Z2luOjpIVUQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkm
LCBQYWdlKikKIHsKLSAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpOworfQor
CitJbnRSZWN0IFBERlBsdWdpbjo6SFVEOjpmcmFtZUluUm9vdFZpZXcoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgY29tZSBmcm9tIFBERktpdC4KKyAgICBjb25zdCBpbnQg
SFVEV2lkdGggPSAyMzY7CisgICAgY29uc3QgaW50IEhVREhlaWdodCA9IDcyOworICAgIGNvbnN0
IGludCBIVURZT2Zmc2V0ID0gNTA7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGx1
Z2luLndlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgSW50UmVjdCBmcmFtZVJl
Y3RJblJvb3RWaWV3ID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Sb290VmlldyhmcmFtZVZpZXctPmJv
dW5kc1JlY3QoKSk7CisgICAgRmxvYXRSZWN0IEhVRFJlY3QoZnJhbWVSZWN0SW5Sb290Vmlldy54
KCkgKyAoZnJhbWVSZWN0SW5Sb290Vmlldy53aWR0aCgpIC8gMiAtIChIVURXaWR0aCAvIDIpKSwg
ZnJhbWVSZWN0SW5Sb290Vmlldy55KCkgKyAoZnJhbWVSZWN0SW5Sb290Vmlldy5oZWlnaHQoKSAt
IEhVRFlPZmZzZXQgLSBIVURIZWlnaHQpLCBIVURXaWR0aCwgSFVESGVpZ2h0KTsKKyAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChIVURSZWN0KTsKK30KKworSW50UmVjdCBQREZQbHVnaW46OkhV
RDo6ZnJhbWVJblBERlZpZXcoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBOZWVkIHNvbWUgcmVj
dCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0aGF0IGRvIHRoZSBmbGlwcGluZyB0b28uCisgICAgSW50
UmVjdCBIVURSZWN0SW5QREZWaWV3Q29vcmRpbmF0ZXMobV9wbHVnaW4uY29udmVydEZyb21QbHVn
aW5Ub1BERlZpZXcobV9wbHVnaW4uY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGZyYW1lSW5S
b290VmlldygpLmxvY2F0aW9uKCkpKSwgZnJhbWVJblJvb3RWaWV3KCkuc2l6ZSgpKTsKKyAgICBI
VURSZWN0SW5QREZWaWV3Q29vcmRpbmF0ZXMuc2V0WShIVURSZWN0SW5QREZWaWV3Q29vcmRpbmF0
ZXMueSgpIC0gSFVEUmVjdEluUERGVmlld0Nvb3JkaW5hdGVzLmhlaWdodCgpKTsKKyAgICByZXR1
cm4gSFVEUmVjdEluUERGVmlld0Nvb3JkaW5hdGVzOworfQorCitib29sIFBERlBsdWdpbjo6SFVE
Ojpjb250YWluc1BvaW50SW5Sb290VmlldyhJbnRQb2ludCBwb2ludCkKK3sKKyAgICBpZiAobV9w
bHVnaW4uaXNMb2NrZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UG9pbnQg
cG9zaXRpb25JblBERlZpZXdDb29yZGluYXRlcyhtX3BsdWdpbi5jb252ZXJ0RnJvbVBsdWdpblRv
UERGVmlldyhtX3BsdWdpbi5jb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4ocG9pbnQpKSk7Cisg
ICAgcmV0dXJuIGZyYW1lSW5QREZWaWV3KCkuY29udGFpbnMocG9zaXRpb25JblBERlZpZXdDb29y
ZGluYXRlcyk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpIVUQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5
JiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7
CisgICAgSW50UmVjdCBmcmFtZUluUm9vdFZpZXcgPSB0aGlzLT5mcmFtZUluUm9vdFZpZXcoKTsK
KworICAgIGNvbnRleHQudHJhbnNsYXRlKEludFNpemUoZnJhbWVJblJvb3RWaWV3LngoKSwgZnJh
bWVJblJvb3RWaWV3LnkoKSArIGZyYW1lSW5Sb290Vmlldy5oZWlnaHQoKSkpOworICAgIGNvbnRl
eHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisKKyAgICBJbnRSZWN0IGxvY2FsUmVjdChJbnRQ
b2ludCgpLCBmcmFtZUluUm9vdFZpZXcuc2l6ZSgpKTsKKyAgICBjb250ZXh0LmNsaXAobG9jYWxS
ZWN0KTsKKworICAgIFttX3BsdWdpbi5wZGZMYXllckNvbnRyb2xsZXIoKSBkcmF3SFVESW5Db250
ZXh0OmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCldOworfQorCit2b2lkIFBERlBsdWdpbjo6SFVE
OjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX292ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworfQor
Cit2b2lkIFBERlBsdWdpbjo6SFVEOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSwgYm9vbCBhbmlt
YXRlKQoreworICAgIGlmICh2aXNpYmxlID09IG1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7CisKKyAgICBmbG9hdCB0b1ZhbHVlID0gdmlz
aWJsZSA/IDAuNzUgOiAwOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IHBsYXRmb3JtQ0FM
YXllciA9IGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJDQT4obV9vdmVybGF5LT5sYXllcigpKS5wbGF0
Zm9ybUNBTGF5ZXIoKTsKKworICAgIGlmICghYW5pbWF0ZSkgeworICAgICAgICBwbGF0Zm9ybUNB
TGF5ZXItPnJlbW92ZUFuaW1hdGlvbkZvcktleSgiSFVERmFkZSIpOworICAgICAgICBwbGF0Zm9y
bUNBTGF5ZXItPnNldE9wYWNpdHkodG9WYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBmbG9hdCBkdXJhdGlvbiA9IHZpc2libGUgPyAwLjI1IDogMC41OworCisgICAgUmV0YWlu
UHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBh
bmltYXRpb25XaXRoS2V5UGF0aDpAIm9wYWNpdHkiXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRE
dXJhdGlvbjpkdXJhdGlvbl07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb246
W0NBTWVkaWFUaW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOmtDQU1lZGlhVGltaW5nRnVu
Y3Rpb25FYXNlSW5FYXNlT3V0XV07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RGVsZWdhdGU6W1tb
V0tQREZIVURBbmltYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhBbmltYXRpb25Db21wbGV0
aW9uSGFuZGxlcjpbcGxhdGZvcm1DQUxheWVyLCB0b1ZhbHVlXSAoYm9vbCBjb21wbGV0ZWQpIHsK
KyAgICAgICAgaWYgKGNvbXBsZXRlZCkKKyAgICAgICAgICAgIHBsYXRmb3JtQ0FMYXllci0+c2V0
T3BhY2l0eSh0b1ZhbHVlKTsKKworICAgIH1dIGF1dG9yZWxlYXNlXV07CisgICAgW2ZhZGVBbmlt
YXRpb24gc2V0RnJvbVZhbHVlOkAoKChDQUxheWVyICopcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9y
bUxheWVyKCkucHJlc2VudGF0aW9uTGF5ZXIpLm9wYWNpdHkpXTsKKyAgICBbZmFkZUFuaW1hdGlv
biBzZXRUb1ZhbHVlOkAodG9WYWx1ZSldOworCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+IGFuaW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y3JlYXRlKGZhZGVBbmlt
YXRpb24uZ2V0KCkpOworICAgIHBsYXRmb3JtQ0FMYXllci0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5
KCJIVURGYWRlIik7CisgICAgcGxhdGZvcm1DQUxheWVyLT5hZGRBbmltYXRpb25Gb3JLZXkoIkhV
REZhZGUiLCAqYW5pbWF0aW9uKTsKK30KKworYm9vbCBQREZQbHVnaW46OkhVRDo6bW91c2VFdmVu
dChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAg
aWYgKG1fcGx1Z2luLmlzTG9ja2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IFdlIGRvbid0IHdhbnQgdGhlIEhVRCB0byBhcHBlYXIgd2hlbiBkcmFnZ2luZyBwYXN0IGl0LCBv
ciBkaXNhcHBlYXIgd2hlbiBkcmFnZ2luZyBmcm9tIGEgYnV0dG9uLAorICAgIC8vIHNvIGRvbid0
IHVwZGF0ZSB2aXNpYmlsaXR5IHdoaWxlIGFueSBtb3VzZSBidXR0b25zIGFyZSBwcmVzc2VkLgor
ICAgIGlmIChldmVudC5idXR0b24oKSA9PSBNb3VzZUJ1dHRvbjo6Tm9CdXR0b24pCisgICAgICAg
IHNldFZpc2libGUoY29udGFpbnNQb2ludEluUm9vdFZpZXcoZXZlbnQucG9zaXRpb24oKSksIHRy
dWUpOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0QnV0dG9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5h
dGVzKG1fcGx1Z2luLmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KG1fcGx1Z2luLmNvbnZlcnRG
cm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5wb3NpdGlvbigpKSkpOworICAgIEludFJlY3QgSFVE
UmVjdEluUERGVmlld0Nvb3JkaW5hdGVzID0gZnJhbWVJblBERlZpZXcoKTsKKworICAgIGF1dG8g
ZXZlbnRXaXRoVHlwZSA9IFsmXShOU0V2ZW50VHlwZSBldmVudFR5cGUpIC0+IE5TRXZlbnQgKiB7
CisgICAgICAgIHJldHVybiBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxv
Y2F0aW9uOnBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMgbW9kaWZpZXJGbGFnczowIHRpbWVz
dGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3Vu
dDpldmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CisgICAgfTsKKworICAgIGF1dG8gcGRm
TGF5ZXJDb250cm9sbGVyID0gbV9wbHVnaW4ucGRmTGF5ZXJDb250cm9sbGVyKCk7CisKKyAgICBz
d2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VNb3Zl
ZDoKKyAgICAgICAgcmV0dXJuIFtwZGZMYXllckNvbnRyb2xsZXIgbW91c2VEcmFnZ2VkOmV2ZW50
V2l0aFR5cGUoTlNMZWZ0TW91c2VEcmFnZ2VkKSBpbkhVRFdpdGhCb3VuZHM6SFVEUmVjdEluUERG
Vmlld0Nvb3JkaW5hdGVzXTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDoK
KyAgICAgICAgcmV0dXJuIFtwZGZMYXllckNvbnRyb2xsZXIgbW91c2VEb3duOmV2ZW50V2l0aFR5
cGUoTlNMZWZ0TW91c2VEb3duKSBpbkhVRFdpdGhCb3VuZHM6SFVEUmVjdEluUERGVmlld0Nvb3Jk
aW5hdGVzXTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQ6CisgICAgICAg
IHJldHVybiBbcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlVXA6ZXZlbnRXaXRoVHlwZShOU0xlZnRN
b3VzZVVwKSBpbkhVRFdpdGhCb3VuZHM6SFVEUmVjdEluUERGVmlld0Nvb3JkaW5hdGVzXTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0aW9uLm1tCmluZGV4IGEw
MjlkMjVmOTFlODJlNmRiMWIyZjBmYTVhMmJlMzhkNmMxYzcyYmQuLmRlMzk0YTliODYwNDU3NTRi
ZjEwZTY3NTU4MjE5NDFiMmRiNmUzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkFubm90YXRpb24ubW0KQEAgLTI5
LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2ltcG9ydCAiUERGS2l0
SW1wb3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgorI2ltcG9y
dCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKICNpbXBv
cnQgIlBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCIKICNpbXBvcnQgIlBERlBsdWdpblRleHRB
bm5vdGF0aW9uLmgiCkBAIC05OCwxNCArOTgsMTkgQEAgUERGUGx1Z2luQW5ub3RhdGlvbjo6flBE
RlBsdWdpbkFubm90YXRpb24oKQogdm9pZCBQREZQbHVnaW5Bbm5vdGF0aW9uOjp1cGRhdGVHZW9t
ZXRyeSgpCiB7CiAgICAgSW50U2l6ZSBkb2N1bWVudFNpemUobV9wZGZMYXllckNvbnRyb2xsZXIu
Y29udGVudFNpemVSZXNwZWN0aW5nWm9vbSk7Ci0gICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24o
bV9wZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb24pOwogICAgIE5TUmVjdCBhbm5vdGF0
aW9uUmVjdCA9IE5TUmVjdEZyb21DR1JlY3QoW21fcGRmTGF5ZXJDb250cm9sbGVyIGJvdW5kc0Zv
ckFubm90YXRpb246bV9hbm5vdGF0aW9uLmdldCgpXSk7CiAKICAgICBTdHlsZWRFbGVtZW50KiBz
dHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQoKSk7CiAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRo
LCBhbm5vdGF0aW9uUmVjdC5zaXplLndpZHRoLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVp
Z2h0LCBhbm5vdGF0aW9uUmVjdC5zaXplLmhlaWdodCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCk7CisjaWYgIVVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4pCisgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIGFubm90YXRpb25SZWN0Lm9y
aWdpbi54LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBkb2N1bWVudFNpemUuaGVpZ2h0
KCkgLSBhbm5vdGF0aW9uUmVjdC5vcmlnaW4ueSAtIGFubm90YXRpb25SZWN0LnNpemUuaGVpZ2h0
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyNlbHNlCisgICAgSW50UG9pbnQgc2Nyb2xs
UG9zaXRpb24obV9wZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb24pOwogICAgIHN0eWxl
ZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBhbm5vdGF0
aW9uUmVjdC5vcmlnaW4ueCAtIHNjcm9sbFBvc2l0aW9uLngoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QWCk7CiAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRvcCwgZG9jdW1lbnRTaXplLmhlaWdodCgpIC0gYW5ub3RhdGlvblJlY3Qub3JpZ2lu
LnkgLSBhbm5vdGF0aW9uUmVjdC5zaXplLmhlaWdodCAtIHNjcm9sbFBvc2l0aW9uLnkoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVnaW5Bbm5v
dGF0aW9uOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFu
bm90YXRpb24ubW0KaW5kZXggNjIxZGMwMTFkYjg3NGZkZjNkZjIzMDVhZTQwNzM2NzlmMzZmMGYz
OS4uNzExMTU2MWM0ZGIzYzY3ODNlYzIyY2RkN2JkMTJiMzUzZDAzNTgyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5v
dGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiUERG
UGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oIgogCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCi0j
aW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgiCisjaW1wb3J0ICJQREZMYXllckNv
bnRyb2xsZXJTUEkuaCIKICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ1NTUHJpbWl0aXZlVmFsdWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJvcGVydHlOYW1l
cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5QYXNzd29yZEZpZWxkLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tCmluZGV4IDczOThiNTM2MDk3NTdmNmNj
N2I4YTRmYTMxYTE0YTc4MmFhMTVkNjAuLmIyYTNjN2YwZmVmYTViYjBmNTdmMTM1ZDNiMzZhYzcw
MjE3ZWRkN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW0KQEAgLTI5LDcgKzI5LDcg
QEAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5o
IgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgorI2ltcG9ydCAiUERGTGF5
ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKICNpbXBvcnQgPFBERktp
dC9QREZLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24u
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblRleHRB
bm5vdGF0aW9uLm1tCmluZGV4IGE0YjQ5YTE0MGRmMmQxMThkZDE0NDUyNmY4OTkwYzQyYjA4NmZm
ZjUuLjBiM2FlMDFmNjBjZGE4MGRmZThhYTRhMzA1MjViMTNmNDU4MmUxMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90
YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW5UZXh0QW5ub3RhdGlvbi5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0ICJQREZB
bm5vdGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCIKICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIK
LSNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlckRldGFpbHMuaCIKKyNpbXBvcnQgIlBERkxheWVy
Q29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luLmgiCiAjaW1wb3J0IDxQREZLaXQv
UERGS2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1ByaW1pdGl2ZVZhbHVlLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKaW5kZXggZjI3OWViYmNmNDU3OWE5
OWQ2OGYwYTM3N2UyMThjYTYzYjdiNjhlYi4uMWY1OTJmNWQ4ZGY1NDVmNWMwNWE5NGI2MGJhNDY4
NTgwODUzMDE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4u
aApAQCAtMjIzLDEwICsyMjMsMTAgQEAgcHVibGljOgogCiAgICAgLy8gQXNrIHRoZSBwbHVnLWlu
IHdoZXRoZXIgaXQgd2FudHMgVVJMcyBhbmQgZmlsZXMgZHJhZ2dlZCBvbnRvIGl0IHRvIGNhdXNl
IG5hdmlnYXRpb24uCiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21E
cmFncygpID0gMDsKLSAgICAKKwogICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVyIGl0IHdh
bnRzIHRvIG92ZXJyaWRlIGZ1bGwtcGFnZSB6b29tLgotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVz
UGFnZVNjYWxlRmFjdG9yKCkgPSAwOwotICAgIAorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCkgY29uc3QgPSAwOworCiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gYWJv
dXQgZm9jdXMgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkgPSAwOwog
CkBAIC0yOTgsNiArMjk4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBtdXRlZFN0
YXRlQ2hhbmdlZChib29sKSB7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBjYW5DcmVhdGVUcmFuc2ll
bnRQYWludGluZ1NuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKwogcHJvdGVjdGVkOgogICAgIFBsdWdpbihQbHVnaW5UeXBlKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKaW5kZXggNmQ3YjQ2
ZDJjNjhmYmJjYzRiNTliYTY0MmNjNzFkMDNjODBlY2M3Ny4uM2I1OGUyMGExZmUwZTIzMDk1ZDBj
MTNlYjFjNmM5MzFlYjZjM2Q5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBQbHVnaW5Q
cm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkK
ICAgICByZXR1cm4gZW5hYmxlZDsKIH0KICAgICAKLWJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IoKQorYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rv
cigpIGNvbnN0CiB7CiAgICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRp
b24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ3MCw2ICs0NzAsMTggQEAgYm9vbCBQbHVn
aW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpCiAgICAgcmV0dXJuIGhhbmRsZWQ7CiB9
CiAKK2Jvb2wgUGx1Z2luUHJveHk6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3QK
K3sKKyAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOworICAgIGlmICgh
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250
cm9sbGVyUHJveHk6OlJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCksIE1lc3NhZ2VzOjpQbHVn
aW5Db250cm9sbGVyUHJveHk6OlJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yOjpSZXBseShyZXF1
aXJlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gcmVxdWlyZWQ7Cit9CisKIE5QT2JqZWN0KiBQbHVnaW5Qcm94eTo6cGx1Z2lu
U2NyaXB0YWJsZU5QT2JqZWN0KCkKIHsKICAgICAvLyBTZW5kaW5nIHRoZSBzeW5jaHJvbm91cyBN
ZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpHZXRQbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QgbWVzc2FnZSBjYW4gY2F1c2UgdXMgdG8gZGlzcGF0Y2ggYW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgKaW5kZXggNzdhZDRlNjkwN2VlNGUx
ZjU5Mjk3OWIwZjQ2ZDc4Y2M3MjEzMGM3MC4uOTMwZGIyYTBhMDM1MmM2MmZiODcwMWFjODFlNzBk
MGJhZTFmMDFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb3h5LmgKQEAgLTExMiw3ICsxMTIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRBbGxvd1NjcmlwdGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9y
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxl
RmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiAgICAgdmlydHVhbCBOUE9iamVjdCogcGx1
Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBjMzk2ZTg0ODZlOWI1ZTFm
NWYyMDg2OTkwY2NhYzkzYzFlMzMyYTRlLi5iNDg5OGYyNzg3ZGViYTAwOGJhZmZkMjYwMGE2OTYz
N2QxYzdhY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCkBAIC01MjEsNiArNTIxLDE0IEBAIGJvb2wgUGx1Z2luVmlldzo6aGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGx1Z2luLT5oYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCk7CiB9CiAKK2Jvb2wgUGx1Z2luVmlldzo6cmVxdWlyZXNVbmlmaWVkU2Nh
bGVGYWN0b3IoKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW4gfHwgIW1faXNJbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fcGx1Z2luLT5yZXF1aXJl
c1VuaWZpZWRTY2FsZUZhY3RvcigpOworfQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBhZ2VEZXN0
cm95ZWQoKQogewogICAgIG1fd2ViUGFnZSA9IDA7CkBAIC0xODYzLDYgKzE4NzEsOSBAQCBib29s
IFBsdWdpblZpZXc6OnNob3VsZENyZWF0ZVRyYW5zaWVudFBhaW50aW5nU25hcHNob3QoKSBjb25z
dAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFtX3BsdWdpbi0+Y2FuQ3JlYXRlVHJhbnNp
ZW50UGFpbnRpbmdTbmFwc2hvdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmgKaW5kZXggNzhhOGRjYjg4M2YwZDFiYTIyN2ViOGY4ZWNjOWRlY2RhMzgxNGY2Yy4u
MjIyNmVhYmE4ZTc5ZTM2OWMwM2RjZDMxM2QyYWY4M2FiMjU3OWNkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC05Nyw2ICs5Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3Is
IFdlYkNvcmU6OkludFBvaW50IG9yaWdpbik7CiAgICAgZG91YmxlIHBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0OwogICAgIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0OworICAgIGJv
b2wgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdDsKIAogICAgIHZvaWQgcGFnZVNj
YWxlRmFjdG9yRGlkQ2hhbmdlKCk7CiAgICAgdm9pZCB0b3BDb250ZW50SW5zZXREaWRDaGFuZ2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggMGIwM2Y0YzAzOTVhNTE3
ZThiZjAxMDk5YTVkZjdmYmJiZGI5OTI1Ni4uM2UwZWFmZjYyOTc0OTdkMmI4M2U2MzhjMDU3OGU0
NjgzNzM3YmI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTQ2MSw3
ICs0NjEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExv
YWQoKQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAKLSAgICB3ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1pdExvYWRGb3JGcmFtZShtX2ZyYW1lLT5m
cmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBkb2N1bWVudExvYWRlci5y
ZXNwb25zZSgpLm1pbWVUeXBlKCksIG1fZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkubG9hZFR5
cGUoKSksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkuY2VydGlmaWNhdGVJbmZvKCksIG1fZnJh
bWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCksIFVzZXJEYXRh
KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRM
b2FkZXIubmF2aWdhdGlvbklEKCksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkubWltZVR5cGUo
KSwgbV9mcmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgbV9mcmFtZS0+aGFuZGxlc1BhZ2VT
Y2FsZUdlc3R1cmUoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fZnJhbWUtPmNvcmVGcmFtZSgp
LT5sb2FkZXIoKS5sb2FkVHlwZSgpKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5jZXJ0aWZp
Y2F0ZUluZm8oKSwgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPmlzUGx1Z2luRG9j
dW1lbnQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAgICAgd2ViUGFnZS0+ZGlkQ29t
bWl0TG9hZChtX2ZyYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggY2NjYjhiNmFkZDQ2OTk3M2JkZTQ1NjZiZTg2OTE0N2Y4
ZjA4NjhhNC4uOWZiMGRjYjcwMTRkMDI2NTRmZjJjMjY1MWMyZjA1Y2VmYTJjMDEzOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC01MTQs
NiArNTE0LDE2IEBAIGJvb2wgV2ViRnJhbWU6OmhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKCkgY29u
c3QKICAgICByZXR1cm4gcGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxl
RmFjdG9yKCk7CiB9CiAKK2Jvb2wgV2ViRnJhbWU6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9y
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29yZUZyYW1lLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGx1Z2luRG9jdW1lbnQqIHBsdWdp
bkRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihtX2NvcmVGcmFtZS0+ZG9j
dW1lbnQoKSk7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdp
blZpZXcqPihwbHVnaW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworICAgIHJldHVybiBwbHVn
aW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCk7Cit9CisK
IHZvaWQgV2ViRnJhbWU6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0IFN0cmluZyYgYWNjZXNzaWJs
ZU5hbWUpCiB7CiAgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1l
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAppbmRleCBh
YjQyMWZiYzcxNmZjYmJhYzA1ZjAyM2I4ZjI3YzFmOGZkYzQzZTNkLi4wZjU2MTgxNDBiZTM0ZmI4
OTU4YzQ1MmU5MjYxOGM4OWY1NzcxNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1YmxpYzoKICAgICBib29s
IGNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wTG9hZGluZygp
OwogICAgIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUoKSBjb25zdDsKKyAgICBib29sIHJl
cXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBY2Nlc3NpYmxl
TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZSogZnJhbWVGb3JDb250
ZXh0KEpTQ29udGV4dFJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggMmE3ZGYzNTQzN2U5OTdjZDFhZmQ1YWZlYTI5YmMzYTYxNzVmZTc4
ZS4uZDgzZjRhYWIyMmViMGNmMDM2NjFhMWQwOTU2MzJkYzhiMmFiYzhhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTM0Myw2ICsxMzQz
LDEzIEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIGRvdWJsZSBXZWJQYWdlOjp0ZXh0Wm9vbUZh
Y3RvcigpIGNvbnN0CiB7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdG
b3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSk7CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1
Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSkgeworICAgICAgICBpZiAocGx1
Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICAgICAgcmV0dXJuIHBs
dWdpblZpZXctPnBhZ2VTY2FsZUZhY3RvcigpOworICAgICAgICByZXR1cm4gcGFnZVNjYWxlRmFj
dG9yKCk7CisgICAgfQorCiAgICAgRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAxOwpAQCAtMTM1Miw4ICsxMzU5
LDEzIEBAIGRvdWJsZSBXZWJQYWdlOjp0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0CiB2b2lkIFdlYlBh
Z2U6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogewogICAgIFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkp
OwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0
b3IoKSkKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5yZXF1aXJlc1VuaWZpZWRT
Y2FsZUZhY3RvcigpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxl
RmFjdG9yKCkpCisgICAgICAgICAgICBwbHVnaW5WaWV3LT5zZXRQYWdlU2NhbGVGYWN0b3Ioem9v
bUZhY3RvciwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjYWxlUGFn
ZSh6b29tRmFjdG9yLCBJbnRQb2ludCgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAg
IEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKICAgICBpZiAoIWZyYW1l
KQpAQCAtMTM2NCw4ICsxMzc2LDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0VGV4dFpvb21GYWN0b3Io
ZG91YmxlIHpvb21GYWN0b3IpCiBkb3VibGUgV2ViUGFnZTo6cGFnZVpvb21GYWN0b3IoKSBjb25z
dAogewogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1f
cGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPmhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPnBhZ2VT
Y2FsZUZhY3RvcigpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVz
VW5pZmllZFNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5wYWdlU2Nh
bGVGYWN0b3IoKTsKKyAgICAgICAgcmV0dXJuIHBhZ2VTY2FsZUZhY3RvcigpOworICAgIH0KIAog
ICAgIEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQpAQCAtMTM3Niw4ICsxMzkxLDExIEBAIGRvdWJsZSBXZWJQYWdlOjpwYWdlWm9vbUZhY3Rv
cigpIGNvbnN0CiB2b2lkIFdlYlBhZ2U6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6b29tRmFj
dG9yKQogewogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUo
Jm1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXct
PmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgewotICAgICAgICBwbHVnaW5WaWV3LT5zZXRQYWdl
U2NhbGVGYWN0b3Ioem9vbUZhY3RvciwgSW50UG9pbnQoKSk7CisgICAgaWYgKHBsdWdpblZpZXcg
JiYgcGx1Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSkgeworICAgICAgICBp
ZiAocGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICAgICAgcGx1
Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKHpvb21GYWN0b3IsIEludFBvaW50KCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzY2FsZVBhZ2Uoem9vbUZhY3RvciwgSW50UG9pbnQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzOTAsOCArMTQwOCwxMSBAQCB2b2lkIFdl
YlBhZ2U6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogdm9pZCBXZWJQYWdl
OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGRvdWJsZSBwYWdlWm9vbUZhY3RvciwgZG91Ymxl
IHRleHRab29tRmFjdG9yKQogewogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5W
aWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYm
IHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgewotICAgICAgICBwbHVnaW5W
aWV3LT5zZXRQYWdlU2NhbGVGYWN0b3IocGFnZVpvb21GYWN0b3IsIEludFBvaW50KCkpOworICAg
IGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9y
KCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkK
KyAgICAgICAgICAgIHBsdWdpblZpZXctPnNldFBhZ2VTY2FsZUZhY3RvcihwYWdlWm9vbUZhY3Rv
ciwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjYWxlUGFnZShwYWdl
Wm9vbUZhY3RvciwgSW50UG9pbnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpp
bmRleCA3NjkyMzgwODQ2NTE2M2EzNjQzYTY4OGNiOTAzNThlYTFmNjhjNWE2Li45NzU4NWM2NmU4
ODg3MDM1ZmExODNhZDE4NDdkNTkwZGQ5YzczZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC01OTMsNyArNTkzLDcg
QEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yU2Vs
ZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWMKICAgICBpZiAoIXNlbGVjdGlvbi5zdHJpbmcubGVu
Z3RoKQogICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKIAotICAgIE5TUmVjdCBy
YW5nZVJlY3QgPSBwZGZQbHVnaW4udmlld1JlY3RGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAg
ICBOU1JlY3QgcmFuZ2VSZWN0ID0gcGRmUGx1Z2luLnJlY3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3
KHNlbGVjdGlvbik7CiAKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmlu
ZyA9IHNlbGVjdGlvbi5hdHRyaWJ1dGVkU3RyaW5nOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263543</attachid>
            <date>2015-10-19 19:34:47 -0700</date>
            <delta_ts>2015-11-02 14:29:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150037-20151019193405.patch</filename>
            <type>text/plain</type>
            <size>228386</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk2NGZmNGE3OWFmYTc5
MWU3NmMzMGY0YTU0YWI1MzViN2RhYWFjNy4uOGI4ZjRmMzQzMjg3YmQxYjI3YTMxYTA0M2ExNGJm
NDNhYjc3NDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE1LTEwLTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFBERlBsdWdpbiBz
aG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhyZWFkZWQgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICBEb24ndCBy
ZXNldCB0aGUgb3ZlcmxheSBsYXllcidzIG9wYWNpdHkgaWYgd2UncmUgbm90IGFuaW1hdGluZywK
KyAgICAgICAgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRoZSBjbGllbnQgd2FudHMgdG8gbWFuYWdl
IGl0LgorCisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3Vz
U2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMpOgorICAgICAgICBMZXQgdGhlIG92ZXJsYXkgaXRz
ZWxmIGRldGVybWluZSB3aGV0aGVyIGl0IG5lZWRlcyBzeW5jaHJvbm91cyBzY3JvbGxpbmcsCisg
ICAgICAgIGFuZCBsZXQgUGFnZU92ZXJsYXkgY2xpZW50cyBvdmVycmlkZSB0aGUgZGVmYXVsdC4K
KworICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
Ojpib3VuZHNSZWN0KToKKyAgICAgICAgRXhwb3J0IGEgZmV3IHVzZWZ1bCB0aGluZ3MuCisKIDIw
MTUtMTAtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCBidWlsZCBmaXggZm9yIEVOQUJMRShNRURJQV9TRVNTSU9OKSBhZnRlciByMTkwMDMw
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGMzOTM3M2VkYzU5ZjI1MmFkZDgzMzM5ZTRhNWUwNzljMzJiODgzYmQu
LjExNWNhZGU0ZGUyNTUxZWQ1ZWE3Mzc0NTBkZWVmNmFkYzcyZGU3YTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxNS0xMC0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KKworICAgICAgICBQREZQbHVnaW4gc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIHRo
cmVhZGVkIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwMDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRHVwbGljYXRlIFBERlBsdWdpbiwgY3JlYXRpbmcgUERGUGx1Z2luICh0aGUgbW9k
ZXJuIHZlcnNpb24pLCBhbmQKKyAgICAgICAgRGVwcmVjYXRlZFBERlBsdWdpbiAoY29udGFpbmlu
ZyB0aGUgY29kZSB0aGF0IHVzZWQgdG8gYmUgaW4gUERGUGx1Z2luCisgICAgICAgIHByaW9yIHRv
IHRoaXMgcGF0Y2gpLgorCisgICAgICAgIFRoZSBuZXcgUERGUGx1Z2luIGRpZmZlcnMgZnJvbSB0
aGUgb2xkIG9uZSBpbiBhIGZldyBzaWduaWZpY2FudCB3YXlzLAorICAgICAgICBhbmQgd2UgbmVl
ZCB0byBrZWVwIGJvdGggYWxpdmUgZm9yIHRoZSB0aW1lIGJlaW5nLiBTaWduaWZpY2FudCBkaWZm
ZXJlbmNlcworICAgICAgICBpbmNsdWRlOgorCisgICAgICAgIC0gUERGUGx1Z2luIGlzIG5vIGxv
bmdlciBhIFNjcm9sbGFibGVBcmVhCisgICAgICAgIC0gUERGUGx1Z2luIG5vIGxvbmdlciBob3N0
cyBsYXllcnMgb3duZWQgYnkgUERGS2l0OyBpbnN0ZWFkLCBpdCBkcmF3cworICAgICAgICAgIGlu
dG8gdGhlIHBhZ2UgdGlsZXMsIGFsbG93aW5nIFdlYkNvcmUncyB0aHJlYWRlZCBzY3JvbGxpbmcg
dG8gZG8gaXRzIGpvYgorICAgICAgICAtIFBERlBsdWdpbiBub3cgcmVzaXplcyBpdHNlbGYgdG8g
dGhlIHNpemUgb2YgdGhlIGRvY3VtZW50CisgICAgICAgIC0gUERGUGx1Z2luIGRvZXNuJ3QgaGFu
ZGxlIHpvb21pbmcgaXRzZWxmLCBpdCBqdXN0IGRlbGVnYXRlcyB0byB0aGUgcGFnZQorICAgICAg
ICAtIFBERkxheWVyQ29udHJvbGxlciBoYXMgbGFyZ2UgYW5kIGluY29tcGF0aWJsZSBBUEkgY2hh
bmdlcworICAgICAgICAtIFBERlBsdWdpbiBub3cgaW1wbGVtZW50cyBtb3JlIG9mIHRoZSBIVUQg
YmVoYXZpb3IsIGJ1dCBpdCdzIHN0aWxsCisgICAgICAgICAgcGFpbnRlZCBieSBQREZMYXllckNv
bnRyb2xsZXIgKGludG8gYSB2aWV3LXJlbGF0aXZlIFBhZ2VPdmVybGF5KQorCisgICAgICAgIFsg
RmlsZSBsaXN0IGVsaWRlZCBiZWNhdXNlIGl0J3MgbG9uZyBhbmQgdXNlbGVzcy4gXQorCiAyMDE1
LTEwLTA4ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAg
ICAgICBGb3JtYXQgc3RyaW5nIGlzc3VlcyBpbiBOZXR3b3JrQ2FjaGUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZU92ZXJsYXkuY3BwCmluZGV4IGU1NjYwMGJjMDBlMDQ5N2YxMjA4NDQ0MGIwMGVkMDk2
MjJkZDcyOWUuLmFkZjA3ODJlNzZmMTRlZjJhYWE3NjgzNTIxYmJkZWNhM2FjNjJiYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCkBAIC01MywxNCArNTMsMTAgQEAgUmVmPFBhZ2VP
dmVybGF5PiBQYWdlT3ZlcmxheTo6Y3JlYXRlKENsaWVudCYgY2xpZW50LCBPdmVybGF5VHlwZSBv
dmVybGF5VHlwZSkKIAogUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KENsaWVudCYgY2xpZW50LCBP
dmVybGF5VHlwZSBvdmVybGF5VHlwZSkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1f
cGFnZShudWxscHRyKQogICAgICwgbV9mYWRlQW5pbWF0aW9uVGltZXIoKnRoaXMsICZQYWdlT3Zl
cmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX2ZhZGVBbmltYXRpb25TdGFy
dFRpbWUoMCkKICAgICAsIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uKGZhZGVBbmltYXRpb25EdXJh
dGlvbikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblR5cGUoTm9BbmltYXRpb24pCi0gICAgLCBtX2Zy
YWN0aW9uRmFkZWRJbigxKQorICAgICwgbV9uZWVkc1N5bmNocm9ub3VzU2Nyb2xsaW5nKG92ZXJs
YXlUeXBlID09IE92ZXJsYXlUeXBlOjpWaWV3KQogICAgICwgbV9vdmVybGF5VHlwZShvdmVybGF5
VHlwZSkKLSAgICAsIG1fYmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKICAgICAs
IG1fcGFnZU92ZXJsYXlJRChnZW5lcmF0ZVBhZ2VPdmVybGF5SUQoKSkKIHsKIH0KQEAgLTE2Myw3
ICsxNTksOCBAQCB2b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFBhZ2UqIHBhZ2UpCiB2b2lkIFBh
Z2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewog
ICAgIGlmIChhdXRvIHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoKSkgewotICAg
ICAgICBwYWdlT3ZlcmxheUNvbnRyb2xsZXItPnNldFBhZ2VPdmVybGF5T3BhY2l0eSgqdGhpcywg
bV9mcmFjdGlvbkZhZGVkSW4pOworICAgICAgICBpZiAobV9mYWRlQW5pbWF0aW9uVHlwZSAhPSBG
YWRlQW5pbWF0aW9uVHlwZTo6Tm9BbmltYXRpb24pCisgICAgICAgICAgICBwYWdlT3ZlcmxheUNv
bnRyb2xsZXItPnNldFBhZ2VPdmVybGF5T3BhY2l0eSgqdGhpcywgbV9mcmFjdGlvbkZhZGVkSW4p
OwogICAgICAgICBwYWdlT3ZlcmxheUNvbnRyb2xsZXItPnNldFBhZ2VPdmVybGF5TmVlZHNEaXNw
bGF5KCp0aGlzLCBkaXJ0eVJlY3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXku
aAppbmRleCBmNzIzNjUwMmU3N2Q3ZGMwNmQ4YzRiMjgzZGMyYWUxOTU4OWE2YzAyLi5iYTY3NDdi
ZjA5YTgyMTcxZjI5MWVkYzg4MTdjYzAzZTlkODdjM2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zl
cmxheS5oCkBAIC0xMTMsNiArMTEzLDkgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBQYWdlT3Zl
cmxheSBzaG91bGQgb3duIGl0cyBsYXllciwgaW5zdGVhZCBvZiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuCiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NMYXllciYgbGF5ZXIoKTsKIAorICAgIGJv
b2wgbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTeW5j
aHJvbm91c1Njcm9sbGluZzsgfQorICAgIHZvaWQgc2V0TmVlZHNTeW5jaHJvbm91c1Njcm9sbGlu
Zyhib29sIG5lZWRzU3luY2hyb25vdXNTY3JvbGxpbmcpIHsgbV9uZWVkc1N5bmNocm9ub3VzU2Ny
b2xsaW5nID0gbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZzsgfQorCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCYsIE92ZXJsYXlUeXBlKTsKIApAQCAtMTIwLDEwICsx
MjMsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZhZGVBbmltYXRpb25UaW1lckZpcmVkKCk7CiAK
ICAgICBDbGllbnQmIG1fY2xpZW50OwotICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBQYWdlKiBtX3Bh
Z2UgeyBudWxscHRyIH07CiAKICAgICBUaW1lciBtX2ZhZGVBbmltYXRpb25UaW1lcjsKLSAgICBk
b3VibGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lOworICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRp
b25TdGFydFRpbWUgeyAwIH07CiAgICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwog
CiAgICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7CkBAIC0xMzIsMTMgKzEzNSwxNSBAQCBwcml2
YXRlOgogICAgICAgICBGYWRlT3V0QW5pbWF0aW9uLAogICAgIH07CiAKLSAgICBGYWRlQW5pbWF0
aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBlOwotICAgIGZsb2F0IG1fZnJhY3Rpb25GYWRlZElu
OworICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5cGUgeyBOb0FuaW1hdGlv
biB9OworICAgIGZsb2F0IG1fZnJhY3Rpb25GYWRlZEluIHsgMSB9OworCisgICAgYm9vbCBtX25l
ZWRzU3luY2hyb25vdXNTY3JvbGxpbmc7CiAKICAgICBPdmVybGF5VHlwZSBtX292ZXJsYXlUeXBl
OwogICAgIEludFJlY3QgbV9vdmVycmlkZUZyYW1lOwogCi0gICAgUkdCQTMyIG1fYmFja2dyb3Vu
ZENvbG9yOworICAgIFJHQkEzMiBtX2JhY2tncm91bmRDb2xvciB7IENvbG9yOjp0cmFuc3BhcmVu
dCB9OwogICAgIFBhZ2VPdmVybGF5SUQgbV9wYWdlT3ZlcmxheUlEOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmluZGV4IDQyYzc4MGMwNDc5
NWY1MTM2NDQ3YzgyZGIyYjdiZjdlNDgyNjhhNGEuLmZjZDlkN2ViM2VjYjBjYmMwZjg3YzVmY2Y4
YTFmYzJlNGI4NDg5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJs
YXlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6dXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKICAg
ICBib29sIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyA9IGZhbHNl
OwogCiAgICAgZm9yIChhdXRvJiBvdmVybGF5IDogbV9wYWdlT3ZlcmxheXMpIHsKLSAgICAgICAg
aWYgKG92ZXJsYXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpW
aWV3KQorICAgICAgICBpZiAob3ZlcmxheS0+bmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZygpKQog
ICAgICAgICAgICAgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0g
dHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggMDdlNDJjODEyNDM3
OTNiOGNhNmE5ODg0YzliY2RiMTc1MmQ5MTBlYS4uZGNjOWUyY2E5ZTE0ZThlZTE5YzgwMWMxMDZl
MDg3Zjg2MzZiMTU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTExMCw3ICsxMTAs
NyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGZyYW1lUmVj
dCgpIGNvbnN0OwotICAgIEludFJlY3QgYm91bmRzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJl
Y3QoMCwgMCwgd2lkdGgoKSwgIGhlaWdodCgpKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEludFJl
Y3QgYm91bmRzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgMCwgd2lkdGgoKSwgIGhl
aWdodCgpKTsgfQogCiAgICAgdm9pZCByZXNpemUoaW50IHcsIGludCBoKSB7IHNldEZyYW1lUmVj
dChJbnRSZWN0KHgoKSwgeSgpLCB3LCBoKSk7IH0KICAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRT
aXplJiBzKSB7IHNldEZyYW1lUmVjdChJbnRSZWN0KGxvY2F0aW9uKCksIHMpKTsgfQpAQCAtMTUx
LDcgKzE1MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlXaWRnZXQoV2lk
Z2V0Tm90aWZpY2F0aW9uKSB7IH0KIAotICAgIEludFJlY3QgY29udmVydFRvUm9vdFZpZXcoY29u
c3QgSW50UmVjdCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgY29udmVydFRv
Um9vdFZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIEludFJlY3QgY29udmVydEZyb21S
b290Vmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAgICBJbnRQb2ludCBjb252ZXJ0VG9S
b290Vmlldyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmluZGV4IDE2YzNhNDc5
YTUyM2UxYmJjNGZhNzc1ZWE5MDlkYjA4ZDEwYzJjN2IuLmRjNmQzNDMyNjczMzUyYmE0N2M1NmVj
ZWZhMDViNDNjNTdiNzFiOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nl
c3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Q
cm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKQEAgLTU2NSw2ICs1NjUsMTEgQEAgdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoYm9vbCYgaXNI
YW5kbGVkKQogICAgIGlzSGFuZGxlZCA9IG1fcGx1Z2luLT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9y
KCk7CiB9CiAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpyZXF1aXJlc1VuaWZpZWRTY2Fs
ZUZhY3Rvcihib29sJiByZXF1aXJlZCkKK3sKKyAgICByZXF1aXJlZCA9IG1fcGx1Z2luLT5yZXF1
aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpOworfQorCiB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6cGFpbnRFbnRpcmVQbHVnaW4oKQogewogICAgIGlmIChtX3BsdWdpblNpemUuaXNFbXB0eSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxl
clByb3h5LmgKaW5kZXggMmY2Mzg1NmFmNjE5OTcxZDBkMWNmMDViZTUyYjg5NjRkZjEyMzM1Ny4u
MzZiZjA3M2I2NTAyZmQwYTU4ZDk3ZmRjZDc5YWIzZjA2YTMwMzA0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCkBAIC0x
NDQsNiArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wmKTsKICAgICB2b2lkIGlzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYsIGJvb2wmKTsKICAgICB2b2lkIGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoYm9vbCYpOworICAgIHZvaWQgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3Io
Ym9vbCYpOwogICAgIHZvaWQgcGFpbnRFbnRpcmVQbHVnaW4oKTsKICAgICB2b2lkIHN1cHBvcnRz
U25hcHNob3R0aW5nKGJvb2wmKTsKICAgICB2b2lkIHNuYXBzaG90KFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiBiYWNraW5nU3RvcmVIYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgpp
bmRleCBiNWEwNjM2OGZjNGE1YzM3NjIwYmNlZWQ3NmZmMDA0ZjUyNWU4YmJlLi4xOGU4YzgwYjZm
YjdhMzg3Yjk1ZmZkYjc5OGE1NmJiY2VkZDQ3YzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdl
cy5pbgpAQCAtODksNiArODksOSBAQCBtZXNzYWdlcyAtPiBQbHVnaW5Db250cm9sbGVyUHJveHkg
TGVnYWN5UmVjZWl2ZXIgewogICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdh
bnRzIHRvIGhhbmRsZSBwYWdlIHNjYWxlIGZhY3RvciBpdHNlbGYuCiAgICAgSGFuZGxlc1BhZ2VT
Y2FsZUZhY3RvcigpIC0+IChib29sIGVuYWJsZWQpOwogCisgICAgIyBSZXR1cm4gd2hldGhlciBv
ciBub3QgYSBwbHVnaW4gd2FudHMgcGFnZSBzY2FsZSwgcGFnZSB6b29tLCBhbmQgdGV4dCB6b29t
IGFsbCB0byBhZmZlY3QgcGFnZSBzY2FsZS4KKyAgICBSZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rv
cigpIC0+IChib29sIHJlcXVpcmVkKTsKKwogICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGZv
Y3VzIGNoYW5nZXMuCiAgICAgU2V0Rm9jdXMoYm9vbCBpc0ZvY3VzZWQpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmgKaW5kZXggYTFhMTNkM2Q4YTc2N2Q2NjEzNGJj
Mzg2Zjg4NDdkNDg3Y2ZjYWIyZi4uNTAxZjM3NTFlM2VhNGQxYjFlMjY4NzQ1YmMyZTg2MTg5NDYx
YWIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmgKQEAgLTI2
LDYgKzI2LDEyIEBACiAjaWZuZGVmIFBERktpdEltcG9ydHNfaAogI2RlZmluZSBQREZLaXRJbXBv
cnRzX2gKIAorI2lmIF9faGFzX2luY2x1ZGUoPFBERktpdC9QREZMYXllckNvbnRyb2xsZXJWZXJz
aW9uaW5nUHJpdi5oPikKKyNpbXBvcnQgPFBERktpdC9QREZMYXllckNvbnRyb2xsZXJWZXJzaW9u
aW5nUHJpdi5oPgorI2VuZGlmCisKKyNkZWZpbmUgVVNFX0RFUFJFQ0FURURfUERGX1BMVUdJTiAo
IWRlZmluZWQoUERGS0lUX0hBU19QREZMQVlFUkNPTlRST0xMRVJfMikgfHwgIVBERktJVF9IQVNf
UERGTEFZRVJDT05UUk9MTEVSXzIpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBOU1N0cmluZyAq
cGRmS2l0RnJhbWV3b3JrUGF0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCBjMjc2NWRlZjAwYzU5MWZjMjFiYTA4MTE0ZDUzOTFjNWNiMzI3YjU2Li4z
YTYwZGQ2ODMzZTY0NzQwMjhjNmQ0OTQ2MGUyZjg1MDRmMGQ1Yjc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMjIyOCw3ICsyMjI4LDcgQEAgZG91Ymxl
IFdlYlBhZ2VQcm94eTo6cGFnZVpvb21GYWN0b3IoKSBjb25zdAogewogICAgIC8vIFpvb20gZmFj
dG9yIGZvciBub24tUERGIHBhZ2VzIHBlcnNpc3RzIGFjcm9zcyBwYWdlIGxvYWRzLiBXZSBtYWlu
dGFpbiBhIHNlcGFyYXRlIG1lbWJlciB2YXJpYWJsZSBmb3IgUERGCiAgICAgLy8gem9vbSB3aGlj
aCBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBQREYgem9vbSBmb3IgYSBub3JtYWwgcGFn
ZS4KLSAgICBpZiAobV9tYWluRnJhbWUgJiYgbV9tYWluRnJhbWUtPmlzRGlzcGxheWluZ1BERkRv
Y3VtZW50KCkpCisgICAgaWYgKG1fbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1
cmUpCiAgICAgICAgIHJldHVybiBtX3BsdWdpblpvb21GYWN0b3I7CiAgICAgcmV0dXJuIG1fcGFn
ZVpvb21GYWN0b3I7CiB9CkBAIC0yMjM3LDcgKzIyMzcsNyBAQCBkb3VibGUgV2ViUGFnZVByb3h5
OjpwYWdlU2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIC8vIFBERiBkb2N1bWVudHMgdXNlIHpv
b20gYW5kIHNjYWxlIGZhY3RvcnMgdG8gc2l6ZSB0aGVtc2VsdmVzIGFwcHJvcHJpYXRlbHkgaW4g
dGhlIHdpbmRvdy4gV2Ugc3RvcmUgdGhlbQogICAgIC8vIHNlcGFyYXRlbHkgYnV0IGRlY2lkZSB3
aGljaCB0byByZXR1cm4gYmFzZWQgb24gdGhlIG1haW4gZnJhbWUuCi0gICAgaWYgKG1fbWFpbkZy
YW1lICYmIG1fbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdQREZEb2N1bWVudCgpKQorICAgIGlmICht
X21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKQogICAgICAgICByZXR1cm4g
bV9wbHVnaW5TY2FsZUZhY3RvcjsKICAgICByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7CiB9CkBA
IC0yOTM0LDcgKzI5MzQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJMb2FkRGVwZW5kZW50
Q2FsbGJhY2tzKCkKICAgICB9CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2Fk
Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBib29sIGZyYW1lSGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCB1aW50
MzJfdCBvcGFxdWVGcmFtZUxvYWRUeXBlLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
IGNlcnRpZmljYXRlSW5mbywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBjb25zdCBVc2Vy
RGF0YSYgdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBmcmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgYm9vbCBwbHVnaW5I
YW5kbGVzUGFnZVNjYWxlR2VzdHVyZSwgdWludDMyX3Qgb3BhcXVlRnJhbWVMb2FkVHlwZSwgY29u
c3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgY29udGFp
bnNQbHVnaW5Eb2N1bWVudCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewogICAgIFBhZ2VD
bGllbnRQcm90ZWN0b3IgcHJvdGVjdG9yKG1fcGFnZUNsaWVudCk7CiAKQEAgLTI5OTMsOSArMjk5
MywxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRAogICAgIC8vIFdlYlBhZ2VQcm94eSdzIGNh
Y2hlIG9mIHRoZSB2YWx1ZSBjYW4gZ2V0IG91dCBvZiBzeW5jIChlLmcuIGluIHRoZSBjYXNlIHdo
ZXJlIGEKICAgICAvLyBwbHVnaW4gaXMgaGFuZGxpbmcgcGFnZSBzY2FsaW5nIGl0c2VsZikgc28g
d2Ugc2hvdWxkIHJlc2V0IGl0IHRvIHRoZSBkZWZhdWx0CiAgICAgLy8gZm9yIHN0YW5kYXJkIG1h
aW4gZnJhbWUgbG9hZHMuCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpICYmIHN0YXRpY19j
YXN0PEZyYW1lTG9hZFR5cGU+KG9wYXF1ZUZyYW1lTG9hZFR5cGUpID09IEZyYW1lTG9hZFR5cGU6
OlN0YW5kYXJkKSB7Ci0gICAgICAgIG1fcGFnZVNjYWxlRmFjdG9yID0gMTsKLSAgICAgICAgbV9w
bHVnaW5TY2FsZUZhY3RvciA9IDE7CisgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKSB7Cisg
ICAgICAgIG1fbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUgPSBwbHVnaW5I
YW5kbGVzUGFnZVNjYWxlR2VzdHVyZTsKKworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RnJhbWVM
b2FkVHlwZT4ob3BhcXVlRnJhbWVMb2FkVHlwZSkgPT0gRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQp
IHsKKyAgICAgICAgICAgIG1fcGFnZVNjYWxlRmFjdG9yID0gMTsKKyAgICAgICAgICAgIG1fcGx1
Z2luU2NhbGVGYWN0b3IgPSAxOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9wYWdlTG9hZFN0
YXRlLmNvbW1pdENoYW5nZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAppbmRleCA1M2I3ZjkzZjI3ZDhjMDI5ZDFjZTIzM2FhM2FlZjA2Y2FmMWZhYjhiLi5lYWRjNTNl
MmNjMmRhMzEzZTFlNGM4YjFkY2Y3MjMxNjkyN2E4Nzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xMTA4LDcgKzExMDgsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWlu
dDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBTdHJpbmcmLCBjb25z
dCBVc2VyRGF0YSYpOwogICAgIHZvaWQgZGlkQ2hhbmdlUHJvdmlzaW9uYWxVUkxGb3JGcmFtZSh1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgdXJs
KTsKICAgICB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIGZyYW1lU2VjdXJpdHlPcmln
aW4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiBwcm92aXNpb25hbFVSTCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFVzZXJEYXRhJik7Ci0gICAgdm9p
ZCBkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdh
dGlvbklELCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGZyYW1lSGFzQ3VzdG9tQ29udGVu
dFByb3ZpZGVyLCB1aW50MzJfdCBmcmFtZUxvYWRUeXBlLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mLCBib29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIGNvbnN0IFVzZXJEYXRhJik7
CisgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0
X3QgbmF2aWdhdGlvbklELCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGZyYW1lSGFzQ3Vz
dG9tQ29udGVudFByb3ZpZGVyLCBib29sIG1haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVH
ZXN0dXJlLCB1aW50MzJfdCBmcmFtZUxvYWRUeXBlLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8mLCBib29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIGNvbnN0IFVzZXJEYXRhJik7CiAg
ICAgdm9pZCBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1
aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBkaWRGaW5p
c2hMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBj
b25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgZGlkRmFpbExvYWRGb3JGcmFtZSh1aW50NjRfdCBm
cmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImLCBjb25zdCBVc2VyRGF0YSYpOwpAQCAtMTcxNiw2ICsxNzE2LDggQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fc2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90czsKICAgICBib29sIG1faXNT
aG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdDsKIAorICAgIGJvb2wgbV9tYWluRnJhbWVQ
bHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSB7IGZhbHNlIH07CisKICAgICB1bnNpZ25lZCBt
X3BhZ2VDb3VudDsKIAogICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlU2Nyb2xsZXJUaHVt
YlJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgppbmRleCA2OGZkMDUzYWYwNjc1ZWE1OTZmYTM5ZTMxNjcyYTNkZWRjZDRiNjU4Li5k
Yjc2ZjU0MGNhYWJhOTA5MGJlMTk1MmZlYzU5NGIyMjBhOTg1NDVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTEzMCw3ICsx
MzAsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IG5hdmlnYXRpb25JRCwgU3RyaW5nIHVybCwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkK
ICAgICBEaWRDaGFuZ2VQcm92aXNpb25hbFVSTEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IG5hdmlnYXRpb25JRCwgU3RyaW5nIHVybCkKICAgICBEaWRGYWlsUHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YSBmcmFtZVNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIFN0cmlu
ZyBwcm92aXNpb25hbFVSTCwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViS2l0OjpV
c2VyRGF0YSB1c2VyRGF0YSkKLSAgICBEaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBTdHJpbmcgbWltZVR5cGUsIGJvb2wgaGFzQ3Vz
dG9tQ29udGVudFByb3ZpZGVyLCB1aW50MzJfdCBsb2FkVHlwZSwgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvIGNlcnRpZmljYXRlSW5mbywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBXZWJL
aXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQorICAgIERpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIFN0cmluZyBtaW1lVHlwZSwgYm9vbCBo
YXNDdXN0b21Db250ZW50UHJvdmlkZXIsIGJvb2wgcGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1
cmUsIHVpbnQzMl90IGxvYWRUeXBlLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNh
dGVJbmZvLCBib29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIFdlYktpdDo6VXNlckRhdGEgdXNl
ckRhdGEpCiAgICAgRGlkRmFpbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBuYXZpZ2F0aW9uSUQsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYktpdDo6VXNl
ckRhdGEgdXNlckRhdGEpCiAgICAgRGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUodWludDY0
X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJE
YXRhKQogICAgIERpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBuYXZpZ2F0aW9uSUQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmVjZDQzNDA3
ZDcyNzkwYzdmZGZjY2Y4ZmVmNjE2NDEyMDIwODkyZC4uN2ExMGNiNzc1MjIzZjgzOWI1YTEyMWRj
ZWRmNTk1NTE3ZTY4YzNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE0LDggKzMxNCw4IEBACiAJCTFBODFCMzgwMThCRDY2
QUQwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4MUIzN0UxOEJENjZBRDAwMDdGREFDIC8qIF9X
S1Zpc2l0ZWRMaW5rU3RvcmUubW0gKi87IH07CiAJCTFBODFCMzgxMThCRDY2QUQwMDA3RkRBQyAv
KiBfV0tWaXNpdGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTgxQjM3RjE4QkQ2NkFEMDAwN0ZEQUMgLyogX1dLVmlzaXRlZExpbmtT
dG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTFBODFCMzg1MThCRDY3M0EwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBODFCMzg0
MThCRDY3M0EwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCAqLzsgfTsK
LQkJMUE4QjY2QjAxQkM0M0M4NjAwODJERjc3IC8qIFBhZ2VMb2FkU3RhdGVPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4QjY2QUUxQkM0
M0M4NjAwODJERjc3IC8qIFBhZ2VMb2FkU3RhdGVPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtB
U1NFVF9UQUdTID0gKCk7IH07IH07Ci0JCTFBOEI2NkIzMUJDNDVCMDEwMDgyREY3NyAvKiBXS0J1
bmRsZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBOEI2NkIxMUJDNDVCMDEwMDgyREY3NyAvKiBXS0J1bmRsZU1hYy5tbSAqLzsgc2V0dGluZ3Mg
PSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OworCQkxQThCNjZCMDFCQzQzQzg2MDA4MkRGNzcgLyog
UGFnZUxvYWRTdGF0ZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQThCNjZBRTFCQzQzQzg2MDA4MkRGNzcgLyogUGFnZUxvYWRTdGF0ZU9i
c2VydmVyLmggKi87IH07CisJCTFBOEI2NkIzMUJDNDVCMDEwMDgyREY3NyAvKiBXS0J1bmRsZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEI2
NkIxMUJDNDVCMDEwMDgyREY3NyAvKiBXS0J1bmRsZU1hYy5tbSAqLzsgfTsKIAkJMUE4QjY2QjQx
QkM0NUIwMTAwODJERjc3IC8qIFdLQnVuZGxlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQThCNjZCMjFCQzQ1QjAxMDA4MkRGNzcgLyogV0tCdW5k
bGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQThDNzI4QzE3Mzg0NzdDMDAwQTY1NTQgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEM3
MjhBMTczODQ3N0MwMDBBNjU1NCAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwICov
OyB9OwogCQkxQThDNzI4RDE3Mzg0NzdDMDAwQTY1NTQgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QThDNzI4QjE3Mzg0NzdDMDAwQTY1NTQgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgg
Ki87IH07CkBAIC02MDIsNiArNjAyLDcgQEAKIAkJMkQyQURGMDkxNjM2MkRENTAwMTk3RTQ3IC8q
IFBERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQyQURGMDYxNjM2MkRDNzAwMTk3RTQ3IC8qIFBERlBsdWdpblRl
eHRBbm5vdGF0aW9uLm1tICovOyB9OwogCQkyRDJBREYwQjE2MzYyRERCMDAxOTdFNDcgLyogUERG
UGx1Z2luQW5ub3RhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEMkFERjAzMTYzNjI0MzUwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9u
Lm1tICovOyB9OwogCQkyRDJBREYxMDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNl
QW5ub3RhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9u
Lm1tICovOyB9OworCQkyRDM0OTQ2NDFCQ0MyRUMzMDA2NEYwQkUgLyogRGVwcmVjYXRlZFBERlBs
dWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
MDAzNTIzMUJDNzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERGUGx1Z2luLm1tICovOyB9Owog
CQkyRDNBNjVEQTFBN0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0E2NUQ4MUE3
QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuY3BwICovOyB9OwogCQkyRDNB
NjVEQjFBN0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDNBNjVEOTFBN0MzQTFGMDBD
QUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQzQTY1REUxQTdDM0E3RDAwQ0FDNjM3IC8qIFdL
TmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEM0E2NURDMUE3QzNBN0QwMENBQzYzNyAvKiBXS05hdmlnYXRpb25S
ZXNwb25zZVJlZi5jcHAgKi87IH07CkBAIC0yNzI1LDYgKzI3MjYsOCBAQAogCQkyOUQ1NURFRTE2
MUJGODc4MDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2Vi
UGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI5RDU1REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlR3Jv
dXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDM1MjIxQkM3NDE0ODAwREE4
NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRGVwcmVjYXRlZFBERlBsdWdpbi5oOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZQbHVn
aW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDM1MjMxQkM3NDE0ODAwREE4
NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBEZXByZWNhdGVkUERGUGx1Z2luLm1tOyBwYXRoID0gUERGL0RlcHJlY2F0
ZWRQREZQbHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVDMTg1
N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjc0Miw5ICsyNzQ1LDEwIEBACiAJCTJEMkFERjAzMTYzNjI0
MzUwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luQW5ub3RhdGlvbi5tbTsgcGF0aCA9IFBERi9Q
REZQbHVnaW5Bbm5vdGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDJB
REYwNTE2MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luVGV4dEFubm90YXRpb24uaDsgcGF0
aCA9IFBERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRDJBREYwNjE2MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRp
b24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5U
ZXh0QW5ub3RhdGlvbi5tbTsgcGF0aCA9IFBERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8q
IFBERkxheWVyQ29udHJvbGxlckRldGFpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJDb250
cm9sbGVyRGV0YWlscy5oOyBwYXRoID0gUERGL1BERkxheWVyQ29udHJvbGxlckRldGFpbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8q
IERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVwcmVj
YXRlZFBERkxheWVyQ29udHJvbGxlclNQSS5oOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZMYXll
ckNvbnRyb2xsZXJTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyQURGMEQx
NjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oOyBwYXRo
ID0gUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkQyQURGMEUxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90
YXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVn
aW5DaG9pY2VBbm5vdGF0aW9uLm1tOyBwYXRoID0gUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRp
b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEMzQ5NDYzMUJDQzIzQkYwMDY0
RjBCRSAvKiBQREZMYXllckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJD
b250cm9sbGVyU1BJLmg7IHBhdGggPSBQREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEM0E2NUQ4MUE3QzNBMUYwMENBQzYzNyAvKiBXS05h
dmlnYXRpb25BY3Rpb25SZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQzQTY1RDkxQTdDM0ExRjAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlvbkFjdGlvblJlZi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25BY3Rpb25SZWYuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQzQTY1REMxQTdDM0E3RDAwQ0FDNjM3IC8q
IFdLTmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdLTmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTczOTksNyArNzQwMywxMCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQkzNTc0QjM3RjE2NjU5MzJDMDA4NTlCQjcgLyogUERGQW5ub3RhdGlv
blRleHRXaWRnZXREZXRhaWxzLmggKi8sCi0JCQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8q
IFBERkxheWVyQ29udHJvbGxlckRldGFpbHMuaCAqLywKKwkJCQkyRDJBREYwQzE2MzYzREVDMDAx
OTdFNDcgLyogRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxlclNQSS5oICovLAorCQkJCTJEMDAz
NTIyMUJDNzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERGUGx1Z2luLmggKi8sCisJCQkJMkQw
MDM1MjMxQkM3NDE0ODAwREE4NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gKi8sCisJCQkJ
MkQzNDk0NjMxQkNDMjNCRjAwNjRGMEJFIC8qIFBERkxheWVyQ29udHJvbGxlclNQSS5oICovLAog
CQkJCTJEODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4uaCAqLywKIAkJCQkyRDg3
MEQwRTE2MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLm1tICovLAogCQkJCTJEMkFERjAyMTYz
NjI0MzUwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLmggKi8sCkBAIC0xMDA2NSw2ICsx
MDA3Miw3IEBACiAJCQkJQkNCQUFDRUMxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3Vw
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExNTg0MTkxODkwNDRGNTAwMTc2MTZDIC8qIFdLUHJv
Y2Vzc1Bvb2wubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGQjEyQTg4QTU0MDA2Mjk1MzAg
LyogV0tQcm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQzNDk0NjQxQkND
MkVDMzAwNjRGMEJFIC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxQUQwMUJDQzE5MDVENTQ5MDBDOUM0NUYgLyogV0tSZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlB
dHRlbXB0ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTlFMzI5QTE4MjJFMUNDMDBGNUQwNEMg
LyogV0tSZW1vdGVPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTlFMzI5RTE4MjJGRURE
MDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3RDb2Rlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggMzNiOTEzYTlmYmQ5NjczOGZhNThjZjc1ZDUwYTE1MTI3
NGQwYTUyOC4uNWY3ODk2MzdlYTRiNjg0MGY0NGIyNTRmMjgwMjliMTIyYzljNDU4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC05OTcsNyArOTk3LDcgQEAgYm9vbCBOZXRzY2FwZVBs
dWdpbjo6c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQorYm9v
bCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAppbmRleCAyOWUyMmM5Y2VkNjZl
MDdlZmU5NTVhNWYxZmYzODYwYjk3N2I1OWU1Li5kZTJlZmY0ZTU3YjBmNThlY2NhOTI1NzI0MWNl
Zjk0MzVjMDJlMGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaApAQCAtMjI5LDcgKzIyOSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIG92
ZXJyaWRlOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCgpIG92ZXJyaWRlOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRy
b2xsZXJTUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODA0MmUyMTMyMWQyMDA5N2VkYWRhMWJiOGY4NjViMzgy
NTQ2OTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKQEAgLTAsMCArMSwxNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xs
ZXJTUElfaAorI2RlZmluZSBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKKworI2lm
IEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisj
aW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisKK0BjbGFzcyBDUFJlYWRpbmdNb2RlbDsKK0BjbGFz
cyBQREZWaWV3TGF5b3V0OworCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUg
PE5TT2JqZWN0PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bv
c2l0aW9uOworLSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMg
d2l0aFR5cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0
cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9p
bnQpcG9pbnQ7CistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nOwor
LSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZv
aWQpb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbjsKKy0gKHZvaWQpc2F2ZVRvUERGOworCistICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250
cm9sbGVyIGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0
aW9uOworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBk
ZkxheWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsOworLSAodm9p
ZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJv
bGxlciBkaWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7Cist
ICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJD
b250cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpcGRmTGF5
ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlk
Q2hhbmdlU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CisKK0BlbmQKKworQGlu
dGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNl
IFBERkxheWVyQ29udHJvbGxlciAoKQorCitAcHJvcGVydHkgKHJldGFpbikgQ0FMYXllciAqcGFy
ZW50TGF5ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHBy
b3BlcnR5IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsK
KworLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXplOworCistIChQREZEaXNwbGF5TW9k
ZSlkaXNwbGF5TW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheU1vZGU6KFBERkRpc3BsYXlNb2RlKW1v
ZGU7CistICh2b2lkKXNldERpc3BsYXlzUGFnZUJyZWFrczooQk9PTClwYWdlQnJlYWtzOworCist
IChDR0Zsb2F0KWNvbnRlbnRTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFj
dG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yOworCistIChDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9y
OworLSAodm9pZClzZXREZXZpY2VTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKKwor
LSAoQ0dTaXplKWNvbnRlbnRTaXplOworLSAoQ0dTaXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pv
b207CisKKy0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Owor
CistICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9u
IGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRpYXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7CisK
Ky0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247CistICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihD
R1BvaW50KW5ld1Bvc2l0aW9uOworLSAodm9pZClzY3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0
YTsKKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpcmlnaHRN
b3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAq
KWV2ZW50OworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNl
RHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQg
KilldmVudDsKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNN
ZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CisKKy0gKE5TQXJyYXkgKilmaW5k
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNp
dGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNob3VsZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0g
KFBERlNlbGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lkKXNldEN1cnJlbnRTZWxl
Y3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKFBERlNlbGVjdGlvbiAqKXNlYXJj
aFNlbGVjdGlvbjsKKy0gKHZvaWQpc2V0U2VhcmNoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilz
ZWxlY3Rpb247CistICh2b2lkKWdvdG9TZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlv
bjsKKy0gKFBERlNlbGVjdGlvbiAqKWdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50
KXBvaW50OworLSAoTlNBcnJheSAqKXJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERG
U2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoTlNBcnJheSAqKXJlY3RzRm9yQW5ub3RhdGlvbklu
TGF5b3V0U3BhY2U6KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOworLSAoUERGVmlld0xheW91
dCAqKWxheW91dDsKKy0gKE5TUmVjdClmcmFtZTsKKworLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdl
OworLSAoTlNVSW50ZWdlcilsYXN0UGFnZUluZGV4OworLSAoTlNVSW50ZWdlciljdXJyZW50UGFn
ZUluZGV4OworLSAodm9pZClnb3RvTmV4dFBhZ2U7CistICh2b2lkKWdvdG9QcmV2aW91c1BhZ2U7
CisKKy0gKHZvaWQpY29weVNlbGVjdGlvbjsKKy0gKHZvaWQpc2VsZWN0QWxsOworCistIChib29s
KWtleURvd246KE5TRXZlbnQgKilldmVudDsKKworLSAodm9pZClzZXRIVURFbmFibGVkOihCT09M
KWVuYWJsZWQ7CistIChCT09MKWh1ZEVuYWJsZWQ7CisKKy0gKENHUmVjdClib3VuZHNGb3JBbm5v
dGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQpYWN0aXZhdGVOZXh0
QW5ub3RhdGlvbjooQk9PTClwcmV2aW91czsKKworLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRo
UGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7CisKKy0gKHZvaWQpc2VhcmNoSW5EaWN0aW9u
YXJ5V2l0aFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOworCisvLyBBY2Nlc3Np
YmlsaXR5CisKKy0gKENQUmVhZGluZ01vZGVsICopcmVhZGluZ01vZGVsOworLSAoaWQpYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNT
dHJpbmcgKilhdHRyaWJ1dGU7CistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFs
dWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKE5TQXJyYXkgKilhY2Nl
c3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzOworLSAoTlNTdHJpbmcgKilhY2Nl
c3NpYmlsaXR5Um9sZUF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVE
ZXNjcmlwdGlvbkF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0
cmlidXRlOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOwor
LSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlOworLSAoQk9P
TClhY2Nlc3NpYmlsaXR5SXNTZWxlY3RlZFRleHRBdHRyaWJ1dGVTZXR0YWJsZTsKKy0gKE5TVmFs
dWUgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGU7CistIChOU051bWJl
ciAqKWFjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGU7CistIChCT09MKWFj
Y2Vzc2liaWxpdHlJc051bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNW
YWx1ZSAqKWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGU7CistIChC
T09MKWFjY2Vzc2liaWxpdHlJc1Zpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxl
OworLSAoTlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFy
YW1ldGVyOihpZClwYXJhbWV0ZXI7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9y
TGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFt
ZXRlcjsKKy0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVG
b3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKKworQGVuZAorCisjZW5kaWYKKworI2VuZGlmIC8v
IERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUElfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yYWZlYzZiNmZkMjBjYjAzOGY3OGJmNzZjNzY3ZGY1OTVmMDM2MTYwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXBy
ZWNhdGVkUERGUGx1Z2luLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERlcHJlY2F0ZWRQREZQbHVnaW5faAorI2RlZmluZSBEZXByZWNhdGVkUERG
UGx1Z2luX2gKKworI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKworI2lmIEVOQUJMRShQREZL
SVRfUExVR0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1
Z2luLmgiCisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVl
SlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBK
U09iamVjdFJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVS
ZWY7CisKK09CSkNfQ0xBU1MgTlNBcnJheTsKK09CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5n
OworT0JKQ19DTEFTUyBOU0RhdGE7CitPQkpDX0NMQVNTIE5TU3RyaW5nOworT0JKQ19DTEFTUyBQ
REZBbm5vdGF0aW9uOworT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNT
IFBERlNlbGVjdGlvbjsKK09CSkNfQ0xBU1MgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0
OworT0JKQ19DTEFTUyBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlOworCituYW1lc3BhY2Ug
SVBDIHsKK2NsYXNzIERhdGFSZWZlcmVuY2U7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEVsZW1lbnQ7CitzdHJ1Y3QgUGx1Z2luSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFBERlBsdWdpbkFubm90YXRpb247CitjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZp
ZWxkOworY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBQREZQbHVn
aW4gZmluYWwgOiBwdWJsaWMgUGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7
CisgICAgflBERlBsdWdpbigpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1
Z2luSW5mbygpOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisKKyAgICB2b2lkIGRpZE11dGF0ZVBERkRvY3VtZW50KCkgeyBtX3BkZkRvY3Vt
ZW50V2FzTXV0YXRlZCA9IHRydWU7IH0KKworICAgIHZvaWQgcGFpbnRDb250cm9sRm9yTGF5ZXJJ
bkNvbnRleHQoQ0FMYXllciAqLCBDR0NvbnRleHRSZWYpOworICAgIHZvaWQgc2V0QWN0aXZlQW5u
b3RhdGlvbihQREZBbm5vdGF0aW9uICopOworICAgIAorICAgIHVzaW5nIFNjcm9sbGFibGVBcmVh
Ojpub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQ7CisgICAgdm9pZCBub3RpZnlDb250ZW50U2Nh
bGVGYWN0b3JDaGFuZ2VkKENHRmxvYXQgc2NhbGVGYWN0b3IpOworICAgIHZvaWQgbm90aWZ5RGlz
cGxheU1vZGVDaGFuZ2VkKGludCk7CisKKyAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQo
UERGU2VsZWN0aW9uICopOworCisgICAgdm9pZCBjbGlja2VkTGluayhOU1VSTCAqKTsKKyAgICB2
b2lkIHNhdmVUb1BERigpOworICAgIHZvaWQgb3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOwor
ICAgIHZvaWQgd3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUs
IE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcyk7CisgICAgdm9pZCBzaG93RGVmaW5pdGlv
bkZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIENHUG9pbnQpOworICAg
IHZvaWQgcGVyZm9ybVdlYlNlYXJjaChOU1N0cmluZyAqKTsKKyAgICB2b2lkIHBlcmZvcm1TcG90
bGlnaHRTZWFyY2goTlNTdHJpbmcgKik7CisKKyAgICB2b2lkIGZvY3VzTmV4dEFubm90YXRpb24o
KTsKKyAgICB2b2lkIGZvY3VzUHJldmlvdXNBbm5vdGF0aW9uKCk7CisKKyAgICB2b2lkIGF0dGVt
cHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3b3JkKTsKKworICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kc09uU2NyZWVuKCkgY29uc3Q7
CisgICAgCisgICAgYm9vbCBzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7CisKKyAgICBTdHJpbmcgbG9va3VwVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYsIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCBQREZTZWxlY3Rpb24gKios
IE5TRGljdGlvbmFyeSAqKikgY29uc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGb3JT
ZWxlY3Rpb25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAqKSBjb25zdDsKKworICAgIENHRmxvYXQg
c2NhbGVGYWN0b3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQREZQbHVnaW4o
V2ViRnJhbWUqKTsKKworICAgIC8vIFBsdWdpbiBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdEluV2luZG93
Q29vcmRpbmF0ZXMpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9s
VGludHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzU25hcHNob3R0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc25hcHNob3QoKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsdWdpbkxheWVyKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwg
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQo
ZmxvYXQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJv
b2wpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmco
dWludDY0X3QgcmVxdWVzdElEKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRG
YWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBj
b25zdCBTdHJpbmcmIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbVdp
bGxTZW5kUmVxdWVzdCh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1
ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlc3BvbnNlVVJMLCBpbnQgcmVzcG9uc2VTdGF0
dXMpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9u
c2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIHVp
bnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVOYW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2
ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRf
dCBzdHJlYW1JRCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZhaWwodWlu
dDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlVSTCYg
cmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVk
VGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVh
ZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBp
bnQgbGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmlu
aXNoTG9hZGluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRG
YWlsKGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0
TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKSBvdmVycmlkZSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKSBvdmVycmlkZSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGUg
eyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmll
cigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZENv
bXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpIG92ZXJyaWRlIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgdmly
dHVhbCB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0Rm9ybVZhbHVlKFN0cmluZyYgZm9ybVZhbHVlKSBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3JvbGwoV2ViQ29y
ZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VE
YXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJv
bm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgdmlydHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisgICAgdmlydHVhbCBO
U09iamVjdCAqYWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmly
dHVhbCB1bnNpZ25lZCBjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJD
b3JlOjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6OkZp
bmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVycmlkZTsKKworICAgIFBERlNl
bGVjdGlvbiAqbmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBCT09MIHNl
YXJjaEZvcndhcmQsIEJPT0wgY2FzZVNlbnNpdGl2ZSwgQk9PTCB3cmFwU2VhcmNoLCBQREZTZWxl
Y3Rpb24gKmluaXRpYWxTZWxlY3Rpb24sIEJPT0wgc3RhcnRJblNlbGVjdGlvbik7CisKKyAgICBi
b29sIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldFNlbGVjdGlvblN0cmluZygpIGNvbnN0
IG92ZXJyaWRlOworICAgIFN0cmluZyBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBleGlzdGluZ1Nl
bGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0
aW9uRnJvbURyYWdzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRBbHdheXNBdXRvU3RhcnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsgfQorICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9s
bGJhciopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2Ny
b2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBv
aW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIGNvbnRl
bnRzU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOyB9Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1hdG9yTWFjIHdpbGwg
a2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBnb29kIHRpbWUgdG8g
YW5pbWF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKFdlYkNvcmU6
OlNjcm9sbGJhclN0eWxlLCBib29sIGZvcmNlVXBkYXRlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbGJh
clJlY3QpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFy
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHNjcm9sbGJhclBvaW50KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJD
b3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVzU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VU
ZXN0aW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBQREZQbHVnaW4gZnVuY3Rpb25zLgor
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Ny
b2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwor
ICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7
CisgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKKyAgICB2b2lkIGFkZEFyY2hpdmVSZXNv
dXJjZSgpOworICAgIHZvaWQgY29tcHV0ZVBhZ2VCb3hlcygpOworICAgIHZvaWQgY2FsY3VsYXRl
U2l6ZXMoKTsKKyAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CisKKyAgICBOU0V2
ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAg
V2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJv
b3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JikgY29uc3Q7CisgICAgCisgICAgYm9vbCBzdXBwb3J0c0Zvcm1zKCk7CisgICAg
Ym9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVQYWdlQW5k
RGV2aWNlU2NhbGVGYWN0b3JzKCk7CisKKyAgICB2b2lkIGNyZWF0ZVBhc3N3b3JkRW50cnlGb3Jt
KCk7CisKKyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wZGZEb2N1bWVudDsgfQorICAgIHZvaWQgc2V0UERGRG9jdW1lbnQoUmV0YWluUHRy
PFBERkRvY3VtZW50PiBkb2N1bWVudCkgeyBtX3BkZkRvY3VtZW50ID0gZG9jdW1lbnQ7IH0KKwor
ICAgIFdlYkNvcmU6OkludFNpemUgcGRmRG9jdW1lbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9w
ZGZEb2N1bWVudFNpemU7IH0KKyAgICB2b2lkIHNldFBERkRvY3VtZW50U2l6ZShXZWJDb3JlOjpJ
bnRTaXplIHNpemUpIHsgbV9wZGZEb2N1bWVudFNpemUgPSBzaXplOyB9CisKKyAgICBOU0RhdGEg
KmxpdmVEYXRhKCkgY29uc3Q7CisgICAgTlNEYXRhICpyYXdEYXRhKCkgY29uc3QgeyByZXR1cm4g
KE5TRGF0YSAqKW1fZGF0YS5nZXQoKTsgfQorCisgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZTsgfQorCisgICAgZW51bSBVcGRhdGVDdXJzb3JNb2RlIHsKKyAg
ICAgICAgVXBkYXRlSWZOZWVkZWQsCisgICAgICAgIEZvcmNlVXBkYXRlCisgICAgfTsKKworICAg
IGVudW0gSGl0VGVzdFJlc3VsdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIFRleHQKKyAgICB9
OworCisgICAgdm9pZCB1cGRhdGVDdXJzb3IoY29uc3QgV2ViTW91c2VFdmVudCYsIFVwZGF0ZUN1
cnNvck1vZGUgPSBVcGRhdGVJZk5lZWRlZCk7CisKKyAgICBKU09iamVjdFJlZiBtYWtlSlNQREZE
b2MoSlNDb250ZXh0UmVmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworCisgICAgdm9pZCBjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5l
ZWRlZCgpOworCisgICAgLy8gUmVndWxhciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2
aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJv
cGVyIGV2ZW50IGhhbmRsaW5nLgorICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKKyAgICBj
b25zdCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkgY29uc3Q7CisKKyAgICBXZWJGcmFtZSogbV9m
cmFtZTsKKworICAgIGJvb2wgbV9pc1Bvc3RTY3JpcHQ7CisgICAgYm9vbCBtX3BkZkRvY3VtZW50
V2FzTXV0YXRlZDsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CisKKyAg
ICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9jb250YWluZXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FM
YXllcj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1faG9yaXpvbnRh
bFNjcm9sbGJhckxheWVyOworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Nyb2xsQ29ybmVyTGF5ZXI7Cisg
ICAgUmV0YWluUHRyPFBERkxheWVyQ29udHJvbGxlcj4gbV9wZGZMYXllckNvbnRyb2xsZXI7Cisg
ICAgUmV0YWluUHRyPFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdD4gbV9hY2Nlc3NpYmls
aXR5T2JqZWN0OworICAgIAorICAgIFJlZlB0cjxQREZQbHVnaW5Bbm5vdGF0aW9uPiBtX2FjdGl2
ZUFubm90YXRpb247CisgICAgUmVmUHRyPFBERlBsdWdpblBhc3N3b3JkRmllbGQ+IG1fcGFzc3dv
cmRGaWVsZDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gbV9hbm5vdGF0aW9uQ29udGFp
bmVyOworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcm9vdFZpZXdUb1BsdWdpblRy
YW5zZm9ybTsKKyAgICBXZWJNb3VzZUV2ZW50IG1fbGFzdE1vdXNlRXZlbnQ7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXM7CisKKyAg
ICBTdHJpbmcgbV90ZW1wb3JhcnlQREZVVUlEOworCisgICAgU3RyaW5nIG1fbGFzdEZvdW5kU3Ry
aW5nOworCisgICAgSGl0VGVzdFJlc3VsdCBtX2xhc3RIaXRUZXN0UmVzdWx0OworICAgIAorICAg
IFJldGFpblB0cjxXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3BkZkxheWVyQ29udHJv
bGxlckRlbGVnYXRlOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CisKKyAgICBXZWJD
b3JlOjpVUkwgbV9zb3VyY2VVUkw7CisKKyAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsK
KyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhOworCisgICAgUmV0YWluUHRy
PFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0
PiBtX3BhZ2VCb3hlczsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXplOyAv
LyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgorCisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9s
bGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxi
YXI+IG1fdmVydGljYWxTY3JvbGxiYXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19QTFVHSU4oUERGUGx1Z2luLCBQREZQbHVnaW5UeXBlKQor
CisjZW5kaWYgLy8gRU5BQkxFKFBERktJVF9QTFVHSU4pCisKKyNlbmRpZiAvLyBEZXByZWNhdGVk
UERGUGx1Z2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvRGVwcmVjYXRlZFBERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBsdWdpbi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODkzZTkxOGMy
NTgwNjVkMGUzYWNiNzBkY2FlYjA2NDEyZWY1NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCkBA
IC0wLDAgKzEsMjA1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiRGVwcmVjYXRlZFBERlBsdWdpbi5oIgorCisjaWYgRU5BQkxF
KFBERktJVF9QTFVHSU4pICYmIFVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4pCisKKyNpbXBvcnQg
IkFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisjaW1wb3J0ICJQ
REZBbm5vdGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCIKKyNpbXBvcnQgIlBERkxheWVyQ29udHJv
bGxlclNQSS5oIgorI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgorI2ltcG9ydCAiUERG
UGx1Z2luUGFzc3dvcmRGaWVsZC5oIgorI2ltcG9ydCAiUGx1Z2luVmlldy5oIgorI2ltcG9ydCAi
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5oIgorI2ltcG9ydCAiV0tQYWdlRmluZE1h
dGNoZXNDbGllbnQuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2ltcG9y
dCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50Q29udmVyc2lvbi5oIgorI2ltcG9ydCAi
V2ViUGFnZS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldl
YlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTT2JqZWN0UmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgorI2ltcG9ydCA8UERG
S2l0L1BERktpdC5oPgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlM
b29rdXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zvcm1TdGF0ZS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRvY3Vt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRo
ZW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1VV
SUQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmg+CisjaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gU2V0IG92ZXJmbG93OiBoaWRkZW4gb24g
dGhlIGFubm90YXRpb24gY29udGFpbmVyIHNvIDxpbnB1dD4gZWxlbWVudHMgc2Nyb2xsZWQgb3V0
IG9mIHZpZXcgZG9uJ3Qgc2hvdworLy8gc2Nyb2xsYmFycyBvbiB0aGUgYm9keS4gV2UgY2FuJ3Qg
YWRkIGFubm90YXRpb25zIGRpcmVjdGx5IHRvIHRoZSBib2R5LCBiZWNhdXNlIG92ZXJmbG93OiBo
aWRkZW4gb24gdGhlIGJvZHkKKy8vIHdpbGwgYnJlYWsgcnViYmVyLWJhbmRpbmcuCitzdGF0aWMg
Y29uc3QgY2hhciogYW5ub3RhdGlvblN0eWxlID0KKyIjYW5ub3RhdGlvbkNvbnRhaW5lciB7Igor
IiAgICBvdmVyZmxvdzogaGlkZGVuOyAiCisiICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgIgorIiAg
ICBwb2ludGVyLWV2ZW50czogbm9uZTsgIgorIiAgICB0b3A6IDA7ICIKKyIgICAgbGVmdDogMDsg
IgorIiAgICByaWdodDogMDsgIgorIiAgICBib3R0b206IDA7ICIKKyIgICAgZGlzcGxheTogLXdl
YmtpdC1ib3g7ICIKKyIgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsgIgorIiAgICAtd2Vi
a2l0LWJveC1wYWNrOiBjZW50ZXI7ICIKKyJ9ICIKKyIuYW5ub3RhdGlvbiB7ICIKKyIgICAgcG9z
aXRpb246IGFic29sdXRlOyAiCisiICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOyAiCisifSAiCisi
dGV4dGFyZWEuYW5ub3RhdGlvbiB7ICIKKyIgICAgcmVzaXplOiBub25lOyAiCisifSAiCisiaW5w
dXQuYW5ub3RhdGlvblt0eXBlPSdwYXNzd29yZCddIHsgIgorIiAgICBwb3NpdGlvbjogc3RhdGlj
OyAiCisiICAgIHdpZHRoOiAyMDBweDsgIgorIiAgICBtYXJnaW4tdG9wOiAxMDBweDsgIgorIn0g
IjsKKworLy8gSW4gbm9uLWNvbnRpbnVvdXMgbW9kZXMsIGEgc2luZ2xlIHNjcm9sbCBldmVudCB3
aXRoIGEgbWFnbml0dWRlIG9mID49IDIwcHgKKy8vIHdpbGwganVtcCB0byB0aGUgbmV4dCBvciBw
cmV2aW91cyBwYWdlLCB0byBtYXRjaCBQREZLaXQgYmVoYXZpb3IuCitzdGF0aWMgY29uc3QgaW50
IGRlZmF1bHRTY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIwOworCitAaW50
ZXJmYWNlIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCA6IE5TT2JqZWN0IHsKKyAgICBQ
REZMYXllckNvbnRyb2xsZXIgKl9wZGZMYXllckNvbnRyb2xsZXI7CisgICAgTlNPYmplY3QgKl9w
YXJlbnQ7CisgICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47Cit9CisKK0Bwcm9wZXJ0
eSAoYXNzaWduKSBQREZMYXllckNvbnRyb2xsZXIgKnBkZkxheWVyQ29udHJvbGxlcjsKK0Bwcm9w
ZXJ0eSAoYXNzaWduKSBOU09iamVjdCAqcGFyZW50OworQHByb3BlcnR5IChhc3NpZ24pIFdlYktp
dDo6UERGUGx1Z2luKiBwZGZQbHVnaW47CisKKy0gKGlkKWluaXRXaXRoUERGUGx1Z2luOihXZWJL
aXQ6OlBERlBsdWdpbiAqKXBsdWdpbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tQREZQ
bHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0CisKK0BzeW50aGVzaXplIHBkZkxheWVyQ29udHJvbGxl
cj1fcGRmTGF5ZXJDb250cm9sbGVyOworQHN5bnRoZXNpemUgcGFyZW50PV9wYXJlbnQ7CitAc3lu
dGhlc2l6ZSBwZGZQbHVnaW49X3BkZlBsdWdpbjsKKworLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46
KFdlYktpdDo6UERGUGx1Z2luICopcGx1Z2luCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcGRmUGx1Z2luID0gcGx1Z2luOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzSWdub3JlZAor
eworICAgIHJldHVybiBOTzsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
OihOU1N0cmluZyAqKWF0dHJpYnV0ZQoreworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlQYXJlbnRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gX3Bh
cmVudDsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
VmFsdWVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNj
ZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlXSkKKyAgICAgICAgcmV0
dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1
dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29u
dHJvbGxlciBhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGVdOworICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJh
Y3RlcnNBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNj
ZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZV07CisgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0
dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmls
aXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5T
QWNjZXNzaWJpbGl0eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZV0pCisgICAg
ICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0
ZV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJv
bGVEZXNjcmlwdGlvbkF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJv
bGxlciBhY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5V2luZG93QXR0cmlidXRlXSkK
KyAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0Fj
Y2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTaXplQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aFNpemU6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5zaXplKCld
OworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlGb2N1
c2VkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZV0p
CisgICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50Ol9wZGZQbHVnaW4tPmJvdW5kc09uU2NyZWVuKCku
bG9jYXRpb24oKV07CisKKyAgICByZXR1cm4gMDsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBhcmFt
ZXRlcgoreworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlCb3VuZHNGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CisgICAgICAgIE5TUmVj
dCBib3VuZHNJblBERlZpZXdDb29yZGluYXRlcyA9IFtbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nl
c3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6cGFyYW1ldGVyXSBy
ZWN0VmFsdWVdOworICAgICAgICBOU1JlY3QgYm91bmRzSW5TY3JlZW5Db29yZGluYXRlcyA9IF9w
ZGZQbHVnaW4tPmNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGJvdW5kc0luUERGVmlld0Nvb3Jk
aW5hdGVzKTsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6Ym91bmRzSW5T
Y3JlZW5Db29yZGluYXRlc107CisgICAgfQorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUxpbmVGb3JJbmRleFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVd
KQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eUxpbmVG
b3JJbmRleEF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSYW5nZUZvckxpbmVQYXJhbWV0ZXJp
emVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vz
c2liaWxpdHlSYW5nZUZvckxpbmVBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6cGFyYW1ldGVyXTsKKyAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U3RyaW5nRm9y
UmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJD
b250cm9sbGVyIGFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRl
cjpwYXJhbWV0ZXJdOworCisgICAgcmV0dXJuIDA7Cit9CisKKy0gKENQUmVhZGluZ01vZGVsICop
cmVhZGluZ01vZGVsCit7CisgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIHJlYWRpbmdN
b2RlbF07Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKK3sK
KyAgICBzdGF0aWMgTlNBcnJheSAqYXR0cmlidXRlTmFtZXMgPSAwOworCisgICAgaWYgKCFhdHRy
aWJ1dGVOYW1lcykgeworICAgICAgICBhdHRyaWJ1dGVOYW1lcyA9IEBbTlNBY2Nlc3NpYmlsaXR5
VmFsdWVBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRB
dHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0
dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0
dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5n
ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZSwK
KyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGUsCisgICAgICAgICAgICBO
U0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxp
dHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0
eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNp
emVBdHRyaWJ1dGUsCisgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRl
LAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5RW5hYmxlZEF0dHJpYnV0ZSwKKyAgICAgICAg
ICAgIE5TQWNjZXNzaWJpbGl0eVBvc2l0aW9uQXR0cmlidXRlXTsKKyAgICAgICAgW2F0dHJpYnV0
ZU5hbWVzIHJldGFpbl07CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWVzOworfQor
CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFjdGlvbk5hbWVzCit7CisgICAgc3RhdGljIE5T
QXJyYXkgKmFjdGlvbk5hbWVzID0gMDsKKyAgICAKKyAgICBpZiAoIWFjdGlvbk5hbWVzKQorICAg
ICAgICBhY3Rpb25OYW1lcyA9IFtbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5U2hvd01lbnVBY3Rpb25dIHJldGFpbl07CisgICAgCisgICAgcmV0dXJuIGFjdGlvbk5hbWVz
OworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyAqKWFj
dGlvbgoreworICAgIGlmIChbYWN0aW9uIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlT
aG93TWVudUFjdGlvbl0pCisgICAgICAgIF9wZGZQbHVnaW4tPnNob3dDb250ZXh0TWVudUF0UG9p
bnQoSW50UmVjdChJbnRQb2ludCgpLCBfcGRmUGx1Z2luLT5zaXplKCkpLmNlbnRlcigpKTsKK30K
KworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcgKilh
dHRyaWJ1dGUKK3sKKyAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0
eUlzQXR0cmlidXRlU2V0dGFibGU6YXR0cmlidXRlXTsKK30KKworLSAodm9pZClhY2Nlc3NpYmls
aXR5U2V0VmFsdWU6KGlkKXZhbHVlIGZvckF0dHJpYnV0ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUK
K3sKKyAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVNldFZhbHVl
OnZhbHVlIGZvckF0dHJpYnV0ZTphdHRyaWJ1dGVdOworfQorCistIChOU0FycmF5ICopYWNjZXNz
aWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcworeworICAgIHJldHVybiBbX3BkZkxh
eWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXTsK
K30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKK3sKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sK
KyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCisKK0BpbnRlcmZhY2UgV0tQREZQbHVnaW5T
Y3JvbGxiYXJMYXllciA6IENBTGF5ZXIgeworICAgIFdlYktpdDo6UERGUGx1Z2luKiBfcGRmUGx1
Z2luOworfQorCitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpQREZQbHVnaW4qIHBkZlBsdWdp
bjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllcgor
CitAc3ludGhlc2l6ZSBwZGZQbHVnaW49X3BkZlBsdWdpbjsKKworLSAoaWQpaW5pdFdpdGhQREZQ
bHVnaW46KFdlYktpdDo6UERGUGx1Z2luICopcGx1Z2luCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3BkZlBsdWdpbiA9
IHBsdWdpbjsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFj
dGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2
b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljdHgKK3sKKyAgICBfcGRmUGx1Z2luLT5w
YWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChzZWxmLCBjdHgpOworfQorCitAZW5kCisKK0Bp
bnRlcmZhY2UgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0PFBERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47
Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OlBERlBsdWdpbiogcGRmUGx1Z2luOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlCisK
K0BzeW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClpbml0V2l0aFBERlBs
dWdpbjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRmUGx1Z2luID0g
cGx1Z2luOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXVwZGF0ZVNjcm9s
bFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uCit7CisgICAgX3BkZlBsdWdpbi0+bm90aWZ5
U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9uKSk7Cit9CisKKy0gKHZv
aWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNB
cnJheSAqKXR5cGVzCit7CisgICAgX3BkZlBsdWdpbi0+d3JpdGVJdGVtc1RvUGFzdGVib2FyZChO
U0dlbmVyYWxQYm9hcmQsIGl0ZW1zLCB0eXBlcyk7Cit9CisKKy0gKHZvaWQpc2hvd0RlZmluaXRp
b25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2lu
dDooQ0dQb2ludClwb2ludAoreworICAgIF9wZGZQbHVnaW4tPnNob3dEZWZpbml0aW9uRm9yQXR0
cmlidXRlZFN0cmluZyhzdHJpbmcsIHBvaW50KTsKK30KKworLSAodm9pZClwZXJmb3JtV2ViU2Vh
cmNoOihOU1N0cmluZyAqKXN0cmluZworeworICAgIF9wZGZQbHVnaW4tPnBlcmZvcm1XZWJTZWFy
Y2goc3RyaW5nKTsKK30KKworLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmlu
ZyAqKXN0cmluZworeworICAgIF9wZGZQbHVnaW4tPnBlcmZvcm1TcG90bGlnaHRTZWFyY2goc3Ry
aW5nKTsKK30KKworLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uCit7CisgICAgX3Bk
ZlBsdWdpbi0+b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpOworfQorCistICh2b2lkKXNhdmVU
b1BERgoreworICAgIF9wZGZQbHVnaW4tPnNhdmVUb1BERigpOworfQorCistICh2b2lkKXBkZkxh
eWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNs
aWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1cmwKK3sKKyAgICBfcGRmUGx1Z2luLT5jbGlja2Vk
TGluayh1cmwpOworfQorCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBE
RkFubm90YXRpb24gKilhbm5vdGF0aW9uCit7CisgICAgX3BkZlBsdWdpbi0+c2V0QWN0aXZlQW5u
b3RhdGlvbihhbm5vdGF0aW9uKTsKK30KKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBE
RkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VDb250ZW50U2Nh
bGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3IKK3sKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlD
b250ZW50U2NhbGVGYWN0b3JDaGFuZ2VkKHNjYWxlRmFjdG9yKTsKK30KKworLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBk
aWRDaGFuZ2VEaXNwbGF5TW9kZTooaW50KW1vZGUKK3sKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlE
aXNwbGF5TW9kZUNoYW5nZWQobW9kZSk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
OihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlU2VsZWN0
aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlT
ZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbik7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBQREZW
aWV3TGF5b3V0CistIChOU1BvaW50KWNvbnZlcnRQb2ludDooTlNQb2ludClwb2ludCB0b1BhZ2U6
KFBERlBhZ2UgKilwYWdlIGZvclNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yOworLSAo
TlNSZWN0KWNvbnZlcnRSZWN0OihOU1JlY3QpcmVjdCBmcm9tUGFnZTooUERGUGFnZSAqKSBwYWdl
IGZvclNjYWxlRmFjdG9yOihDR0Zsb2F0KSBzY2FsZUZhY3RvcjsKKy0gKFBERlBhZ2UgKilwYWdl
TmVhcmVzdFBvaW50OihOU1BvaW50KXBvaW50IGN1cnJlbnRQYWdlOihQREZQYWdlICopY3VycmVu
dFBhZ2U7CitAZW5kCisKK3N0YXRpYyBjb25zdCBjaGFyKiBwb3N0U2NyaXB0TUlNRVR5cGUgPSAi
YXBwbGljYXRpb24vcG9zdHNjcmlwdCI7Citjb25zdCB1aW50NjRfdCBwZGZEb2N1bWVudFJlcXVl
c3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9hZGluZyBtdWx0aXBsZSBz
dHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgorCitzdGF0aWMgdm9pZCBhcHBl
bmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9uYXJ5UmVmIHN1YnRy
ZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKK3sKKyAgICBDR1BERkFycmF5UmVm
IG5hbWVzOworICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiTmFtZXMi
LCAmbmFtZXMpKSB7CisgICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BERkFycmF5R2V0Q291
bnQobmFtZXMpIC8gMjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lQ291bnQ7
ICsraSkgeworICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0OworICAgICAgICAgICAg
Q0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0KTsKKyAgICAgICAg
ICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5
R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAgIHJldHVybjsKKworICAg
IHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5
UmVmIGtpZDsKKyAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFyeShraWRzLCBpLCAm
a2lkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcHBlbmRWYWx1ZXNJblBERk5h
bWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
Z2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYgdHJlZSwgVmVjdG9y
PENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQoreworICAgIGFwcGVuZFZhbHVlc0luUERGTmFt
ZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOworfQorCitzdGF0aWMgdm9pZCBnZXRB
bGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBkZkRvY3VtZW50LCBWZWN0
b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPj4mIHNjcmlwdHMpCit7CisgICAgaWYgKCFwZGZEb2N1
bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFs
b2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7CisgICAgaWYgKCFwZGZD
YXRhbG9nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgb2Yg
YWxsIGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMuCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIG5h
bWVzRGljdGlvbmFyeTsKKyAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkocGRm
Q2F0YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlvbmFyeSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KKyAg
ICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdE5hbWVUcmVlOworICAgIGlmICghQ0dQREZE
aWN0aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmph
dmFTY3JpcHROYW1lVHJlZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuYW1lcyBh
cmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCisgICAg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3RzOworICAgIGdldEFsbFZhbHVlc0luUERGTmFt
ZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKKyAgICBzaXplX3Qgb2JqZWN0Q291
bnQgPSBvYmplY3RzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
Q291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlv
bjsKKyAgICAgICAgaWYgKCFDR1BERk9iamVjdEdldFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQ
REZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQREZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmph
dmFTY3JpcHRBY3Rpb24pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQSBK
YXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQi
LgorICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOworICAgICAgICBpZiAoIUNHUERGRGlj
dGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3Ry
Y21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAwOworICAgICAgICBDRkluZGV4IGxlbmd0aDsK
KyAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFtOworICAgICAgICBDR1BERlN0cmluZ1JlZiBz
dHJpbmc7CisgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7CisgICAgICAgIGlmIChD
R1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkp
IHsKKyAgICAgICAgICAgIENHUERGRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBkYXRh
ID0gYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkpOworICAgICAg
ICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Ynl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAgICAgbGVuZ3Ro
ID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKENHUERG
RGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyaW5nKSkgewor
ICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5nKTsKKyAgICAg
ICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENG
U3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRlc1swXSA9PSAweEZF
ICYmIGJ5dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdVbmljb2RlIDoga0NGU3Ry
aW5nRW5jb2RpbmdVVEY4OworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdCA9
IGFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0
ZXMsIGxlbmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKKyAgICAgICAgaWYgKCFzY3JpcHQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHNjcmlw
dCk7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworUmVmPFBERlBsdWdpbj4gUERGUGx1Z2luOjpjcmVhdGUoV2ViRnJhbWUqIGZy
YW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBERlBsdWdpbihmcmFtZSkpOworfQor
CitQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSogZnJhbWUpCisgICAgOiBQbHVnaW4oUERG
UGx1Z2luVHlwZSkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2lzUG9zdFNjcmlwdChm
YWxzZSkKKyAgICAsIG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKGZhbHNlKQorICAgICwgbV9jb250
YWluZXJMYXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9jb250
ZW50TGF5ZXIoYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fc2Nyb2xs
Q29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGlu
aXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKKyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyKGFkb3B0
TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX3Bk
ZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXS1BERkxheWVyQ29udHJvbGxlckRl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCit7CisgICAgbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRl
LmdldCgpOworICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9j
b250ZW50TGF5ZXIuZ2V0KCk7CisKKyAgICBpZiAoc3VwcG9ydHNGb3JtcygpKSB7CisgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgp
OworICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVu
dChkaXZUYWcsIGZhbHNlKTsKKyAgICAgICAgbV9hbm5vdGF0aW9uQ29udGFpbmVyLT5zZXRBdHRy
aWJ1dGUoaWRBdHRyLCAiYW5ub3RhdGlvbkNvbnRhaW5lciIpOworCisgICAgICAgIFJlZjxFbGVt
ZW50PiBhbm5vdGF0aW9uU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoc3R5
bGVUYWcsIGZhbHNlKTsKKyAgICAgICAgYW5ub3RhdGlvblN0eWxlRWxlbWVudC0+c2V0VGV4dENv
bnRlbnQoYW5ub3RhdGlvblN0eWxlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKworICAgICAgICBt
X2Fubm90YXRpb25Db250YWluZXItPmFwcGVuZENoaWxkKFdURjo6bW92ZShhbm5vdGF0aW9uU3R5
bGVFbGVtZW50KSk7CisgICAgICAgIGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpLT5hcHBlbmRD
aGlsZCgqbV9hbm5vdGF0aW9uQ29udGFpbmVyKTsKKyAgICB9CisKKyAgICBtX2FjY2Vzc2liaWxp
dHlPYmplY3QgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IGFsbG9j
XSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSk7CisgICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0Lmdl
dCgpLnBkZkxheWVyQ29udHJvbGxlciA9IG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpOworICAg
IG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKS5wYXJlbnQgPSB3ZWJGcmFtZSgpLT5wYWdlKCkt
PmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKTsKKworICAgIFttX2NvbnRhaW5lckxheWVyIGFk
ZFN1YmxheWVyOm1fY29udGVudExheWVyLmdldCgpXTsKKyAgICBbbV9jb250YWluZXJMYXllciBh
ZGRTdWJsYXllcjptX3Njcm9sbENvcm5lckxheWVyLmdldCgpXTsKK30KKworUERGUGx1Z2luOjp+
UERGUGx1Z2luKCkKK3sKK30KKworUGx1Z2luSW5mbyBQREZQbHVnaW46OnBsdWdpbkluZm8oKQor
eworICAgIFBsdWdpbkluZm8gaW5mbzsKKyAgICBpbmZvLm5hbWUgPSBidWlsdEluUERGUGx1Z2lu
TmFtZSgpOworICAgIGluZm8uaXNBcHBsaWNhdGlvblBsdWdpbiA9IHRydWU7CisgICAgaW5mby5j
bGllbnRMb2FkUG9saWN5ID0gUGx1Z2luTG9hZENsaWVudFBvbGljeVVuZGVmaW5lZDsKKworICAg
IE1pbWVDbGFzc0luZm8gcGRmTWltZUNsYXNzSW5mbzsKKyAgICBwZGZNaW1lQ2xhc3NJbmZvLnR5
cGUgPSAiYXBwbGljYXRpb24vcGRmIjsKKyAgICBwZGZNaW1lQ2xhc3NJbmZvLmRlc2MgPSBwZGZE
b2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHBkZk1pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
cy5hcHBlbmQoInBkZiIpOworICAgIGluZm8ubWltZXMuYXBwZW5kKHBkZk1pbWVDbGFzc0luZm8p
OworCisgICAgTWltZUNsYXNzSW5mbyB0ZXh0UERGTWltZUNsYXNzSW5mbzsKKyAgICB0ZXh0UERG
TWltZUNsYXNzSW5mby50eXBlID0gInRleHQvcGRmIjsKKyAgICB0ZXh0UERGTWltZUNsYXNzSW5m
by5kZXNjID0gcGRmRG9jdW1lbnRUeXBlRGVzY3JpcHRpb24oKTsKKyAgICB0ZXh0UERGTWltZUNs
YXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisgICAgaW5mby5taW1lcy5hcHBlbmQo
dGV4dFBERk1pbWVDbGFzc0luZm8pOworCisgICAgTWltZUNsYXNzSW5mbyBwb3N0U2NyaXB0TWlt
ZUNsYXNzSW5mbzsKKyAgICBwb3N0U2NyaXB0TWltZUNsYXNzSW5mby50eXBlID0gcG9zdFNjcmlw
dE1JTUVUeXBlOworICAgIHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvLmRlc2MgPSBwb3N0U2NyaXB0
RG9jdW1lbnRUeXBlRGVzY3JpcHRpb24oKTsKKyAgICBwb3N0U2NyaXB0TWltZUNsYXNzSW5mby5l
eHRlbnNpb25zLmFwcGVuZCgicHMiKTsKKyAgICBpbmZvLm1pbWVzLmFwcGVuZChwb3N0U2NyaXB0
TWltZUNsYXNzSW5mbyk7CisgICAgCisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjp1cGRhdGVTY3JvbGxiYXJzKCkKK3sKKyAgICBib29sIGhhZFNjcm9sbGJhcnMgPSBtX2hv
cml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKworICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1fc2l6ZS53aWR0aCgpID49IG1fcGRm
RG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBpZiAobV9zaXplLndpZHRoKCkgPCBtX3BkZkRv
Y3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBjcmVh
dGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisKKyAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbGJhcikgeworICAgICAgICBpZiAobV9zaXplLmhlaWdodCgpID49IG1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9s
bGJhcik7CisgICAgfSBlbHNlIGlmIChtX3NpemUuaGVpZ2h0KCkgPCBtX3BkZkRvY3VtZW50U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJh
cihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7
CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAm
JiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNh
bFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBpbnQgcGFnZVN0ZXAgPSBtX3BhZ2VCb3hl
cy5pc0VtcHR5KCkgPyAwIDogbV9wYWdlQm94ZXNbMF0uaGVpZ2h0KCk7CisKKyAgICBpZiAobV9o
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX3NpemUud2lkdGgoKSAtIHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpOworICAgICAg
ICBJbnRSZWN0IHNjcm9sbGJhclJlY3QocGx1Z2luVmlldygpLT54KCksIHBsdWdpblZpZXcoKS0+
eSgpICsgbV9zaXplLmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwg
bV9zaXplLndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgICAg
ICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29u
dHJhY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgMCk7CisgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICBp
ZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX3NpemUuaGVpZ2h0KCkgLSBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChJbnRSZWN0KHBsdWdpblZpZXcoKS0+eCgpICsg
bV9zaXplLndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3
KCktPnkoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7
CisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxi
YXJSZWN0LmNvbnRyYWN0KDAsIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Cisg
ICAgfQorCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+
dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBib29s
IGhhc1Njcm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9s
bGJhcjsKKyAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7CisgICAgICAg
IGlmIChoYXNTY3JvbGxiYXJzKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxl
QXJlYSh0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKKworICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0
KCk7CisgICAgfQorICAgIAorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpLmZyYW1lID0gdmVydGljYWxTY3Jv
bGxiYXIoKS0+ZnJhbWVSZWN0KCk7CisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIg
c2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpLmZy
YW1lID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgW21faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorICAgIAorICAg
IGlmIChtX3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyTGF5ZXIu
Z2V0KCkuZnJhbWUgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAgIFttX3Njcm9sbENvcm5l
ckxheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorfQorCitQbHVnaW5WaWV3KiBQREZQbHVn
aW46OnBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
Y29udHJvbGxlcigpKTsKK30KKworY29uc3QgUGx1Z2luVmlldyogUERGUGx1Z2luOjpwbHVnaW5W
aWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+
KGNvbnRyb2xsZXIoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQbHVnaW46OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGlu
aXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICAgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3Vi
bGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllciA9IGFkb3B0TlMoW1tXS1BERlBsdWdpblNj
cm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSk7CisgICAgICAgIFtt
X2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQo
KV07CisgICAgfQorICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9u
KTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCkpIHsKKyAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAgICBpZiAo
cGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2VycygpKQorICAgICAgICAgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2UtPnRlc3RUcmlnZ2VyKCkp
OworICAgICAgICB9CisgICAgfQorICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5h
ZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOworfQor
Cit2b2lkIFBERlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1f
dmVydGljYWxTY3JvbGxiYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsK
KworICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7
CisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVs
bHB0cjsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Cisg
ICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gMDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
KyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gMDsKKyAgICB9Cit9CisKK0ludFJl
Y3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0
Cit7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Ny
b2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKworICAgIHJl
dHVybiBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlclRv
Q29udGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50KCktPnJlbmRlcmVyKCks
IHJlY3QpOworfQorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBw
YXJlbnRSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcihwbHVnaW5W
aWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVj
dC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7
CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2lu
dCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigp
IC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3KCkt
PmZyYW1lKCktPnZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcocGx1
Z2luVmlldygpLT5wbHVnaW5FbGVtZW50KCktPnJlbmRlcmVyKCksIHBvaW50KTsKK30KKworSW50
UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29u
c3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygp
LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcihwbHVnaW5WaWV3KCktPnBsdWdp
bkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUocGx1
Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICAKKyAg
ICByZXR1cm4gcG9pbnQ7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVTY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7Cisg
ICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30KKworSW50UmVjdCBQ
REZQbHVnaW46OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAoreworICAgIGlmICghbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50
UmVjdCgpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKSB7CisgICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgfQorICAgIHJldHVybiBJ
bnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRo
KCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFBERlBsdWdpbjo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBmcmFtZSB0
cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZyYW1lIG9yIFJlbmRlckxheWVy
LgorICAgIHJldHVybiBudWxscHRyOworfQorCitJbnRSZWN0IFBERlBsdWdpbjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJh
bWVSZWN0KCk7Cit9CisKK2ludCBQREZQbHVnaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAo
KG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/
IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7
Cit9CisKK2Jvb2wgUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgeworICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmlzQWN0aXZlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFBERlBsdWdpbjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVy
Zm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1f
ZnJhbWUtPmNvcmVGcmFtZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1l
LT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5mb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKFNj
cm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zm
c2V0LndpZHRoKCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitJbnRQb2ludCBQREZQ
bHVnaW46OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQobV9z
Y3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworfQorCitJbnRQ
b2ludCBQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEludFBvaW50KCk7Cit9CisKK0ludFBvaW50IFBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9ICht
X2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92
ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9j
dW1lbnRTaXplLndpZHRoKCkgLSBtX3NpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9zaXplLmhlaWdodCgpICsgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgbWF4aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9a
ZXJvKCk7CisgICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpz
Y3JvbGxiYXJTdHlsZUNoYW5nZWQoU2Nyb2xsYmFyU3R5bGUgc3R5bGUsIGJvb2wgZm9yY2VVcGRh
dGUpCit7CisgICAgaWYgKCFmb3JjZVVwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBz
Y3JvbGxiYXJzIGNoYW5nZSB0byBvdmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3Bs
YXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUuCisgICAgSW50UG9pbnQg
bmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpKTsKKyAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0
KTsKKyAgICAKKyAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKHN0eWxl
LCBmb3JjZVVwZGF0ZSk7CisgICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5n
ZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVhci4KKyAgICB1
cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjphZGRBcmNoaXZlUmVzb3Vy
Y2UoKQoreworICAgIC8vIEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJj
ZSB0byBEb2N1bWVudExvYWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVk
IGFzIENhY2hlZFJlc291cmNlcy4KKworICAgIC8vIEFkZCBqdXN0IGVub3VnaCBkYXRhIGZvciBj
b250ZXh0IG1lbnUgaGFuZGxpbmcgYW5kIHdlYiBhcmNoaXZlcyB0byB3b3JrLgorICAgIE5TRGlj
dGlvbmFyeSogaGVhZGVycyA9IEB7IEAiQ29udGVudC1EaXNwb3NpdGlvbiI6IChOU1N0cmluZyAq
KW1fc3VnZ2VzdGVkRmlsZW5hbWUsIEAiQ29udGVudC1UeXBlIiA6IEAiYXBwbGljYXRpb24vcGRm
IiB9OworICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiByZXNwb25zZSA9IGFkb3B0TlMoW1tO
U0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6bV9zb3VyY2VVUkwgc3RhdHVzQ29k
ZToyMDAgSFRUUFZlcnNpb246KE5TU3RyaW5nKilrQ0ZIVFRQVmVyc2lvbjFfMSBoZWFkZXJGaWVs
ZHM6aGVhZGVyc10pOworICAgIFJlc291cmNlUmVzcG9uc2Ugc3ludGhlc2l6ZWRSZXNwb25zZShy
ZXNwb25zZS5nZXQoKSk7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9
IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGEu
Z2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmco
KSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7
Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiBvYmplY3QpCit7CisgICAgUERGUGx1Z2luKiBwZGZWaWV3ID0gc3RhdGljX2Nh
c3Q8UERGUGx1Z2luKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXct
PnJlZigpOworfQorCitzdGF0aWMgdm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9i
amVjdCkKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQREZQbHVnaW4q
PihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRmVmlldy0+ZGVyZWYoKTsKK30K
KworSlNWYWx1ZVJlZiBQREZQbHVnaW46OmpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgUERGUGx1Z2luKiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8UERGUGx1Z2lu
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IHBkZlZpZXctPm1fZnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUt
PmNvcmVGcmFtZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2Uo
KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOworCisgICAgcGFnZS0+Y2hyb21lKCkucHJpbnQoY29yZUZyYW1lKTsKKworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCitKU09iamVjdFJlZiBQREZQbHVnaW46
Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQoreworICAgIHN0YXRpYyBKU1N0YXRpY0Z1
bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInByaW50Iiwg
anNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfSwKKyAgICB9OworCisg
ICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9uID0gewor
ICAgICAgICAwLAorICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCisgICAgICAgICJEb2Mi
LAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICBqc1BERkRvY1N0YXRpY0Z1bmN0aW9u
cywKKyAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFsaXplLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzUERG
RG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7CisKKyAg
ICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhpcyk7Cit9CisKK3N0
YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gY29udmVydFBvc3RTY3JpcHREYXRhVG9Q
REYoUmV0YWluUHRyPENGRGF0YVJlZj4gcG9zdFNjcmlwdERhdGEpCit7CisgICAgLy8gQ29udmVy
dCBQb3N0U2NyaXB0IHRvIFBERiB1c2luZyB0aGUgUXVhcnR6IDJEIEFQSS4KKyAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0dyYXBoaWNzSW1hZ2luZy9Db25j
ZXB0dWFsL2RyYXdpbmd3aXRocXVhcnR6MmQvZHFfcHNfY29udmVydC9jaGFwdGVyXzE2X3NlY3Rp
b25fMS5odG1sCisKKyAgICBDR1BTQ29udmVydGVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCB9OworICAgIFJldGFpblB0cjxDR1BTQ29udmVydGVyUmVmPiBj
b252ZXJ0ZXIgPSBhZG9wdENGKENHUFNDb252ZXJ0ZXJDcmVhdGUoMCwgJmNhbGxiYWNrcywgMCkp
OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShwb3N0U2NyaXB0RGF0YS5nZXQoKSkpOworICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBwZGZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVh
dGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRh
Q29uc3VtZXJSZWY+IGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhD
RkRhdGEocGRmRGF0YS5nZXQoKSkpOworICAgIAorICAgIENHUFNDb252ZXJ0ZXJDb252ZXJ0KGNv
bnZlcnRlci5nZXQoKSwgcHJvdmlkZXIuZ2V0KCksIGNvbnN1bWVyLmdldCgpLCAwKTsKKyAgICAK
KyAgICByZXR1cm4gcGRmRGF0YTsKK30KKwordm9pZCBQREZQbHVnaW46OmNvbnZlcnRQb3N0U2Ny
aXB0RGF0YUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1faXNQb3N0U2NyaXB0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gU3RyaW5nKG1fc3VnZ2VzdGVkRmls
ZW5hbWUgKyAiLnBkZiIpOworICAgIG1fZGF0YSA9IGNvbnZlcnRQb3N0U2NyaXB0RGF0YVRvUERG
KG1fZGF0YSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQorewor
ICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOworICAgIAorICAgIFJldGFpblB0cjxQREZEb2N1bWVu
dD4gZG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0
aERhdGE6cmF3RGF0YSgpXSk7CisKKyAgICBzZXRQREZEb2N1bWVudChkb2N1bWVudCk7CisKKyAg
ICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7CisKKyAgICBbbV9wZGZMYXllckNv
bnRyb2xsZXIgc2V0RnJhbWVTaXplOnNpemUoKV07CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkuZG9jdW1lbnQgPSBkb2N1bWVudC5nZXQoKTsKKworICAgIGlmIChoYW5kbGVzUGFnZVNj
YWxlRmFjdG9yKCkpCisgICAgICAgIHBsdWdpblZpZXcoKS0+c2V0UGFnZVNjYWxlRmFjdG9yKFtt
X3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdLCBJbnRQb2ludCgpKTsKKwor
ICAgIG5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChJbnRQb2ludChbbV9wZGZMYXllckNvbnRy
b2xsZXIgc2Nyb2xsUG9zaXRpb25dKSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CisKKyAg
ICBpZiAoW2RvY3VtZW50IGlzTG9ja2VkXSkKKyAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZv
cm0oKTsKK30KKwordm9pZCBQREZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50
NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3Vt
ZW50UmVxdWVzdElEKTsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxl
bmFtZTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgcG9zdFNjcmlwdE1J
TUVUeXBlKSkKKyAgICAgICAgbV9pc1Bvc3RTY3JpcHQgPSB0cnVlOworfQorCit2b2lkIFBERlBs
dWdpbjo6c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIq
IGJ5dGVzLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVh
bUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIGlmICghbV9kYXRhKQorICAgICAg
ICBtX2RhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZE
YXRhQXBwZW5kQnl0ZXMobV9kYXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4
Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkRmluaXNo
TG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlE
LCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBjb252ZXJ0UG9zdFNj
cmlwdERhdGFJZk5lZWRlZCgpOworICAgIHBkZkRvY3VtZW50RGlkTG9hZCgpOworfQorCit2b2lk
IFBERlBsdWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5j
ZWxsZWQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9j
dW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9kYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgVVJMJiByZXNwb25zZVVS
TCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgcG9zdFNj
cmlwdE1JTUVUeXBlKSkKKyAgICAgICAgbV9pc1Bvc3RTY3JpcHQgPSB0cnVlOworfQorCit2b2lk
IFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMs
IGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIG1fZGF0YSA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyht
X2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0
aCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkK
K3sKKyAgICBjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpOworICAgIHBkZkRvY3VtZW50
RGlkTG9hZCgpOworfQorCit2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmFpbChib29s
KQoreworICAgIG1fZGF0YS5jbGVhcigpOworfQorCit2b2lkIFBERlBsdWdpbjo6cnVuU2NyaXB0
c0luUERGRG9jdW1lbnQoKQoreworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBz
Y3JpcHRzOworICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50IGRv
Y3VtZW50UmVmXSwgc2NyaXB0cyk7CisKKyAgICBzaXplX3Qgc2NyaXB0Q291bnQgPSBzY3JpcHRz
LnNpemUoKTsKKyAgICBpZiAoIXNjcmlwdENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBK
U0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOworICAgIEpT
T2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKKyAgICAgICAgSlNTdHJpbmdSZWYgc2Ny
aXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQoKSk7CisgICAg
ICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAwLCAwKTsKKyAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7CisgICAgfQorICAgIAorICAgIEpTR2xvYmFs
Q29udGV4dFJlbGVhc2UoY3R4KTsKK30KKwordm9pZCBQREZQbHVnaW46OmNyZWF0ZVBhc3N3b3Jk
RW50cnlGb3JtKCkKK3sKKyAgICBtX3Bhc3N3b3JkRmllbGQgPSBQREZQbHVnaW5QYXNzd29yZEZp
ZWxkOjpjcmVhdGUobV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCksIHRoaXMpOworICAgIG1fcGFz
c3dvcmRGaWVsZC0+YXR0YWNoKG1fYW5ub3RhdGlvbkNvbnRhaW5lci5nZXQoKSk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjphdHRlbXB0VG9VbmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNzd29yZCkK
K3sKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgYXR0ZW1wdFRvVW5sb2NrV2l0aFBhc3N3b3Jk
OnBhc3N3b3JkXTsKKworICAgIGlmICghW3BkZkRvY3VtZW50KCkgaXNMb2NrZWRdKSB7CisgICAg
ICAgIG1fcGFzc3dvcmRGaWVsZCA9IG51bGxwdHI7CisKKyAgICAgICAgY2FsY3VsYXRlU2l6ZXMo
KTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIH0KK30KKwordm9pZCBQREZQbHVn
aW46OnVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKQoreworICAgIGRvdWJsZSBuZXdT
Y2FsZUZhY3RvciA9IGNvbnRyb2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOworICAgIGlm
ICghaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICBuZXdTY2FsZUZhY3RvciAqPSB3
ZWJGcmFtZSgpLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgaWYgKG5ld1NjYWxl
RmFjdG9yICE9IFttX3BkZkxheWVyQ29udHJvbGxlciBkZXZpY2VTY2FsZUZhY3Rvcl0pCisgICAg
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREZXZpY2VTY2FsZUZhY3RvcjpuZXdTY2FsZUZh
Y3Rvcl07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChm
bG9hdCkKK3sKKyAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjpjb21wdXRlUGFnZUJveGVzKCkKK3sKKyAgICBzaXplX3QgcGFnZUNvdW50
ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1lbnQgZG9jdW1lbnRS
ZWZdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgKytpKSB7CisgICAg
ICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9j
dW1lbnQgZG9jdW1lbnRSZWZdLCBpICsgMSk7CisgICAgICAgIEFTU0VSVChwZGZQYWdlKTsKKwor
ICAgICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZD
cm9wQm94KTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94KSkKKyAgICAgICAgICAgIGJv
eCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGTWVkaWFCb3gpOworICAgICAg
ICBtX3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKKyAgICB9Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCit7CisgICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9j
a2VkXSkgeworICAgICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZSgwLCAwKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY29tZSBzdHJh
aWdodCBmcm9tIFBERktpdC4KKyAgICBjb21wdXRlUGFnZUJveGVzKCk7CisKKyAgICBzZXRQREZE
b2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNw
ZWN0aW5nWm9vbV0pKTsKK30KKworYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBtX3NvdXJjZVVSTCA9IHBhcmFtZXRlcnMudXJs
OworICAgIGlmICghcGFyYW1ldGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXIgJiYgIXBhcmFtZXRl
cnMudXJsLmlzRW1wdHkoKSkKKyAgICAgICAgY29udHJvbGxlcigpLT5sb2FkVVJMKHBkZkRvY3Vt
ZW50UmVxdWVzdElELCAiR0VUIiwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIFN0cmluZygpLCBI
VFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90PigpLCBmYWxzZSk7CisKKyAgICBjb250cm9s
bGVyKCktPmRpZEluaXRpYWxpemVQbHVnaW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQREZQbHVnaW46OmRlc3Ryb3koKQoreworICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgp
LmRlbGVnYXRlID0gMDsKKworICAgIGlmICh3ZWJGcmFtZSgpKSB7CisgICAgICAgIGlmIChGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAg
ICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKwor
ICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7CisgICAgbV9hbm5vdGF0aW9uQ29udGFp
bmVyID0gbnVsbHB0cjsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJh
cik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgCisgICAg
W21fc2Nyb2xsQ29ybmVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFttX2NvbnRl
bnRMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp1cGRh
dGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCit7CisgICAg
QVNTRVJUKGdyYXBoaWNzQ29udGV4dC51cGRhdGluZ0NvbnRyb2xUaW50cygpKTsKKworICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aW52YWxpZGF0ZSgpOworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaW52YWxpZGF0ZVNjcm9sbENvcm5l
cihzY3JvbGxDb3JuZXJSZWN0KCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6cGFpbnRDb250cm9s
Rm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQor
eworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAg
CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7CisgICAgCisg
ICAgaWYgKGxheWVyID09IG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCBz
Y3JvbGxDb3JuZXJSZWN0ID0gdGhpcy0+c2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICBncmFw
aGljc0NvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxDb3JuZXJSZWN0LngoKSwgLXNjcm9sbENvcm5l
clJlY3QueSgpKTsKKyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxD
b3JuZXIobnVsbHB0ciwgZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxDb3JuZXJSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG51bGxw
dHI7CisgICAgCisgICAgaWYgKGxheWVyID09IG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikKKyAg
ICAgICAgc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlIGlmIChsYXll
ciA9PSBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcikKKyAgICAgICAgc2Nyb2xsYmFyID0gaG9y
aXpvbnRhbFNjcm9sbGJhcigpOworCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXItPngoKSwg
LXNjcm9sbGJhci0+eSgpKTsKKyAgICBzY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwg
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7Cit9CisKK1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFBE
RlBsdWdpbjo6c25hcHNob3QoKQoreworICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGZsb2F0IGNvbnRlbnRzU2NhbGVGYWN0b3IgPSBjb250
cm9sbGVyKCktPmNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKKyAgICBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemUgPSBzaXplKCk7CisgICAgYmFja2luZ1N0b3JlU2l6ZS5zY2FsZShjb250ZW50c1NjYWxl
RmFjdG9yKTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUsIFNoYXJlYWJsZUJpdG1h
cDo6U3VwcG9ydHNBbHBoYSk7CisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKTsKKworICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShjb250ZW50c1Nj
YWxlRmFjdG9yLCAtY29udGVudHNTY2FsZUZhY3RvcikpOworICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtbV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgLW1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpICsg
bV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworCisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNu
YXBzaG90SW5Db250ZXh0OmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpXTsKKworICAgIHJldHVy
biBiaXRtYXA7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFBERlBsdWdpbjo6cGx1Z2luTGF5ZXIoKQor
eworICAgIHJldHVybiBtX2NvbnRhaW5lckxheWVyLmdldCgpOworfQorCitJbnRQb2ludCBQREZQ
bHVnaW46OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLCBzaXplKCkuaGVpZ2h0KCkg
LSBwb2ludC55KCkpOworfQorCitJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BsdWdpbihjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7Cit9CisKK0ludFBvaW50
IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYg
cG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBv
aW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKKyAgICByZXR1cm4gbV9yb290
Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29v
cmRpbmF0ZXMpOworfQorCitGbG9hdFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdU
b1NjcmVlbihjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOworCisgICAgaWYgKCFm
cmFtZVZpZXcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIEZsb2F0UG9pbnQg
b3JpZ2luSW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcmVj
dC55KCkgLSByZWN0LmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlcyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChG
bG9hdFJlY3Qob3JpZ2luSW5QbHVnaW5Db29yZGluYXRlcywgcmVjdC5zaXplKCkpKTsKKworICAg
IHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpib3VuZHNP
blNjcmVlbigpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgp
LT5jb3JlRnJhbWUoKS0+dmlldygpOworCisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgc2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChib3VuZHMp
OworICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50UmVj
dChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpnZW9t
ZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQoreworICAg
IGlmIChzaXplKCkgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3Rv
cigpID09IFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3NpemUgPSBwbHVnaW5TaXplOworICAgIG1fcm9vdFZpZXdUb1Bs
dWdpblRyYW5zZm9ybSA9IHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6cGx1Z2luU2l6ZV07CisKKyAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlv
bnM6WUVTXTsKKyAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtl
U2NhbGUoMSwgLTEsIDEpOworICAgIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RUcmFuc2xhdGUo
dHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgCisgICAgaWYgKGhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgeworICAgICAgICBDR0Zsb2F0IG1hZ25pZmljYXRpb24g
PSBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpIC0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGNvbnRlbnRTY2FsZUZhY3Rvcl07CisKKyAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgbV9s
YXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMsIHdlIHNob3VsZCB1c2UgdGhlIHpv
b20gb3JpZ2luIGZyb20gUGx1Z2luVmlldzo6c2V0UGFnZVNjYWxlRmFjdG9yLgorICAgICAgICBp
ZiAobWFnbmlmaWNhdGlvbikKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtYWdu
aWZ5V2l0aE1hZ25pZmljYXRpb246bWFnbmlmaWNhdGlvbiBhdFBvaW50OmNvbnZlcnRGcm9tUGx1
Z2luVG9QREZWaWV3KG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSBpbW1l
ZGlhdGVseTpOT107CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGFuZGxl
IHBhZ2Ugc2NhbGUgb3Vyc2VsdmVzLCB3ZSBuZWVkIHRvIHJlc3BlY3Qgb3VyIHBhcmVudCBwYWdl
J3MKKyAgICAgICAgLy8gc2NhbGUsIHdoaWNoIG1heSBoYXZlIGNoYW5nZWQuCisgICAgICAgIHVw
ZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKyAgICB9IAorCisgICAgY2FsY3VsYXRl
U2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBpZiAobV9hY3RpdmVBbm5v
dGF0aW9uKQorICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24tPnVwZGF0ZUdlb21ldHJ5KCk7CisK
KyAgICBbbV9jb250ZW50TGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06dHJhbnNmb3JtXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCit2b2lkIFBERlBsdWdpbjo6ZnJhbWVEaWRG
aW5pc2hMb2FkaW5nKHVpbnQ2NF90KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIFBERlBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBERlBsdWdpbjo6ZGlkRXZhbHVhdGVKYXZh
U2NyaXB0KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKKyAgICAKK3N0YXRpYyBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3NGcm9t
V2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50KQoreworICAgIHJldHVybiAoZXZlbnQuc2hp
ZnRLZXkoKSA/IE5TU2hpZnRLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQuY29udHJvbEtl
eSgpID8gTlNDb250cm9sS2V5TWFzayA6IDApCisgICAgICAgIHwgKGV2ZW50LmFsdEtleSgpID8g
TlNBbHRlcm5hdGVLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQubWV0YUtleSgpID8gTlND
b21tYW5kS2V5TWFzayA6IDApOworfQorICAgIAorc3RhdGljIGJvb2wgZ2V0RXZlbnRUeXBlRnJv
bVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCwgTlNFdmVudFR5cGUmIGV2ZW50VHlwZSkK
K3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURv
d246CisgICAgICAgIGV2ZW50VHlwZSA9IE5TS2V5RG93bjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBXZWJFdmVudDo6S2V5VXA6CisgICAgICAgIGV2ZW50VHlwZSA9IE5TS2V5VXA7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAg
ICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1
dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAg
ICAgICAgIGV2ZW50VHlwZSA9IE5TTGVmdE1vdXNlRG93bjsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAg
ICAgZXZlbnRUeXBlID0gTlNSaWdodE1vdXNlRG93bjsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2Fz
dDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2Ug
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5TTGVm
dE1vdXNlVXA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBXZWJNb3Vz
ZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5TUmlnaHRNb3Vz
ZVVwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1v
dmU6CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+KGV2
ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246
CisgICAgICAgICAgICBldmVudFR5cGUgPSBOU0xlZnRNb3VzZURyYWdnZWQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoK
KyAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5TUmlnaHRNb3VzZURyYWdnZWQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKKyAg
ICAgICAgICAgIGV2ZW50VHlwZSA9IE5TTW91c2VNb3ZlZDsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKyAgICAK
K05TRXZlbnQgKlBERlBsdWdpbjo6bnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYgZXZlbnQpCit7CisgICAgbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRp
bmF0ZXMgPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oZXZlbnQucG9zaXRpb24oKSk7CisK
KyAgICBJbnRQb2ludCBwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5hdGVzKGNvbnZlcnRGcm9tUGx1
Z2luVG9QREZWaWV3KG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSk7CisK
KyAgICBOU0V2ZW50VHlwZSBldmVudFR5cGU7CisKKyAgICBpZiAoIWdldEV2ZW50VHlwZUZyb21X
ZWJFdmVudChldmVudCwgZXZlbnRUeXBlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOU1VJ
bnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGV2ZW50KTsK
KworICAgIHJldHVybiBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0
aW9uOnBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMgbW9kaWZpZXJGbGFnczptb2RpZmllckZs
YWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAg
Y2xpY2tDb3VudDpldmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjp1cGRhdGVDdXJzb3IoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQsIFVwZGF0ZUN1
cnNvck1vZGUgbW9kZSkKK3sKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBOb25l
OworCisgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25VbmRlck1vdXNlID0gW21fcGRmTGF5ZXJD
b250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9Q
REZWaWV3KGV2ZW50LnBvc2l0aW9uKCkpXTsKKyAgICBpZiAoc2VsZWN0aW9uVW5kZXJNb3VzZSAm
JiBbW3NlbGVjdGlvblVuZGVyTW91c2Ugc3RyaW5nXSBsZW5ndGhdKQorICAgICAgICBoaXRUZXN0
UmVzdWx0ID0gVGV4dDsKKworICAgIGlmIChoaXRUZXN0UmVzdWx0ID09IG1fbGFzdEhpdFRlc3RS
ZXN1bHQgJiYgbW9kZSA9PSBVcGRhdGVJZk5lZWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
d2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNv
cihoaXRUZXN0UmVzdWx0ID09IFRleHQgPyBpQmVhbUN1cnNvcigpIDogcG9pbnRlckN1cnNvcigp
KSk7CisgICAgbV9sYXN0SGl0VGVzdFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7Cit9CisKK2Jvb2wg
UERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQor
eworICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQp
OworICAgIEludFBvaW50IG1vdXNlUG9zaXRpb24gPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVn
aW4oZXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBtX2xhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7CisK
KyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB0YXJnZXRTY3JvbGxiYXI7CisgICAgUmVmUHRyPFNjcm9s
bGJhcj4gdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb247CisKKyAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxi
YXJGcmFtZShtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOworICAgICAgICBp
ZiAodmVydGljYWxTY3JvbGxiYXJGcmFtZS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAg
ICAgICAgIHRhcmdldFNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIGlm
ICh2ZXJ0aWNhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBs
dWdpbkNvb3JkaW5hdGVzKSkKKyAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3Vz
ZVBvc2l0aW9uID0gdmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICB9CisKKyAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xs
YmFyRnJhbWUobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOworICAgICAg
ICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQor
ICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAg
ICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9z
aXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSkKKyAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZv
ckxhc3RNb3VzZVBvc2l0aW9uID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0KKworICAg
IGlmIChtX3Njcm9sbENvcm5lckxheWVyICYmIEludFJlY3QobV9zY3JvbGxDb3JuZXJMYXllci5n
ZXQoKS5mcmFtZSkuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1jbGlja3MgYWx3YXlzIGNh
bGwgaGFuZGxlQ29udGV4dE1lbnVFdmVudCBhcyB3ZWxsLgorICAgIGlmIChldmVudC5idXR0b24o
KSA9PSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gV2Vi
TW91c2VFdmVudDo6TGVmdEJ1dHRvbiAmJiBldmVudC5jb250cm9sS2V5KCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuc0V2ZW50Rm9yV2ViTW91c2VF
dmVudChldmVudCk7CisKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2Vi
RXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKKyAg
ICAgICAgdXBkYXRlQ3Vyc29yKGV2ZW50KTsKKworICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFy
KSB7CisgICAgICAgICAgICBpZiAoIXRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9u
KSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyLT5tb3VzZUVudGVyZWQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlTW92ZWQocGxhdGZvcm1FdmVudCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXRhcmdldFNjcm9sbGJhciAmJiB0YXJnZXRTY3JvbGxiYXJGb3JM
YXN0TW91c2VQb3NpdGlvbikKKyAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3Vz
ZVBvc2l0aW9uLT5tb3VzZUV4aXRlZCgpOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9u
KCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAg
ICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRHJhZ2dlZDpuc0V2ZW50XTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9u
OgorICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKKyAg
ICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZU1vdmVkOm5zRXZlbnRdOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3Vz
ZURvd246CisgICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBX
ZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgaWYgKHRhcmdldFNjcm9sbGJh
cikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0U2Nyb2xsYmFyLT5tb3VzZURvd24ocGxh
dGZvcm1FdmVudCk7CisKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZURv
d246bnNFdmVudF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciByaWdodE1vdXNlRG93bjpuc0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpOb0J1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0
dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAg
ICAgICAgaWYgKHRhcmdldFNjcm9sbGJhcikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
U2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOworCisgICAgICAgICAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgbW91c2VVcDpuc0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICBjYXNl
IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50
OjpOb0J1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiBldmVudCkKK3sKKyAgICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworICAgIHVwZGF0ZUN1
cnNvcihldmVudCwgRm9yY2VVcGRhdGUpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQ
REZQbHVnaW46OmhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sK
KyAgICBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAg
IAorYm9vbCBQREZQbHVnaW46OnNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgSW50UG9pbnQm
IHBvaW50KQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZy
YW1lKCktPnZpZXcoKTsKKyAgICBJbnRQb2ludCBjb250ZW50c1BvaW50ID0gZnJhbWVWaWV3LT5j
b250ZW50c1RvUm9vdFZpZXcocG9pbnQpOworICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQoV2ViRXZl
bnQ6Ok1vdXNlRG93biwgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b24sIGNvbnRlbnRzUG9pbnQs
IGNvbnRlbnRzUG9pbnQsIDAsIDAsIDAsIDEsIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmll
cnM+KDApLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgV2ViQ29yZTo6Rm9yY2VBdENs
aWNrKTsKKyAgICByZXR1cm4gaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7Cit9CisKK2Jv
b2wgUERGUGx1Z2luOjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
IGV2ZW50KQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZy
YW1lKCktPnZpZXcoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IGZyYW1lVmlldy0+Y29udGVudHNU
b1NjcmVlbihJbnRSZWN0KGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5wb3NpdGlv
bigpKSwgSW50U2l6ZSgpKSkubG9jYXRpb24oKTsKKyAgICAKKyAgICBpZiAoTlNNZW51ICpuc01l
bnUgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgbWVudUZvckV2ZW50Om5zRXZlbnRGb3JXZWJNb3Vz
ZUV2ZW50KGV2ZW50KV0pIHsKKyAgICAgICAgV0tQb3B1cENvbnRleHRNZW51KG5zTWVudSwgcG9p
bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBOU0V2ZW50VHlwZSBldmVudFR5cGU7CisKKyAgICBp
ZiAoIWdldEV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgZXZlbnRUeXBlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJG
bGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0g
W05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQg
bW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNv
bnRleHQ6MCBjaGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnM6ZXZlbnQudW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6ZXZlbnQuaXNBdXRvUmVwZWF0KCkg
a2V5Q29kZTpldmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpXTsKKyAgICAKKyAgICBzd2l0Y2gg
KGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CisgICAgICAgIHJl
dHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIga2V5RG93bjpmYWtlRXZlbnRdOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OworfQorICAgIAorYm9vbCBQREZQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0
cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgaWYgKGNv
bW1hbmROYW1lID09ICJjb3B5IikKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvcHlT
ZWxlY3Rpb25dOworICAgIGVsc2UgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwiKQorICAg
ICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2VsZWN0QWxsXTsKKyAgICBlbHNlIGlmIChjb21t
YW5kTmFtZSA9PSAidGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uIikgeworICAgICAgICBOU1N0
cmluZyAqc3RyaW5nID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRTZWxlY3Rpb25dLnN0
cmluZzsKKyAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgpCisgICAgICAgICAgICB3cml0ZUl0ZW1z
VG9QYXN0ZWJvYXJkKE5TRmluZFBib2FyZCwgQFsgW3N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ10gXSwgQFsgTlNQYXN0ZWJvYXJkVHlwZVN0cmluZyBdKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7CisgICAgaWYgKGNvbW1h
bmROYW1lID09ICJjb3B5IiB8fCBjb21tYW5kTmFtZSA9PSAidGFrZUZpbmRTdHJpbmdGcm9tU2Vs
ZWN0aW9uIikKKyAgICAgICAgcmV0dXJuIFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2Vs
ZWN0aW9uXTsKKworICAgIGlmIChjb21tYW5kTmFtZSA9PSAic2VsZWN0QWxsIikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpz
ZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbE9m
ZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisKKyAgICBbQ0FUcmFuc2Fj
dGlvbiBiZWdpbl07CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldFNjcm9sbFBvc2l0aW9u
Om9mZnNldF07CisKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAgICBtX2FjdGl2
ZUFubm90YXRpb24tPnVwZGF0ZUdlb21ldHJ5KCk7CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21t
aXRdOworfQorCit2b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHNjcm9sbGJh
ciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxi
YXJMYXllciBzZXROZWVkc0Rpc3BsYXldOworICAgIGVsc2UgaWYgKHNjcm9sbGJhciA9PSB2ZXJ0
aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHNldE5l
ZWRzRGlzcGxheV07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFttX3Njcm9sbENvcm5lckxheWVyIHNl
dE5lZWRzRGlzcGxheV07Cit9CisKK2Jvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdpbigp
IGNvbnN0Cit7CisgICAgLy8gPG9iamVjdD4gb3IgPGVtYmVkPiBwbHVnaW5zIHdpbGwgYXBwZWFy
IHRvIGJlIGluIHRoZWlyIHBhcmVudCBmcmFtZSwgc28gd2UgaGF2ZSB0bworICAgIC8vIGNoZWNr
IHdoZXRoZXIgb3VyIGZyYW1lJ3Mgd2lkZ2V0IGlzIGV4YWN0bHkgb3VyIFBsdWdpblZpZXcuCisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50
KCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8UGx1Z2luRG9jdW1lbnQqPihkb2N1bWVudCktPnBsdWdpbldpZGdldCgpID09IHBsdWdpblZp
ZXcoKTsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25z
dAoreworICAgIHJldHVybiB3ZWJGcmFtZSgpLT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1l
UGx1Z2luKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpjbGlja2VkTGluayhOU1VSTCAqdXJsKQor
eworICAgIFVSTCBjb3JlVVJMID0gdXJsOworICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChj
b3JlVVJMKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGZyYW1lID0gd2ViRnJhbWUo
KS0+Y29yZUZyYW1lKCk7CisKKyAgICBSZWZQdHI8RXZlbnQ+IGNvcmVFdmVudDsKKyAgICBpZiAo
bV9sYXN0TW91c2VFdmVudC50eXBlKCkgIT0gV2ViRXZlbnQ6Ok5vVHlwZSkKKyAgICAgICAgY29y
ZUV2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm0obV9sYXN0TW91c2VFdmVudCks
IDAsIDApOworCisgICAgZnJhbWUtPmxvYWRlcigpLnVybFNlbGVjdGVkKGNvcmVVUkwsIGVtcHR5
U3RyaW5nKCksIGNvcmVFdmVudC5nZXQoKSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0Zvcndh
cmRMaXN0OjpObywgTWF5YmVTZW5kUmVmZXJyZXIsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3k6OlNob3VsZEFsbG93KTsKK30KKwordm9pZCBQREZQbHVnaW46OnNldEFjdGl2ZUFubm90YXRp
b24oUERGQW5ub3RhdGlvbiAqYW5ub3RhdGlvbikKK3sKKyAgICBpZiAoIXN1cHBvcnRzRm9ybXMo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fYWN0aXZlQW5ub3RhdGlvbikKKyAgICAg
ICAgbV9hY3RpdmVBbm5vdGF0aW9uLT5jb21taXQoKTsKKworICAgIGlmIChhbm5vdGF0aW9uKSB7
CisgICAgICAgIGlmIChbYW5ub3RhdGlvbiBpc0tpbmRPZkNsYXNzOnBkZkFubm90YXRpb25UZXh0
V2lkZ2V0Q2xhc3MoKV0gJiYgc3RhdGljX2Nhc3Q8UERGQW5ub3RhdGlvblRleHRXaWRnZXQgKj4o
YW5ub3RhdGlvbikuaXNSZWFkT25seSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9u
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1f
YWN0aXZlQW5ub3RhdGlvbiA9IFBERlBsdWdpbkFubm90YXRpb246OmNyZWF0ZShhbm5vdGF0aW9u
LCBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7CisgICAgICAgIG1fYWN0aXZlQW5u
b3RhdGlvbi0+YXR0YWNoKG1fYW5ub3RhdGlvbkNvbnRhaW5lci5nZXQoKSk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7Cit9CisKK2Jvb2wgUERGUGx1
Z2luOjpzdXBwb3J0c0Zvcm1zKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc3VwcG9ydCBmb3JtcyBm
b3IgZnVsbC1tYWluLWZyYW1lIGFuZCA8aWZyYW1lPiBQREZzLCBidXQgbm90IDxlbWJlZD4gb3Ig
PG9iamVjdD4sIGJlY2F1c2UgdGhvc2UgY2FzZXMgZG8gbm90IGhhdmUgdGhlaXIgb3duIERvY3Vt
ZW50IGludG8gd2hpY2ggdG8gaW5qZWN0IGZvcm0gZWxlbWVudHMuCisgICAgcmV0dXJuIGlzRnVs
bEZyYW1lUGx1Z2luKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpub3RpZnlDb250ZW50U2NhbGVG
YWN0b3JDaGFuZ2VkKENHRmxvYXQgc2NhbGVGYWN0b3IpCit7CisgICAgaWYgKGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoKSkKKyAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3Io
c2NhbGVGYWN0b3IsIEludFBvaW50KCkpOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1
cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpub3RpZnlEaXNwbGF5TW9k
ZUNoYW5nZWQoaW50KQoreworICAgIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdXBkYXRlU2Nyb2xs
YmFycygpOworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBQREZQbHVnaW46OmxpdmVSZXNvdXJj
ZURhdGEoKSBjb25zdAoreworICAgIE5TRGF0YSAqcGRmRGF0YSA9IGxpdmVEYXRhKCk7CisKKyAg
ICBpZiAoIXBkZkRhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShwZGZEYXRhKTsKK30KKwordm9pZCBQREZQbHVnaW46OnNh
dmVUb1BERigpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3RpZnkgdGhl
IHVzZXIgdGhhdCB0aGV5IGNhbid0IHNhdmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBmaW5pc2hl
ZCBsb2FkaW5nLgorICAgIC8vIFBERlZpZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1
dCB0aGF0IHNlZW1zIGluc3VmZmljaWVudC4KKyAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CisgICAgd2ViRnJh
bWUoKS0+cGFnZSgpLT5zYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIobV9zdWdnZXN0ZWRG
aWxlbmFtZSwgd2ViRnJhbWUoKS0+dXJsKCksIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIgKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCkKK3sKKyAgICBpZiAoIW1fdGVtcG9yYXJ5UERG
VVVJRCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlmeSB0aGUg
dXNlciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZpbmlzaGVk
IGxvYWRpbmcuCisgICAgICAgIC8vIFBERlZpZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCks
IGJ1dCB0aGF0IHNlZW1zIGluc3VmZmljaWVudC4KKyAgICAgICAgaWYgKCFwZGZEb2N1bWVudCgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRh
KCk7CisKKyAgICAgICAgbV90ZW1wb3JhcnlQREZVVUlEID0gV2ViQ29yZTo6Y3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpOworICAgICAgICBBU1NFUlQobV90ZW1wb3JhcnlQREZVVUlEKTsKKwor
ICAgICAgICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9w
ZW5XaXRoTmF0aXZlQXBwbGljYXRpb24obV9zdWdnZXN0ZWRGaWxlbmFtZSwgd2ViRnJhbWUoKS0+
dXJsKCksIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oW2RhdGEgYnl0ZXNdKSwg
W2RhdGEgbGVuZ3RoXSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpPcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX3RlbXBv
cmFyeVBERlVVSUQpKTsKK30KKwordm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9h
cmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlw
ZXMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGFzdGVib2FyZFR5cGVzOworCisgICAgZm9yIChO
U1N0cmluZyAqdHlwZSBpbiB0eXBlcykKKyAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0
eXBlKTsKKworICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OworICAgIGF1dG8mIHdlYlByb2Nl
c3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKKyAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNl
dFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwKKyAgICAg
ICAgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBs
eShuZXdDaGFuZ2VDb3VudCksIDApOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBjb3Vu
dCA9IGl0ZW1zLmNvdW50OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU1N0cmluZyAqdHlw
ZSA9IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBOU0RhdGEgKmRhdGEgPSBbaXRl
bXMgb2JqZWN0QXRJbmRleDppXTsKKworICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIGRh
dGEgZm9yIGFueSBpdGVtcyB0byBiZSBlbXB0eSwgYnV0IGFyZW4ndCBjb21wbGV0ZWx5IHN1cmUu
CisgICAgICAgIC8vIEF2b2lkIGNyYXNoaW5nIGluIHRoZSBTaGFyZWRNZW1vcnkgY29uc3RydWN0
b3IgaW4gcmVsZWFzZSBidWlsZHMgaWYgd2UncmUgd3JvbmcuCisgICAgICAgIEFTU0VSVChkYXRh
Lmxlbmd0aCk7CisgICAgICAgIGlmICghZGF0YS5sZW5ndGgpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlw
ZV0gfHwgW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddKSB7Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHBsYWluVGV4dFN0cmluZyA9IGFkb3B0TlMo
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddKTsKKyAgICAgICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2Fy
ZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIHBsYWluVGV4dFN0cmluZy5nZXQo
KSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JU
eXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwTlNE
YXRhKGRhdGEpOworCisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAg
ICAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5
OjphbGxvY2F0ZShidWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICBtZW1jcHkoc2hhcmVkTWVt
b3J5LT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICAg
ICBzaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOworICAgICAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0
ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgaGFuZGxlLCBidWZmZXIt
PnNpemUoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZm
ZXJGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFBERlBsdWdpbjo6c2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKE5T
QXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBDR1BvaW50IHBvaW50KQoreworICAgIERpY3Rpb25h
cnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZv
Lm9yaWdpbiA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9pbnQocG9pbnQpKTsK
KyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzdHJpbmc7CisKKyAg
ICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybURpY3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mbykpOworfQorCit1bnNpZ25l
ZCBQREZQbHVnaW46OmNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNv
cmU6OkZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCit7CisgICAg
aWYgKCF0YXJnZXQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IG5zT3B0
aW9ucyA9IChvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpID8gTlNDYXNlSW5z
ZW5zaXRpdmVTZWFyY2ggOiAwOworCisgICAgcmV0dXJuIFtbcGRmRG9jdW1lbnQoKSBmaW5kU3Ry
aW5nOnRhcmdldCB3aXRoT3B0aW9uczpuc09wdGlvbnNdIGNvdW50XTsKK30KKworUERGU2VsZWN0
aW9uICpQREZQbHVnaW46Om5leHRNYXRjaEZvclN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
Qk9PTCBzZWFyY2hGb3J3YXJkLCBCT09MIGNhc2VTZW5zaXRpdmUsIEJPT0wgd3JhcFNlYXJjaCwg
UERGU2VsZWN0aW9uICppbml0aWFsU2VsZWN0aW9uLCBCT09MIHN0YXJ0SW5TZWxlY3Rpb24pCit7
CisgICAgaWYgKCF0YXJnZXQubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U1N0cmluZ0NvbXBhcmVPcHRpb25zIG9wdGlvbnMgPSAwOworICAgIGlmICghc2VhcmNoRm9yd2Fy
ZCkKKyAgICAgICAgb3B0aW9ucyB8PSBOU0JhY2t3YXJkc1NlYXJjaDsKKworICAgIGlmICghY2Fz
ZVNlbnNpdGl2ZSkKKyAgICAgICAgb3B0aW9ucyB8PSBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsK
KworICAgIFBERkRvY3VtZW50ICpkb2N1bWVudCA9IHBkZkRvY3VtZW50KCkuZ2V0KCk7CisKKyAg
ICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggPSBbaW5pdGlhbFNlbGVj
dGlvbiBjb3B5XTsKKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbikgeworICAgICAgICAvLyBJbml0
aWFsbHkgd2Ugd2FudCB0byBpbmNsdWRlIHRoZSBzZWxlY3RlZCB0ZXh0IGluIHRoZSBzZWFyY2gu
IFNvIHdlIG11c3QgbW9kaWZ5IHRoZSBzdGFydGluZyBzZWFyY2gKKyAgICAgICAgLy8gc2VsZWN0
aW9uIHRvIGZpdCBQREZEb2N1bWVudCdzIHNlYXJjaCByZXF1aXJlbWVudHM6IHNlbGVjdGlvbiBt
dXN0IGhhdmUgYSBsZW5ndGggPj0gMSwgYmVnaW4gYmVmb3JlCisgICAgICAgIC8vIHRoZSBjdXJy
ZW50IHNlbGVjdGlvbiAoaWYgc2VhcmNoaW5nIGZvcndhcmRzKSBvciBhZnRlciAoaWYgc2VhcmNo
aW5nIGJhY2t3YXJkcykuCisgICAgICAgIGludCBpbml0aWFsU2VsZWN0aW9uTGVuZ3RoID0gW1tp
bml0aWFsU2VsZWN0aW9uIHN0cmluZ10gbGVuZ3RoXTsKKyAgICAgICAgaWYgKHNlYXJjaEZvcndh
cmQpIHsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVj
dGlvbkF0U3RhcnQ6MV07CisgICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCBl
eHRlbmRTZWxlY3Rpb25BdEVuZDotaW5pdGlhbFNlbGVjdGlvbkxlbmd0aF07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCBleHRlbmRTZWxl
Y3Rpb25BdEVuZDoxXTsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4
dGVuZFNlbGVjdGlvbkF0U3RhcnQ6LWluaXRpYWxTZWxlY3Rpb25MZW5ndGhdOworICAgICAgICB9
CisgICAgfQorCisgICAgUERGU2VsZWN0aW9uICpmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBm
aW5kU3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOnNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2gg
d2l0aE9wdGlvbnM6b3B0aW9uc107CisgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggcmVs
ZWFzZV07CisKKyAgICAvLyBJZiB3ZSBmaXJzdCBzZWFyY2hlZCBpbiB0aGUgc2VsZWN0aW9uLCBh
bmQgd2UgZm91bmQgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIGFnYWluIGZyb20ganVzdCBwYXN0IHRo
ZSBzZWxlY3Rpb24uCisgICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24gJiYgW2ZvdW5kU2VsZWN0aW9u
IGlzRXF1YWw6aW5pdGlhbFNlbGVjdGlvbl0pCisgICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2Rv
Y3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246aW5pdGlhbFNlbGVjdGlvbiB3
aXRoT3B0aW9uczpvcHRpb25zXTsKKworICAgIGlmICghZm91bmRTZWxlY3Rpb24gJiYgd3JhcFNl
YXJjaCkKKyAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzp0YXJn
ZXQgZnJvbVNlbGVjdGlvbjpuaWwgd2l0aE9wdGlvbnM6b3B0aW9uc107CisKKyAgICByZXR1cm4g
Zm91bmRTZWxlY3Rpb247Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhN
YXRjaENvdW50KQoreworICAgIEJPT0wgc2VhcmNoRm9yd2FyZCA9ICEob3B0aW9ucyAmIEZpbmRP
cHRpb25zQmFja3dhcmRzKTsKKyAgICBCT09MIGNhc2VTZW5zaXRpdmUgPSAhKG9wdGlvbnMgJiBG
aW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSk7CisgICAgQk9PTCB3cmFwU2VhcmNoID0gb3B0aW9u
cyAmIEZpbmRPcHRpb25zV3JhcEFyb3VuZDsKKworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQ7Cisg
ICAgaWYgKCFtYXhNYXRjaENvdW50KSB7CisgICAgICAgIC8vIElmIHRoZSBtYXggd2FzIHplcm8s
IGFueSByZXN1bHQgbWVhbnMgd2UgZXhjZWVkZWQgdGhlIG1heC4gV2UgY2FuIHNraXAgY29tcHV0
aW5nIHRoZSBhY3R1YWwgY291bnQuCisgICAgICAgIG1hdGNoQ291bnQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oa1dLTW9yZVRoYW5NYXhpbXVtTWF0Y2hDb3VudCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbWF0Y2hDb3VudCA9IGNvdW50RmluZE1hdGNoZXModGFyZ2V0LCBvcHRpb25zLCBtYXhN
YXRjaENvdW50KTsKKyAgICAgICAgaWYgKG1hdGNoQ291bnQgPiBtYXhNYXRjaENvdW50KQorICAg
ICAgICAgICAgbWF0Y2hDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhhbk1h
eGltdW1NYXRjaENvdW50KTsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkgewor
ICAgICAgICBQREZTZWxlY3Rpb24qIHNlYXJjaFNlbGVjdGlvbiA9IFttX3BkZkxheWVyQ29udHJv
bGxlciBzZWFyY2hTZWxlY3Rpb25dOworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZmlu
ZFN0cmluZzp0YXJnZXQgY2FzZVNlbnNpdGl2ZTpjYXNlU2Vuc2l0aXZlIGhpZ2hsaWdodE1hdGNo
ZXM6WUVTXTsKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldFNlYXJjaFNlbGVjdGlv
bjpzZWFyY2hTZWxlY3Rpb25dOworICAgICAgICBtX2xhc3RGb3VuZFN0cmluZyA9IGVtcHR5U3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9sYXN0Rm91
bmRTdHJpbmcgPT0gdGFyZ2V0KSB7CisgICAgICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uID0g
bmV4dE1hdGNoRm9yU3RyaW5nKHRhcmdldCwgc2VhcmNoRm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwg
d3JhcFNlYXJjaCwgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNlYXJjaFNlbGVjdGlvbl0sIE5PKTsK
KyAgICAgICAgaWYgKCFzZWxlY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldFNlYXJjaFNlbGVjdGlvbjpzZWxlY3Rpb25d
OworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ290b1NlbGVjdGlvbjpzZWxlY3Rpb25d
OworICAgIH0gZWxzZSB7CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBmaW5kU3RyaW5n
OnRhcmdldCBjYXNlU2Vuc2l0aXZlOmNhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hlczpZRVNd
OworICAgICAgICBtX2xhc3RGb3VuZFN0cmluZyA9IHRhcmdldDsKKyAgICB9CisKKyAgICByZXR1
cm4gbWF0Y2hDb3VudCA+IDA7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCit7Cisg
ICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihyb3Vu
ZGVkSW50UG9pbnQocG9pbnQpKTsKKyAgICBQREZTZWxlY3Rpb24qIGxvb2t1cFNlbGVjdGlvbiA9
IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpjb252ZXJ0
RnJvbVBsdWdpblRvUERGVmlldyhsb2NhbFBvaW50KV07CisKKyAgICBpZiAoW1tsb29rdXBTZWxl
Y3Rpb24gc3RyaW5nXSBsZW5ndGhdKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2Vh
cmNoSW5EaWN0aW9uYXJ5V2l0aFNlbGVjdGlvbjpsb29rdXBTZWxlY3Rpb25dOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpmb2N1c05leHRBbm5vdGF0aW9uKCkKK3sK
KyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjpmYWxzZV07
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpCit7CisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIGFjdGl2YXRlTmV4dEFubm90YXRpb246dHJ1ZV07Cit9CisK
K3ZvaWQgUERGUGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqKQor
eworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+ZGlkQ2hhbmdlU2VsZWN0aW9uKCk7Cit9CisKK1N0
cmluZyBQREZQbHVnaW46OmdldFNlbGVjdGlvblN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFtbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl0gc3RyaW5nXTsKK30KKwor
U3RyaW5nIFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnRJblZpZXcg
PSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4o
cm91bmRlZEludFBvaW50KHBvaW50KSkpOworICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9y
V29yZCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpw
b2ludEluVmlld107CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRTZWxlY3Rp
b246c2VsZWN0aW9uRm9yV29yZF07CisgICAgCisgICAgcmV0dXJuIFtzZWxlY3Rpb25Gb3JXb3Jk
IHN0cmluZ107Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5z
UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29yZGluYXRl
cykgY29uc3QKK3sKKyAgICBQREZTZWxlY3Rpb24gKmN1cnJlbnRTZWxlY3Rpb24gPSBbbV9wZGZM
YXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl07CisgICAgaWYgKCFjdXJyZW50U2VsZWN0
aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSW50UG9pbnQgcG9pbnRJblBE
RlZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJvb3RWaWV3VG9Q
bHVnaW4ocm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKSk7CisgICAg
UERGU2VsZWN0aW9uICpzZWxlY3Rpb25Gb3JXb3JkID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdl
dFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OnBvaW50SW5QREZWaWV3XTsKKworICAgIE5TVUludGVn
ZXIgY3VycmVudFBhZ2VJbmRleCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZUlu
ZGV4XTsKKyAgICAKKyAgICBOU0FycmF5ICpzZWxlY3Rpb25SZWN0cyA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciByZWN0c0ZvclNlbGVjdGlvbkluTGF5b3V0U3BhY2U6Y3VycmVudFNlbGVjdGlvbl07
CisgICAgaWYgKCFzZWxlY3Rpb25SZWN0cyB8fCAhc2VsZWN0aW9uUmVjdHMuY291bnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA+PSBzZWxl
Y3Rpb25SZWN0cy5jb3VudCkKKyAgICAgICAgY3VycmVudFBhZ2VJbmRleCA9IHNlbGVjdGlvblJl
Y3RzLmNvdW50IC0gMTsKKworICAgIE5TQXJyYXkgKndvcmRTZWxlY3Rpb25SZWN0cyA9IFttX3Bk
ZkxheWVyQ29udHJvbGxlciByZWN0c0ZvclNlbGVjdGlvbkluTGF5b3V0U3BhY2U6c2VsZWN0aW9u
Rm9yV29yZF07CisgICAgaWYgKCF3b3JkU2VsZWN0aW9uUmVjdHMgfHwgIXdvcmRTZWxlY3Rpb25S
ZWN0cy5jb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNWYWx1ZSAqc2VsZWN0
aW9uQm91bmRzID0gW3NlbGVjdGlvblJlY3RzIG9iamVjdEF0SW5kZXg6Y3VycmVudFBhZ2VJbmRl
eF07CisgICAgTlNWYWx1ZSAqd29yZFNlbGVjdGlvbkJvdW5kcyA9IFt3b3JkU2VsZWN0aW9uUmVj
dHMgb2JqZWN0QXRJbmRleDowXTsKKworICAgIE5TUmVjdCBzZWxlY3Rpb25Cb3VuZHNSZWN0ID0g
c2VsZWN0aW9uQm91bmRzLnJlY3RWYWx1ZTsKKyAgICBOU1JlY3Qgd29yZFNlbGVjdGlvbkJvdW5k
c1JlY3QgPSB3b3JkU2VsZWN0aW9uQm91bmRzLnJlY3RWYWx1ZTsKKyAgICByZXR1cm4gTlNJbnRl
cnNlY3RzUmVjdCh3b3JkU2VsZWN0aW9uQm91bmRzUmVjdCwgc2VsZWN0aW9uQm91bmRzUmVjdCk7
Cit9CisKK3N0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5XaW5kb3dT
cGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxlciwgTlNQb2ludCBwb2lu
dEluVmlldykKK3sKKyAgICBDR1BvaW50IHBvaW50ID0gTlNQb2ludFRvQ0dQb2ludChwb2ludElu
Vmlldyk7CisgICAgQ0dQb2ludCBzY3JvbGxPZmZzZXQgPSBbcGRmTGF5ZXJDb250cm9sbGVyIHNj
cm9sbFBvc2l0aW9uXTsKKyAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gW3BkZkxheWVyQ29udHJv
bGxlciBjb250ZW50U2NhbGVGYWN0b3JdOworCisgICAgc2Nyb2xsT2Zmc2V0LnkgPSBbcGRmTGF5
ZXJDb250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dLmhlaWdodCAtIE5TUmVjdFRv
Q0dSZWN0KFtwZGZMYXllckNvbnRyb2xsZXIgZnJhbWVdKS5zaXplLmhlaWdodCAtIHNjcm9sbE9m
ZnNldC55OworICAgIAorICAgIENHUG9pbnQgbmV3UG9pbnQgPSBDR1BvaW50TWFrZShzY3JvbGxP
ZmZzZXQueCArIHBvaW50LngsIHNjcm9sbE9mZnNldC55ICsgcG9pbnQueSk7CisgICAgbmV3UG9p
bnQueCAvPSBzY2FsZUZhY3RvcjsKKyAgICBuZXdQb2ludC55IC89IHNjYWxlRmFjdG9yOworICAg
IHJldHVybiBOU1BvaW50RnJvbUNHUG9pbnQobmV3UG9pbnQpOworfQorCitTdHJpbmcgUERGUGx1
Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2Nh
dGlvbkluVmlld0Nvb3JkaW5hdGVzLCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBkYXRhLCBQREZT
ZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0Cit7
CisgICAgUERGU2VsZWN0aW9uKiYgc2VsZWN0aW9uID0gKnNlbGVjdGlvblB0cjsKKworICAgIHNl
bGVjdGlvbiA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKKyAgICBp
ZiAoZXhpc3RpbmdTZWxlY3Rpb25Db250YWluc1BvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0
ZXMpKQorICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnN0cmluZzsKKyAgICAgICAgCisgICAgSW50
UG9pbnQgcG9pbnRJblBERlZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0
RnJvbVJvb3RWaWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRp
bmF0ZXMpKSk7CisgICAgc2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVj
dGlvbkZvcldvcmRBdFBvaW50OnBvaW50SW5QREZWaWV3XTsKKyAgICBpZiAoIXNlbGVjdGlvbikK
KyAgICAgICAgcmV0dXJuICIiOworCisgICAgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2UgPSBw
b2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UobV9wZGZMYXllckNvbnRyb2xs
ZXIuZ2V0KCksIHBvaW50SW5QREZWaWV3KTsKKworICAgIFBERlBhZ2UgKmN1cnJlbnRQYWdlID0g
W1ttX3BkZkxheWVyQ29udHJvbGxlciBsYXlvdXRdIHBhZ2VOZWFyZXN0UG9pbnQ6cG9pbnRJbkxh
eW91dFNwYWNlIGN1cnJlbnRQYWdlOlttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZV1d
OworICAgIAorICAgIE5TUG9pbnQgcG9pbnRJblBhZ2VTcGFjZSA9IFtbbV9wZGZMYXllckNvbnRy
b2xsZXIgbGF5b3V0XSBjb252ZXJ0UG9pbnQ6cG9pbnRJbkxheW91dFNwYWNlIHRvUGFnZTpjdXJy
ZW50UGFnZSBmb3JTY2FsZUZhY3RvcjoxLjBdOworICAgIAorICAgIGZvciAoUERGQW5ub3RhdGlv
biAqYW5ub3RhdGlvbiBpbiBjdXJyZW50UGFnZS5hbm5vdGF0aW9ucykgeworICAgICAgICBpZiAo
IVthbm5vdGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpXSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBOU1JlY3QgYm91bmRzID0gYW5ub3Rh
dGlvbi5ib3VuZHM7CisgICAgICAgIGlmICghTlNQb2ludEluUmVjdChwb2ludEluUGFnZVNwYWNl
LCBib3VuZHMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBQREZB
bm5vdGF0aW9uTGluayAqbGlua0Fubm90YXRpb24gPSAoUERGQW5ub3RhdGlvbkxpbmsgKilhbm5v
dGF0aW9uOworICAgICAgICBOU1VSTCAqdXJsID0gbGlua0Fubm90YXRpb24uVVJMOworICAgICAg
ICBpZiAoIXVybCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZGF0
YS5hYnNvbHV0ZUxpbmtVUkwgPSB1cmwuYWJzb2x1dGVTdHJpbmc7CisgICAgICAgIGRhdGEubGlu
a0xhYmVsID0gc2VsZWN0aW9uLnN0cmluZzsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5zdHJp
bmc7CisgICAgfQorICAgIAorICAgIE5TU3RyaW5nICpsb29rdXBUZXh0ID0gRGljdGlvbmFyeUxv
b2t1cDo6c3RyaW5nRm9yUERGU2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgaWYg
KCFsb29rdXBUZXh0IHx8ICFsb29rdXBUZXh0Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIiOwor
CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRTZWxlY3Rpb246c2VsZWN0aW9u
XTsKKyAgICByZXR1cm4gbG9va3VwVGV4dDsKK30KKworc3RhdGljIE5TUmVjdCByZWN0SW5WaWV3
U3BhY2VGb3JSZWN0SW5MYXlvdXRTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29u
dHJvbGxlciwgTlNSZWN0IGxheW91dFNwYWNlUmVjdCkKK3sKKyAgICBDR1JlY3QgbmV3UmVjdCA9
IE5TUmVjdFRvQ0dSZWN0KGxheW91dFNwYWNlUmVjdCk7CisgICAgQ0dGbG9hdCBzY2FsZUZhY3Rv
ciA9IHBkZkxheWVyQ29udHJvbGxlci5jb250ZW50U2NhbGVGYWN0b3I7CisgICAgQ0dQb2ludCBz
Y3JvbGxPZmZzZXQgPSBwZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb247CisKKyAgICBz
Y3JvbGxPZmZzZXQueSA9IHBkZkxheWVyQ29udHJvbGxlci5jb250ZW50U2l6ZVJlc3BlY3Rpbmda
b29tLmhlaWdodCAtIE5TUmVjdFRvQ0dSZWN0KHBkZkxheWVyQ29udHJvbGxlci5mcmFtZSkuc2l6
ZS5oZWlnaHQgLSBzY3JvbGxPZmZzZXQueTsKKworICAgIG5ld1JlY3Qub3JpZ2luLnggKj0gc2Nh
bGVGYWN0b3I7CisgICAgbmV3UmVjdC5vcmlnaW4ueSAqPSBzY2FsZUZhY3RvcjsKKyAgICBuZXdS
ZWN0LnNpemUud2lkdGggKj0gc2NhbGVGYWN0b3I7CisgICAgbmV3UmVjdC5zaXplLmhlaWdodCAq
PSBzY2FsZUZhY3RvcjsKKworICAgIG5ld1JlY3Qub3JpZ2luLnggLT0gc2Nyb2xsT2Zmc2V0Lng7
CisgICAgbmV3UmVjdC5vcmlnaW4ueSAtPSBzY3JvbGxPZmZzZXQueTsKKworICAgIHJldHVybiBO
U1JlY3RGcm9tQ0dSZWN0KG5ld1JlY3QpOworfQorCitXZWJDb3JlOjpGbG9hdFJlY3QgUERGUGx1
Z2luOjpyZWN0Rm9yU2VsZWN0aW9uSW5Sb290VmlldyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikg
Y29uc3QKK3sKKyAgICBQREZQYWdlICpjdXJyZW50UGFnZSA9IG5pbDsKKyAgICBOU0FycmF5KiBw
YWdlcyA9IHNlbGVjdGlvbi5wYWdlczsKKyAgICBpZiAocGFnZXMuY291bnQpCisgICAgICAgIGN1
cnJlbnRQYWdlID0gKFBERlBhZ2UgKilbcGFnZXMgb2JqZWN0QXRJbmRleDowXTsKKworICAgIGlm
ICghY3VycmVudFBhZ2UpCisgICAgICAgIGN1cnJlbnRQYWdlID0gW21fcGRmTGF5ZXJDb250cm9s
bGVyIGN1cnJlbnRQYWdlXTsKKyAgICAKKyAgICBOU1JlY3QgcmVjdEluUGFnZVNwYWNlID0gW3Nl
bGVjdGlvbiBib3VuZHNGb3JQYWdlOmN1cnJlbnRQYWdlXTsKKyAgICBOU1JlY3QgcmVjdEluTGF5
b3V0U3BhY2UgPSBbW21fcGRmTGF5ZXJDb250cm9sbGVyIGxheW91dF0gY29udmVydFJlY3Q6cmVj
dEluUGFnZVNwYWNlIGZyb21QYWdlOmN1cnJlbnRQYWdlIGZvclNjYWxlRmFjdG9yOjEuMF07Cisg
ICAgTlNSZWN0IHJlY3RJblZpZXcgPSByZWN0SW5WaWV3U3BhY2VGb3JSZWN0SW5MYXlvdXRTcGFj
ZShtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSwgcmVjdEluTGF5b3V0U3BhY2UpOworCisgICAg
cmVjdEluVmlldy5vcmlnaW4gPSBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFBvaW50
KHJlY3RJblZpZXcub3JpZ2luKSk7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHJl
Y3RJblZpZXcpOworfQorCitDR0Zsb2F0IFBERlBsdWdpbjo6c2NhbGVGYWN0b3IoKSBjb25zdAor
eworICAgIHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsK
K30KKwordm9pZCBQREZQbHVnaW46OnBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKnN0cmluZykK
K3sKKyAgICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2VhcmNoVGhlV2ViKHN0cmluZykpOworfQorCit2b2lkIFBERlBsdWdpbjo6cGVyZm9ybVNwb3Rs
aWdodFNlYXJjaChOU1N0cmluZyAqc3RyaW5nKQoreworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWFyY2hXaXRoU3BvdGxpZ2h0KHN0cmluZykp
OworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2
ZW50JiBldmVudCkKK3sKKyAgICBQREZEaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IFttX3BkZkxh
eWVyQ29udHJvbGxlciBkaXNwbGF5TW9kZV07CisKKyAgICBpZiAoZGlzcGxheU1vZGUgPT0ga1BE
RkRpc3BsYXlTaW5nbGVQYWdlQ29udGludW91cyB8fCBkaXNwbGF5TW9kZSA9PSBrUERGRGlzcGxh
eVR3b1VwQ29udGludW91cykKKyAgICAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVX
aGVlbEV2ZW50KHBsYXRmb3JtKGV2ZW50KSk7CisKKyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRQYWdl
SW5kZXggPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFBhZ2VJbmRleF07CisgICAgYm9v
bCBpbkZpcnN0UGFnZSA9ICFjdXJyZW50UGFnZUluZGV4OworICAgIGJvb2wgaW5MYXN0UGFnZSA9
IFttX3BkZkxheWVyQ29udHJvbGxlciBsYXN0UGFnZUluZGV4XSA9PSBjdXJyZW50UGFnZUluZGV4
OworCisgICAgYm9vbCBhdFNjcm9sbFRvcCA9ICFzY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICBi
b29sIGF0U2Nyb2xsQm90dG9tID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgPT0gbWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkueSgpOworCisgICAgYm9vbCBpbk1vbWVudHVtU2Nyb2xsID0gZXZlbnQubW9t
ZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNlTm9uZTsKKworICAgIGludCBzY3Jv
bGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IGRlZmF1bHRTY3JvbGxNYWduaXR1ZGVU
aHJlc2hvbGRGb3JQYWdlRmxpcDsKKworICAgIC8vIEltcHJlY2lzZSBpbnB1dCBkZXZpY2VzIHNo
b3VsZCBoYXZlIGEgbG93ZXIgdGhyZXNob2xkIHNvIHRoYXQgImNsaWNreSIgc2Nyb2xsIHdoZWVs
cyBjYW4gZmxpcCBwYWdlcy4KKyAgICBpZiAoIWV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXMoKSkKKyAgICAgICAgc2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAwOwor
CisgICAgaWYgKGF0U2Nyb2xsQm90dG9tICYmICFpbkxhc3RQYWdlICYmIGV2ZW50LmRlbHRhKCku
aGVpZ2h0KCkgPCAwKSB7CisgICAgICAgIGlmIChldmVudC5kZWx0YSgpLmhlaWdodCgpIDw9IC1z
Y3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCAmJiAhaW5Nb21lbnR1bVNjcm9sbCkK
KyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvTmV4dFBhZ2VdOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXRTY3JvbGxUb3AgJiYgIWluRmlyc3RQ
YWdlICYmIGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPiAwKSB7CisgICAgICAgIGlmIChldmVudC5k
ZWx0YSgpLmhlaWdodCgpID49IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYm
ICFpbk1vbWVudHVtU2Nyb2xsKSB7CisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07
CisgICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ290b1ByZXZpb3VzUGFnZV07Cisg
ICAgICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkpOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKK30KKworTlNEYXRhICpQREZQ
bHVnaW46OmxpdmVEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQor
ICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworCisgICAgLy8gU2F2ZSBkYXRh
IHN0cmFpZ2h0IGZyb20gdGhlIHJlc291cmNlIGluc3RlYWQgb2YgUERGS2l0IGlmIHRoZSBkb2N1
bWVudCBpcworICAgIC8vIHVudG91Y2hlZCBieSB0aGUgdXNlciwgc28gdGhhdCBQREZzIHdoaWNo
IFBERktpdCBjYW4ndCBkaXNwbGF5IHdpbGwgc3RpbGwgYmUgZG93bmxvYWRhYmxlLgorICAgIGlm
IChtX3BkZkRvY3VtZW50V2FzTXV0YXRlZCkKKyAgICAgICAgcmV0dXJuIFttX3BkZkRvY3VtZW50
IGRhdGFSZXByZXNlbnRhdGlvbl07CisgICAgCisgICAgcmV0dXJuIHJhd0RhdGEoKTsKK30KKwor
TlNPYmplY3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyRGV0
YWlscy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNv
bnRyb2xsZXJEZXRhaWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzUwMjJi
OTM1ZTI1ZGIwNWFhZWVkMDBlOTVmNTA1YTcwMWZjYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLQot
QGNsYXNzIENQUmVhZGluZ01vZGVsOwotQGNsYXNzIFBERlZpZXdMYXlvdXQ7Ci0KLUBwcm90b2Nv
bCBQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0KLS0gKHZvaWQpdXBkYXRl
U2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247Ci0tICh2b2lkKXdyaXRlSXRlbXNU
b1Bhc3RlYm9hcmQ6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsK
LS0gKHZvaWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRT
dHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKLS0gKHZvaWQpcGVyZm9ybVdl
YlNlYXJjaDooTlNTdHJpbmcgKilzdHJpbmc7Ci0tICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFy
Y2g6KE5TU3RyaW5nICopc3RyaW5nOwotLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9u
OwotLSAodm9pZClzYXZlVG9QREY7Ci0KLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZM
YXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3Rh
dGlvbjooUERGQW5ub3RhdGlvbiAqKWFubm90YXRpb247Ci0tICh2b2lkKXBkZkxheWVyQ29udHJv
bGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5r
V2l0aFVSTDooTlNVUkwgKil1cmw7Ci0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZh
Y3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQ
REZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlRGlzcGxheU1v
ZGU6KGludCltb2RlOwotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJv
bGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlv
biAqKXNlbGVjdGlvbjsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6
IE5TT2JqZWN0Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyIChEZXRhaWxz
KQotCi1AcHJvcGVydHkocmV0YWluKSBDQUxheWVyICpwYXJlbnRMYXllcjsKLUBwcm9wZXJ0eShy
ZXRhaW4pIFBERkRvY3VtZW50ICpkb2N1bWVudDsKLUBwcm9wZXJ0eShyZXRhaW4pIGlkPFBERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKLQotLSAodm9pZClzZXRGcmFtZVNpemU6
KENHU2l6ZSlzaXplOwotCi0tIChQREZEaXNwbGF5TW9kZSlkaXNwbGF5TW9kZTsKLS0gKHZvaWQp
c2V0RGlzcGxheU1vZGU6KFBERkRpc3BsYXlNb2RlKW1vZGU7Ci0tICh2b2lkKXNldERpc3BsYXlz
UGFnZUJyZWFrczooQk9PTClwYWdlQnJlYWtzOwotCi0tIChDR0Zsb2F0KWNvbnRlbnRTY2FsZUZh
Y3RvcjsKLS0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9y
OwotCi0tIChDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yOwotLSAodm9pZClzZXREZXZpY2VTY2Fs
ZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKLQotLSAoQ0dTaXplKWNvbnRlbnRTaXplOwot
LSAoQ0dTaXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207Ci0KLS0gKHZvaWQpc25hcHNob3RJ
bkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwotCi0tICh2b2lkKW1hZ25pZnlXaXRoTWFn
bmlmaWNhdGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQg
aW1tZWRpYXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7Ci0KLS0gKENHUG9pbnQpc2Nyb2xsUG9zaXRp
b247Ci0tICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uOwotLSAo
dm9pZClzY3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0YTsKLQotLSAodm9pZCltb3VzZURvd246
KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVu
dDsKLS0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZCltb3VzZVVw
OihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
OwotLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpbW91c2VF
eGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKLQotLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2
ZW50ICopZXZlbnQ7Ci0KLS0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBjYXNlU2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihC
T09MKXNob3VsZEhpZ2hsaWdodE1hdGNoZXM7Ci0KLS0gKFBERlNlbGVjdGlvbiAqKWN1cnJlbnRT
ZWxlY3Rpb247Ci0tICh2b2lkKXNldEN1cnJlbnRTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNl
bGVjdGlvbjsKLS0gKFBERlNlbGVjdGlvbiAqKXNlYXJjaFNlbGVjdGlvbjsKLS0gKHZvaWQpc2V0
U2VhcmNoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0tICh2b2lkKWdvdG9T
ZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKLS0gKFBERlNlbGVjdGlvbiAqKWdl
dFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50KXBvaW50OwotLSAoTlNBcnJheSAqKXJl
Y3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwot
LSAoTlNBcnJheSAqKXJlY3RzRm9yQW5ub3RhdGlvbkluTGF5b3V0U3BhY2U6KFBERkFubm90YXRp
b24gKilhbm5vdGF0aW9uOwotLSAoUERGVmlld0xheW91dCAqKWxheW91dDsKLS0gKE5TUmVjdClm
cmFtZTsKLQotLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOwotLSAoTlNVSW50ZWdlcilsYXN0UGFn
ZUluZGV4OwotLSAoTlNVSW50ZWdlciljdXJyZW50UGFnZUluZGV4OwotLSAodm9pZClnb3RvTmV4
dFBhZ2U7Ci0tICh2b2lkKWdvdG9QcmV2aW91c1BhZ2U7Ci0KLS0gKHZvaWQpY29weVNlbGVjdGlv
bjsKLS0gKHZvaWQpc2VsZWN0QWxsOwotCi0tIChib29sKWtleURvd246KE5TRXZlbnQgKilldmVu
dDsKLQotLSAodm9pZClzZXRIVURFbmFibGVkOihCT09MKWVuYWJsZWQ7Ci0tIChCT09MKWh1ZEVu
YWJsZWQ7Ci0KLS0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICop
YW5ub3RhdGlvbjsKLS0gKHZvaWQpYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjooQk9PTClwcmV2aW91
czsKLQotLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6KE5TU3RyaW5nICopcGFz
c3dvcmQ7Ci0KLS0gKHZvaWQpc2VhcmNoSW5EaWN0aW9uYXJ5V2l0aFNlbGVjdGlvbjooUERGU2Vs
ZWN0aW9uICopc2VsZWN0aW9uOwotCi0vLyBBY2Nlc3NpYmlsaXR5Ci0KLS0gKENQUmVhZGluZ01v
ZGVsICopcmVhZGluZ01vZGVsOwotLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7
Ci0tIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzOwotLSAoQk9PTClhY2Nl
c3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcgKilhdHRyaWJ1dGU7Ci0tICh2
b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmlu
ZyAqKWF0dHJpYnV0ZTsKLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0
dHJpYnV0ZU5hbWVzOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZTsK
LS0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZTsKLS0g
KE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlOwotLSAoQk9PTClhY2Nlc3Np
YmlsaXR5SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlOwotLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNTZWxlY3Rl
ZFRleHRBdHRyaWJ1dGVTZXR0YWJsZTsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5U2VsZWN0
ZWRUZXh0UmFuZ2VBdHRyaWJ1dGU7Ci0tIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlOdW1iZXJP
ZkNoYXJhY3RlcnNBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc051bWJlck9mQ2hh
cmFjdGVyc0F0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlWaXNp
YmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc1Zpc2li
bGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNOdW1iZXIgKilhY2Nlc3Np
YmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7Ci0t
IChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRl
cjooaWQpcGFyYW1ldGVyOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFu
Z2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKLS0gKE5TVmFsdWUgKilhY2Nl
c3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRl
cjsKLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZMYXllckNvbnRyb2xsZXJTUEkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2YzNWRjMjY5
YTg1OWY5MGM1N2E2YjUxODRiMjJkODM1ZWFhN2IwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgK
QEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBERkxheWVyQ29u
dHJvbGxlclNQSV9oCisjZGVmaW5lIFBERkxheWVyQ29udHJvbGxlclNQSV9oCisKKyNpbmNsdWRl
ICJQREZLaXRJbXBvcnRzLmgiCisKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgVVNFKERF
UFJFQ0FURURfUERGX1BMVUdJTikKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRQREZMYXllckNvbnRy
b2xsZXJTUEkuaCIKKworI2Vsc2UKKworI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorCitAY2xh
c3MgQ1BSZWFkaW5nTW9kZWw7CitAY2xhc3MgUERGVmlld0xheW91dDsKKworQHByb3RvY29sIFBE
RkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KKworQG9wdGlvbmFsCisKKy0gKHZv
aWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRy
b2xsZXIgc2Nyb2xsVG9Qb2ludDooQ0dQb2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpcGRmTGF5
ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgaW52
YWxpZGF0ZVJlY3Q6KENHUmVjdClyZWN0OworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJJbnZh
bGlkYXRlSFVEOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXI7CisKKy0g
KHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyWm9vbUluOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZM
YXllckNvbnRyb2xsZXI7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlclpvb21PdXQ6KFBERkxh
eWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKworLSAodm9pZClwZGZMYXllckNv
bnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFu
Z2VBY3RpdmVBbm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQp
cGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xs
ZXIgZGlkQ2xpY2tMaW5rV2l0aFVSTDooTlNVUkwgKil1cmw7CistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5n
ZURpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZM
YXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlU2VsZWN0aW9uOihQ
REZTZWxlY3Rpb24gKilzZWxlY3Rpb247CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQ
REZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY29weUl0ZW1zOihOU0FycmF5
ICopaXRlbXMgd2l0aFR5cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0
UG9pbnQ6KENHUG9pbnQpcG9pbnQ7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHBlcmZvcm1XZWJTZWFyY2hGb3JTdHJp
bmc6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxh
eWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtU3BvdGxpZ2h0U2VhcmNo
Rm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
U2F2ZVRvUERGOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXI7CistICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlck9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb246KFBERkxheWVy
Q29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKworLSAoTlNDb2xvclNwYWNlKilwZGZM
YXllckNvbnRyb2xsZXJDb2xvclNwYWNlOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNv
bnRyb2xsZXI7CisKK0BlbmQKKworQGludGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgOiBOU09i
amVjdAorQGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciAoKQorCitAcHJvcGVy
dHkgKHJldGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHByb3BlcnR5IChhc3NpZ24pIGlk
PFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAocmV0YWlu
KSBOU0FycmF5ICpzZWFyY2hNYXRjaGVzOworCistICh2b2lkKXNldEZyYW1lU2l6ZTooQ0dTaXpl
KXNpemU7CisKKy0gKHZvaWQpc2V0RGlzcGxheU1vZGU6KGludCltb2RlOworLSAoaW50KWRpc3Bs
YXlNb2RlOworLSAoaW50KXJlYWxEaXNwbGF5TW9kZTsKKworLSAoQ0dTaXplKWNvbnRlbnRTaXpl
OworLSAoQ0dTaXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207CisKKy0gKENHRmxvYXQpY29u
dGVudFNjYWxlRmFjdG9yOworLSAodm9pZClzZXRDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQp
Y29udGVudFNjYWxlRmFjdG9yOworCistIChQREZWaWV3TGF5b3V0ICopbGF5b3V0OworCistICh2
b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OworLSAodm9pZClkcmF3SFVE
SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKKworLSAodm9pZCltb3VzZURvd246KE5T
RXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50OworLSAodm9p
ZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoQk9PTCltb3VzZURvd246KE5T
RXZlbnQgKilldmVudCBpbkhVRFdpdGhCb3VuZHM6KENHUmVjdClib3VuZHM7CistIChCT09MKW1v
dXNlVXA6KE5TRXZlbnQgKilldmVudCBpbkhVRFdpdGhCb3VuZHM6KENHUmVjdClib3VuZHM7Cist
IChCT09MKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5kczooQ0dS
ZWN0KWJvdW5kczsKKworLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7
CisKKy0gKE5TQXJyYXkgKilwYWdlUmVjdHM7CisKKy0gKHZvaWQpc2V0VmlzaWJsZVJlY3Q6KENH
UmVjdCl2aXNpYmxlUmVjdDsKKworLSAodm9pZClnb3RvU2VsZWN0aW9uOihQREZTZWxlY3Rpb24g
KilzZWxlY3Rpb247CistICh2b2lkKWdvdG9EZXN0aW5hdGlvbjooUERGRGVzdGluYXRpb24gKilk
ZXN0aW5hdGlvbjsKKy0gKHZvaWQpZ290b1JlY3Q6KENHUmVjdClyZWN0IG9uUGFnZTooUERGUGFn
ZSAqKXBhZ2U7CisKKy0gKFBERlNlbGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lk
KXNldEN1cnJlbnRTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKworLSAodm9p
ZClzZWFyY2hJbkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rp
b247CistIChQREZTZWxlY3Rpb24gKilnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDooQ0dQb2lu
dClwb2ludDsKKy0gKE5TQXJyYXkgKilyZWN0c0ZvclNlbGVjdGlvbkluTGF5b3V0U3BhY2U6KFBE
RlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKworLSAoTlNBcnJheSAqKWhpZ2hsaWdodHM7CistICh2
b2lkKXNldEhpZ2hsaWdodHM6KE5TQXJyYXkqKWhpZ2hsaWdodHM7CisKKy0gKFBERlNlbGVjdGlv
biAqKXNlYXJjaFNlbGVjdGlvbjsKKy0gKE5TQXJyYXkgKilzZWFyY2hNYXRjaGVzOworLSAodm9p
ZClzZXRTZWFyY2hTZWxlY3Rpb246KFBERlNlbGVjdGlvbiopc2VsZWN0aW9uOworLSAoTlNBcnJh
eSAqKWZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpaXND
YXNlU2Vuc2l0aXZlIGhpZ2hsaWdodE1hdGNoZXM6KEJPT0wpc2hvdWxkSGlnaGxpZ2h0TWF0Y2hl
czsKKworLSAodm9pZCljb3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7CisKKy0gKFBE
RlBhZ2UgKiljdXJyZW50UGFnZTsKKy0gKE5TVUludGVnZXIpY3VycmVudFBhZ2VJbmRleDsKKwor
LSAoQk9PTClkb2N1bWVudElzTG9ja2VkOworLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFz
c3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7CisKKy0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0
aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQpYWN0aXZhdGVOZXh0QW5u
b3RhdGlvbjooQk9PTClwcmV2aW91czsKKworLSAoTlNSZWN0KWZyYW1lOworCisvLyBBY2Nlc3Np
YmlsaXR5CisKKy0gKENQUmVhZGluZ01vZGVsICopcmVhZGluZ01vZGVsOworLSAoaWQpYWNjZXNz
aWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNT
dHJpbmcgKilhdHRyaWJ1dGU7CistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFs
dWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKE5TQXJyYXkgKilhY2Nl
c3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzOworLSAoTlNTdHJpbmcgKilhY2Nl
c3NpYmlsaXR5Um9sZUF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVE
ZXNjcmlwdGlvbkF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0
cmlidXRlOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOwor
LSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlOworLSAoQk9P
TClhY2Nlc3NpYmlsaXR5SXNTZWxlY3RlZFRleHRBdHRyaWJ1dGVTZXR0YWJsZTsKKy0gKE5TVmFs
dWUgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGU7CistIChOU051bWJl
ciAqKWFjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGU7CistIChCT09MKWFj
Y2Vzc2liaWxpdHlJc051bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNW
YWx1ZSAqKWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGU7CistIChC
T09MKWFjY2Vzc2liaWxpdHlJc1Zpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxl
OworLSAoTlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFy
YW1ldGVyOihpZClwYXJhbWV0ZXI7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9y
TGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworLSAoTlNTdHJpbmcgKilh
Y2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFt
ZXRlcjsKKy0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVG
b3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKKworQGVuZAorCisjZW5kaWYKKworI2VuZGlmIC8v
IFBERkxheWVyQ29udHJvbGxlclNQSV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAppbmRleCA0YzUyNTZkNWExY2FjZWYyMjk4NWU1NDZi
ODE5MWEwNDFmYTY5OGEzLi5jZTllMzQxMWNiNzFkOTk5Njg3N2ZlOWZmZTIzYTAyYzMzZDdkMzhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLmgKQEAgLTI2LDE0ICsyNiwyMCBAQAogI2lmbmRlZiBQREZQbHVnaW5faAogI2RlZmluZSBQ
REZQbHVnaW5faAogCi0jaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiUERGS2l0
SW1wb3J0cy5oIgorCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmIFVTRShERVBSRUNBVEVE
X1BERl9QTFVHSU4pCisKKyNpbmNsdWRlICJEZXByZWNhdGVkUERGUGx1Z2luLmgiCisKKyNlbHNl
CiAKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUg
IldlYkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRmluZE9wdGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGFibGVBcmVhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250
ZXh0KiBKU0NvbnRleHRSZWY7CkBAIC02Niw3ICs3Miw3IEBAIGNsYXNzIFBERlBsdWdpblBhc3N3
b3JkRmllbGQ7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xhc3MgV2ViRnJhbWU7CiAKLWNsYXNzIFBE
RlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEgeworY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxQREZQbHVnaW4+IGNyZWF0ZShXZWJGcmFtZSopOwogICAgIH5QREZQ
bHVnaW4oKTsKQEAgLTc0LDE0ICs4MCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdlYkNvcmU6
OlBsdWdpbkluZm8gcGx1Z2luSW5mbygpOwogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgZmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdDsK
IAogICAgIHZvaWQgZGlkTXV0YXRlUERGRG9jdW1lbnQoKSB7IG1fcGRmRG9jdW1lbnRXYXNNdXRh
dGVkID0gdHJ1ZTsgfQogCi0gICAgdm9pZCBwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChD
QUxheWVyICosIENHQ29udGV4dFJlZik7CiAgICAgdm9pZCBzZXRBY3RpdmVBbm5vdGF0aW9uKFBE
RkFubm90YXRpb24gKik7Ci0gICAgCi0gICAgdXNpbmcgU2Nyb2xsYWJsZUFyZWE6Om5vdGlmeVNj
cm9sbFBvc2l0aW9uQ2hhbmdlZDsKLSAgICB2b2lkIG5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNo
YW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3Rvcik7CisKICAgICB2b2lkIG5vdGlmeURpc3BsYXlNb2Rl
Q2hhbmdlZChpbnQpOwogCiAgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVj
dGlvbiAqKTsKQEAgLTkzLDIxICs5NywzNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93RGVmaW5p
dGlvbkZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIENHUG9pbnQpOwog
ICAgIHZvaWQgcGVyZm9ybVdlYlNlYXJjaChOU1N0cmluZyAqKTsKICAgICB2b2lkIHBlcmZvcm1T
cG90bGlnaHRTZWFyY2goTlNTdHJpbmcgKik7CisgICAgdm9pZCBpbnZhbGlkYXRlUERGUmVjdChX
ZWJDb3JlOjpJbnRSZWN0KTsKKyAgICB2b2lkIGludmFsaWRhdGVIVUQoKTsKKyAgICB2b2lkIHNj
cm9sbFRvUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQpOworCisgICAgdm9pZCB6b29tSW4oKTsKKyAg
ICB2b2lkIHpvb21PdXQoKTsKIAogICAgIHZvaWQgZm9jdXNOZXh0QW5ub3RhdGlvbigpOwogICAg
IHZvaWQgZm9jdXNQcmV2aW91c0Fubm90YXRpb24oKTsKIAogICAgIHZvaWQgYXR0ZW1wdFRvVW5s
b2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwogCisgICAgV2ViQ29yZTo6SW50UG9pbnQg
Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25z
dDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252
ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7
CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBjb25zdDsK
KwogICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRzT25TY3JlZW4oKSBjb25zdDsKICAgICAKICAg
ICBib29sIHNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsK
IAogICAgIFN0cmluZyBsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiwgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNEaWN0aW9u
YXJ5ICoqKSBjb25zdDsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlld1JlY3RGb3JTZWxlY3Rp
b24oUERGU2VsZWN0aW9uICopIGNvbnN0OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0Rm9y
U2VsZWN0aW9uSW5Sb290VmlldyhQREZTZWxlY3Rpb24gKikgY29uc3Q7CisKKyAgICBQREZMYXll
ckNvbnRyb2xsZXIgKnBkZkxheWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpOyB9CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgQ0dGbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OworICAg
IGJvb2wgaXNMb2NrZWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVn
aW4oV2ViRnJhbWUqKTsKQEAgLTExNSwxNSArMTM0LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gUGx1
Z2luIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0
ZXJzJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcykgb3ZlcnJpZGUgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb250cm9sVGludHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jikgb3ZlcnJpZGUgeyB9Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzU25hcHNob3R0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBz
aG90KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVy
cmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQo
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVs
RXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCB3YW50
c1doZWVsRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIG92ZXJyaWRlIHsg
fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIG92ZXJyaWRlIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVz
dElEKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJl
cXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwpAQCAtMTM4LDMwICsxNTcsMzIg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wg
d2FzQ2FuY2VsbGVkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29u
c3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3Vz
ZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2Fy
ZEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQo
Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBp
c0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkg
b3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykgb3Zl
cnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wp
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KSBvdmVycmlk
ZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdN
b2RlKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5n
ZXQoKTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
cigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVh
bCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
IHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpIG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChX
ZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVj
dGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3Vy
Y2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VT
Y2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRp
YWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwg
UmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQpAQCAtMTgwLDU2ICsyMDEsMjAgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25G
cm9tRHJhZ3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOyB9Ci0gICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFy
KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3NpemU7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVw
IGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmlt
YXRlLgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoV2ViQ29yZTo6U2Ny
b2xsYmFyU3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
V2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsYmFyUmVj
dCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQ3JlYXRlVHJhbnNpZW50
UGFpbnRpbmdTbmFwc2hvdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICAvLyBQREZQbHVnaW4gZnVuY3Rpb25zLgotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29y
ZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJD
b3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CiAgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQo
KTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQgY29tcHV0ZVBhZ2VC
b3hlcygpOwogICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB2b2lkIGRpZENhbGN1bGF0
ZVNpemVzKCk7CiAgICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAgTlNF
dmVudCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAg
IFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21S
b290Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2Vi
Q29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpIGNvbnN0OwotICAgIAotICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOwotICAg
IGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKTsKIAotICAgIHZvaWQgdXBkYXRlUGFnZUFuZERldmlj
ZVNjYWxlRmFjdG9ycygpOworICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOworICAgIGJvb2wgaXNG
dWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKIAogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZv
cm0oKTsKIApAQCAtMjQyLDQ5ICsyMjcsNjcgQEAgcHJpdmF0ZToKICAgICBOU0RhdGEgKmxpdmVE
YXRhKCkgY29uc3Q7CiAgICAgTlNEYXRhICpyYXdEYXRhKCkgY29uc3QgeyByZXR1cm4gKE5TRGF0
YSAqKW1fZGF0YS5nZXQoKTsgfQogCi0gICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgZW51bSBVcGRhdGVDdXJzb3JNb2RlIHsKLSAgICAgICAg
VXBkYXRlSWZOZWVkZWQsCi0gICAgICAgIEZvcmNlVXBkYXRlCisgICAgZW51bSBjbGFzcyBVcGRh
dGVDdXJzb3IgeworICAgICAgICBJZk5lZWRlZCwKKyAgICAgICAgRm9yY2UKICAgICB9OwogCi0g
ICAgZW51bSBIaXRUZXN0UmVzdWx0IHsKKyAgICBlbnVtIGNsYXNzIEhpdFRlc3RSZXN1bHQgewog
ICAgICAgICBOb25lLAotICAgICAgICBUZXh0CisgICAgICAgIFRleHQsCisgICAgICAgIEhVRAog
ICAgIH07CiAKLSAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiwgVXBk
YXRlQ3Vyc29yTW9kZSA9IFVwZGF0ZUlmTmVlZGVkKTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcihj
b25zdCBXZWJNb3VzZUV2ZW50JiwgVXBkYXRlQ3Vyc29yID0gVXBkYXRlQ3Vyc29yOjpJZk5lZWRl
ZCk7CiAKICAgICBKU09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKICAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiAg
ICAgdm9pZCBjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpOwogCi0gICAgLy8gUmVndWxh
ciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJh
cnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgogICAg
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKICAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5W
aWV3KCkgY29uc3Q7CiAKLSAgICBXZWJGcmFtZSogbV9mcmFtZTsKKyAgICBjbGFzcyBIVUQgOiBw
dWJsaWMgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICBleHBsaWNpdCBIVUQoUERGUGx1Z2luJiBwbHVnaW4pOworICAgICAgICB2aXJ0dWFsIH5IVUQo
KTsKKworICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICAgICAgYm9vbCBjb250YWluc1Bv
aW50SW5Sb290VmlldyhXZWJDb3JlOjpJbnRQb2ludCk7CiAKLSAgICBib29sIG1faXNQb3N0U2Ny
aXB0OwotICAgIGJvb2wgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQ7CisgICAgICAgIGVudW0gY2xh
c3MgQW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uIHsgTm8sIFllcyB9OworICAgICAgICB2b2lk
IHNldFZpc2libGUoYm9vbCwgQW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uKTsKIAotICAgIFdl
YkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3Zl
cnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdl
T3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3Zl
cnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3Zl
cnJpZGU7CisKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZUluUm9vdFZpZXcoKSBjb25z
dDsKKworICAgICAgICBib29sIG1fdmlzaWJsZSB7IGZhbHNlIH07CisgICAgICAgIFJlZjxXZWJD
b3JlOjpQYWdlT3ZlcmxheT4gbV9vdmVybGF5OworICAgICAgICBQREZQbHVnaW4mIG1fcGx1Z2lu
OworICAgIH07CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsKKworICAgIGJvb2wgbV9pc1Bvc3RT
Y3JpcHQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV91c2luZ0NvbnRpbnVvdXNNb2RlIHsgdHJ1ZSB9OwogCi0gICAgUmV0
YWluUHRyPENBTGF5ZXI+IG1fY29udGFpbmVyTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+
IG1fY29udGVudExheWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbENvcm5lckxheWVyOwogICAgIFJl
dGFpblB0cjxQREZMYXllckNvbnRyb2xsZXI+IG1fcGRmTGF5ZXJDb250cm9sbGVyOwogICAgIFJl
dGFpblB0cjxXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3Q+IG1fYWNjZXNzaWJpbGl0eU9i
amVjdDsKLSAgICAKKwogICAgIFJlZlB0cjxQREZQbHVnaW5Bbm5vdGF0aW9uPiBtX2FjdGl2ZUFu
bm90YXRpb247CiAgICAgUmVmUHRyPFBERlBsdWdpblBhc3N3b3JkRmllbGQ+IG1fcGFzc3dvcmRG
aWVsZDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gbV9hbm5vdGF0aW9uQ29udGFpbmVy
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX3Bhc3N3b3JkQ29udGFpbmVyOwogCiAg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybTsK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
OwogICAgIFdlYk1vdXNlRXZlbnQgbV9sYXN0TW91c2VFdmVudDsKICAgICBXZWJDb3JlOjpJbnRQ
b2ludCBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsKIApAQCAtMzA0LDEx
ICszMDcsOSBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2Rh
dGE7CiAKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Ci0gICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOwogICAgIFdlYkNvcmU6OkludFNpemUg
bV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCiAKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBIVUQgbV9I
VUQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggMTczNDBkZTM2MzQ5NzI3
OGEwZDg4ZGU0NWQ1YzZiOTM5NDlmZGNiNy4uYmE2OTA3MGUxZmQ4MDIxYWQ4YWQxN2E5YjFhZWEx
MDNkODE5Njg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KQEAgLTI2LDEzICsyNiwxMiBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKIAotI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2lm
IEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhVVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKIAog
I2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bXBvcnQgIlBERkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgotI2ltcG9ydCAiUERGS2l0
SW1wb3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgorI2ltcG9y
dCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9u
LmgiCiAjaW1wb3J0ICJQREZQbHVnaW5QYXNzd29yZEZpZWxkLmgiCiAjaW1wb3J0ICJQbHVnaW5W
aWV3LmgiCkBAIC02Miw2ICs2MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5oPgpAQCAtNjksMzUgKzY5
LDMyIEBACiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
b3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsQW5pbWF0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaD4KICNpbXBvcnQgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBTZXQgb3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUgYW5u
b3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBzY3JvbGxlZCBvdXQgb2Ygdmll
dyBkb24ndCBzaG93Ci0vLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5LiBXZSBjYW4ndCBhZGQgYW5u
b3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ugb3ZlcmZsb3c6IGhpZGRlbiBv
biB0aGUgYm9keQotLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGluZy4KIHN0YXRpYyBjb25zdCBj
aGFyKiBhbm5vdGF0aW9uU3R5bGUgPQotIiNhbm5vdGF0aW9uQ29udGFpbmVyIHsiCi0iICAgIG92
ZXJmbG93OiBoaWRkZW47ICIKLSIgICAgcG9zaXRpb246IGFic29sdXRlOyAiCi0iICAgIHBvaW50
ZXItZXZlbnRzOiBub25lOyAiCisiYm9keSB7ICIKKyIgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
KDE0NiwgMTQ2LCAxNDYpICFpbXBvcnRhbnQ7IgorIn0gIgorIiNwYXNzd29yZENvbnRhaW5lciB7
IgorIiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsgIgorIiAgICAtd2Via2l0LWJveC1hbGlnbjog
Y2VudGVyOyAiCisiICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsgIgorIiAgICBwb3NpdGlv
bjogZml4ZWQ7ICIKICIgICAgdG9wOiAwOyAiCiAiICAgIGxlZnQ6IDA7ICIKICIgICAgcmlnaHQ6
IDA7ICIKICIgICAgYm90dG9tOiAwOyAiCi0iICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OyAiCi0i
ICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7ICIKLSIgICAgLXdlYmtpdC1ib3gtcGFjazog
Y2VudGVyOyAiCiAifSAiCiAiLmFubm90YXRpb24geyAiCiAiICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsgIgpAQCAtMTEyLDkgKzEwOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBhbm5vdGF0aW9uU3R5
bGUgPQogIiAgICBtYXJnaW4tdG9wOiAxMDBweDsgIgogIn0gIjsKIAotLy8gSW4gbm9uLWNvbnRp
bnVvdXMgbW9kZXMsIGEgc2luZ2xlIHNjcm9sbCBldmVudCB3aXRoIGEgbWFnbml0dWRlIG9mID49
IDIwcHgKLS8vIHdpbGwganVtcCB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlLCB0byBtYXRj
aCBQREZLaXQgYmVoYXZpb3IuCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRTY3JvbGxNYWduaXR1
ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIwOworY29uc3QgZG91YmxlIHpvb21CdXR0b25TY2Fs
ZU11bHRpcGxpZXIgPSAxLjE4OTIwOwogCiBAaW50ZXJmYWNlIFdLUERGUGx1Z2luQWNjZXNzaWJp
bGl0eU9iamVjdCA6IE5TT2JqZWN0IHsKICAgICBQREZMYXllckNvbnRyb2xsZXIgKl9wZGZMYXll
ckNvbnRyb2xsZXI7CkBAIC0yNzYsNDEgKzI3MSw2IEBAIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMjA7CiAKIEBlbmQKIAotCi1A
aW50ZXJmYWNlIFdLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJL
aXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKLX0KLQotQHByb3BlcnR5IChhc3NpZ24pIFdlYktp
dDo6UERGUGx1Z2luKiBwZGZQbHVnaW47Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUERG
UGx1Z2luU2Nyb2xsYmFyTGF5ZXIKLQotQHN5bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47
Ci0KLS0gKGlkKWluaXRXaXRoUERGUGx1Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Ci17Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4
Ci17Ci0gICAgX3BkZlBsdWdpbi0+cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoc2VsZiwg
Y3R4KTsKLX0KLQotQGVuZAotCiBAaW50ZXJmYWNlIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUgOiBOU09iamVjdDxQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZT4gewogICAgIFdlYktpdDo6
UERGUGx1Z2luKiBfcGRmUGx1Z2luOwogfQpAQCAtMzMzLDQyICsyOTMsNDIgQEAgc3RhdGljIGNv
bnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsK
ICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAodm9pZCl1cGRhdGVTY3JvbGxQb3NpdGlvbjooQ0dQ
b2ludCluZXdQb3NpdGlvbgorLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBzY3JvbGxUb1BvaW50OihDR1BvaW50KW5ld1Bv
c2l0aW9uCiB7Ci0gICAgX3BkZlBsdWdpbi0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKElu
dFBvaW50KG5ld1Bvc2l0aW9uKSk7CisgICAgX3BkZlBsdWdpbi0+c2Nyb2xsVG9Qb2ludChJbnRQ
b2ludChuZXdQb3NpdGlvbikpOwogfQogCi0tICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6
KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlcworLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBj
b3B5SXRlbXM6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlcwogewog
ICAgIF9wZGZQbHVnaW4tPndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNHZW5lcmFsUGJvYXJkLCBp
dGVtcywgdHlwZXMpOwogfQogCi0tICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0
cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQK
Ky0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXll
ckNvbnRyb2xsZXIgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0
ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludAogewogICAgIF9wZGZQbHVn
aW4tPnNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcsIHBvaW50KTsKIH0K
IAotLSAodm9pZClwZXJmb3JtV2ViU2VhcmNoOihOU1N0cmluZyAqKXN0cmluZworLSAodm9pZClw
ZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxl
ciBwZXJmb3JtV2ViU2VhcmNoRm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwogewogICAgIF9w
ZGZQbHVnaW4tPnBlcmZvcm1XZWJTZWFyY2goc3RyaW5nKTsKIH0KIAotLSAodm9pZClwZXJmb3Jt
U3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZworLSAodm9pZClwZGZMYXllckNvbnRy
b2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtU3Bv
dGxpZ2h0U2VhcmNoRm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwogewogICAgIF9wZGZQbHVn
aW4tPnBlcmZvcm1TcG90bGlnaHRTZWFyY2goc3RyaW5nKTsKIH0KIAotLSAodm9pZClvcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlck9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb246KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcgog
ewogICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKIH0KIAotLSAo
dm9pZClzYXZlVG9QREYKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyU2F2ZVRvUERGOihQREZM
YXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIKIHsKICAgICBfcGRmUGx1Z2luLT5z
YXZlVG9QREYoKTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICop
dXJsCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIGRpZENsaWNrTGlua1dpdGhVUkw6KE5TVVJMICopdXJsCiB7CiAgICAg
X3BkZlBsdWdpbi0+Y2xpY2tlZExpbmsodXJsKTsKIH0KQEAgLTM3OCwxMSArMzM4LDYgQEAgc3Rh
dGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAg
PSAyMDsKICAgICBfcGRmUGx1Z2luLT5zZXRBY3RpdmVBbm5vdGF0aW9uKGFubm90YXRpb24pOwog
fQogCi0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2Fs
ZUZhY3RvcgotewotICAgIF9wZGZQbHVnaW4tPm5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5n
ZWQoc2NhbGVGYWN0b3IpOwotfQotCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihp
bnQpbW9kZQogewogICAgIF9wZGZQbHVnaW4tPm5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChtb2Rl
KTsKQEAgLTM5Myw2ICszNDgsNTAgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFn
bml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsKICAgICBfcGRmUGx1Z2luLT5ub3RpZnlT
ZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbik7CiB9CiAKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgaW52YWxpZGF0ZVJl
Y3Q6KENHUmVjdClyZWN0Cit7CisgICAgX3BkZlBsdWdpbi0+aW52YWxpZGF0ZVBERlJlY3QoZW5j
bG9zaW5nSW50UmVjdChyZWN0KSk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVySW52
YWxpZGF0ZUhVRDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7Cisg
ICAgX3BkZlBsdWdpbi0+aW52YWxpZGF0ZUhVRCgpOworfQorCistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlclpvb21JbjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7
CisgICAgX3BkZlBsdWdpbi0+em9vbUluKCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyWm9vbU91dDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7Cisg
ICAgX3BkZlBsdWdpbi0+em9vbU91dCgpOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tQREZI
VURBbmltYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQo
Ym9vbCk+IF9jb21wbGV0aW9uSGFuZGxlcjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdL
UERGSFVEQW5pbWF0aW9uRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhBbmltYXRpb25Db21wbGV0
aW9uSGFuZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5p
bWF0aW9uICopYW5pbWF0aW9uIGZpbmlzaGVkOihCT09MKWZsYWcKK3sKKyAgICBfY29tcGxldGlv
bkhhbmRsZXIoZmxhZyk7Cit9CisKIEBlbmQKIAogQGludGVyZmFjZSBQREZWaWV3TGF5b3V0CkBA
IC01MDksMzUgKzUwOCwyNCBAQCBSZWY8UERGUGx1Z2luPiBQREZQbHVnaW46OmNyZWF0ZShXZWJG
cmFtZSogZnJhbWUpCiBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSogZnJhbWUpCiAgICAg
OiBQbHVnaW4oUERGUGx1Z2luVHlwZSkKICAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2lz
UG9zdFNjcmlwdChmYWxzZSkKLSAgICAsIG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKGZhbHNlKQot
ICAgICwgbV9jb250YWluZXJMYXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQot
ICAgICwgbV9jb250ZW50TGF5ZXIoYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKSkKLSAg
ICAsIG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5
ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKICAgICAsIG1fcGRmTGF5ZXJDb250
cm9sbGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkp
CiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXS1BERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCisgICAg
LCBtX0hVRCgqdGhpcykKIHsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0
ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7Ci0gICAgbV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKKyAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV9wZGZMYXllckNvbnRyb2xsZXJEZWxl
Z2F0ZS5nZXQoKV07CiAKICAgICBpZiAoc3VwcG9ydHNGb3JtcygpKSB7CiAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpOwotICAg
ICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChkaXZU
YWcsIGZhbHNlKTsKLSAgICAgICAgbV9hbm5vdGF0aW9uQ29udGFpbmVyLT5zZXRBdHRyaWJ1dGUo
aWRBdHRyLCAiYW5ub3RhdGlvbkNvbnRhaW5lciIpOwogCiAgICAgICAgIFJlZjxFbGVtZW50PiBh
bm5vdGF0aW9uU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoc3R5bGVUYWcs
IGZhbHNlKTsKICAgICAgICAgYW5ub3RhdGlvblN0eWxlRWxlbWVudC0+c2V0VGV4dENvbnRlbnQo
YW5ub3RhdGlvblN0eWxlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAotICAgICAgICBtX2Fubm90
YXRpb25Db250YWluZXItPmFwcGVuZENoaWxkKFdURjo6bW92ZShhbm5vdGF0aW9uU3R5bGVFbGVt
ZW50KSk7Ci0gICAgICAgIGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpLT5hcHBlbmRDaGlsZCgq
bV9hbm5vdGF0aW9uQ29udGFpbmVyKTsKKyAgICAgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0
KCktPmFwcGVuZENoaWxkKGFubm90YXRpb25TdHlsZUVsZW1lbnQuZ2V0KCkpOwogICAgIH0KIAog
ICAgIG1fYWNjZXNzaWJpbGl0eU9iamVjdCA9IGFkb3B0TlMoW1tXS1BERlBsdWdpbkFjY2Vzc2li
aWxpdHlPYmplY3QgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKLSAgICBtX2FjY2Vz
c2liaWxpdHlPYmplY3QuZ2V0KCkucGRmTGF5ZXJDb250cm9sbGVyID0gbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCk7Ci0gICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpLnBhcmVudCA9IHdl
YkZyYW1lKCktPnBhZ2UoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOwotCi0gICAgW21f
Y29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOwotICAgIFtt
X2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOwor
ICAgIFttX2FjY2Vzc2liaWxpdHlPYmplY3Qgc2V0UGRmTGF5ZXJDb250cm9sbGVyOm1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBbbV9hY2Nlc3NpYmlsaXR5T2JqZWN0IHNldFBhcmVu
dDp3ZWJGcmFtZSgpLT5wYWdlKCktPmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKV07CiB9CiAK
IFBERlBsdWdpbjo6flBERlBsdWdpbigpCkBAIC01NzIsNzQgKzU2MCw2IEBAIFBsdWdpbkluZm8g
UERGUGx1Z2luOjpwbHVnaW5JbmZvKCkKICAgICByZXR1cm4gaW5mbzsKIH0KIAotdm9pZCBQREZQ
bHVnaW46OnVwZGF0ZVNjcm9sbGJhcnMoKQotewotICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9w
ZGZEb2N1bWVudFNpemUud2lkdGgoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgoKSA8IG1fcGRm
RG9jdW1lbnRTaXplLndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKLSAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDog
MDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFy
ICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJv
eGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKLQotICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53aWR0aCgpIC0g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7Ci0gICAg
ICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygp
LT55KCkgKyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgp
LCBtX3NpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAg
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5j
b250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKLSAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Ci0gICAgfQotICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5oZWlnaHQoKSAt
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkg
KyBtX3NpemUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZp
ZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkp
KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9s
bGJhclJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0g
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsK
LSAgICB9Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgp
LT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOwotICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKLSAgICAg
ICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0gICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFi
bGVBcmVhKHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0gICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlv
dXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgewot
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNj
cm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXll
ciBzZXROZWVkc0Rpc3BsYXldOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCku
ZnJhbWUgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOwotICAgICAgICBbbV9o
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXll
ci5nZXQoKS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICAgICAgW21fc2Nyb2xsQ29y
bmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci19Ci0KIFBsdWdpblZpZXcqIFBERlBs
dWdpbjo6cGx1Z2luVmlldygpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcq
Pihjb250cm9sbGVyKCkpOwpAQCAtNjUwLDE3NSArNTcwLDYgQEAgY29uc3QgUGx1Z2luVmlldyog
UERGUGx1Z2luOjpwbHVnaW5WaWV3KCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7CiB9CiAKLVBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwot
ICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFy
TGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKLSAgICAgICAgW21fY29udGFp
bmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllciA9IGFkb3B0TlMo
W1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlz
XSk7Ci0gICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fdmVydGljYWxTY3Jv
bGxiYXJMYXllci5nZXQoKV07Ci0gICAgfQotICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0
KCksIG9yaWVudGF0aW9uKTsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gd2ViRnJhbWUoKS0+Y29y
ZUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAocGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2VycygpKQotICAgICAg
ICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2Ut
PnRlc3RUcmlnZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwotICAgIHJldHVybiB3aWRnZXQu
cmVsZWFzZSgpOwotfQotCi12b2lkIFBERlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Ny
b2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRh
bFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
LCBvcmllbnRhdGlvbik7Ci0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAg
c2Nyb2xsYmFyID0gbnVsbHB0cjsKLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllciByZW1vdmVG
cm9tU3VwZXJsYXllcl07Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gMDsKLSAg
ICB9Ci19Ci0KLUludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9s
bGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKLSAg
ICByZWN0Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlv
bigpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVy
dEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50
KCktPnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHBs
dWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9S
ZW5kZXJlcihwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFyZW50
UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJh
ci0+bG9jYXRpb24oKSk7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAg
ICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xs
YmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLQotICAgIHJldHVy
biBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlclRvQ29u
dGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50KCktPnJlbmRlcmVyKCksIHBv
aW50KTsKLX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBw
YXJlbnRQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdpblZpZXcoKS0+
ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcihwbHVn
aW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAg
IHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlv
bigpKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpoYW5k
bGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCi17Ci0gICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsK
LX0KLQotSW50UmVjdCBQREZQbHVnaW46OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAotewotICAg
IGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAg
fQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFBERlBsdWdp
bjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXYWxr
IHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZyYW1l
IG9yIFJlbmRlckxheWVyLgotICAgIHJldHVybiBudWxscHRyOwotfQotCi1JbnRSZWN0IFBERlBs
dWdpbjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBs
dWdpblZpZXcoKS0+ZnJhbWVSZWN0KCk7Ci19Ci0KLWludCBQREZQbHVnaW46OnNjcm9sbFNpemUo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0
dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpKSA6IDA7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFBERlBsdWdpbjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChQYWdlKiBw
YWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGlu
Z3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBQREZQbHVnaW46OnNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1JbnRQb2ludCBQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0
KCkpOwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KCk7Ci19Ci0KLUludFBvaW50IFBERlBsdWdpbjo6
bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSA6IDA7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNj
cm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVt
T2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBtX3NpemUud2lkdGgoKSArIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9zaXplLmhl
aWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgbWF4aW11bU9mZnNldC5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Ci19Ci0KLXZv
aWQgUERGUGx1Z2luOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoU2Nyb2xsYmFyU3R5bGUgc3R5bGUs
IGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFmb3JjZVVwZGF0ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90
dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVybGF5IHN0eWxlLCB3ZSBkb24n
dCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUu
Ci0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQp
LnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKLSAgICBzZXRTY3JvbGxPZmZzZXQo
bmV3U2Nyb2xsT2Zmc2V0KTsKLSAgICAKLSAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyU3R5
bGVDaGFuZ2VkKHN0eWxlLCBmb3JjZVVwZGF0ZSk7Ci0gICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29u
dGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRp
c2FwcGVhci4KLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0KIHZvaWQgUERGUGx1Z2luOjph
ZGRBcmNoaXZlUmVzb3VyY2UoKQogewogICAgIC8vIEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3Jj
ZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExvYWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQg
anVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291cmNlcy4KQEAgLTkyMCwyMyArNjcxLDIyIEBA
IHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogCiAgICAgc2V0UERGRG9jdW1l
bnQoZG9jdW1lbnQpOwogCi0gICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwot
Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTpzaXplKCldOwotICAgIG1f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRvY3VtZW50ID0gZG9jdW1lbnQuZ2V0KCk7Ci0KLSAg
ICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAgICBwbHVnaW5WaWV3KCktPnNl
dFBhZ2VTY2FsZUZhY3RvcihbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9y
XSwgSW50UG9pbnQoKSk7Ci0KLSAgICBub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoSW50UG9p
bnQoW21fcGRmTGF5ZXJDb250cm9sbGVyIHNjcm9sbFBvc2l0aW9uXSkpOworICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6d2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpXTsgLy8vID8/PworICAgIFttX3BkZkxheWVy
Q29udHJvbGxlciBzZXREb2N1bWVudDpkb2N1bWVudC5nZXQoKV07CiAKICAgICBjYWxjdWxhdGVT
aXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAgIHJ1blNjcmlwdHNJblBERkRv
Y3VtZW50KCk7CiAKLSAgICBpZiAoW2RvY3VtZW50IGlzTG9ja2VkXSkKKyAgICBpZiAoaXNMb2Nr
ZWQoKSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKKworICAgIG1fSFVELnNl
dFZpc2libGUoIWlzTG9ja2VkKCksIEhVRDo6QW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uOjpO
byk7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjppc0xvY2tlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXTsKIH0KIAogdm9pZCBQREZQbHVnaW46OnN0cmVhbURp
ZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiwgdWludDMyX3Qs
IHVpbnQzMl90LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQpAQCAtMTAyMiw2NCArNzcyLDkxIEBAIHZvaWQgUERG
UGx1Z2luOjpydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpCiAgICAgSlNHbG9iYWxDb250ZXh0UmVs
ZWFzZShjdHgpOwogfQogCit2b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0ZVBERlJlY3QoSW50UmVj
dCByZWN0KQoreworICAgIFdpZGdldCogd2lkZ2V0ID0gcGx1Z2luVmlldygpOworCisgICAgLy8g
RklYTUU6IE9uZSBvZiB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGRvIHRoaXMgKHdp
dGggdGhlIGZsaXBwaW5nKS4KKyAgICBJbnRSZWN0IGludmFsaWRSZWN0ID0gcmVjdDsKKyAgICBp
bnZhbGlkUmVjdC5zZXRZKG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gaW52YWxpZFJlY3Qu
eSgpIC0gaW52YWxpZFJlY3QuaGVpZ2h0KCkpOworCisgICAgd2lkZ2V0LT5pbnZhbGlkYXRlUmVj
dChpbnZhbGlkUmVjdCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlSFVEKCkKK3sK
KyAgICBtX0hVRC5pbnZhbGlkYXRlKCk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjcmVhdGVQYXNz
d29yZEVudHJ5Rm9ybSgpCiB7CisgICAgaWYgKCFzdXBwb3J0c0Zvcm1zKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgp
LT5kb2N1bWVudCgpOworICAgIG1fcGFzc3dvcmRDb250YWluZXIgPSBkb2N1bWVudC0+Y3JlYXRl
RWxlbWVudChkaXZUYWcsIGZhbHNlKTsKKyAgICBtX3Bhc3N3b3JkQ29udGFpbmVyLT5zZXRBdHRy
aWJ1dGUoaWRBdHRyLCAicGFzc3dvcmRDb250YWluZXIiKTsKKwogICAgIG1fcGFzc3dvcmRGaWVs
ZCA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQ6OmNyZWF0ZShtX3BkZkxheWVyQ29udHJvbGxlci5n
ZXQoKSwgdGhpcyk7Ci0gICAgbV9wYXNzd29yZEZpZWxkLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29u
dGFpbmVyLmdldCgpKTsKKyAgICBtX3Bhc3N3b3JkRmllbGQtPmF0dGFjaChtX3Bhc3N3b3JkQ29u
dGFpbmVyLmdldCgpKTsKKyAgICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+YXBwZW5kQ2hp
bGQoKm1fcGFzc3dvcmRDb250YWluZXIpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6YXR0ZW1wdFRv
VW5sb2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCiB7CiAgICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyIGF0dGVtcHRUb1VubG9ja1dpdGhQYXNzd29yZDpwYXNzd29yZF07CiAKLSAgICBpZiAo
IVtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkgeworICAgIGlmICghaXNMb2NrZWQoKSkgeworICAg
ICAgICBtX3Bhc3N3b3JkQ29udGFpbmVyID0gbnVsbHB0cjsKICAgICAgICAgbV9wYXNzd29yZEZp
ZWxkID0gbnVsbHB0cjsKIAogICAgICAgICBjYWxjdWxhdGVTaXplcygpOwotICAgICAgICB1cGRh
dGVTY3JvbGxiYXJzKCk7CisKKyAgICAgICAgbV9IVUQuc2V0VmlzaWJsZSh0cnVlLCBIVUQ6OkFu
aW1hdGVWaXNpYmlsaXR5VHJhbnNpdGlvbjo6WWVzKTsKICAgICB9CiB9CiAKLXZvaWQgUERGUGx1
Z2luOjp1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCkKK3ZvaWQgUERGUGx1Z2luOjpj
YWxjdWxhdGVTaXplcygpCiB7Ci0gICAgZG91YmxlIG5ld1NjYWxlRmFjdG9yID0gY29udHJvbGxl
cigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgaWYgKCFoYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKCkpCi0gICAgICAgIG5ld1NjYWxlRmFjdG9yICo9IHdlYkZyYW1lKCktPnBhZ2UoKS0+cGFn
ZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAobmV3U2NhbGVGYWN0b3IgIT0gW21fcGRmTGF5ZXJD
b250cm9sbGVyIGRldmljZVNjYWxlRmFjdG9yXSkKLSAgICAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHNldERldmljZVNjYWxlRmFjdG9yOm5ld1NjYWxlRmFjdG9yXTsKLX0KKyAgICBzZXRQREZE
b2N1bWVudFNpemUoaXNMb2NrZWQoKSA/IEludFNpemUoKSA6IEludFNpemUoW21fcGRmTGF5ZXJD
b250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKSk7CiAKLXZvaWQgUERGUGx1Z2lu
Ojpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLSAgICB1cGRhdGVQYWdlQW5k
RGV2aWNlU2NhbGVGYWN0b3JzKCk7CisgICAgLy8gV2UgaGF2ZSB0byBhc3luY2hyb25vdXNseSB1
cGRhdGUgc3R5bGVzIGJlY2F1c2Ugd2UgY291bGQgYmUgaW5zaWRlIGxheW91dC4KKyAgICBSZWZQ
dHI8UERGUGx1Z2luPiByZWZmZWRUaGlzID0gdGhpczsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcmVmZmVkVGhpc10geworICAgICAgICByZWZmZWRUaGlz
LT5kaWRDYWxjdWxhdGVTaXplcygpOworICAgIH0pOwogfQogCi12b2lkIFBERlBsdWdpbjo6Y29t
cHV0ZVBhZ2VCb3hlcygpCit2b2lkIFBERlBsdWdpbjo6ZGlkQ2FsY3VsYXRlU2l6ZXMoKQogewot
ICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9w
ZGZEb2N1bWVudCBkb2N1bWVudFJlZl0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFn
ZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3Vt
ZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLSAgICAgICAg
QVNTRVJUKHBkZlBhZ2UpOworICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50ID0g
ZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCp3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1l
bnQoKSkucGx1Z2luRWxlbWVudCgpOwogCi0gICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VH
ZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOwotICAgICAgICBpZiAoQ0dSZWN0SXNF
bXB0eShib3gpKQotICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdl
LCBrQ0dQREZNZWRpYUJveCk7Ci0gICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJv
eCkpOworICAgIGlmIChpc0xvY2tlZCgpKSB7CisgICAgICAgIHBsdWdpbkVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgMTAwLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci19CiAKLXZvaWQgUERGUGx1Z2lu
OjpjYWxjdWxhdGVTaXplcygpCi17Ci0gICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkg
ewotICAgICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZSgwLCAwKSk7CisgICAgcGx1Z2lu
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBtX3BkZkRv
Y3VtZW50U2l6ZS53aWR0aCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBwbHVn
aW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBtX3Bk
ZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisKKyAg
ICAvLyBGSVhNRTogQ2FuJ3QgZG8gdGhpcyBpbiB0aGUgb3ZlcmZsb3cvc3ViZnJhbWUgY2FzZS4g
V2hlcmUgZG9lcyBzY3JvbGwtc25hcC10eXBlIGdvPworICAgIGlmIChtX3VzaW5nQ29udGludW91
c01vZGUgfHwgIW1fZnJhbWUtPmlzTWFpbkZyYW1lKCkgfHwgIWlzRnVsbEZyYW1lUGx1Z2luKCkp
CiAgICAgICAgIHJldHVybjsKKworICAgIFJldGFpblB0cjxOU0FycmF5PiBwYWdlUmVjdHMgPSBb
bV9wZGZMYXllckNvbnRyb2xsZXIgcGFnZVJlY3RzXTsKKworICAgIFN0cmluZ0J1aWxkZXIgY29v
cmRpbmF0ZXM7CisgICAgZm9yIChOU1ZhbHVlICpyZWN0IGluIHBhZ2VSZWN0cy5nZXQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogV2h5IDQ/CisgICAgICAgIGNvb3JkaW5hdGVzLmFwcGVuZE51bWJl
cigobG9uZylbcmVjdCByZWN0VmFsdWVdLm9yaWdpbi55IC8gNCk7CisgICAgICAgIGNvb3JkaW5h
dGVzLmFwcGVuZExpdGVyYWwoInB4ICIpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBjb21lIHN0cmFpZ2h0IGZyb20gUERGS2l0LgotICAgIGNvbXB1dGVQYWdlQm94ZXMoKTsK
KyAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0U2Nyb2xsU25hcENvb3JkaW5hdGUsIGNvb3JkaW5hdGVzLnRvU3RyaW5nKCkpOwogCi0gICAg
c2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRT
aXplUmVzcGVjdGluZ1pvb21dKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUo
KS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0
KCktPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwVHlw
ZSwgIm1hbmRhdG9yeSIpOwogfQogCiBib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTA5NCw5MCArODcxLDI3IEBAIGJvb2wgUERGUGx1
Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKIHZvaWQgUERG
UGx1Z2luOjpkZXN0cm95KCkKIHsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxl
Z2F0ZSA9IDA7Ci0KLSAgICBpZiAod2ViRnJhbWUoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAgICAgICAg
ICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICB9CisgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CiAKICAgICBtX2FjdGl2ZUFubm90
YXRpb24gPSBudWxscHRyOwotICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IG51bGxwdHI7Ci0K
LSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lT
Y3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAgIAotICAgIFttX3Njcm9sbENvcm5lckxh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbbV9jb250ZW50TGF5ZXIgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOwogfQogCi12b2lkIFBERlBsdWdpbjo6dXBkYXRlQ29udHJvbFRpbnRzKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KQordm9pZCBQREZQbHVnaW46OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dD
b29yZGluYXRlcykKIHsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LnVwZGF0aW5nQ29udHJv
bFRpbnRzKCkpOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLSAgICBp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Ci19Ci0KLXZvaWQgUERG
UGx1Z2luOjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dD
b250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKLSAgICAKLSAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29u
dGV4dCh0cnVlKTsKLSAgICAKLSAgICBpZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3JuZXJMYXllcikg
ewotICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QgPSB0aGlzLT5zY3JvbGxDb3JuZXJS
ZWN0KCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lclJl
Y3QueCgpLCAtc2Nyb2xsQ29ybmVyUmVjdC55KCkpOwotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihudWxscHRyLCBncmFwaGljc0NvbnRleHQsIHNjcm9s
bENvcm5lclJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFNjcm9sbGJh
ciogc2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAobGF5ZXIgPT0gbV92ZXJ0aWNh
bFNjcm9sbGJhckxheWVyKQotICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigp
OwotICAgIGVsc2UgaWYgKGxheWVyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQotICAg
ICAgICBzY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0KLSAgICBpZiAoIXNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xh
dGUoLXNjcm9sbGJhci0+eCgpLCAtc2Nyb2xsYmFyLT55KCkpOwotICAgIHNjcm9sbGJhci0+cGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICBjb250ZXh0
LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworLy8gICAgY29udGV4dC50cmFuc2xhdGUoMCwgLW1f
c2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLW1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZHJhd0luQ29udGV4dDpj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpXTsKIH0KIAogUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
UERGUGx1Z2luOjpzbmFwc2hvdCgpCiB7Ci0gICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZmxvYXQgY29udGVudHNTY2FsZUZhY3RvciA9IGNv
bnRyb2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOwotICAgIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSA9IHNpemUoKTsKLSAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNvbnRlbnRzU2Nh
bGVGYWN0b3IpOwotCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGNvbnRlbnRz
U2NhbGVGYWN0b3IsIC1jb250ZW50c1NjYWxlRmFjdG9yKSk7Ci0gICAgY29udGV4dC0+dHJhbnNs
YXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkg
KyBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIg
c25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCldOwotCi0gICAgcmV0
dXJuIGJpdG1hcDsKLX0KLQotUGxhdGZvcm1MYXllciogUERGUGx1Z2luOjpwbHVnaW5MYXllcigp
Ci17Ci0gICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXco
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CisgICAgcmV0dXJuIEludFBvaW50
KHBvaW50LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKIH0KIAogSW50UG9pbnQg
UERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdApAQCAtMTE4Nyw4ICs5MDEsOCBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZl
cnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAKIElu
dFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5h
dGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKLSAgICByZXR1cm4g
bV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGx1
Z2luQ29vcmRpbmF0ZXMpOworICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyhw
b2ludC54KCksIG1fc2l6ZS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CisgICAgcmV0dXJuIG1fcGx1
Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMp
OwogfQogCiBGbG9hdFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CkBAIC0xMTk4LDggKzkxMiw4IEBAIEZsb2F0UmVj
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwogCi0gICAgRmxvYXRQb2ludCBvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgp
LCBzaXplKCkuaGVpZ2h0KCkgLSByZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwotICAgIEZsb2F0
UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNm
b3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVz
LCByZWN0LnNpemUoKSkpOworICAgIEZsb2F0UG9pbnQgb3JpZ2luSW5QbHVnaW5Db29yZGluYXRl
cyhyZWN0LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsK
KyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVz
LCByZWN0LnNpemUoKSkpOwogCiAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVl
bihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKIH0KQEAgLTEy
MTIsNDQgKzkyNiwyNSBAQCBJbnRSZWN0IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25z
dAogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1h
cFJlY3QoYm91bmRzKTsKKyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9
IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBSZWN0KGJvdW5kcyk7CiAgICAgcmV0dXJu
IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMpKTsKIH0KIAogdm9pZCBQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdl
KGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHNpemUoKSA9
PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgPT0gW21fcGRm
TGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
ID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybTsKICAgICBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFu
c2Zvcm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgc2V0RnJhbWVTaXplOnBsdWdpblNpemVdOworICAgIG1fc2l6ZSA9IHBs
dWdpblNpemU7CiAKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9
IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoMSwgLTEsIDEpOwotICAgIHRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCk7
Ci0gICAgCi0gICAgaWYgKGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgewotICAgICAgICBDR0Zs
b2F0IG1hZ25pZmljYXRpb24gPSBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpIC0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl07CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOwogCi0gICAgICAgIC8v
IEZJWE1FOiBJbnN0ZWFkIG9mIG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVz
LCB3ZSBzaG91bGQgdXNlIHRoZSB6b29tIG9yaWdpbiBmcm9tIFBsdWdpblZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3Rvci4KLSAgICAgICAgaWYgKG1hZ25pZmljYXRpb24pCi0gICAgICAgICAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOm1hZ25pZmljYXRpb24g
YXRQb2ludDpjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhtX2xhc3RNb3VzZVBvc2l0aW9uSW5Q
bHVnaW5Db29yZGluYXRlcykgaW1tZWRpYXRlbHk6Tk9dOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIElmIHdlIGRvbid0IGhhbmRsZSBwYWdlIHNjYWxlIG91cnNlbHZlcywgd2UgbmVlZCB0byBy
ZXNwZWN0IG91ciBwYXJlbnQgcGFnZSdzCi0gICAgICAgIC8vIHNjYWxlLCB3aGljaCBtYXkgaGF2
ZSBjaGFuZ2VkLgotICAgICAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7Ci0g
ICAgfSAKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RnJhbWVTaXplOmZyYW1lVmlldy0+
ZnJhbWVSZWN0KCkuc2l6ZSgpXTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0VmlzaWJs
ZVJlY3Q6ZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKV07CiAKICAgICBjYWxjdWxhdGVT
aXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAgIGlmIChtX2FjdGl2ZUFubm90
YXRpb24pCiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKLQot
ICAgIFttX2NvbnRlbnRMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAg
IFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9CiAKIHZvaWQgUERGUGx1Z2luOjpmcmFtZURpZEZp
bmlzaExvYWRpbmcodWludDY0X3QpCkBAIC0xMjY3LDcgKzk2Miw2IEBAIHZvaWQgUERGUGx1Z2lu
OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotICAgIAogc3RhdGljIE5TVUludGVnZXIgbW9k
aWZpZXJGbGFnc0Zyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0
dXJuIChldmVudC5zaGlmdEtleSgpID8gTlNTaGlmdEtleU1hc2sgOiAwKQpAQCAtMTI3OSwxMiAr
OTczLDYgQEAgc3RhdGljIE5TVUludGVnZXIgbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChjb25z
dCBXZWJFdmVudCYgZXZlbnQpCiBzdGF0aWMgYm9vbCBnZXRFdmVudFR5cGVGcm9tV2ViRXZlbnQo
Y29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYgZXZlbnRUeXBlKQogewogICAgIHN3
aXRjaCAoZXZlbnQudHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKLSAgICAg
ICAgZXZlbnRUeXBlID0gTlNLZXlEb3duOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IFdlYkV2ZW50OjpLZXlVcDoKLSAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlVcDsKLSAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgogICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsK
ICAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgpAQCAtMTMyOSwxMjcgKzEw
MTcsODAgQEAgc3RhdGljIGJvb2wgZ2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2
ZW50JiBldmVudCwgTlNFdmVudFR5cGUmIGV2ZW50VHkKIE5TRXZlbnQgKlBERlBsdWdpbjo6bnNF
dmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAg
bV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMgPSBjb252ZXJ0RnJvbVJvb3RW
aWV3VG9QbHVnaW4oZXZlbnQucG9zaXRpb24oKSk7Ci0KICAgICBJbnRQb2ludCBwb3NpdGlvbklu
UERGVmlld0Nvb3JkaW5hdGVzKGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KG1fbGFzdE1vdXNl
UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSk7CiAKICAgICBOU0V2ZW50VHlwZSBldmVudFR5
cGU7CiAKICAgICBpZiAoIWdldEV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgZXZlbnRUeXBl
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTlNV
SW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7
CiAKICAgICByZXR1cm4gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2Nh
dGlvbjpwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5hdGVzIG1vZGlmaWVyRmxhZ3M6bW9kaWZpZXJG
bGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0Om5pbCBldmVudE51bWJlcjow
IGNsaWNrQ291bnQ6ZXZlbnQuY2xpY2tDb3VudCgpIHByZXNzdXJlOjBdOwogfQogCi12b2lkIFBE
RlBsdWdpbjo6dXBkYXRlQ3Vyc29yKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50LCBVcGRhdGVD
dXJzb3JNb2RlIG1vZGUpCit2b2lkIFBERlBsdWdpbjo6dXBkYXRlQ3Vyc29yKGNvbnN0IFdlYk1v
dXNlRXZlbnQmIGV2ZW50LCBVcGRhdGVDdXJzb3IgbW9kZSkKIHsKLSAgICBIaXRUZXN0UmVzdWx0
IGhpdFRlc3RSZXN1bHQgPSBOb25lOworICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2ZSBhIGhhbmQg
Zm9yIGxpbmtzLCBhbmQgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGFubm90YXRpb25zLgogCi0gICAg
UERGU2VsZWN0aW9uICpzZWxlY3Rpb25VbmRlck1vdXNlID0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGV2
ZW50LnBvc2l0aW9uKCkpXTsKLSAgICBpZiAoc2VsZWN0aW9uVW5kZXJNb3VzZSAmJiBbW3NlbGVj
dGlvblVuZGVyTW91c2Ugc3RyaW5nXSBsZW5ndGhdKQotICAgICAgICBoaXRUZXN0UmVzdWx0ID0g
VGV4dDsKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0OjpO
b25lOwogCi0gICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9sYXN0SGl0VGVzdFJlc3VsdCAmJiBt
b2RlID09IFVwZGF0ZUlmTmVlZGVkKQorICAgIEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3Q29v
cmRpbmF0ZXMoY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbklu
UGx1Z2luQ29vcmRpbmF0ZXMpKTsKKyAgICBpZiAobV9IVUQuY29udGFpbnNQb2ludEluUm9vdFZp
ZXcoZXZlbnQucG9zaXRpb24oKSkpCisgICAgICAgIGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVz
dWx0OjpIVUQ7CisgICAgZWxzZSB7CisgICAgICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uVW5k
ZXJNb3VzZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2lu
dDpwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5hdGVzXTsKKyAgICAgICAgaWYgKHNlbGVjdGlvblVu
ZGVyTW91c2UgJiYgW1tzZWxlY3Rpb25VbmRlck1vdXNlIHN0cmluZ10gbGVuZ3RoXSkKKyAgICAg
ICAgICAgIGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0OjpUZXh0OworICAgIH0KKworICAg
IGlmIChoaXRUZXN0UmVzdWx0ID09IG1fbGFzdEhpdFRlc3RSZXN1bHQgJiYgbW9kZSA9PSBVcGRh
dGVDdXJzb3I6OklmTmVlZGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICB3ZWJGcmFtZSgpLT5w
YWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q3Vyc29yKGhpdFRlc3RSZXN1
bHQgPT0gVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiBwb2ludGVyQ3Vyc29yKCkpKTsKKyAgICBjb25z
dCBDdXJzb3ImIGN1cnNvciA9IFtoaXRUZXN0UmVzdWx0XSB7CisgICAgICAgIHN3aXRjaCAoaGl0
VGVzdFJlc3VsdCkgeworICAgICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6Ok5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworICAgICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6
OlRleHQ6CisgICAgICAgICAgICByZXR1cm4gaUJlYW1DdXJzb3IoKTsKKyAgICAgICAgY2FzZSBI
aXRUZXN0UmVzdWx0OjpIVUQ6CisgICAgICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwor
ICAgICAgICB9OworICAgIH0oKTsKKworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTZXRDdXJzb3IoY3Vyc29yKSk7CiAgICAgbV9sYXN0SGl0VGVz
dFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7CiB9CiAKIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIFBsYXRmb3JtTW91c2VF
dmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgIEludFBvaW50IG1vdXNl
UG9zaXRpb24gPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oZXZlbnQucG9zaXRpb24oKSk7
CiAKICAgICBtX2xhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7CiAKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB0YXJnZXRTY3JvbGxiYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gdGFyZ2V0U2Nyb2xsYmFy
Rm9yTGFzdE1vdXNlUG9zaXRpb247Ci0KLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhckxheWVy
KSB7Ci0gICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXJGcmFtZShtX3ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOwotICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJG
cmFtZS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJh
ciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckZy
YW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSkKLSAg
ICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uID0gdmVydGljYWxT
Y3JvbGxiYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIp
IHsKLSAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUobV9ob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9s
bGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQotICAgICAgICAgICAgdGFyZ2V0U2Ny
b2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFNj
cm9sbGJhckZyYW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5h
dGVzKSkKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uID0g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lckxh
eWVyICYmIEludFJlY3QobV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMo
bW91c2VQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChbcGRmRG9j
dW1lbnQoKSBpc0xvY2tlZF0pCisgICAgaWYgKGlzTG9ja2VkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1jbGlja3MgYWx3YXlzIGNh
bGwgaGFuZGxlQ29udGV4dE1lbnVFdmVudCBhcyB3ZWxsLgogICAgIGlmIChldmVudC5idXR0b24o
KSA9PSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gV2Vi
TW91c2VFdmVudDo6TGVmdEJ1dHRvbiAmJiBldmVudC5jb250cm9sS2V5KCkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAorICAgIGlmIChldmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50OjpM
ZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBOU0V2ZW50ICpuc0V2ZW50
ID0gbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoZXZlbnQpOwogCiAgICAgc3dpdGNoIChldmVudC50
eXBlKCkpIHsKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIG1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCk7CiAgICAgICAgIHVwZGF0ZUN1cnNvcihldmVudCk7Ci0KLSAgICAg
ICAgaWYgKHRhcmdldFNjcm9sbGJhcikgewotICAgICAgICAgICAgaWYgKCF0YXJnZXRTY3JvbGxi
YXJGb3JMYXN0TW91c2VQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIHRhcmdldFNjcm9sbGJh
ci0+bW91c2VFbnRlcmVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0U2Nyb2xsYmFyLT5tb3VzZU1vdmVkKHBs
YXRmb3JtRXZlbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0YXJnZXRTY3JvbGxiYXIg
JiYgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb24pCi0gICAgICAgICAgICB0YXJn
ZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbi0+bW91c2VFeGl0ZWQoKTsKLQotICAgICAg
ICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbigpKSB7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6
TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZURyYWdn
ZWQ6bnNFdmVudF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpNaWRk
bGVCdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6Tm9CdXR0b246Ci0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91
c2VNb3ZlZDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Cisg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZURyYWdnZWQ6bnNFdmVudF07CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKLSAgICAgICAg
c3dpdGNoIChldmVudC5idXR0b24oKSkgewotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Okxl
ZnRCdXR0b246Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRG93bihwbGF0Zm9ybUV2ZW50KTsKLQot
ICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpuc0V2ZW50XTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0
QnV0dG9uOgotICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHJpZ2h0TW91c2VEb3du
Om5zRXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6TWlkZGxlQnV0dG9uOgotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0
dG9uOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBtb3VzZURvd246bnNFdmVudF07CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0
dG9uKCkpIHsKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAg
ICAgICAgaWYgKHRhcmdldFNjcm9sbGJhcikKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
U2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOwotCi0gICAgICAgICAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgbW91c2VVcDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAgICBjYXNl
IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50
OjpOb0J1dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VVcDpuc0V2ZW50XTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ1OSwxNCAr
MTEwMCwxMiBAQCBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBldmVudCkKIAogYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlRW50ZXJFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKIHsKLSAgICBtb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpOwotICAgIHVwZGF0ZUN1cnNvcihldmVudCwgRm9yY2VVcGRhdGUpOworICAgIHVwZGF0ZUN1
cnNvcihldmVudCwgVXBkYXRlQ3Vyc29yOjpGb3JjZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKQogewotICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAgICAgCkBAIC0xNDc0LDcgKzExMTMsNyBAQCBib29sIFBERlBsdWdpbjo6c2hvd0NvbnRl
eHRNZW51QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOwogICAgIEludFBvaW50
IGNvbnRlbnRzUG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhwb2ludCk7Ci0g
ICAgV2ViTW91c2VFdmVudCBldmVudChXZWJFdmVudDo6TW91c2VEb3duLCBXZWJNb3VzZUV2ZW50
OjpSaWdodEJ1dHRvbiwgY29udGVudHNQb2ludCwgY29udGVudHNQb2ludCwgMCwgMCwgMCwgMSwg
c3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4oMCksIG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpLCBXZWJDb3JlOjpGb3JjZUF0Q2xpY2spOworICAgIFdlYk1vdXNlRXZlbnQgZXZl
bnQoV2ViRXZlbnQ6Ok1vdXNlRG93biwgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b24sIGNvbnRl
bnRzUG9pbnQsIGNvbnRlbnRzUG9pbnQsIDAsIDAsIDAsIDEsIHN0YXRpY19jYXN0PFdlYkV2ZW50
OjpNb2RpZmllcnM+KDApLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgRm9yY2VBdENs
aWNrKTsKICAgICByZXR1cm4gaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7CiB9CiAKQEAg
LTE0OTAsMjcgKzExMjksNiBAQCBib29sIFBERlBsdWdpbjo6aGFuZGxlQ29udGV4dE1lbnVFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9
Ci0KLWJvb2wgUERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGV2ZW50KQotewotICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKLQotICAgIGlmICgh
Z2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdz
RnJvbVdlYkV2ZW50KGV2ZW50KTsKLSAgICAKLSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBrZXlFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2NhdGlvbjpOU1plcm9Qb2ludCBtb2Rp
ZmllckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4
dDowIGNoYXJhY3RlcnM6ZXZlbnQudGV4dCgpIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpl
dmVudC51bm1vZGlmaWVkVGV4dCgpIGlzQVJlcGVhdDpldmVudC5pc0F1dG9SZXBlYXQoKSBrZXlD
b2RlOmV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCldOwotICAgIAotICAgIHN3aXRjaCAoZXZl
bnQudHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKLSAgICAgICAgcmV0dXJu
IFttX3BkZkxheWVyQ29udHJvbGxlciBrZXlEb3duOmZha2VFdmVudF07Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19
CiAgICAgCiBib29sIFBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKQEAgLTE1MzgsMzMgKzEx
NTYsNyBAQCBib29sIFBERlBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUERGUGx1Z2lu
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldFNjcm9sbFBvc2l0
aW9uOm9mZnNldF07Ci0KLSAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQotICAgICAgICBtX2Fj
dGl2ZUFubm90YXRpb24tPnVwZGF0ZUdlb21ldHJ5KCk7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi12b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHNjcm9s
bGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFttX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXldOwotICAgIGVsc2UgaWYgKHNjcm9sbGJhciA9PSB2
ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHNl
dE5lZWRzRGlzcGxheV07Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIFttX3Njcm9sbENvcm5lckxheWVy
IHNldE5lZWRzRGlzcGxheV07Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdp
bigpCitib29sIFBERlBsdWdpbjo6aXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdAogewogICAgIC8v
IDxvYmplY3Q+IG9yIDxlbWJlZD4gcGx1Z2lucyB3aWxsIGFwcGVhciB0byBiZSBpbiB0aGVpciBw
YXJlbnQgZnJhbWUsIHNvIHdlIGhhdmUgdG8KICAgICAvLyBjaGVjayB3aGV0aGVyIG91ciBmcmFt
ZSdzIHdpZGdldCBpcyBleGFjdGx5IG91ciBQbHVnaW5WaWV3LgpAQCAtMTU3MiwxMSArMTE2NCw2
IEBAIGJvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdpbigpCiAgICAgcmV0dXJuIGRvY3Vt
ZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihk
b2N1bWVudCktPnBsdWdpbldpZGdldCgpID09IHBsdWdpblZpZXcoKTsKIH0KIAotYm9vbCBQREZQ
bHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQotewotICAgIHJldHVybiB3ZWJGcmFtZSgp
LT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1lUGx1Z2luKCk7Ci19Ci0KIHZvaWQgUERGUGx1
Z2luOjpjbGlja2VkTGluayhOU1VSTCAqdXJsKQogewogICAgIFVSTCBjb3JlVVJMID0gdXJsOwpA
QCAtMTYwNyw3ICsxMTk0LDggQEAgdm9pZCBQREZQbHVnaW46OnNldEFjdGl2ZUFubm90YXRpb24o
UERGQW5ub3RhdGlvbiAqYW5ub3RhdGlvbikKICAgICAgICAgfQogCiAgICAgICAgIG1fYWN0aXZl
QW5ub3RhdGlvbiA9IFBERlBsdWdpbkFubm90YXRpb246OmNyZWF0ZShhbm5vdGF0aW9uLCBtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7Ci0gICAgICAgIG1fYWN0aXZlQW5ub3RhdGlv
bi0+YXR0YWNoKG1fYW5ub3RhdGlvbkNvbnRhaW5lci5nZXQoKSk7CisgICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpOworICAgICAg
ICBtX2FjdGl2ZUFubm90YXRpb24tPmF0dGFjaChkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7CiB9CkBA
IC0xNjE4LDE5ICsxMjA2LDEwIEBAIGJvb2wgUERGUGx1Z2luOjpzdXBwb3J0c0Zvcm1zKCkKICAg
ICByZXR1cm4gaXNGdWxsRnJhbWVQbHVnaW4oKTsKIH0KIAotdm9pZCBQREZQbHVnaW46Om5vdGlm
eUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3RvcikKLXsKLSAgICBp
ZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAgICBwbHVnaW5WaWV3KCktPnNldFBh
Z2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvciwgSW50UG9pbnQoKSk7Ci0KLSAgICBjYWxjdWxhdGVT
aXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBQREZQbHVnaW46Om5v
dGlmeURpc3BsYXlNb2RlQ2hhbmdlZChpbnQpCit2b2lkIFBERlBsdWdpbjo6bm90aWZ5RGlzcGxh
eU1vZGVDaGFuZ2VkKGludCBtb2RlKQogeworICAgIG1fdXNpbmdDb250aW51b3VzTW9kZSA9ICht
b2RlID09IGtQREZEaXNwbGF5U2luZ2xlUGFnZUNvbnRpbnVvdXMgfHwgbW9kZSA9PSBrUERGRGlz
cGxheVR3b1VwQ29udGludW91cyk7CiAgICAgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB1cGRhdGVT
Y3JvbGxiYXJzKCk7CiB9CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFBERlBsdWdpbjo6bGl2ZVJl
c291cmNlRGF0YSgpIGNvbnN0CkBAIC0xNjY0LDcgKzEyNDMsNyBAQCB2b2lkIFBERlBsdWdpbjo6
b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpCiAKICAgICAgICAgTlNEYXRhICpkYXRhID0gbGl2
ZURhdGEoKTsKIAotICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBXZWJDb3JlOjpjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgICAgIG1fdGVtcG9yYXJ5UERGVVVJRCA9IGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKICAgICAgICAgQVNTRVJUKG1fdGVtcG9yYXJ5UERGVVVJ
RCk7CiAKICAgICAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIHdlYkZy
YW1lKCktPnVybCgpLCBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KFtkYXRhIGJ5
dGVzXSksIFtkYXRhIGxlbmd0aF0sIG1fdGVtcG9yYXJ5UERGVVVJRCk7CkBAIC0xODE0LDcgKzEz
OTMsNyBAQCBib29sIFBERlBsdWdpbjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
V2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucywgdQogICAgIHJldHVybiBtYXRjaENvdW50ID4g
MDsKIH0KIAotYm9vbCBQREZQbHVnaW46OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK2Jvb2wgUERGUGx1Z2luOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7
CiAgICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihy
b3VuZGVkSW50UG9pbnQocG9pbnQpKTsKICAgICBQREZTZWxlY3Rpb24qIGxvb2t1cFNlbGVjdGlv
biA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpjb252
ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhsb2NhbFBvaW50KV07CkBAIC0xODM1LDcgKzE0MTQsNyBA
QCB2b2lkIFBERlBsdWdpbjo6Zm9jdXNQcmV2aW91c0Fubm90YXRpb24oKQogICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOnRydWVdOwogfQogCi12b2lkIFBE
RlBsdWdpbjo6bm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKikKK3ZvaWQgUERG
UGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQog
ewogICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+ZGlkQ2hhbmdlU2VsZWN0aW9uKCk7CiB9CkBAIC0x
ODQ1LDcgKzE0MjQsNyBAQCBTdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25TdHJpbmcoKSBj
b25zdAogICAgIHJldHVybiBbW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRTZWxlY3Rpb25d
IHN0cmluZ107CiB9CiAKLVN0cmluZyBQREZQbHVnaW46OmdldFNlbGVjdGlvbkZvcldvcmRBdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorU3RyaW5nIFBERlBs
dWdpbjo6Z2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CiB7CiAgICAgSW50UG9pbnQgcG9pbnRJblZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRv
UERGVmlldyhjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KHBvaW50
KSkpOwogICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9yV29yZCA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpwb2ludEluVmlld107CkBAIC0xODU0
LDcgKzE0MzMsNyBAQCBTdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2lu
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkgYwogICAgIHJldHVybiBbc2VsZWN0
aW9uRm9yV29yZCBzdHJpbmddOwogfQogCi1ib29sIFBERlBsdWdpbjo6ZXhpc3RpbmdTZWxlY3Rp
b25Db250YWluc1BvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3
Q29vcmRpbmF0ZXMpIGNvbnN0Citib29sIFBERlBsdWdpbjo6ZXhpc3RpbmdTZWxlY3Rpb25Db250
YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpIGNv
bnN0CiB7CiAgICAgUERGU2VsZWN0aW9uICpjdXJyZW50U2VsZWN0aW9uID0gW21fcGRmTGF5ZXJD
b250cm9sbGVyIGN1cnJlbnRTZWxlY3Rpb25dOwogICAgIGlmICghY3VycmVudFNlbGVjdGlvbikK
QEAgLTE4ODcsNyArMTQ2Niw4IEBAIGJvb2wgUERGUGx1Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNv
bnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpCiBzdGF0aWMgTlNQ
b2ludCBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UoUERGTGF5ZXJDb250
cm9sbGVyKiBwZGZMYXllckNvbnRyb2xsZXIsIE5TUG9pbnQgcG9pbnRJblZpZXcpCiB7CiAgICAg
Q0dQb2ludCBwb2ludCA9IE5TUG9pbnRUb0NHUG9pbnQocG9pbnRJblZpZXcpOwotICAgIENHUG9p
bnQgc2Nyb2xsT2Zmc2V0ID0gW3BkZkxheWVyQ29udHJvbGxlciBzY3JvbGxQb3NpdGlvbl07CisK
KyAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IENHUG9pbnRaZXJvOwogICAgIENHRmxvYXQgc2Nh
bGVGYWN0b3IgPSBbcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl07CiAKICAg
ICBzY3JvbGxPZmZzZXQueSA9IFtwZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0
aW5nWm9vbV0uaGVpZ2h0IC0gTlNSZWN0VG9DR1JlY3QoW3BkZkxheWVyQ29udHJvbGxlciBmcmFt
ZV0pLnNpemUuaGVpZ2h0IC0gc2Nyb2xsT2Zmc2V0Lnk7CkBAIC0xODk4LDcgKzE0NzgsNyBAQCBz
dGF0aWMgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UoUERG
TGF5ZXJDb250cm9sbGVyKiBwZGZMYQogICAgIHJldHVybiBOU1BvaW50RnJvbUNHUG9pbnQobmV3
UG9pbnQpOwogfQogCi1TdHJpbmcgUERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzLCBXZWJIaXRU
ZXN0UmVzdWx0OjpEYXRhJiBkYXRhLCBQREZTZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5TRGlj
dGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0CitTdHJpbmcgUERGUGx1Z2luOjpsb29rdXBUZXh0QXRM
b2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzLCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJiBkYXRhLCBQREZTZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5T
RGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0CiB7CiAgICAgUERGU2VsZWN0aW9uKiYgc2VsZWN0
aW9uID0gKnNlbGVjdGlvblB0cjsKIApAQCAtMTkwOSw3ICsxNDg5LDcgQEAgU3RyaW5nIFBERlBs
dWdpbjo6bG9va3VwVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9j
YXRpb25JblZpZXcKICAgICBJbnRQb2ludCBwb2ludEluUERGVmlldyA9IGNvbnZlcnRGcm9tUGx1
Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihyb3VuZGVkSW50UG9pbnQo
bG9jYXRpb25JblZpZXdDb29yZGluYXRlcykpKTsKICAgICBzZWxlY3Rpb24gPSBbbV9wZGZMYXll
ckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9pbnRJblBERlZpZXddOwog
ICAgIGlmICghc2VsZWN0aW9uKQotICAgICAgICByZXR1cm4gQCIiOworICAgICAgICByZXR1cm4g
IiI7CiAKICAgICBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZSA9IHBvaW50SW5MYXlvdXRTcGFj
ZUZvclBvaW50SW5XaW5kb3dTcGFjZShtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSwgcG9pbnRJ
blBERlZpZXcpOwogCkBAIC0xOTM3LDcgKzE1MTcsNyBAQCBTdHJpbmcgUERGUGx1Z2luOjpsb29r
dXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmll
dwogICAgIAogICAgIE5TU3RyaW5nICpsb29rdXBUZXh0ID0gRGljdGlvbmFyeUxvb2t1cDo6c3Ry
aW5nRm9yUERGU2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CiAgICAgaWYgKCFsb29rdXBU
ZXh0IHx8ICFsb29rdXBUZXh0Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIEAiIjsKKyAgICAgICAg
cmV0dXJuICIiOwogCiAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRTZWxlY3Rp
b246c2VsZWN0aW9uXTsKICAgICByZXR1cm4gbG9va3VwVGV4dDsKQEAgLTE5NDcsNyArMTUyNyw3
IEBAIHN0YXRpYyBOU1JlY3QgcmVjdEluVmlld1NwYWNlRm9yUmVjdEluTGF5b3V0U3BhY2UoUERG
TGF5ZXJDb250cm9sbGVyKiBwZGZMYXllckNvCiB7CiAgICAgQ0dSZWN0IG5ld1JlY3QgPSBOU1Jl
Y3RUb0NHUmVjdChsYXlvdXRTcGFjZVJlY3QpOwogICAgIENHRmxvYXQgc2NhbGVGYWN0b3IgPSBw
ZGZMYXllckNvbnRyb2xsZXIuY29udGVudFNjYWxlRmFjdG9yOwotICAgIENHUG9pbnQgc2Nyb2xs
T2Zmc2V0ID0gcGRmTGF5ZXJDb250cm9sbGVyLnNjcm9sbFBvc2l0aW9uOworICAgIENHUG9pbnQg
c2Nyb2xsT2Zmc2V0ID0gQ0dQb2ludFplcm87CiAKICAgICBzY3JvbGxPZmZzZXQueSA9IHBkZkxh
eWVyQ29udHJvbGxlci5jb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tLmhlaWdodCAtIE5TUmVjdFRv
Q0dSZWN0KHBkZkxheWVyQ29udHJvbGxlci5mcmFtZSkuc2l6ZS5oZWlnaHQgLSBzY3JvbGxPZmZz
ZXQueTsKIApAQCAtMTk2Miw3ICsxNTQyLDcgQEAgc3RhdGljIE5TUmVjdCByZWN0SW5WaWV3U3Bh
Y2VGb3JSZWN0SW5MYXlvdXRTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ28KICAg
ICByZXR1cm4gTlNSZWN0RnJvbUNHUmVjdChuZXdSZWN0KTsKIH0KIAotV2ViQ29yZTo6RmxvYXRS
ZWN0IFBERlBsdWdpbjo6dmlld1JlY3RGb3JTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rp
b24pIGNvbnN0CitGbG9hdFJlY3QgUERGUGx1Z2luOjpyZWN0Rm9yU2VsZWN0aW9uSW5Sb290Vmll
dyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikgY29uc3QKIHsKICAgICBQREZQYWdlICpjdXJyZW50
UGFnZSA9IG5pbDsKICAgICBOU0FycmF5KiBwYWdlcyA9IHNlbGVjdGlvbi5wYWdlczsKQEAgLTE5
NzgsMTIgKzE1NTgsNyBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgUERGUGx1Z2luOjp2aWV3UmVjdEZv
clNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikgY29ucwogCiAgICAgcmVjdEluVmll
dy5vcmlnaW4gPSBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFBvaW50KHJlY3RJblZp
ZXcub3JpZ2luKSk7CiAKLSAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHJlY3RJblZpZXcp
OwotfQotCi1DR0Zsb2F0IFBERlBsdWdpbjo6c2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJl
dHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsKKyAgICByZXR1
cm4gRmxvYXRSZWN0KHJlY3RJblZpZXcpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6cGVyZm9ybVdl
YlNlYXJjaChOU1N0cmluZyAqc3RyaW5nKQpAQCAtMTk5Niw2MyArMTU3MSwyMDYgQEAgdm9pZCBQ
REZQbHVnaW46OnBlcmZvcm1TcG90bGlnaHRTZWFyY2goTlNTdHJpbmcgKnN0cmluZykKICAgICB3
ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VhcmNoV2l0
aFNwb3RsaWdodChzdHJpbmcpKTsKIH0KIAotYm9vbCBQREZQbHVnaW46OmhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCitOU0RhdGEgKlBERlBsdWdpbjo6bGl2ZURh
dGEoKSBjb25zdAogewotICAgIFBERkRpc3BsYXlNb2RlIGRpc3BsYXlNb2RlID0gW21fcGRmTGF5
ZXJDb250cm9sbGVyIGRpc3BsYXlNb2RlXTsKLQotICAgIGlmIChkaXNwbGF5TW9kZSA9PSBrUERG
RGlzcGxheVNpbmdsZVBhZ2VDb250aW51b3VzIHx8IGRpc3BsYXlNb2RlID09IGtQREZEaXNwbGF5
VHdvVXBDb250aW51b3VzKQotICAgICAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKLQotICAgIE5TVUludGVnZXIgY3VycmVudFBhZ2VJ
bmRleCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZUluZGV4XTsKLSAgICBib29s
IGluRmlyc3RQYWdlID0gIWN1cnJlbnRQYWdlSW5kZXg7Ci0gICAgYm9vbCBpbkxhc3RQYWdlID0g
W21fcGRmTGF5ZXJDb250cm9sbGVyIGxhc3RQYWdlSW5kZXhdID09IGN1cnJlbnRQYWdlSW5kZXg7
CisgICAgaWYgKG1fYWN0aXZlQW5ub3RhdGlvbikKKyAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9u
LT5jb21taXQoKTsKIAotICAgIGJvb2wgYXRTY3JvbGxUb3AgPSAhc2Nyb2xsUG9zaXRpb24oKS55
KCk7Ci0gICAgYm9vbCBhdFNjcm9sbEJvdHRvbSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpID09IG1h
eGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICAvLyBTYXZlIGRhdGEgc3RyYWlnaHQgZnJv
bSB0aGUgcmVzb3VyY2UgaW5zdGVhZCBvZiBQREZLaXQgaWYgdGhlIGRvY3VtZW50IGlzCisgICAg
Ly8gdW50b3VjaGVkIGJ5IHRoZSB1c2VyLCBzbyB0aGF0IFBERnMgd2hpY2ggUERGS2l0IGNhbid0
IGRpc3BsYXkgd2lsbCBzdGlsbCBiZSBkb3dubG9hZGFibGUuCisgICAgaWYgKG1fcGRmRG9jdW1l
bnRXYXNNdXRhdGVkKQorICAgICAgICByZXR1cm4gW21fcGRmRG9jdW1lbnQgZGF0YVJlcHJlc2Vu
dGF0aW9uXTsKKyAgICAKKyAgICByZXR1cm4gcmF3RGF0YSgpOworfQogCi0gICAgYm9vbCBpbk1v
bWVudHVtU2Nyb2xsID0gZXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBo
YXNlTm9uZTsKK05TT2JqZWN0ICpQREZQbHVnaW46OmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25z
dAoreworICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlPYmplY3QuZ2V0KCk7Cit9CiAKLSAgICBp
bnQgc2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSBkZWZhdWx0U2Nyb2xsTWFn
bml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXA7Cit2b2lkIFBERlBsdWdpbjo6c2Nyb2xsVG9Qb2lu
dChJbnRQb2ludCBzY3JvbGxQb2ludCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBwbHVnaW5WaWV3
KCktPmZyYW1lKCk7CisgICAgZmxvYXQgc2NhbGUgPSBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVG
YWN0b3IoKTsKKyAgICBzY3JvbGxQb2ludC5zY2FsZShzY2FsZSwgc2NhbGUpOworICAgIGZyYW1l
LT52aWV3KCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzY3JvbGxQb2ludCk7Cit9
CiAKLSAgICAvLyBJbXByZWNpc2UgaW5wdXQgZGV2aWNlcyBzaG91bGQgaGF2ZSBhIGxvd2VyIHRo
cmVzaG9sZCBzbyB0aGF0ICJjbGlja3kiIHNjcm9sbCB3aGVlbHMgY2FuIGZsaXAgcGFnZXMuCi0g
ICAgaWYgKCFldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkpCi0gICAgICAgIHNjcm9s
bE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMDsKK2Zsb2F0IFBERlBsdWdpbjo6c2Nh
bGVGYWN0b3IoKSBjb25zdAoreworICAgIEZyYW1lKiBmcmFtZSA9IHBsdWdpblZpZXcoKS0+ZnJh
bWUoKTsKKyAgICByZXR1cm4gZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCk7Cit9CiAK
LSAgICBpZiAoYXRTY3JvbGxCb3R0b20gJiYgIWluTGFzdFBhZ2UgJiYgZXZlbnQuZGVsdGEoKS5o
ZWlnaHQoKSA8IDApIHsKLSAgICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPD0gLXNj
cm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1vbWVudHVtU2Nyb2xsKQot
ICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGdvdG9OZXh0UGFnZV07Ci0gICAgICAg
IHJldHVybiB0cnVlOwordm9pZCBQREZQbHVnaW46Onpvb21JbigpCit7CisgICAgaWYgKHdlYkZy
YW1lKCktPmlzTWFpbkZyYW1lKCkgJiYgaXNGdWxsRnJhbWVQbHVnaW4oKSkgeworICAgICAgICBX
ZWJQYWdlKiBwYWdlID0gd2ViRnJhbWUoKS0+cGFnZSgpOworICAgICAgICBwYWdlLT5zY2FsZVBh
Z2UocGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkgKiB6b29tQnV0dG9uU2NhbGVNdWx0aXBsaWVyLCBJ
bnRQb2ludCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIg
c2V0Q29udGVudFNjYWxlRmFjdG9yOlttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVG
YWN0b3JdICogem9vbUJ1dHRvblNjYWxlTXVsdGlwbGllcl07CisgICAgICAgIGNhbGN1bGF0ZVNp
emVzKCk7CiAgICAgfQorfQogCi0gICAgaWYgKGF0U2Nyb2xsVG9wICYmICFpbkZpcnN0UGFnZSAm
JiBldmVudC5kZWx0YSgpLmhlaWdodCgpID4gMCkgewotICAgICAgICBpZiAoZXZlbnQuZGVsdGEo
KS5oZWlnaHQoKSA+PSBzY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCAmJiAhaW5N
b21lbnR1bVNjcm9sbCkgewotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAg
ICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGdvdG9QcmV2aW91c1BhZ2VdOwotICAgICAg
ICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1heGltdW1TY3JvbGxQb3NpdGlv
bigpKTsKLSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Cit2b2lkIFBERlBsdWdpbjo6em9vbU91dCgpCit7CisgICAgaWYg
KHdlYkZyYW1lKCktPmlzTWFpbkZyYW1lKCkgJiYgaXNGdWxsRnJhbWVQbHVnaW4oKSkgeworICAg
ICAgICBXZWJQYWdlKiBwYWdlID0gd2ViRnJhbWUoKS0+cGFnZSgpOworICAgICAgICBwYWdlLT5z
Y2FsZVBhZ2UocGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkgLyB6b29tQnV0dG9uU2NhbGVNdWx0aXBs
aWVyLCBJbnRQb2ludCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIgc2V0Q29udGVudFNjYWxlRmFjdG9yOlttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50
U2NhbGVGYWN0b3JdIC8gem9vbUJ1dHRvblNjYWxlTXVsdGlwbGllcl07CisgICAgICAgIGNhbGN1
bGF0ZVNpemVzKCk7CiAgICAgfQorfQorCitQREZQbHVnaW46OkhVRDo6SFVEKFBERlBsdWdpbiYg
cGx1Z2luKQorICAgIDogbV9vdmVybGF5KFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpKQorICAg
ICwgbV9wbHVnaW4ocGx1Z2luKQoreworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHBsdWdpbi53
ZWJGcmFtZSgpOworCisgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgdGhlIG92ZXJsYXkgbGFnZ2lu
ZyBiZWhpbmQgbWFpbi1mcmFtZSBzY3JvbGxpbmcsIHdlIG5lZWQKKyAgICAvLyB0byBmb3JjZSBz
eW5jaHJvbm91cyBzY3JvbGxpbmcgZm9yIHRoZSB3aG9sZSBwYWdlIGlmIHdlIGhhdmUgYSBIVUQg
aW4gYSBzdWJmcmFtZSBQREYuCisgICAgbV9vdmVybGF5LT5zZXROZWVkc1N5bmNocm9ub3VzU2Ny
b2xsaW5nKCF3ZWJGcmFtZS0+aXNNYWluRnJhbWUoKSk7CisKKyAgICBNYWluRnJhbWUmIG1haW5G
cmFtZSA9IHdlYkZyYW1lLT5jb3JlRnJhbWUoKS0+bWFpbkZyYW1lKCk7CisgICAgbWFpbkZyYW1l
LnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShtX292ZXJsYXkucHRy
KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX292ZXJsYXktPnNl
dE5lZWRzRGlzcGxheSgpOwogCi0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50KHBsYXRmb3JtKGV2ZW50KSk7CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gcGxh
dGZvcm1DQUxheWVyID0gZG93bmNhc3Q8R3JhcGhpY3NMYXllckNBPihtX292ZXJsYXktPmxheWVy
KCkpLnBsYXRmb3JtQ0FMYXllcigpOworICAgIHBsYXRmb3JtQ0FMYXllci0+c2V0T3BhY2l0eSgw
KTsKIH0KIAotTlNEYXRhICpQREZQbHVnaW46OmxpdmVEYXRhKCkgY29uc3QKK1BERlBsdWdpbjo6
SFVEOjp+SFVEKCkKIHsKLSAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQotICAgICAgICBtX2Fj
dGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lID0gbV9w
bHVnaW4ud2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPm1haW5GcmFtZSgpOworICAgIG1haW5GcmFt
ZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX292ZXJsYXku
cHRyKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKK30KIAotICAgIC8vIFNh
dmUgZGF0YSBzdHJhaWdodCBmcm9tIHRoZSByZXNvdXJjZSBpbnN0ZWFkIG9mIFBERktpdCBpZiB0
aGUgZG9jdW1lbnQgaXMKLSAgICAvLyB1bnRvdWNoZWQgYnkgdGhlIHVzZXIsIHNvIHRoYXQgUERG
cyB3aGljaCBQREZLaXQgY2FuJ3QgZGlzcGxheSB3aWxsIHN0aWxsIGJlIGRvd25sb2FkYWJsZS4K
LSAgICBpZiAobV9wZGZEb2N1bWVudFdhc011dGF0ZWQpCi0gICAgICAgIHJldHVybiBbbV9wZGZE
b2N1bWVudCBkYXRhUmVwcmVzZW50YXRpb25dOwotICAgIAotICAgIHJldHVybiByYXdEYXRhKCk7
Cit2b2lkIFBERlBsdWdpbjo6SFVEOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYp
Cit7CiB9CiAKLU5TT2JqZWN0ICpQREZQbHVnaW46OmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25z
dAordm9pZCBQREZQbHVnaW46OkhVRDo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdl
KiBwYWdlKQogewotICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlPYmplY3QuZ2V0KCk7Cit9CisK
K3ZvaWQgUERGUGx1Z2luOjpIVUQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikK
K3sKK30KKworSW50UmVjdCBQREZQbHVnaW46OkhVRDo6ZnJhbWVJblJvb3RWaWV3KCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGNvbWUgZnJvbSBQREZLaXQuCisgICAgY29u
c3QgaW50IEhVRFdpZHRoID0gMjM2OworICAgIGNvbnN0IGludCBIVURIZWlnaHQgPSA3MjsKKyAg
ICBjb25zdCBpbnQgSFVEWU9mZnNldCA9IDUwOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX3BsdWdpbi53ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIEludFJlY3Qg
ZnJhbWVSZWN0SW5Sb290VmlldyA9IGZyYW1lVmlldy0+Y29udmVydFRvUm9vdFZpZXcoZnJhbWVW
aWV3LT5ib3VuZHNSZWN0KCkpOworICAgIEZsb2F0UmVjdCBIVURSZWN0KGZyYW1lUmVjdEluUm9v
dFZpZXcueCgpICsgKGZyYW1lUmVjdEluUm9vdFZpZXcud2lkdGgoKSAvIDIgLSAoSFVEV2lkdGgg
LyAyKSksIGZyYW1lUmVjdEluUm9vdFZpZXcueSgpICsgKGZyYW1lUmVjdEluUm9vdFZpZXcuaGVp
Z2h0KCkgLSBIVURZT2Zmc2V0IC0gSFVESGVpZ2h0KSwgSFVEV2lkdGgsIEhVREhlaWdodCk7Cisg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoSFVEUmVjdCk7Cit9CisKK2Jvb2wgUERGUGx1Z2lu
OjpIVUQ6OmNvbnRhaW5zUG9pbnRJblJvb3RWaWV3KEludFBvaW50IHBvaW50KQoreworICAgIGlm
IChtX3BsdWdpbi5pc0xvY2tlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gZnJhbWVJblJvb3RWaWV3KCkuY29udGFpbnMocG9pbnQpOworfQorCit2b2lkIFBERlBsdWdp
bjo6SFVEOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIEludFJlY3QgZnJhbWVJblJvb3RWaWV3
ID0gdGhpcy0+ZnJhbWVJblJvb3RWaWV3KCk7CisKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShJbnRT
aXplKGZyYW1lSW5Sb290Vmlldy54KCksIGZyYW1lSW5Sb290Vmlldy55KCkgKyBmcmFtZUluUm9v
dFZpZXcuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwor
CisgICAgSW50UmVjdCBsb2NhbFJlY3QoSW50UG9pbnQoKSwgZnJhbWVJblJvb3RWaWV3LnNpemUo
KSk7CisgICAgY29udGV4dC5jbGlwKGxvY2FsUmVjdCk7CisKKyAgICBbbV9wbHVnaW4ucGRmTGF5
ZXJDb250cm9sbGVyKCkgZHJhd0hVREluQ29udGV4dDpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
XTsKK30KKwordm9pZCBQREZQbHVnaW46OkhVRDo6aW52YWxpZGF0ZSgpCit7CisgICAgbV9vdmVy
bGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBQREZQbHVnaW46OkhVRDo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUsIEFuaW1hdGVWaXNpYmlsaXR5VHJhbnNpdGlvbiBhbmltYXRlVHJh
bnNpdGlvbikKK3sKKyAgICBpZiAodmlzaWJsZSA9PSBtX3Zpc2libGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CisKKyAgICBmbG9hdCB0b1ZhbHVlID0gbV92
aXNpYmxlID8gMC43NSA6IDA7CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gcGxhdGZvcm1D
QUxheWVyID0gZG93bmNhc3Q8R3JhcGhpY3NMYXllckNBPihtX292ZXJsYXktPmxheWVyKCkpLnBs
YXRmb3JtQ0FMYXllcigpOworCisgICAgaWYgKGFuaW1hdGVUcmFuc2l0aW9uID09IEFuaW1hdGVW
aXNpYmlsaXR5VHJhbnNpdGlvbjo6Tm8pIHsKKyAgICAgICAgcGxhdGZvcm1DQUxheWVyLT5yZW1v
dmVBbmltYXRpb25Gb3JLZXkoIkhVREZhZGUiKTsKKyAgICAgICAgcGxhdGZvcm1DQUxheWVyLT5z
ZXRPcGFjaXR5KHRvVmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmxvYXQg
ZHVyYXRpb24gPSBtX3Zpc2libGUgPyAwLjI1IDogMC41OworCisgICAgUmV0YWluUHRyPENBQmFz
aWNBbmltYXRpb24+IGZhZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25X
aXRoS2V5UGF0aDpAIm9wYWNpdHkiXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXREdXJhdGlvbjpk
dXJhdGlvbl07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb246W0NBTWVkaWFU
aW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOmtDQU1lZGlhVGltaW5nRnVuY3Rpb25FYXNl
SW5FYXNlT3V0XV07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0RGVsZWdhdGU6W1tbV0tQREZIVURB
bmltYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhBbmltYXRpb25Db21wbGV0aW9uSGFuZGxl
cjpbcGxhdGZvcm1DQUxheWVyLCB0b1ZhbHVlXSAoYm9vbCBjb21wbGV0ZWQpIHsKKyAgICAgICAg
aWYgKGNvbXBsZXRlZCkKKyAgICAgICAgICAgIHBsYXRmb3JtQ0FMYXllci0+c2V0T3BhY2l0eSh0
b1ZhbHVlKTsKKworICAgIH1dIGF1dG9yZWxlYXNlXV07CisgICAgW2ZhZGVBbmltYXRpb24gc2V0
RnJvbVZhbHVlOkAoKChDQUxheWVyICopcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCku
cHJlc2VudGF0aW9uTGF5ZXIpLm9wYWNpdHkpXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRUb1Zh
bHVlOkAodG9WYWx1ZSldOworCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1h
dGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y3JlYXRlKGZhZGVBbmltYXRpb24uZ2V0
KCkpOworICAgIHBsYXRmb3JtQ0FMYXllci0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KCJIVURGYWRl
Iik7CisgICAgcGxhdGZvcm1DQUxheWVyLT5hZGRBbmltYXRpb25Gb3JLZXkoIkhVREZhZGUiLCAq
YW5pbWF0aW9uKTsKK30KKworYm9vbCBQREZQbHVnaW46OkhVRDo6bW91c2VFdmVudChQYWdlT3Zl
cmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKG1fcGx1
Z2luLmlzTG9ja2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGRvbid0
IHdhbnQgdGhlIEhVRCB0byBhcHBlYXIgd2hlbiBkcmFnZ2luZyBwYXN0IGl0LCBvciBkaXNhcHBl
YXIgd2hlbiBkcmFnZ2luZyBmcm9tIGEgYnV0dG9uLAorICAgIC8vIHNvIGRvbid0IHVwZGF0ZSB2
aXNpYmlsaXR5IHdoaWxlIGFueSBtb3VzZSBidXR0b25zIGFyZSBwcmVzc2VkLgorICAgIGlmIChl
dmVudC5idXR0b24oKSA9PSBNb3VzZUJ1dHRvbjo6Tm9CdXR0b24pCisgICAgICAgIHNldFZpc2li
bGUoY29udGFpbnNQb2ludEluUm9vdFZpZXcoZXZlbnQucG9zaXRpb24oKSksIEFuaW1hdGVWaXNp
YmlsaXR5VHJhbnNpdGlvbjo6WWVzKTsKKworICAgIGlmICghbV92aXNpYmxlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246Okxl
ZnRCdXR0b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFBvaW50IHBvc2l0aW9u
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGV2ZW50LnBvc2l0aW9uKCkpOworICAgIEludFJlY3QgSFVE
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lSW5Sb290VmlldygpOworCisgICAgYXV0
byBldmVudFdpdGhUeXBlID0gWyZdKE5TRXZlbnRUeXBlIGV2ZW50VHlwZSkgLT4gTlNFdmVudCAq
IHsKKyAgICAgICAgcmV0dXJuIFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUg
bG9jYXRpb246cG9zaXRpb25JblJvb3RWaWV3Q29vcmRpbmF0ZXMgbW9kaWZpZXJGbGFnczowIHRp
bWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tD
b3VudDpldmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CisgICAgfTsKKworICAgIGF1dG8g
cGRmTGF5ZXJDb250cm9sbGVyID0gbV9wbHVnaW4ucGRmTGF5ZXJDb250cm9sbGVyKCk7CisKKyAg
ICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VN
b3ZlZDoKKyAgICAgICAgcmV0dXJuIFtwZGZMYXllckNvbnRyb2xsZXIgbW91c2VEcmFnZ2VkOmV2
ZW50V2l0aFR5cGUoTlNMZWZ0TW91c2VEcmFnZ2VkKSBpbkhVRFdpdGhCb3VuZHM6SFVEUmVjdElu
Um9vdFZpZXdDb29yZGluYXRlc107CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNz
ZWQ6CisgICAgICAgIHJldHVybiBbcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpldmVudFdp
dGhUeXBlKE5TTGVmdE1vdXNlRG93bikgaW5IVURXaXRoQm91bmRzOkhVRFJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXNdOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDoKKyAg
ICAgICAgcmV0dXJuIFtwZGZMYXllckNvbnRyb2xsZXIgbW91c2VVcDpldmVudFdpdGhUeXBlKE5T
TGVmdE1vdXNlVXApIGluSFVEV2l0aEJvdW5kczpIVURSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
XTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0aW9uLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0aW9uLm1tCmlu
ZGV4IGEwMjlkMjVmOTFlODJlNmRiMWIyZjBmYTVhMmJlMzhkNmMxYzcyYmQuLmRlMzk0YTliODYw
NDU3NTRiZjEwZTY3NTU4MjE5NDFiMmRiNmUzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkFubm90YXRpb24ubW0K
QEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2ltcG9ydCAi
UERGS2l0SW1wb3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgor
I2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIK
ICNpbXBvcnQgIlBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCIKICNpbXBvcnQgIlBERlBsdWdp
blRleHRBbm5vdGF0aW9uLmgiCkBAIC05OCwxNCArOTgsMTkgQEAgUERGUGx1Z2luQW5ub3RhdGlv
bjo6flBERlBsdWdpbkFubm90YXRpb24oKQogdm9pZCBQREZQbHVnaW5Bbm5vdGF0aW9uOjp1cGRh
dGVHZW9tZXRyeSgpCiB7CiAgICAgSW50U2l6ZSBkb2N1bWVudFNpemUobV9wZGZMYXllckNvbnRy
b2xsZXIuY29udGVudFNpemVSZXNwZWN0aW5nWm9vbSk7Ci0gICAgSW50UG9pbnQgc2Nyb2xsUG9z
aXRpb24obV9wZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb24pOwogICAgIE5TUmVjdCBh
bm5vdGF0aW9uUmVjdCA9IE5TUmVjdEZyb21DR1JlY3QoW21fcGRmTGF5ZXJDb250cm9sbGVyIGJv
dW5kc0ZvckFubm90YXRpb246bV9hbm5vdGF0aW9uLmdldCgpXSk7CiAKICAgICBTdHlsZWRFbGVt
ZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQo
KSk7CiAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdpZHRoLCBhbm5vdGF0aW9uUmVjdC5zaXplLndpZHRoLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKTsKICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5SGVpZ2h0LCBhbm5vdGF0aW9uUmVjdC5zaXplLmhlaWdodCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QWCk7CisjaWYgIVVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4pCisgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIGFubm90YXRpb25S
ZWN0Lm9yaWdpbi54LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VG9wLCBkb2N1bWVudFNpemUu
aGVpZ2h0KCkgLSBhbm5vdGF0aW9uUmVjdC5vcmlnaW4ueSAtIGFubm90YXRpb25SZWN0LnNpemUu
aGVpZ2h0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyNlbHNlCisgICAgSW50UG9pbnQg
c2Nyb2xsUG9zaXRpb24obV9wZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb24pOwogICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBh
bm5vdGF0aW9uUmVjdC5vcmlnaW4ueCAtIHNjcm9sbFBvc2l0aW9uLngoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCk7CiAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRvcCwgZG9jdW1lbnRTaXplLmhlaWdodCgpIC0gYW5ub3RhdGlvblJlY3Qu
b3JpZ2luLnkgLSBhbm5vdGF0aW9uUmVjdC5zaXplLmhlaWdodCAtIHNjcm9sbFBvc2l0aW9uLnko
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisjZW5kaWYKIH0KIAogYm9vbCBQREZQbHVn
aW5Bbm5vdGF0aW9uOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRp
b24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNo
b2ljZUFubm90YXRpb24ubW0KaW5kZXggNjIxZGMwMTFkYjg3NGZkZjNkZjIzMDVhZTQwNzM2Nzlm
MzZmMGYzOS4uNzExMTU2MWM0ZGIzYzY3ODNlYzIyY2RkN2JkMTJiMzUzZDAzNTgyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9p
Y2VBbm5vdGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9y
dCAiUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oIgogCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRz
LmgiCi0jaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgiCisjaW1wb3J0ICJQREZM
YXllckNvbnRyb2xsZXJTUEkuaCIKICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQ1NTUHJpbWl0aXZlVmFsdWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJvcGVy
dHlOYW1lcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tCmluZGV4IDczOThiNTM2MDk3
NTdmNmNjN2I4YTRmYTMxYTE0YTc4MmFhMTVkNjAuLmIyYTNjN2YwZmVmYTViYjBmNTdmMTM1ZDNi
MzZhYzcwMjE3ZWRkN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW0KQEAgLTI5LDcg
KzI5LDcgQEAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2ltcG9ydCAiUERGS2l0SW1w
b3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgorI2ltcG9ydCAi
UERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKICNpbXBvcnQg
PFBERktpdC9QREZLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90
YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
blRleHRBbm5vdGF0aW9uLm1tCmluZGV4IGE0YjQ5YTE0MGRmMmQxMThkZDE0NDUyNmY4OTkwYzQy
YjA4NmZmZjUuLjBiM2FlMDFmNjBjZGE4MGRmZThhYTRhMzA1MjViMTNmNDU4MmUxMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4
dEFubm90YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0
ICJQREZBbm5vdGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCIKICNpbXBvcnQgIlBERktpdEltcG9y
dHMuaCIKLSNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlckRldGFpbHMuaCIKKyNpbXBvcnQgIlBE
RkxheWVyQ29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luLmgiCiAjaW1wb3J0IDxQ
REZLaXQvUERGS2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1ByaW1pdGl2ZVZhbHVlLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKaW5kZXggZjI3OWViYmNm
NDU3OWE5OWQ2OGYwYTM3N2UyMThjYTYzYjdiNjhlYi4uMWY1OTJmNWQ4ZGY1NDVmNWMwNWE5NGI2
MGJhNDY4NTgwODUzMDE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW4uaApAQCAtMjIzLDEwICsyMjMsMTAgQEAgcHVibGljOgogCiAgICAgLy8gQXNrIHRoZSBw
bHVnLWluIHdoZXRoZXIgaXQgd2FudHMgVVJMcyBhbmQgZmlsZXMgZHJhZ2dlZCBvbnRvIGl0IHRv
IGNhdXNlIG5hdmlnYXRpb24uCiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdhdGlv
bkZyb21EcmFncygpID0gMDsKLSAgICAKKwogICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVy
IGl0IHdhbnRzIHRvIG92ZXJyaWRlIGZ1bGwtcGFnZSB6b29tLgotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgPSAwOwotICAgIAorICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgPSAwOworCiAgICAgLy8gVGVsbHMgdGhlIHBsdWct
aW4gYWJvdXQgZm9jdXMgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkg
PSAwOwogCkBAIC0yOTgsNiArMjk4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBt
dXRlZFN0YXRlQ2hhbmdlZChib29sKSB7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBjYW5DcmVhdGVU
cmFuc2llbnRQYWludGluZ1NuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dmlydHVhbCBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKwogcHJvdGVjdGVkOgogICAgIFBsdWdpbihQbHVnaW5UeXBlKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKaW5kZXgg
NmQ3YjQ2ZDJjNjhmYmJjYzRiNTliYTY0MmNjNzFkMDNjODBlY2M3Ny4uM2I1OGUyMGExZmUwZTIz
MDk1ZDBjMTNlYjFjNmM5MzFlYjZjM2Q5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBQ
bHVnaW5Qcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSkKICAgICByZXR1cm4gZW5hYmxlZDsKIH0KICAgICAKLWJvb2wgUGx1Z2luUHJveHk6Omhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKQorYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgaWYgKG1fd2FpdGluZ09uQXN5bmNocm9ub3VzSW5pdGlh
bGl6YXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ3MCw2ICs0NzAsMTggQEAgYm9v
bCBQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpCiAgICAgcmV0dXJuIGhhbmRs
ZWQ7CiB9CiAKK2Jvb2wgUGx1Z2luUHJveHk6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXphdGlvbikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOworICAg
IGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVn
aW5Db250cm9sbGVyUHJveHk6OlJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCksIE1lc3NhZ2Vz
OjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yOjpSZXBs
eShyZXF1aXJlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gcmVxdWlyZWQ7Cit9CisKIE5QT2JqZWN0KiBQbHVnaW5Qcm94eTo6
cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKIHsKICAgICAvLyBTZW5kaW5nIHRoZSBzeW5jaHJv
bm91cyBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpHZXRQbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3QgbWVzc2FnZSBjYW4gY2F1c2UgdXMgdG8gZGlzcGF0Y2ggYW4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgKaW5kZXggNzdhZDRlNjkw
N2VlNGUxZjU5Mjk3OWIwZjQ2ZDc4Y2M3MjEzMGM3MC4uOTMwZGIyYTBhMDM1MmM2MmZiODcwMWFj
ODFlNzBkMGJhZTFmMDFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb3h5LmgKQEAgLTExMiw3ICsxMTIsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRBbGxvd1NjcmlwdGluZygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VT
Y2FsZUZhY3RvcigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxl
RmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVW5pZmll
ZFNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiAgICAgdmlydHVhbCBOUE9iamVj
dCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBjMzk2ZTg0ODZl
OWI1ZTFmNWYyMDg2OTkwY2NhYzkzYzFlMzMyYTRlLi5iNDg5OGYyNzg3ZGViYTAwOGJhZmZkMjYw
MGE2OTYzN2QxYzdhY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCkBAIC01MjEsNiArNTIxLDE0IEBAIGJvb2wgUGx1Z2luVmlldzo6
aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGx1Z2luLT5oYW5k
bGVzUGFnZVNjYWxlRmFjdG9yKCk7CiB9CiAKK2Jvb2wgUGx1Z2luVmlldzo6cmVxdWlyZXNVbmlm
aWVkU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW4gfHwgIW1faXNJbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fcGx1Z2luLT5y
ZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpOworfQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBh
Z2VEZXN0cm95ZWQoKQogewogICAgIG1fd2ViUGFnZSA9IDA7CkBAIC0xODYzLDYgKzE4NzEsOSBA
QCBib29sIFBsdWdpblZpZXc6OnNob3VsZENyZWF0ZVRyYW5zaWVudFBhaW50aW5nU25hcHNob3Qo
KSBjb25zdAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFtX3BsdWdpbi0+Y2FuQ3JlYXRl
VHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmgKaW5kZXggNzhhOGRjYjg4M2YwZDFiYTIyN2ViOGY4ZWNjOWRlY2RhMzgx
NGY2Yy4uMjIyNmVhYmE4ZTc5ZTM2OWMwM2RjZDMxM2QyYWY4M2FiMjU3OWNkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC05Nyw2ICs5
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVG
YWN0b3IsIFdlYkNvcmU6OkludFBvaW50IG9yaWdpbik7CiAgICAgZG91YmxlIHBhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0OwogICAgIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Owor
ICAgIGJvb2wgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdDsKIAogICAgIHZvaWQg
cGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCk7CiAgICAgdm9pZCB0b3BDb250ZW50SW5zZXREaWRD
aGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggMGIwM2Y0YzAz
OTVhNTE3ZThiZjAxMDk5YTVkZjdmYmJiZGI5OTI1Ni4uM2UwZWFmZjYyOTc0OTdkMmI4M2U2Mzhj
MDU3OGU0NjgzNzM3YmI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAg
LTQ2MSw3ICs0NjEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENv
bW1pdExvYWQoKQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAKLSAgICB3ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1pdExvYWRGb3JGcmFtZShtX2Zy
YW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBkb2N1bWVudExv
YWRlci5yZXNwb25zZSgpLm1pbWVUeXBlKCksIG1fZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlk
ZXIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCku
bG9hZFR5cGUoKSksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkuY2VydGlmaWNhdGVJbmZvKCks
IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCksIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9j
dW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkubWlt
ZVR5cGUoKSwgbV9mcmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgbV9mcmFtZS0+aGFuZGxl
c1BhZ2VTY2FsZUdlc3R1cmUoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fZnJhbWUtPmNvcmVG
cmFtZSgpLT5sb2FkZXIoKS5sb2FkVHlwZSgpKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5j
ZXJ0aWZpY2F0ZUluZm8oKSwgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPmlzUGx1
Z2luRG9jdW1lbnQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAgICAgd2ViUGFnZS0+
ZGlkQ29tbWl0TG9hZChtX2ZyYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggY2NjYjhiNmFkZDQ2OTk3M2JkZTQ1NjZiZTg2
OTE0N2Y4ZjA4NjhhNC4uOWZiMGRjYjcwMTRkMDI2NTRmZjJjMjY1MWMyZjA1Y2VmYTJjMDEzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBA
IC01MTQsNiArNTE0LDE2IEBAIGJvb2wgV2ViRnJhbWU6OmhhbmRsZXNQYWdlU2NhbGVHZXN0dXJl
KCkgY29uc3QKICAgICByZXR1cm4gcGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCk7CiB9CiAKK2Jvb2wgV2ViRnJhbWU6OnJlcXVpcmVzVW5pZmllZFNjYWxl
RmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29yZUZyYW1lLT5kb2N1bWVudCgpLT5pc1Bs
dWdpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGx1Z2luRG9jdW1lbnQq
IHBsdWdpbkRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihtX2NvcmVGcmFt
ZS0+ZG9jdW1lbnQoKSk7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0
PFBsdWdpblZpZXcqPihwbHVnaW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworICAgIHJldHVy
biBwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCk7
Cit9CisKIHZvaWQgV2ViRnJhbWU6OnNldEFjY2Vzc2libGVOYW1lKGNvbnN0IFN0cmluZyYgYWNj
ZXNzaWJsZU5hbWUpCiB7CiAgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaApp
bmRleCBhYjQyMWZiYzcxNmZjYmJhYzA1ZjAyM2I4ZjI3YzFmOGZkYzQzZTNkLi4wZjU2MTgxNDBi
ZTM0ZmI4OTU4YzQ1MmU5MjYxOGM4OWY1NzcxNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wTG9h
ZGluZygpOwogICAgIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUoKSBjb25zdDsKKyAgICBi
b29sIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBY2Nl
c3NpYmxlTmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHN0YXRpYyBXZWJGcmFtZSogZnJhbWVG
b3JDb250ZXh0KEpTQ29udGV4dFJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMmE3ZGYzNTQzN2U5OTdjZDFhZmQ1YWZlYTI5YmMzYTYx
NzVmZTc4ZS4uZDgzZjRhYWIyMmViMGNmMDM2NjFhMWQwOTU2MzJkYzhiMmFiYzhhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTM0Myw2
ICsxMzQzLDEzIEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIGRvdWJsZSBXZWJQYWdlOjp0ZXh0
Wm9vbUZhY3RvcigpIGNvbnN0CiB7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdp
blZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSk7CisgICAgaWYgKHBsdWdpblZpZXcg
JiYgcGx1Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSkgeworICAgICAgICBp
ZiAocGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICAgICAgcmV0
dXJuIHBsdWdpblZpZXctPnBhZ2VTY2FsZUZhY3RvcigpOworICAgICAgICByZXR1cm4gcGFnZVNj
YWxlRmFjdG9yKCk7CisgICAgfQorCiAgICAgRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmNv
cmVGcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAxOwpAQCAtMTM1Miw4
ICsxMzU5LDEzIEBAIGRvdWJsZSBXZWJQYWdlOjp0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0CiB2b2lk
IFdlYlBhZ2U6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogewogICAgIFBs
dWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZy
YW1lKCkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSkKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5yZXF1aXJlc1Vu
aWZpZWRTY2FsZUZhY3RvcigpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3LT5oYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCkpCisgICAgICAgICAgICBwbHVnaW5WaWV3LT5zZXRQYWdlU2NhbGVGYWN0
b3Ioem9vbUZhY3RvciwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNj
YWxlUGFnZSh6b29tRmFjdG9yLCBJbnRQb2ludCgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQpAQCAtMTM2NCw4ICsxMzc2LDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0VGV4dFpvb21G
YWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCiBkb3VibGUgV2ViUGFnZTo6cGFnZVpvb21GYWN0b3Io
KSBjb25zdAogewogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJh
bWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZp
ZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpblZpZXct
PnBhZ2VTY2FsZUZhY3RvcigpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJl
cXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5w
YWdlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgcmV0dXJuIHBhZ2VTY2FsZUZhY3RvcigpOworICAg
IH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQpAQCAtMTM3Niw4ICsxMzkxLDExIEBAIGRvdWJsZSBXZWJQYWdlOjpwYWdlWm9v
bUZhY3RvcigpIGNvbnN0CiB2b2lkIFdlYlBhZ2U6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6
b29tRmFjdG9yKQogewogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9y
RnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdp
blZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgewotICAgICAgICBwbHVnaW5WaWV3LT5z
ZXRQYWdlU2NhbGVGYWN0b3Ioem9vbUZhY3RvciwgSW50UG9pbnQoKSk7CisgICAgaWYgKHBsdWdp
blZpZXcgJiYgcGx1Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSkgeworICAg
ICAgICBpZiAocGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICAg
ICAgcGx1Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKHpvb21GYWN0b3IsIEludFBvaW50KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY2FsZVBhZ2Uoem9vbUZhY3RvciwgSW50UG9p
bnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzOTAsOCArMTQwOCwxMSBAQCB2
b2lkIFdlYlBhZ2U6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogdm9pZCBX
ZWJQYWdlOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGRvdWJsZSBwYWdlWm9vbUZhY3Rvciwg
ZG91YmxlIHRleHRab29tRmFjdG9yKQogewogICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBw
bHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIGlmIChwbHVnaW5W
aWV3ICYmIHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgewotICAgICAgICBw
bHVnaW5WaWV3LT5zZXRQYWdlU2NhbGVGYWN0b3IocGFnZVpvb21GYWN0b3IsIEludFBvaW50KCkp
OworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmllZFNjYWxl
RmFjdG9yKCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0
b3IoKSkKKyAgICAgICAgICAgIHBsdWdpblZpZXctPnNldFBhZ2VTY2FsZUZhY3RvcihwYWdlWm9v
bUZhY3RvciwgSW50UG9pbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjYWxlUGFn
ZShwYWdlWm9vbUZhY3RvciwgSW50UG9pbnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQppbmRleCA3NjkyMzgwODQ2NTE2M2EzNjQzYTY4OGNiOTAzNThlYTFmNjhjNWE2Li45NzU4
NWM2NmU4ODg3MDM1ZmExODNhZDE4NDdkNTkwZGQ5YzczZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC01OTMsNyAr
NTkzLDcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yU2VsZWN0aW9uSW5QREZQbHVnaW4oUERGU2VsZWMKICAgICBpZiAoIXNlbGVjdGlvbi5zdHJp
bmcubGVuZ3RoKQogICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKIAotICAgIE5T
UmVjdCByYW5nZVJlY3QgPSBwZGZQbHVnaW4udmlld1JlY3RGb3JTZWxlY3Rpb24oc2VsZWN0aW9u
KTsKKyAgICBOU1JlY3QgcmFuZ2VSZWN0ID0gcGRmUGx1Z2luLnJlY3RGb3JTZWxlY3Rpb25JblJv
b3RWaWV3KHNlbGVjdGlvbik7CiAKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRl
ZFN0cmluZyA9IHNlbGVjdGlvbi5hdHRyaWJ1dGVkU3RyaW5nOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264628</attachid>
            <date>2015-11-02 14:29:25 -0800</date>
            <delta_ts>2015-11-02 15:21:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150037-20151102142829.patch</filename>
            <type>text/plain</type>
            <size>226729</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxMjM2M2MzZjU2ZjMz
NjVlNzM3ZDhlOGU0YzhkNzE4Y2VlNDIxOS4uZjBlOWQ0OTdlMGViZGFjMWRlYjljMmE4ZGNjZDJm
MzhiOTkyOTZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE1LTExLTAyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFBERlBsdWdpbiBz
aG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhyZWFkZWQgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICBEb24ndCBy
ZXNldCB0aGUgb3ZlcmxheSBsYXllcidzIG9wYWNpdHkgaWYgd2UncmUgbm90IGFuaW1hdGluZywK
KyAgICAgICAgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRoZSBjbGllbnQgd2FudHMgdG8gbWFuYWdl
IGl0LgorCisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3Vz
U2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMpOgorICAgICAgICBMZXQgdGhlIG92ZXJsYXkgaXRz
ZWxmIGRldGVybWluZSB3aGV0aGVyIGl0IG5lZWRlcyBzeW5jaHJvbm91cyBzY3JvbGxpbmcsCisg
ICAgICAgIGFuZCBsZXQgUGFnZU92ZXJsYXkgY2xpZW50cyBvdmVycmlkZSB0aGUgZGVmYXVsdC4K
KworICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
Ojpib3VuZHNSZWN0KToKKyAgICAgICAgRXhwb3J0IGEgZmV3IHVzZWZ1bCB0aGluZ3MuCisKIDIw
MTUtMTAtMzEgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxh
Y2UgaU9TLW9ubHkgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGNhbGxzIHdpdGggU1BJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggMzAxOTVmNmU0NjM2NjgzNWU0OTNlYjQ5NmEwMGQxMjdlMzFhZDcxZC4uZTI0YWZjMmU3
YjNhMjBlNjYxMDQwYTY1NDhlZDQwMzRjNzU2YjZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMx
IEBACiAyMDE1LTExLTAyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CisgICAgICAgIFBERlBsdWdpbiBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhyZWFkZWQgc2Ny
b2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTAwMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBE
dXBsaWNhdGUgUERGUGx1Z2luLCBjcmVhdGluZyBQREZQbHVnaW4gKHRoZSBtb2Rlcm4gdmVyc2lv
biksIGFuZAorICAgICAgICBEZXByZWNhdGVkUERGUGx1Z2luIChjb250YWluaW5nIHRoZSBjb2Rl
IHRoYXQgdXNlZCB0byBiZSBpbiBQREZQbHVnaW4KKyAgICAgICAgcHJpb3IgdG8gdGhpcyBwYXRj
aCkuCisKKyAgICAgICAgVGhlIG5ldyBQREZQbHVnaW4gZGlmZmVycyBmcm9tIHRoZSBvbGQgb25l
IGluIGEgZmV3IHNpZ25pZmljYW50IHdheXMsCisgICAgICAgIGFuZCB3ZSBuZWVkIHRvIGtlZXAg
Ym90aCBhbGl2ZSBmb3IgdGhlIHRpbWUgYmVpbmcuIFNpZ25pZmljYW50IGRpZmZlcmVuY2VzCisg
ICAgICAgIGluY2x1ZGU6CisKKyAgICAgICAgLSBQREZQbHVnaW4gaXMgbm8gbG9uZ2VyIGEgU2Ny
b2xsYWJsZUFyZWEKKyAgICAgICAgLSBQREZQbHVnaW4gbm8gbG9uZ2VyIGhvc3RzIGxheWVycyBv
d25lZCBieSBQREZLaXQ7IGluc3RlYWQsIGl0IGRyYXdzCisgICAgICAgICAgaW50byB0aGUgcGFn
ZSB0aWxlcywgYWxsb3dpbmcgV2ViQ29yZSdzIHRocmVhZGVkIHNjcm9sbGluZyB0byBkbyBpdHMg
am9iCisgICAgICAgIC0gUERGUGx1Z2luIG5vdyByZXNpemVzIGl0c2VsZiB0byB0aGUgc2l6ZSBv
ZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgLSBQREZQbHVnaW4gZG9lc24ndCBoYW5kbGUgem9vbWlu
ZyBpdHNlbGYsIGl0IGp1c3QgZGVsZWdhdGVzIHRvIHRoZSBwYWdlCisgICAgICAgIC0gUERGTGF5
ZXJDb250cm9sbGVyIGhhcyBsYXJnZSBhbmQgaW5jb21wYXRpYmxlIEFQSSBjaGFuZ2VzCisgICAg
ICAgIC0gUERGUGx1Z2luIG5vdyBpbXBsZW1lbnRzIG1vcmUgb2YgdGhlIEhVRCBiZWhhdmlvciwg
YnV0IGl0J3Mgc3RpbGwKKyAgICAgICAgICBwYWludGVkIGJ5IFBERkxheWVyQ29udHJvbGxlciAo
aW50byBhIHZpZXctcmVsYXRpdmUgUGFnZU92ZXJsYXkpCisKKyAgICAgICAgWyBGaWxlIGxpc3Qg
ZWxpZGVkIGJlY2F1c2UgaXQncyBsb25nIGFuZCB1c2VsZXNzLiBdCisKKzIwMTUtMTEtMDIgIFRp
bSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKICAgICAgICAgR2V0IHJpZCBv
ZiBXS1dlYlZpZXcncyBpbm5lciBXS1ZpZXcgKFdLVmlldyBiZWluZyBpbnNpZGUgV0tXZWJWaWV3
IGxlYWRzIHRvIHdlaXJkIEFQSSBpc3N1ZXMpCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAxNzQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNw
cAppbmRleCA5ZWNlYTg0NDc0M2UxYTVlZDliNGFiOTZmNzk1ZGQzNDA2NWFhMjljLi5iMjRiMTgw
MzIyMGQ4Y2NhYzYxOTkzMDc5YzljMmMyODU2YWQyNWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VP
dmVybGF5LmNwcApAQCAtNTMsMTQgKzUzLDEwIEBAIFJlZjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJs
YXk6OmNyZWF0ZShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCiAKIFBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3Zlcmxh
eVR5cGUpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3BhZ2UobnVsbHB0cikKICAg
ICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKCp0aGlzLCAmUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRp
b25UaW1lckZpcmVkKQotICAgICwgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lKDApCiAgICAgLCBt
X2ZhZGVBbmltYXRpb25EdXJhdGlvbihmYWRlQW5pbWF0aW9uRHVyYXRpb24pCi0gICAgLCBtX2Zh
ZGVBbmltYXRpb25UeXBlKE5vQW5pbWF0aW9uKQotICAgICwgbV9mcmFjdGlvbkZhZGVkSW4oMSkK
KyAgICAsIG1fbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZyhvdmVybGF5VHlwZSA9PSBPdmVybGF5
VHlwZTo6VmlldykKICAgICAsIG1fb3ZlcmxheVR5cGUob3ZlcmxheVR5cGUpCi0gICAgLCBtX2Jh
Y2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpCiAgICAgLCBtX3BhZ2VPdmVybGF5SUQo
Z2VuZXJhdGVQYWdlT3ZlcmxheUlEKCkpCiB7CiB9CkBAIC0xNjMsNyArMTU5LDggQEAgdm9pZCBQ
YWdlT3ZlcmxheTo6c2V0UGFnZShQYWdlKiBwYWdlKQogdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoYXV0byBwYWdl
T3ZlcmxheUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKCkpIHsKLSAgICAgICAgcGFnZU92ZXJsYXlD
b250cm9sbGVyLT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZElu
KTsKKyAgICAgICAgaWYgKG1fZmFkZUFuaW1hdGlvblR5cGUgIT0gRmFkZUFuaW1hdGlvblR5cGU6
Ok5vQW5pbWF0aW9uKQorICAgICAgICAgICAgcGFnZU92ZXJsYXlDb250cm9sbGVyLT5zZXRQYWdl
T3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKICAgICAgICAgcGFnZU92
ZXJsYXlDb250cm9sbGVyLT5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlS
ZWN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVy
bGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmgKaW5kZXggN2ZjMWRkMTFi
OGFlMmQ0NjM5ZGM3YjgyNjQyMGYzMmMxNGYwZjA2NC4uYTYxOTQ3ZTBkNTkwY2YxY2I5MTU1MzE0
NWE3NGM2MzFkODRhYjAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zl
cmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApAQCAtMTE1LDYg
KzExNSw5IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUGFnZU92ZXJsYXkgc2hvdWxkIG93biBp
dHMgbGF5ZXIsIGluc3RlYWQgb2YgUGFnZU92ZXJsYXlDb250cm9sbGVyLgogICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzTGF5ZXImIGxheWVyKCk7CiAKKyAgICBib29sIG5lZWRzU3luY2hyb25v
dXNTY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU3luY2hyb25vdXNTY3JvbGxpbmc7
IH0KKyAgICB2b2lkIHNldE5lZWRzU3luY2hyb25vdXNTY3JvbGxpbmcoYm9vbCBuZWVkc1N5bmNo
cm9ub3VzU2Nyb2xsaW5nKSB7IG1fbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZyA9IG5lZWRzU3lu
Y2hyb25vdXNTY3JvbGxpbmc7IH0KKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQYWdlT3Zlcmxh
eShDbGllbnQmLCBPdmVybGF5VHlwZSk7CiAKQEAgLTEyMiwxMCArMTI1LDEwIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpOwogCiAgICAgQ2xpZW50JiBtX2Ns
aWVudDsKLSAgICBQYWdlKiBtX3BhZ2U7CisgICAgUGFnZSogbV9wYWdlIHsgbnVsbHB0ciB9Owog
CiAgICAgVGltZXIgbV9mYWRlQW5pbWF0aW9uVGltZXI7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lIHsgMCB9
OwogICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKIAogICAgIGVudW0gRmFkZUFu
aW1hdGlvblR5cGUgewpAQCAtMTM0LDEzICsxMzcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgRmFk
ZU91dEFuaW1hdGlvbiwKICAgICB9OwogCi0gICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5p
bWF0aW9uVHlwZTsKLSAgICBmbG9hdCBtX2ZyYWN0aW9uRmFkZWRJbjsKKyAgICBGYWRlQW5pbWF0
aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBlIHsgTm9BbmltYXRpb24gfTsKKyAgICBmbG9hdCBt
X2ZyYWN0aW9uRmFkZWRJbiB7IDEgfTsKKworICAgIGJvb2wgbV9uZWVkc1N5bmNocm9ub3VzU2Ny
b2xsaW5nOwogCiAgICAgT3ZlcmxheVR5cGUgbV9vdmVybGF5VHlwZTsKICAgICBJbnRSZWN0IG1f
b3ZlcnJpZGVGcmFtZTsKIAotICAgIFJHQkEzMiBtX2JhY2tncm91bmRDb2xvcjsKKyAgICBSR0JB
MzIgbV9iYWNrZ3JvdW5kQ29sb3IgeyBDb2xvcjo6dHJhbnNwYXJlbnQgfTsKICAgICBQYWdlT3Zl
cmxheUlEIG1fcGFnZU92ZXJsYXlJRDsKIAogICAgIGJvb2wgbV9zaG91bGRJZ25vcmVNb3VzZUV2
ZW50c091dHNpZGVCb3VuZHMgeyB0cnVlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHAKaW5kZXggNDJjNzgwYzA0Nzk1ZjUxMzY0NDdjODJkYjJiN2Jm
N2U0ODI2OGE0YS4uZmNkOWQ3ZWIzZWNiMGNiYzBmODdjNWZjZjhhMWZjMmU0Yjg0ODk1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApAQCAtMTYz
LDcgKzE2Myw3IEBAIHZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNo
cm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQogICAgIGJvb2wgZm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7CiAKICAgICBmb3IgKGF1dG8m
IG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3Zlcmxh
eVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCisgICAgICAgIGlmIChv
dmVybGF5LT5uZWVkc1N5bmNocm9ub3VzU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICBmb3JjZVN5
bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCAwN2U0MmM4MTI0Mzc5M2I4Y2E2YTk4ODRjOWJjZGIx
NzUyZDkxMGVhLi5kY2M5ZTJjYTllMTRlOGVlMTljODAxYzEwNmUwODdmODYzNmIxNTdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3Q7Ci0gICAgSW50
UmVjdCBib3VuZHNSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCAg
aGVpZ2h0KCkpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBib3VuZHNSZWN0KCkgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCAgaGVpZ2h0KCkpOyB9CiAKICAgICB2
b2lkIHJlc2l6ZShpbnQgdywgaW50IGgpIHsgc2V0RnJhbWVSZWN0KEludFJlY3QoeCgpLCB5KCks
IHcsIGgpKTsgfQogICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIHMpIHsgc2V0RnJhbWVS
ZWN0KEludFJlY3QobG9jYXRpb24oKSwgcykpOyB9CkBAIC0xNTEsNyArMTUxLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVdpZGdldChXaWRnZXROb3RpZmljYXRpb24pIHsg
fQogCi0gICAgSW50UmVjdCBjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRS
ZWN0JikgY29uc3Q7CiAgICAgSW50UmVjdCBjb252ZXJ0RnJvbVJvb3RWaWV3KGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKIAogICAgIEludFBvaW50IGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggMTZjM2E0NzlhNTIzZTFiYmM0ZmE3NzVlYTkw
OWRiMDhkMTBjMmM3Yi4uZGM2ZDM0MzI2NzMzNTJiYTQ3YzU2ZWNlZmEwNWI0M2M1N2I3MWI5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVy
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJv
bGxlclByb3h5LmNwcApAQCAtNTY1LDYgKzU2NSwxMSBAQCB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcihib29sJiBpc0hhbmRsZWQpCiAgICAgaXNIYW5k
bGVkID0gbV9wbHVnaW4tPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsKIH0KIAordm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKGJvb2wmIHJlcXVp
cmVkKQoreworICAgIHJlcXVpcmVkID0gbV9wbHVnaW4tPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFj
dG9yKCk7Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdp
bigpCiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAppbmRleCAyZjYz
ODU2YWY2MTk5NzFkMGQxY2YwNWJlNTJiODk2NGRmMTIzMzU3Li4zNmJmMDczYjY1MDJmZDBhNThk
OTdmZGNkNzlhYjNmMDZhMzAzMDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Q
cm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgKQEAgLTE0NCw2ICsxNDQsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgYm9vbCYpOwogICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJiwgYm9vbCYpOwogICAgIHZvaWQgaGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcihib29sJik7
CisgICAgdm9pZCByZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rvcihib29sJik7CiAgICAgdm9pZCBw
YWludEVudGlyZVBsdWdpbigpOwogICAgIHZvaWQgc3VwcG9ydHNTbmFwc2hvdHRpbmcoYm9vbCYp
OwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJhY2tpbmdTdG9y
ZUhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nl
c3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGI1YTA2MzY4ZmM0YTVj
Mzc2MjBiY2VlZDc2ZmYwMDRmNTI1ZThiYmUuLjE4ZThjODBiNmZiN2EzODdiOTVmZmRiNzk4YTU2
YmJjZWRkNDdjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1
Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC04OSw2ICs4OSw5
IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xsZXJQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAg
ICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBwbHVnaW4gd2FudHMgdG8gaGFuZGxlIHBhZ2Ug
c2NhbGUgZmFjdG9yIGl0c2VsZi4KICAgICBIYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgLT4gKGJv
b2wgZW5hYmxlZCk7CiAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50
cyBwYWdlIHNjYWxlLCBwYWdlIHpvb20sIGFuZCB0ZXh0IHpvb20gYWxsIHRvIGFmZmVjdCBwYWdl
IHNjYWxlLgorICAgIFJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgLT4gKGJvb2wgcmVxdWly
ZWQpOworCiAgICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4gZm9jdXMgY2hhbmdlcy4KICAgICBT
ZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9QREZLaXRJbXBvcnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktp
dEltcG9ydHMuaAppbmRleCBhMWExM2QzZDhhNzY3ZDY2MTM0YmMzODZmODg0N2Q0ODdjZmNhYjJm
Li41MDFmMzc1MWUzZWE0ZDFiMWUyNjg3NDViYzJlODYxODk0NjFhYjNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaApAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5k
ZWYgUERGS2l0SW1wb3J0c19oCiAjZGVmaW5lIFBERktpdEltcG9ydHNfaAogCisjaWYgX19oYXNf
aW5jbHVkZSg8UERGS2l0L1BERkxheWVyQ29udHJvbGxlclZlcnNpb25pbmdQcml2Lmg+KQorI2lt
cG9ydCA8UERGS2l0L1BERkxheWVyQ29udHJvbGxlclZlcnNpb25pbmdQcml2Lmg+CisjZW5kaWYK
KworI2RlZmluZSBVU0VfREVQUkVDQVRFRF9QREZfUExVR0lOICghZGVmaW5lZChQREZLSVRfSEFT
X1BERkxBWUVSQ09OVFJPTExFUl8yKSB8fCAhUERGS0lUX0hBU19QREZMQVlFUkNPTlRST0xMRVJf
MikKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5TU3RyaW5nICpwZGZLaXRGcmFtZXdvcmtQYXRo
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDU4ODJh
YTViYzBmMWJlODg1ZTAxMDk3MTM3OTAwYmI1YWE1YjAyOTEuLmYzMWQ0YzJhNWE5N2ZhODFlNWYw
ZGFlMzdmNzJlOWY2MWQ0ZmU3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCkBAIC0yMjUxLDcgKzIyNTEsNyBAQCBkb3VibGUgV2ViUGFnZVByb3h5OjpwYWdl
Wm9vbUZhY3RvcigpIGNvbnN0CiB7CiAgICAgLy8gWm9vbSBmYWN0b3IgZm9yIG5vbi1QREYgcGFn
ZXMgcGVyc2lzdHMgYWNyb3NzIHBhZ2UgbG9hZHMuIFdlIG1haW50YWluIGEgc2VwYXJhdGUgbWVt
YmVyIHZhcmlhYmxlIGZvciBQREYKICAgICAvLyB6b29tIHdoaWNoIGVuc3VyZXMgdGhhdCB3ZSBk
b24ndCB1c2UgdGhlIFBERiB6b29tIGZvciBhIG5vcm1hbCBwYWdlLgotICAgIGlmIChtX21haW5G
cmFtZSAmJiBtX21haW5GcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
bV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSkKICAgICAgICAgcmV0dXJu
IG1fcGx1Z2luWm9vbUZhY3RvcjsKICAgICByZXR1cm4gbV9wYWdlWm9vbUZhY3RvcjsKIH0KQEAg
LTIyNjAsNyArMjI2MCw3IEBAIGRvdWJsZSBXZWJQYWdlUHJveHk6OnBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0CiB7CiAgICAgLy8gUERGIGRvY3VtZW50cyB1c2Ugem9vbSBhbmQgc2NhbGUgZmFjdG9y
cyB0byBzaXplIHRoZW1zZWx2ZXMgYXBwcm9wcmlhdGVseSBpbiB0aGUgd2luZG93LiBXZSBzdG9y
ZSB0aGVtCiAgICAgLy8gc2VwYXJhdGVseSBidXQgZGVjaWRlIHdoaWNoIHRvIHJldHVybiBiYXNl
ZCBvbiB0aGUgbWFpbiBmcmFtZS4KLSAgICBpZiAobV9tYWluRnJhbWUgJiYgbV9tYWluRnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKG1fbWFpbkZyYW1lUGx1Z2luSGFu
ZGxlc1BhZ2VTY2FsZUdlc3R1cmUpCiAgICAgICAgIHJldHVybiBtX3BsdWdpblNjYWxlRmFjdG9y
OwogICAgIHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsKIH0KQEAgLTI5NTcsNyArMjk1Nyw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckxvYWREZXBlbmRlbnRDYWxsYmFja3MoKQogICAgIH0K
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBm
cmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90IG9wYXF1ZUZyYW1lTG9h
ZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBi
b29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGZyYW1l
SGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCBib29sIHBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0
dXJlLCB1aW50MzJfdCBvcGFxdWVGcmFtZUxvYWRUeXBlLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBj
b25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CiAgICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90
ZWN0b3IobV9wYWdlQ2xpZW50KTsKIApAQCAtMzAxNiw5ICszMDE2LDEzIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
bmF2aWdhdGlvbklECiAgICAgLy8gV2ViUGFnZVByb3h5J3MgY2FjaGUgb2YgdGhlIHZhbHVlIGNh
biBnZXQgb3V0IG9mIHN5bmMgKGUuZy4gaW4gdGhlIGNhc2Ugd2hlcmUgYQogICAgIC8vIHBsdWdp
biBpcyBoYW5kbGluZyBwYWdlIHNjYWxpbmcgaXRzZWxmKSBzbyB3ZSBzaG91bGQgcmVzZXQgaXQg
dG8gdGhlIGRlZmF1bHQKICAgICAvLyBmb3Igc3RhbmRhcmQgbWFpbiBmcmFtZSBsb2Fkcy4KLSAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgc3RhdGljX2Nhc3Q8RnJhbWVMb2FkVHlwZT4o
b3BhcXVlRnJhbWVMb2FkVHlwZSkgPT0gRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQpIHsKLSAgICAg
ICAgbV9wYWdlU2NhbGVGYWN0b3IgPSAxOwotICAgICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0g
MTsKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgbV9tYWluRnJhbWVQ
bHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSA9IHBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0
dXJlOworCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxGcmFtZUxvYWRUeXBlPihvcGFxdWVGcmFt
ZUxvYWRUeXBlKSA9PSBGcmFtZUxvYWRUeXBlOjpTdGFuZGFyZCkgeworICAgICAgICAgICAgbV9w
YWdlU2NhbGVGYWN0b3IgPSAxOworICAgICAgICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7
CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDdhZTYyNmIzMGM2
NmIxNzI3Y2YzMWNhMzhiZWQwMWMyOGIwZWQ4YTMuLmI4NDk1MGY3NjczMGY5ODdmNzM3YWJlZDVh
Mjg3MmZmMjBiNGE5NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTExMjIsNyArMTEyMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAg
dm9pZCBkaWRDaGFuZ2VQcm92aXNpb25hbFVSTEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIHZvaWQgZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgdWludDY0X3QgbmF2aWdh
dGlvbklELCBjb25zdCBTdHJpbmcmIHByb3Zpc2lvbmFsVVJMLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEmKTsKLSAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90
IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29u
dGFpbnNQbHVnaW5Eb2N1bWVudCwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIGRpZENvbW1p
dExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIs
IGJvb2wgbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUsIHVpbnQzMl90IGZy
YW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29udGFp
bnNQbHVnaW5Eb2N1bWVudCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25J
RCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFVzZXJEYXRhJik7CiAg
ICAgdm9pZCBkaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5h
dmlnYXRpb25JRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFVzZXJEYXRh
Jik7CkBAIC0xNzE5LDYgKzE3MTksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRSZWNv
cmROYXZpZ2F0aW9uU25hcHNob3RzOwogICAgIGJvb2wgbV9pc1Nob3dpbmdOYXZpZ2F0aW9uR2Vz
dHVyZVNuYXBzaG90OwogCisgICAgYm9vbCBtX21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2Nh
bGVHZXN0dXJlIHsgZmFsc2UgfTsKKwogICAgIHVuc2lnbmVkIG1fcGFnZUNvdW50OwogCiAgICAg
V2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDM2MDYx
OWQyZDA3MmUxZDY5ZTM4OGQ5MWFiNWJkOTBkNjBmZDkzZTMuLmYzZGM3MjE3YTFhZWQzNTMwZGM4
MjFhYTdhMjA0ZjcwMTYxYWVjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTI2LDcgKzEyNiw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBT
dHJpbmcgdXJsLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogICAgIERpZENoYW5nZVByb3Zp
c2lvbmFsVVJMRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklE
LCBTdHJpbmcgdXJsKQogICAgIERpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRf
dCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIGZyYW1lU2VjdXJp
dHlPcmlnaW4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgU3RyaW5nIHByb3Zpc2lvbmFsVVJMLCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQot
ICAgIERpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIFN0cmluZyBtaW1lVHlwZSwgYm9vbCBoYXNDdXN0b21Db250ZW50UHJvdmlkZXIs
IHVpbnQzMl90IGxvYWRUeXBlLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJ
bmZvLCBib29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRh
dGEpCisgICAgRGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90
IG5hdmlnYXRpb25JRCwgU3RyaW5nIG1pbWVUeXBlLCBib29sIGhhc0N1c3RvbUNvbnRlbnRQcm92
aWRlciwgYm9vbCBwbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSwgdWludDMyX3QgbG9hZFR5
cGUsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgY29udGFp
bnNQbHVnaW5Eb2N1bWVudCwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKICAgICBEaWRGYWls
TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKICAg
ICBEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBuYXZpZ2F0aW9uSUQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCiAgICAgRGlkRmluaXNo
TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgV2Vi
S2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZGVjNDcwOWJkZGQ0YjM4MjZmNGE1NThmMDQx
NDZkNDhjMzJjYWExLi42Mjk4NDViODg3YTZjN2U3ODE5Y2U1ODUxNTU2MWNjMGM3YzFlNjI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC02MDcsNiArNjA3LDcgQEAKIAkJMkQyQURGMDkxNjM2MkRENTAwMTk3RTQ3IC8qIFBERlBs
dWdpblRleHRBbm5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQyQURGMDYxNjM2MkRDNzAwMTk3RTQ3IC8qIFBERlBsdWdpblRleHRBbm5v
dGF0aW9uLm1tICovOyB9OwogCQkyRDJBREYwQjE2MzYyRERCMDAxOTdFNDcgLyogUERGUGx1Z2lu
QW5ub3RhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMkFERjAzMTYzNjI0MzUwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tICov
OyB9OwogCQkyRDJBREYxMDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3Rh
dGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
MkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tICov
OyB9OworCQkyRDM0OTQ2NDFCQ0MyRUMzMDA2NEYwQkUgLyogRGVwcmVjYXRlZFBERlBsdWdpbi5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDAzNTIz
MUJDNzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERGUGx1Z2luLm1tICovOyB9OwogCQkyRDNB
NjVEQTFBN0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0E2NUQ4MUE3QzNBMUYw
MENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuY3BwICovOyB9OwogCQkyRDNBNjVEQjFB
N0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDNBNjVEOTFBN0MzQTFGMDBDQUM2Mzcg
LyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQzQTY1REUxQTdDM0E3RDAwQ0FDNjM3IC8qIFdLTmF2aWdh
dGlvblJlc3BvbnNlUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEM0E2NURDMUE3QzNBN0QwMENBQzYzNyAvKiBXS05hdmlnYXRpb25SZXNwb25z
ZVJlZi5jcHAgKi87IH07CkBAIC0yNzU4LDYgKzI3NTksOCBAQAogCQkyOUQ1NURFRTE2MUJGODc4
MDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGFnZUdy
b3VwUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDU1
REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDU1
REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDM1MjIxQkM3NDE0ODAwREE4NzE2IC8q
IERlcHJlY2F0ZWRQREZQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RGVwcmVjYXRlZFBERlBsdWdpbi5oOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDM1MjMxQkM3NDE0ODAwREE4NzE2IC8q
IERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBEZXByZWNhdGVkUERGUGx1Z2luLm1tOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZQ
bHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVDMTg1N0VBMDUw
MDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1
RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjc3NSw5ICsyNzc4LDEwIEBACiAJCTJEMkFERjAzMTYzNjI0MzUwMDE5
N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gUERGUGx1Z2luQW5ub3RhdGlvbi5tbTsgcGF0aCA9IFBERi9QREZQbHVn
aW5Bbm5vdGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDJBREYwNTE2
MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luVGV4dEFubm90YXRpb24uaDsgcGF0aCA9IFBE
Ri9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDJBREYwNjE2MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5UZXh0QW5u
b3RhdGlvbi5tbTsgcGF0aCA9IFBERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIFBERkxh
eWVyQ29udHJvbGxlckRldGFpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJDb250cm9sbGVy
RGV0YWlscy5oOyBwYXRoID0gUERGL1BERkxheWVyQ29udHJvbGxlckRldGFpbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIERlcHJl
Y2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVwcmVjYXRlZFBE
RkxheWVyQ29udHJvbGxlclNQSS5oOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRy
b2xsZXJTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyQURGMEQxNjM2NEQ4
MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oOyBwYXRoID0gUERG
L1BERlBsdWdpbkNob2ljZUFubm90YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQyQURGMEUxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5DaG9p
Y2VBbm5vdGF0aW9uLm1tOyBwYXRoID0gUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEMzQ5NDYzMUJDQzIzQkYwMDY0RjBCRSAv
KiBQREZMYXllckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJDb250cm9s
bGVyU1BJLmg7IHBhdGggPSBQREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEM0E2NUQ4MUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRp
b25BY3Rpb25SZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tO
YXZpZ2F0aW9uQWN0aW9uUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQz
QTY1RDkxQTdDM0ExRjAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlvbkFjdGlvblJlZi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25BY3Rpb25SZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQzQTY1REMxQTdDM0E3RDAwQ0FDNjM3IC8qIFdLTmF2
aWdhdGlvblJlc3BvbnNlUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdLTmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTc0OTcsNyArNzUwMSwxMCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQkzNTc0QjM3RjE2NjU5MzJDMDA4NTlCQjcgLyogUERGQW5ub3RhdGlvblRleHRX
aWRnZXREZXRhaWxzLmggKi8sCi0JCQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIFBERkxh
eWVyQ29udHJvbGxlckRldGFpbHMuaCAqLywKKwkJCQkyRDJBREYwQzE2MzYzREVDMDAxOTdFNDcg
LyogRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxlclNQSS5oICovLAorCQkJCTJEMDAzNTIyMUJD
NzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERGUGx1Z2luLmggKi8sCisJCQkJMkQwMDM1MjMx
QkM3NDE0ODAwREE4NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gKi8sCisJCQkJMkQzNDk0
NjMxQkNDMjNCRjAwNjRGMEJFIC8qIFBERkxheWVyQ29udHJvbGxlclNQSS5oICovLAogCQkJCTJE
ODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4uaCAqLywKIAkJCQkyRDg3MEQwRTE2
MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLm1tICovLAogCQkJCTJEMkFERjAyMTYzNjI0MzUw
MDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLmggKi8sCkBAIC0xMDE5MSw2ICsxMDE5OCw3
IEBACiAJCQkJQkNCQUFDRUMxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUExNTg0MTkxODkwNDRGNTAwMTc2MTZDIC8qIFdLUHJvY2Vzc1Bv
b2wubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGQjEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQ
cm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQzNDk0NjQxQkNDMkVDMzAw
NjRGMEJFIC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUQw
MUJDQzE5MDVENTQ5MDBDOUM0NUYgLyogV0tSZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTlFMzI5QTE4MjJFMUNDMDBGNUQwNEMgLyogV0tS
ZW1vdGVPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTlFMzI5RTE4MjJGRUREMDBGNUQw
NEMgLyogV0tSZW1vdGVPYmplY3RDb2Rlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAKaW5kZXggMzNiOTEzYTlmYmQ5NjczOGZhNThjZjc1ZDUwYTE1MTI3NGQwYTUy
OC4uNWY3ODk2MzdlYTRiNjg0MGY0NGIyNTRmMjgwMjliMTIyYzljNDU4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uY3BwCkBAIC05OTcsNyArOTk3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6
c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQorYm9vbCBOZXRz
Y2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAppbmRleCA5MzQ3Yjk3OTIxZGJmMDNhYmNj
MDYyYTBmYjFkZTZmYWU3MjdlYzY1Li40ZjkyZDhmODY1N2I2MTgyMGQwODcxNmU5ODQ0Yjk5NTBj
ODNiMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaApAQCAtMjI1LDcgKzIyNSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIG92ZXJyaWRl
OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgp
IG92ZXJyaWRlOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJT
UEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xODA0MmUyMTMyMWQyMDA5N2VkYWRhMWJiOGY4NjViMzgyNTQ2OTUw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKQEAgLTAsMCArMSwxNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUElf
aAorI2RlZmluZSBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKKworI2lmIEVOQUJM
RShQREZLSVRfUExVR0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW1wb3J0
IDxQREZLaXQvUERGS2l0Lmg+CisKK0BjbGFzcyBDUFJlYWRpbmdNb2RlbDsKK0BjbGFzcyBQREZW
aWV3TGF5b3V0OworCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2Jq
ZWN0PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9u
OworLSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5
cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQpcG9p
bnQ7CistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9p
ZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpb3Bl
bldpdGhOYXRpdmVBcHBsaWNhdGlvbjsKKy0gKHZvaWQpc2F2ZVRvUERGOworCistICh2b2lkKXBk
ZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVy
IGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOwor
LSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVy
Q29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsOworLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBk
aWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CistICh2b2lk
KXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpcGRmTGF5ZXJDb250
cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdl
U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CisKK0BlbmQKKworQGludGVyZmFj
ZSBQREZMYXllckNvbnRyb2xsZXIgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIFBERkxh
eWVyQ29udHJvbGxlciAoKQorCitAcHJvcGVydHkgKHJldGFpbikgQ0FMYXllciAqcGFyZW50TGF5
ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHByb3BlcnR5
IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAo
dm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXplOworCistIChQREZEaXNwbGF5TW9kZSlkaXNw
bGF5TW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheU1vZGU6KFBERkRpc3BsYXlNb2RlKW1vZGU7Cist
ICh2b2lkKXNldERpc3BsYXlzUGFnZUJyZWFrczooQk9PTClwYWdlQnJlYWtzOworCistIChDR0Zs
b2F0KWNvbnRlbnRTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFjdG9yOihD
R0Zsb2F0KXNjYWxlRmFjdG9yOworCistIChDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yOworLSAo
dm9pZClzZXREZXZpY2VTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKKworLSAoQ0dT
aXplKWNvbnRlbnRTaXplOworLSAoQ0dTaXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207CisK
Ky0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OworCistICh2
b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9p
bnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRpYXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7CisKKy0gKENH
UG9pbnQpc2Nyb2xsUG9zaXRpb247CistICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihDR1BvaW50
KW5ld1Bvc2l0aW9uOworLSAodm9pZClzY3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0YTsKKwor
LSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpcmlnaHRNb3VzZURv
d246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50
OworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVu
dDsKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNNZW51ICop
bWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CisKKy0gKE5TQXJyYXkgKilmaW5kU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBo
aWdobGlnaHRNYXRjaGVzOihCT09MKXNob3VsZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0gKFBERlNl
bGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lkKXNldEN1cnJlbnRTZWxlY3Rpb246
KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKFBERlNlbGVjdGlvbiAqKXNlYXJjaFNlbGVj
dGlvbjsKKy0gKHZvaWQpc2V0U2VhcmNoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rp
b247CistICh2b2lkKWdvdG9TZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0g
KFBERlNlbGVjdGlvbiAqKWdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50KXBvaW50
OworLSAoTlNBcnJheSAqKXJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERGU2VsZWN0
aW9uICopc2VsZWN0aW9uOworLSAoTlNBcnJheSAqKXJlY3RzRm9yQW5ub3RhdGlvbkluTGF5b3V0
U3BhY2U6KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOworLSAoUERGVmlld0xheW91dCAqKWxh
eW91dDsKKy0gKE5TUmVjdClmcmFtZTsKKworLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOworLSAo
TlNVSW50ZWdlcilsYXN0UGFnZUluZGV4OworLSAoTlNVSW50ZWdlciljdXJyZW50UGFnZUluZGV4
OworLSAodm9pZClnb3RvTmV4dFBhZ2U7CistICh2b2lkKWdvdG9QcmV2aW91c1BhZ2U7CisKKy0g
KHZvaWQpY29weVNlbGVjdGlvbjsKKy0gKHZvaWQpc2VsZWN0QWxsOworCistIChib29sKWtleURv
d246KE5TRXZlbnQgKilldmVudDsKKworLSAodm9pZClzZXRIVURFbmFibGVkOihCT09MKWVuYWJs
ZWQ7CistIChCT09MKWh1ZEVuYWJsZWQ7CisKKy0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0aW9u
OihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQpYWN0aXZhdGVOZXh0QW5ub3Rh
dGlvbjooQk9PTClwcmV2aW91czsKKworLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dv
cmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7CisKKy0gKHZvaWQpc2VhcmNoSW5EaWN0aW9uYXJ5V2l0
aFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOworCisvLyBBY2Nlc3NpYmlsaXR5
CisKKy0gKENQUmVhZGluZ01vZGVsICopcmVhZGluZ01vZGVsOworLSAoaWQpYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnQ7CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcg
KilhdHRyaWJ1dGU7CistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9y
QXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5Um9sZUF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlw
dGlvbkF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRl
OworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNT
dHJpbmcgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlOworLSAoQk9PTClhY2Nl
c3NpYmlsaXR5SXNTZWxlY3RlZFRleHRBdHRyaWJ1dGVTZXR0YWJsZTsKKy0gKE5TVmFsdWUgKilh
Y2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGU7CistIChOU051bWJlciAqKWFj
Y2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2li
aWxpdHlJc051bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNWYWx1ZSAq
KWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGU7CistIChCT09MKWFj
Y2Vzc2liaWxpdHlJc1Zpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxlOworLSAo
TlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVy
OihpZClwYXJhbWV0ZXI7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0
dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworLSAoTlNTdHJpbmcgKilhY2Nlc3Np
YmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsK
Ky0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJh
bWV0ZXI6KGlkKXBhcmFtZXRlcjsKKworQGVuZAorCisjZW5kaWYKKworI2VuZGlmIC8vIERlcHJl
Y2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUElfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jMTcyMDE4MGZmODU0YTc2OTA0YmExZWNhYWZlYzZjOWNmNmIzZGI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVk
UERGUGx1Z2luLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERlcHJlY2F0ZWRQREZQbHVnaW5faAorI2RlZmluZSBEZXByZWNhdGVkUERGUGx1Z2lu
X2gKKworI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKworI2lmIEVOQUJMRShQREZLSVRfUExV
R0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1Z2luLmgi
CisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GaW5kT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpT
Q29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNP
YmplY3RSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVm
OworCitPQkpDX0NMQVNTIE5TQXJyYXk7CitPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsK
K09CSkNfQ0xBU1MgTlNEYXRhOworT0JKQ19DTEFTUyBOU1N0cmluZzsKK09CSkNfQ0xBU1MgUERG
QW5ub3RhdGlvbjsKK09CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVyOworT0JKQ19DTEFTUyBQ
REZTZWxlY3Rpb247CitPQkpDX0NMQVNTIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdDsK
K09CSkNfQ0xBU1MgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZTsKKworbmFtZXNwYWNlIElQ
QyB7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBFbGVtZW50Oworc3RydWN0IFBsdWdpbkluZm87Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOworY2xhc3MgUERGUGx1Z2luUGFzc3dvcmRGaWVs
ZDsKK2NsYXNzIFBsdWdpblZpZXc7CitjbGFzcyBXZWJGcmFtZTsKKworY2xhc3MgUERGUGx1Z2lu
IGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQREZQbHVnaW4+IGNyZWF0ZShXZWJGcmFtZSopOwor
ICAgIH5QREZQbHVnaW4oKTsKKworICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBsdWdp
bkluZm8oKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorCisgICAgdm9pZCBkaWRNdXRhdGVQREZEb2N1bWVudCgpIHsgbV9wZGZEb2N1bWVu
dFdhc011dGF0ZWQgPSB0cnVlOyB9CisKKyAgICB2b2lkIHBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKKyAgICB2b2lkIHNldEFjdGl2ZUFubm90
YXRpb24oUERGQW5ub3RhdGlvbiAqKTsKKyAgICAKKyAgICB1c2luZyBTY3JvbGxhYmxlQXJlYTo6
bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkOworICAgIHZvaWQgbm90aWZ5Q29udGVudFNjYWxl
RmFjdG9yQ2hhbmdlZChDR0Zsb2F0IHNjYWxlRmFjdG9yKTsKKyAgICB2b2lkIG5vdGlmeURpc3Bs
YXlNb2RlQ2hhbmdlZChpbnQpOworCisgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBE
RlNlbGVjdGlvbiAqKTsKKworICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7CisgICAgdm9p
ZCBzYXZlVG9QREYoKTsKKyAgICB2b2lkIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyAg
ICB2b2lkIHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBO
U0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpOworICAgIHZvaWQgc2hvd0RlZmluaXRpb25G
b3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBDR1BvaW50KTsKKyAgICB2
b2lkIHBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKik7CisgICAgdm9pZCBwZXJmb3JtU3BvdGxp
Z2h0U2VhcmNoKE5TU3RyaW5nICopOworCisgICAgdm9pZCBmb2N1c05leHRBbm5vdGF0aW9uKCk7
CisgICAgdm9pZCBmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpOworCisgICAgdm9pZCBhdHRlbXB0
VG9VbmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgY29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOworCisgICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNE
aWN0aW9uYXJ5ICoqKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEZvclNlbGVj
dGlvbkluUm9vdFZpZXcoUERGU2VsZWN0aW9uICopIGNvbnN0OworCisgICAgQ0dGbG9hdCBzY2Fs
ZUZhY3RvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFBERlBsdWdpbihXZWJG
cmFtZSopOworCisgICAgLy8gUGx1Z2luIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgaW5p
dGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29y
ZGluYXRlcykgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50
cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdCgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNUcmFuc3BhcmVudCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9h
dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkg
b3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50
NjRfdCByZXF1ZXN0SUQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZhaWwo
dWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IFN0cmluZyYgcmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtV2lsbFNl
bmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIGludCByZXNwb25zZVN0YXR1cykg
b3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1
aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6VVJMJiByZXNwb25zZVVSTCwgdWludDMy
X3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZU5hbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0
YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0
cmVhbUlEKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRf
dCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6VVJMJiByZXNw
b25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1l
LCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJz
LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hM
b2FkaW5nKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwo
Ym9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgTlBP
YmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpIG92ZXJyaWRlIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0K
KyAgICB2aXJ0dWFsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxl
eFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkgb3ZlcnJpZGUgeyB9CisgICAgdmly
dHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgb3ZlcnJpZGUg
eyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIo
KSBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHN0
b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlIHsgfQorICAg
IHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpIG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGxpdmVSZXNvdXJjZURhdGEo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9ub3Vz
bHlJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2
aXJ0dWFsIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KKyAgICB2aXJ0dWFsIE5TT2Jq
ZWN0ICphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6
OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgV2ViQ29yZTo6RmluZE9w
dGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpIG92ZXJyaWRlOworCisgICAgUERGU2VsZWN0
aW9uICpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEJPT0wgc2VhcmNo
Rm9yd2FyZCwgQk9PTCBjYXNlU2Vuc2l0aXZlLCBCT09MIHdyYXBTZWFyY2gsIFBERlNlbGVjdGlv
biAqaW5pdGlhbFNlbGVjdGlvbiwgQk9PTCBzdGFydEluU2VsZWN0aW9uKTsKKworICAgIGJvb2wg
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgU3RyaW5nIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGV4aXN0aW5nU2VsZWN0
aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25G
cm9tRHJhZ3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOyB9CisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFy
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3NpemU7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVw
IGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmlt
YXRlLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoV2ViQ29yZTo6U2Ny
b2xsYmFyU3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
V2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsYmFyUmVj
dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFBERlBsdWdpbiBmdW5jdGlvbnMuCisgICAg
dm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxi
YXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAg
dm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAg
ICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNl
KCk7CisgICAgdm9pZCBjb21wdXRlUGFnZUJveGVzKCk7CisgICAgdm9pZCBjYWxjdWxhdGVTaXpl
cygpOworICAgIHZvaWQgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKworICAgIE5TRXZlbnQg
Km5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6
OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBjb25zdDsKKyAgICAKKyAgICBib29sIHN1cHBvcnRzRm9ybXMoKTsKKyAgICBib29s
IGlzRnVsbEZyYW1lUGx1Z2luKCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVBhZ2VBbmREZXZp
Y2VTY2FsZUZhY3RvcnMoKTsKKworICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsK
KworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX3BkZkRvY3VtZW50OyB9CisgICAgdm9pZCBzZXRQREZEb2N1bWVudChSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IGRvY3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1bWVudDsgfQorCisgICAg
V2ViQ29yZTo6SW50U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX3BkZkRv
Y3VtZW50U2l6ZTsgfQorICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXplKFdlYkNvcmU6OkludFNp
emUgc2l6ZSkgeyBtX3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KKworICAgIE5TRGF0YSAqbGl2
ZURhdGEoKSBjb25zdDsKKyAgICBOU0RhdGEgKnJhd0RhdGEoKSBjb25zdCB7IHJldHVybiAoTlNE
YXRhICopbV9kYXRhLmdldCgpOyB9CisKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBlbnVtIFVwZGF0ZUN1cnNvck1vZGUgeworICAgICAg
ICBVcGRhdGVJZk5lZWRlZCwKKyAgICAgICAgRm9yY2VVcGRhdGUKKyAgICB9OworCisgICAgZW51
bSBIaXRUZXN0UmVzdWx0IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgVGV4dAorICAgIH07CisK
KyAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiwgVXBkYXRlQ3Vyc29y
TW9kZSA9IFVwZGF0ZUlmTmVlZGVkKTsKKworICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhK
U0NvbnRleHRSZWYpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVk
KCk7CisKKyAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcs
IGJ1dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIg
ZXZlbnQgaGFuZGxpbmcuCisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKKworICAgIFdlYkZyYW1lKiBtX2ZyYW1l
OworCisgICAgYm9vbCBtX2lzUG9zdFNjcmlwdDsKKyAgICBib29sIG1fcGRmRG9jdW1lbnRXYXNN
dXRhdGVkOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKworICAgIFJl
dGFpblB0cjxDQUxheWVyPiBtX2NvbnRhaW5lckxheWVyOworICAgIFJldGFpblB0cjxDQUxheWVy
PiBtX2NvbnRlbnRMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdmVydGljYWxTY3JvbGxiYXJM
YXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxDb3JuZXJMYXllcjsKKyAgICBS
ZXRhaW5QdHI8UERGTGF5ZXJDb250cm9sbGVyPiBtX3BkZkxheWVyQ29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8V0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0PiBtX2FjY2Vzc2liaWxpdHlP
YmplY3Q7CisgICAgCisgICAgUmVmUHRyPFBERlBsdWdpbkFubm90YXRpb24+IG1fYWN0aXZlQW5u
b3RhdGlvbjsKKyAgICBSZWZQdHI8UERGUGx1Z2luUGFzc3dvcmRGaWVsZD4gbV9wYXNzd29yZEZp
ZWxkOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX2Fubm90YXRpb25Db250YWluZXI7
CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNm
b3JtOworICAgIFdlYk1vdXNlRXZlbnQgbV9sYXN0TW91c2VFdmVudDsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsKKworICAgIFN0
cmluZyBtX3RlbXBvcmFyeVBERlVVSUQ7CisKKyAgICBTdHJpbmcgbV9sYXN0Rm91bmRTdHJpbmc7
CisKKyAgICBIaXRUZXN0UmVzdWx0IG1fbGFzdEhpdFRlc3RSZXN1bHQ7CisgICAgCisgICAgUmV0
YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fcGRmTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGU7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKworICAgIFdlYkNvcmU6
OlVSTCBtX3NvdXJjZVVSTDsKKworICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOworICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGE7CisKKyAgICBSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1f
cGFnZUJveGVzOworICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFs
bCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFy
PiBtX2hvcml6b250YWxTY3JvbGxiYXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4g
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJTihQREZQbHVnaW4sIFBERlBsdWdpblR5cGUpCisKKyNl
bmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKKworI2VuZGlmIC8vIERlcHJlY2F0ZWRQREZQ
bHVnaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9EZXByZWNhdGVkUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhMjZlZjE3MmJiYmIy
NzBkMGMwNDRhYjc5YzJhMDQ1OTY4ODkwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4ubW0KQEAgLTAs
MCArMSwyMDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJEZXByZWNhdGVkUERGUGx1Z2luLmgiCisKKyNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikgJiYgVVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKKworI2ltcG9ydCAiQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIlBERkFu
bm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgorI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVy
U1BJLmgiCisjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9uLmgiCisjaW1wb3J0ICJQREZQbHVn
aW5QYXNzd29yZEZpZWxkLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLmgiCisjaW1wb3J0ICJXS1BhZ2VGaW5kTWF0Y2hl
c0NsaWVudC5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJX
ZWJFdmVudC5oIgorI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCisjaW1wb3J0ICJXZWJQ
YWdlLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFz
dGVib2FyZFByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNPYmplY3RSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxQREZLaXQv
UERGS2l0Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2lt
cG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1
cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9ybVN0YXRlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSFRNTEZvcm1FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVVJRC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaD4KKyNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTZXQgb3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUg
YW5ub3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBzY3JvbGxlZCBvdXQgb2Yg
dmlldyBkb24ndCBzaG93CisvLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5LiBXZSBjYW4ndCBhZGQg
YW5ub3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ugb3ZlcmZsb3c6IGhpZGRl
biBvbiB0aGUgYm9keQorLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGluZy4KK3N0YXRpYyBjb25z
dCBjaGFyKiBhbm5vdGF0aW9uU3R5bGUgPQorIiNhbm5vdGF0aW9uQ29udGFpbmVyIHsiCisiICAg
IG92ZXJmbG93OiBoaWRkZW47ICIKKyIgICAgcG9zaXRpb246IGFic29sdXRlOyAiCisiICAgIHBv
aW50ZXItZXZlbnRzOiBub25lOyAiCisiICAgIHRvcDogMDsgIgorIiAgICBsZWZ0OiAwOyAiCisi
ICAgIHJpZ2h0OiAwOyAiCisiICAgIGJvdHRvbTogMDsgIgorIiAgICBkaXNwbGF5OiAtd2Via2l0
LWJveDsgIgorIiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOyAiCisiICAgIC13ZWJraXQt
Ym94LXBhY2s6IGNlbnRlcjsgIgorIn0gIgorIi5hbm5vdGF0aW9uIHsgIgorIiAgICBwb3NpdGlv
bjogYWJzb2x1dGU7ICIKKyIgICAgcG9pbnRlci1ldmVudHM6IGF1dG87ICIKKyJ9ICIKKyJ0ZXh0
YXJlYS5hbm5vdGF0aW9uIHsgIgorIiAgICByZXNpemU6IG5vbmU7ICIKKyJ9ICIKKyJpbnB1dC5h
bm5vdGF0aW9uW3R5cGU9J3Bhc3N3b3JkJ10geyAiCisiICAgIHBvc2l0aW9uOiBzdGF0aWM7ICIK
KyIgICAgd2lkdGg6IDIwMHB4OyAiCisiICAgIG1hcmdpbi10b3A6IDEwMHB4OyAiCisifSAiOwor
CisvLyBJbiBub24tY29udGludW91cyBtb2RlcywgYSBzaW5nbGUgc2Nyb2xsIGV2ZW50IHdpdGgg
YSBtYWduaXR1ZGUgb2YgPj0gMjBweAorLy8gd2lsbCBqdW1wIHRvIHRoZSBuZXh0IG9yIHByZXZp
b3VzIHBhZ2UsIHRvIG1hdGNoIFBERktpdCBiZWhhdmlvci4KK3N0YXRpYyBjb25zdCBpbnQgZGVm
YXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMjA7CisKK0BpbnRlcmZh
Y2UgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IDogTlNPYmplY3QgeworICAgIFBERkxh
eWVyQ29udHJvbGxlciAqX3BkZkxheWVyQ29udHJvbGxlcjsKKyAgICBOU09iamVjdCAqX3BhcmVu
dDsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30KKworQHByb3BlcnR5IChh
c3NpZ24pIFBERkxheWVyQ29udHJvbGxlciAqcGRmTGF5ZXJDb250cm9sbGVyOworQHByb3BlcnR5
IChhc3NpZ24pIE5TT2JqZWN0ICpwYXJlbnQ7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpQ
REZQbHVnaW4qIHBkZlBsdWdpbjsKKworLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46KFdlYktpdDo6
UERGUGx1Z2luICopcGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdp
bkFjY2Vzc2liaWxpdHlPYmplY3QKKworQHN5bnRoZXNpemUgcGRmTGF5ZXJDb250cm9sbGVyPV9w
ZGZMYXllckNvbnRyb2xsZXI7CitAc3ludGhlc2l6ZSBwYXJlbnQ9X3BhcmVudDsKK0BzeW50aGVz
aXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClpbml0V2l0aFBERlBsdWdpbjooV2Vi
S2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkCit7Cisg
ICAgcmV0dXJuIE5POworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5T
U3RyaW5nICopYXR0cmlidXRlCit7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBfcGFyZW50
OworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1
ZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3Np
YmlsaXR5VmFsdWVBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
W19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV07
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVj
dGVkVGV4dFJhbmdlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9s
bGVyIGFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV07CisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVy
c0F0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3Np
YmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmli
dXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlW
aXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pCisg
ICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nl
c3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXSkKKyAgICAgICAg
cmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXTsK
KyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZURl
c2NyaXB0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVy
IGFjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdKQorICAg
ICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNz
aWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoU2l6ZTpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVlbigpLnNpemUoKV07Cisg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkKKyAg
ICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
W05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5sb2Nh
dGlvbigpXTsKKworICAgIHJldHVybiAwOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVy
Cit7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJv
dW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgTlNSZWN0IGJv
dW5kc0luUERGVmlld0Nvb3JkaW5hdGVzID0gW1tfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2li
aWxpdHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdIHJlY3RW
YWx1ZV07CisgICAgICAgIE5TUmVjdCBib3VuZHNJblNjcmVlbkNvb3JkaW5hdGVzID0gX3BkZlBs
dWdpbi0+Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oYm91bmRzSW5QREZWaWV3Q29vcmRpbmF0
ZXMpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpib3VuZHNJblNjcmVl
bkNvb3JkaW5hdGVzXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCisg
ICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5TGluZUZvcklu
ZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07CisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJp
bGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOworICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5n
ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRy
b2xsZXIgYWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlQXR0cmlidXRlRm9yUGFyYW1ldGVyOnBh
cmFtZXRlcl07CisKKyAgICByZXR1cm4gMDsKK30KKworLSAoQ1BSZWFkaW5nTW9kZWwgKilyZWFk
aW5nTW9kZWwKK3sKKyAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgcmVhZGluZ01vZGVs
XTsKK30KKworLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcworeworICAg
IHN0YXRpYyBOU0FycmF5ICphdHRyaWJ1dGVOYW1lcyA9IDA7CisKKyAgICBpZiAoIWF0dHJpYnV0
ZU5hbWVzKSB7CisgICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFtOU0FjY2Vzc2liaWxpdHlWYWx1
ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJp
YnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmli
dXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmli
dXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0
cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLAorICAg
ICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRv
cExldmVsVUlFbGVtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9s
ZURlc2NyaXB0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0
dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGUsCisg
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAorICAgICAgICAgICAg
TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdOworICAgICAgICBbYXR0cmlidXRlTmFt
ZXMgcmV0YWluXTsKKyAgICB9CisKKyAgICByZXR1cm4gYXR0cmlidXRlTmFtZXM7Cit9CisKKy0g
KE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKK3sKKyAgICBzdGF0aWMgTlNBcnJh
eSAqYWN0aW9uTmFtZXMgPSAwOworICAgIAorICAgIGlmICghYWN0aW9uTmFtZXMpCisgICAgICAg
IGFjdGlvbk5hbWVzID0gW1tOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0FjY2Vzc2liaWxpdHlT
aG93TWVudUFjdGlvbl0gcmV0YWluXTsKKyAgICAKKyAgICByZXR1cm4gYWN0aW9uTmFtZXM7Cit9
CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246KE5TU3RyaW5nICopYWN0aW9u
Cit7CisgICAgaWYgKFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNob3dN
ZW51QWN0aW9uXSkKKyAgICAgICAgX3BkZlBsdWdpbi0+c2hvd0NvbnRleHRNZW51QXRQb2ludChJ
bnRSZWN0KEludFBvaW50KCksIF9wZGZQbHVnaW4tPnNpemUoKSkuY2VudGVyKCkpOworfQorCist
IChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmluZyAqKWF0dHJp
YnV0ZQoreworICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5SXNB
dHRyaWJ1dGVTZXR0YWJsZTphdHRyaWJ1dGVdOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQorewor
ICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6dmFs
dWUgZm9yQXR0cmlidXRlOmF0dHJpYnV0ZV07Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCit7CisgICAgcmV0dXJuIFtfcGRmTGF5ZXJD
b250cm9sbGVyIGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdOworfQor
CistIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAoreworICAgIHJldHVybiBzZWxm
OworfQorCistIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKKworQGludGVyZmFjZSBXS1BERlBsdWdpblNjcm9s
bGJhckxheWVyIDogQ0FMYXllciB7CisgICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47
Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OlBERlBsdWdpbiogcGRmUGx1Z2luOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdpblNjcm9sbGJhckxheWVyCisKK0Bz
eW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClpbml0V2l0aFBERlBsdWdp
bjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRmUGx1Z2luID0gcGx1
Z2luOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistIChpZDxDQUFjdGlvbj4pYWN0aW9u
Rm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQp
ZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAoreworICAgIF9wZGZQbHVnaW4tPnBhaW50
Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Cit9CisKK0BlbmQKKworQGludGVy
ZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3Q8UERGTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30K
KworQHByb3BlcnR5IChhc3NpZ24pIFdlYktpdDo6UERGUGx1Z2luKiBwZGZQbHVnaW47CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUKKworQHN5
bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47CisKKy0gKGlkKWluaXRXaXRoUERGUGx1Z2lu
OihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9wZGZQbHVnaW4gPSBwbHVn
aW47CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdXBkYXRlU2Nyb2xsUG9z
aXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsKK30KKworLSAodm9pZCl3
cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVzOihOU0FycmF5
ICopdHlwZXMKK3sKKyAgICBfcGRmUGx1Z2luLT53cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TR2Vu
ZXJhbFBib2FyZCwgaXRlbXMsIHR5cGVzKTsKK30KKworLSAodm9pZClzaG93RGVmaW5pdGlvbkZv
ckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0cmluZyBhdFBvaW50OihD
R1BvaW50KXBvaW50Cit7CisgICAgX3BkZlBsdWdpbi0+c2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1
dGVkU3RyaW5nKHN0cmluZywgcG9pbnQpOworfQorCistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6
KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVdlYlNlYXJjaChz
dHJpbmcpOworfQorCistICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nICop
c3RyaW5nCit7CisgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVNwb3RsaWdodFNlYXJjaChzdHJpbmcp
OworfQorCistICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KK3sKKyAgICBfcGRmUGx1
Z2luLT5vcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7Cit9CisKKy0gKHZvaWQpc2F2ZVRvUERG
Cit7CisgICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJD
b250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY2xpY2tl
ZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybAoreworICAgIF9wZGZQbHVnaW4tPmNsaWNrZWRMaW5r
KHVybCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xs
ZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3RhdGlvbjooUERGQW5u
b3RhdGlvbiAqKWFubm90YXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5zZXRBY3RpdmVBbm5vdGF0
aW9uKGFubm90YXRpb24pOworfQorCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZh
Y3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcgoreworICAgIF9wZGZQbHVnaW4tPm5vdGlmeUNvbnRl
bnRTY2FsZUZhY3RvckNoYW5nZWQoc2NhbGVGYWN0b3IpOworfQorCistICh2b2lkKXBkZkxheWVy
Q29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENo
YW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZQoreworICAgIF9wZGZQbHVnaW4tPm5vdGlmeURpc3Bs
YXlNb2RlQ2hhbmdlZChtb2RlKTsKK30KKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBE
RkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246
KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIF9wZGZQbHVnaW4tPm5vdGlmeVNlbGVj
dGlvbkNoYW5nZWQoc2VsZWN0aW9uKTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFBERlZpZXdM
YXlvdXQKKy0gKE5TUG9pbnQpY29udmVydFBvaW50OihOU1BvaW50KXBvaW50IHRvUGFnZTooUERG
UGFnZSAqKXBhZ2UgZm9yU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CistIChOU1Jl
Y3QpY29udmVydFJlY3Q6KE5TUmVjdClyZWN0IGZyb21QYWdlOihQREZQYWdlICopIHBhZ2UgZm9y
U2NhbGVGYWN0b3I6KENHRmxvYXQpIHNjYWxlRmFjdG9yOworLSAoUERGUGFnZSAqKXBhZ2VOZWFy
ZXN0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgY3VycmVudFBhZ2U6KFBERlBhZ2UgKiljdXJyZW50UGFn
ZTsKK0BlbmQKKworc3RhdGljIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHRNSU1FVHlwZSA9ICJhcHBs
aWNhdGlvbi9wb3N0c2NyaXB0IjsKK2NvbnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVzdElE
ID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0cmVh
bXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCisKK3N0YXRpYyB2b2lkIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJlZSwg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENHUERGQXJyYXlSZWYgbmFt
ZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIsICZu
YW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChu
YW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsgKytp
KSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7CisgICAgICAgICAgICBDR1BE
RkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOworICAgICAgICAgICAg
dmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBDR1BERkFycmF5UmVmIGtpZHM7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRB
cnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6
ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYg
a2lkOworICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZraWQp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1
YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnZXRB
bGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8Q0dQ
REZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCit7CisgICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3Vi
dHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldEFsbFNj
cmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBkZkRvY3VtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgcGRmQ2F0YWxvZyA9
IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAgICBpZiAoIXBkZkNhdGFs
b2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGljdGlvbmFyeSBvZiBhbGwg
ZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgbmFtZXNE
aWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShwZGZDYXRh
bG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVlLgorICAgIENH
UERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFDR1BERkRpY3Rp
b25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQiLCAmamF2YVNj
cmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5hbWVzIGFyZSBh
cmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4KKyAgICBWZWN0
b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJl
ZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVfdCBvYmplY3RDb3VudCA9
IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RDb3Vu
dDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0QWN0aW9uOwor
ICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRfY2FzdDxDR1BERk9i
amVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9uYXJ5LCAmamF2YVNj
cmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBIEphdmFT
Y3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2YVNjcmlwdCIuCisg
ICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlmICghQ0dQREZEaWN0aW9u
YXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBlKSB8fCBzdHJjbXAo
YWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5kZXggbGVuZ3RoOworICAg
ICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERGU3RyaW5nUmVmIHN0cmlu
ZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAgICAgaWYgKENHUERG
RGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyZWFtKSkgewor
ICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIGRhdGEgPSBh
ZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0KSk7CisgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBieXRl
cyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAgICAgICAgICBsZW5ndGggPSBD
RkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoQ0dQREZEaWN0
aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJpbmcpKSB7CisgICAg
ICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJpbmcpOworICAgICAgICAg
ICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0ZTdHJp
bmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVzWzBdID09IDB4RkUgJiYg
Ynl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgOiBrQ0ZTdHJpbmdF
bmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0ID0gYWRv
cHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywg
bGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2NyaXB0KTsK
KyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitSZWY8UERGUGx1Z2luPiBQREZQbHVnaW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUERGUGx1Z2luKGZyYW1lKSk7Cit9CisKK1BE
RlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6IFBsdWdpbihQREZQbHVn
aW5UeXBlKQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1faXNQb3N0U2NyaXB0KGZhbHNl
KQorICAgICwgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5l
ckxheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX2NvbnRlbnRM
YXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9zY3JvbGxDb3Ju
ZXJMYXllcihhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdp
dGhQREZQbHVnaW46dGhpc10pKQorICAgICwgbV9wZGZMYXllckNvbnRyb2xsZXIoYWRvcHROUyhb
W3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fcGRmTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKK3sKKyAgICBtX3BkZkxheWVyQ29u
dHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0
KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRl
bnRMYXllci5nZXQoKTsKKworICAgIGlmIChzdXBwb3J0c0Zvcm1zKCkpIHsKKyAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7Cisg
ICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGRp
dlRhZywgZmFsc2UpOworICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXItPnNldEF0dHJpYnV0
ZShpZEF0dHIsICJhbm5vdGF0aW9uQ29udGFpbmVyIik7CisKKyAgICAgICAgUmVmPEVsZW1lbnQ+
IGFubm90YXRpb25TdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChzdHlsZVRh
ZywgZmFsc2UpOworICAgICAgICBhbm5vdGF0aW9uU3R5bGVFbGVtZW50LT5zZXRUZXh0Q29udGVu
dChhbm5vdGF0aW9uU3R5bGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworCisgICAgICAgIG1fYW5u
b3RhdGlvbkNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoV1RGOjptb3ZlKGFubm90YXRpb25TdHlsZUVs
ZW1lbnQpKTsKKyAgICAgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCktPmFwcGVuZENoaWxk
KCptX2Fubm90YXRpb25Db250YWluZXIpOworICAgIH0KKworICAgIG1fYWNjZXNzaWJpbGl0eU9i
amVjdCA9IGFkb3B0TlMoW1tXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWxsb2NdIGlu
aXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICBtX2FjY2Vzc2liaWxpdHlPYmplY3QuZ2V0KCku
cGRmTGF5ZXJDb250cm9sbGVyID0gbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgbV9h
Y2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpLnBhcmVudCA9IHdlYkZyYW1lKCktPnBhZ2UoKS0+YWNj
ZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworCisgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3Vi
bGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOworICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1
YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOworfQorCitQREZQbHVnaW46On5QREZQ
bHVnaW4oKQoreworfQorCitQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1Z2luSW5mbygpCit7Cisg
ICAgUGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5OYW1l
KCk7CisgICAgaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luID0gdHJ1ZTsKKyAgICBpbmZvLmNsaWVu
dExvYWRQb2xpY3kgPSBQbHVnaW5Mb2FkQ2xpZW50UG9saWN5VW5kZWZpbmVkOworCisgICAgTWlt
ZUNsYXNzSW5mbyBwZGZNaW1lQ2xhc3NJbmZvOworICAgIHBkZk1pbWVDbGFzc0luZm8udHlwZSA9
ICJhcHBsaWNhdGlvbi9wZGYiOworICAgIHBkZk1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3Vt
ZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgcGRmTWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFw
cGVuZCgicGRmIik7CisgICAgaW5mby5taW1lcy5hcHBlbmQocGRmTWltZUNsYXNzSW5mbyk7CisK
KyAgICBNaW1lQ2xhc3NJbmZvIHRleHRQREZNaW1lQ2xhc3NJbmZvOworICAgIHRleHRQREZNaW1l
Q2xhc3NJbmZvLnR5cGUgPSAidGV4dC9wZGYiOworICAgIHRleHRQREZNaW1lQ2xhc3NJbmZvLmRl
c2MgPSBwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHRleHRQREZNaW1lQ2xhc3NJ
bmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKKyAgICBpbmZvLm1pbWVzLmFwcGVuZCh0ZXh0
UERGTWltZUNsYXNzSW5mbyk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIHBvc3RTY3JpcHRNaW1lQ2xh
c3NJbmZvOworICAgIHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvLnR5cGUgPSBwb3N0U2NyaXB0TUlN
RVR5cGU7CisgICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8uZGVzYyA9IHBvc3RTY3JpcHREb2N1
bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvLmV4dGVu
c2lvbnMuYXBwZW5kKCJwcyIpOworICAgIGluZm8ubWltZXMuYXBwZW5kKHBvc3RTY3JpcHRNaW1l
Q2xhc3NJbmZvKTsKKyAgICAKKyAgICByZXR1cm4gaW5mbzsKK30KKwordm9pZCBQREZQbHVnaW46
OnVwZGF0ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpv
bnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1
bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1l
bnRTaXplLndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNj
cm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyKSB7CisgICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKKyAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRTaXplLmhl
aWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0g
KG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAg
ICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJveGVzLmlz
RW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKKworICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVw
cyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53aWR0aCgpIC0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7CisgICAgICAgIElu
dFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygpLT55KCkg
KyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3Np
emUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFj
dChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0
ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5oZWlnaHQoKSAtIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3Np
emUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+
eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJl
Y3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9
CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3
KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFz
U2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFy
OworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgaWYg
KGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVh
KHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9s
bGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNjcm9sbGJh
cigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllciBzZXRO
ZWVkc0Rpc3BsYXldOworICAgIH0KKyAgICAKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBbbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYg
KG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXllci5nZXQo
KS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5
ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1BsdWdpblZpZXcqIFBERlBsdWdpbjo6
cGx1Z2luVmlldygpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihjb250
cm9sbGVyKCkpOworfQorCitjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBsdWdpblZpZXco
KSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29u
dHJvbGxlcigpKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBERlBsdWdpbjo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0
aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdp
dGhQREZQbHVnaW46dGhpc10pOworICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXll
cjptX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xs
YmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICAgICAgW21fY29u
dGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpXTsK
KyAgICB9CisgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKSkgeworICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdl
LT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJzKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIocGFnZS0+dGVzdFRyaWdnZXIoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENo
aWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0
aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAg
ICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRy
OworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAg
ICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KK30KKworSW50UmVjdCBQ
REZQbHVnaW46OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxi
YXItPmxvY2F0aW9uKCkgLSBwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJu
IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250
YWluaW5nVmlldyhwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcmVj
dCk7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVu
dFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXco
KS0+cGx1Z2luRWxlbWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1v
dmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKwor
ICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0g
c2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkgLSBw
bHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhwbHVnaW5W
aWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2lu
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAor
eworICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxl
bWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQubW92ZShwbHVnaW5W
aWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIAorICAgIHJl
dHVybiBwb2ludDsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBy
ZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFBERlBs
dWdpbjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hvcml6b250YWxT
Y3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIEludFJl
Y3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwg
cGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCks
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogUERGUGx1Z2luOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUg
YW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpzY3JvbGxhYmxlQXJl
YUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZVJl
Y3QoKTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIg
OiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNj
cm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30K
KworYm9vbCBQREZQbHVnaW46OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdl
ID0gY29yZUZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUERGUGx1Z2luOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFt
ZS0+Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBh
Z2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Ny
b2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQu
d2lkdGgoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IFBERlBsdWdp
bjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9s
bE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Cit9CisKK0ludFBvaW50
IFBERlBsdWdpbjo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW50UG9pbnQoKTsKK30KKworSW50UG9pbnQgUERGUGx1Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSBjb25zdAoreworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9y
aXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpIDogMDsKKworICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVu
dFNpemUud2lkdGgoKSAtIG1fc2l6ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwg
bV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3NpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8o
KTsKKyAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKK30KKwordm9pZCBQREZQbHVnaW46OnNjcm9s
bGJhclN0eWxlQ2hhbmdlZChTY3JvbGxiYXJTdHlsZSBzdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkK
K3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0
aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9s
bGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3
aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdT
Y3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOwor
ICAgIAorICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoc3R5bGUsIGZv
cmNlVXBkYXRlKTsKKyAgICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywg
c2Nyb2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgorICAgIHVwZGF0
ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46OmFkZEFyY2hpdmVSZXNvdXJjZSgp
Cit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRv
IERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMg
Q2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRl
eHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgTlNEaWN0aW9u
YXJ5KiBoZWFkZXJzID0gQHsgQCJDb250ZW50LURpc3Bvc2l0aW9uIjogKE5TU3RyaW5nICopbV9z
dWdnZXN0ZWRGaWxlbmFtZSwgQCJDb250ZW50LVR5cGUiIDogQCJhcHBsaWNhdGlvbi9wZGYiIH07
CisgICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRU
UFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDptX3NvdXJjZVVSTCBzdGF0dXNDb2RlOjIw
MCBIVFRQVmVyc2lvbjooTlNTdHJpbmcqKWtDRkhUVFBWZXJzaW9uMV8xIGhlYWRlckZpZWxkczpo
ZWFkZXJzXSk7CisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlKHJlc3Bv
bnNlLmdldCgpKTsKKworICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJj
aGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YS5nZXQo
KSksIG1fc291cmNlVVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0cmluZygpLCBz
eW50aGVzaXplZFJlc3BvbnNlKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50
KCktPmxvYWRlcigpLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKK30K
Kworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQ
REZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRmVmlldy0+cmVm
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0
KQoreworICAgIFBERlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFBERlBsdWdpbio+KEpT
T2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitK
U1ZhbHVlUmVmIFBERlBsdWdpbjo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQREZQbHVnaW4qPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0g
cGRmVmlldy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29y
ZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOworCisgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
CisKKyAgICBwYWdlLT5jaHJvbWUoKS5wcmludChjb3JlRnJhbWUpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK0pTT2JqZWN0UmVmIFBERlBsdWdpbjo6bWFr
ZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCit7CisgICAgc3RhdGljIEpTU3RhdGljRnVuY3Rp
b24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQiLCBqc1BE
RkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCB9LAorICAgIH07CisKKyAgICBz
dGF0aWMgSlNDbGFzc0RlZmluaXRpb24ganNQREZEb2NDbGFzc0RlZmluaXRpb24gPSB7CisgICAg
ICAgIDAsCisgICAgICAgIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwKKyAgICAgICAgIkRvYyIsCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICBqc1BERkRvY0luaXRpYWxpemUsIGpzUERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2ND
bGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9jQ2xhc3NEZWZpbml0aW9uKTsKKworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY3R4LCBqc1BERkRvY0NsYXNzLCB0aGlzKTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBjb252ZXJ0UG9zdFNjcmlwdERhdGFUb1BERihS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwb3N0U2NyaXB0RGF0YSkKK3sKKyAgICAvLyBDb252ZXJ0IFBv
c3RTY3JpcHQgdG8gUERGIHVzaW5nIHRoZSBRdWFydHogMkQgQVBJLgorICAgIC8vIGh0dHA6Ly9k
ZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vR3JhcGhpY3NJbWFnaW5nL0NvbmNlcHR1
YWwvZHJhd2luZ3dpdGhxdWFydHoyZC9kcV9wc19jb252ZXJ0L2NoYXB0ZXJfMTZfc2VjdGlvbl8x
Lmh0bWwKKworICAgIENHUFNDb252ZXJ0ZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwIH07CisgICAgUmV0YWluUHRyPENHUFNDb252ZXJ0ZXJSZWY+IGNvbnZl
cnRlciA9IGFkb3B0Q0YoQ0dQU0NvbnZlcnRlckNyZWF0ZSgwLCAmY2FsbGJhY2tzLCAwKSk7Cisg
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKHBvc3RTY3JpcHREYXRhLmdldCgpKSk7CisgICAgUmV0
YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IHBkZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11
dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIFJldGFpblB0cjxDR0RhdGFDb25z
dW1lclJlZj4gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlV2l0aENGRGF0
YShwZGZEYXRhLmdldCgpKSk7CisgICAgCisgICAgQ0dQU0NvbnZlcnRlckNvbnZlcnQoY29udmVy
dGVyLmdldCgpLCBwcm92aWRlci5nZXQoKSwgY29uc3VtZXIuZ2V0KCksIDApOworICAgIAorICAg
IHJldHVybiBwZGZEYXRhOworfQorCit2b2lkIFBERlBsdWdpbjo6Y29udmVydFBvc3RTY3JpcHRE
YXRhSWZOZWVkZWQoKQoreworICAgIGlmICghbV9pc1Bvc3RTY3JpcHQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBTdHJpbmcobV9zdWdnZXN0ZWRGaWxlbmFt
ZSArICIucGRmIik7CisgICAgbV9kYXRhID0gY29udmVydFBvc3RTY3JpcHREYXRhVG9QREYobV9k
YXRhKTsKK30KKwordm9pZCBQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAg
YWRkQXJjaGl2ZVJlc291cmNlKCk7CisgICAgCisgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBk
b2N1bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0
YTpyYXdEYXRhKCldKTsKKworICAgIHNldFBERkRvY3VtZW50KGRvY3VtZW50KTsKKworICAgIHVw
ZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKworICAgIFttX3BkZkxheWVyQ29udHJv
bGxlciBzZXRGcmFtZVNpemU6c2l6ZSgpXTsKKyAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQo
KS5kb2N1bWVudCA9IGRvY3VtZW50LmdldCgpOworCisgICAgaWYgKGhhbmRsZXNQYWdlU2NhbGVG
YWN0b3IoKSkKKyAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3IoW21fcGRm
TGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0sIEludFBvaW50KCkpOworCisgICAg
bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KFttX3BkZkxheWVyQ29udHJvbGxl
ciBzY3JvbGxQb3NpdGlvbl0pKTsKKworICAgIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdXBkYXRl
U2Nyb2xsYmFycygpOworCisgICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKworICAgIGlm
IChbZG9jdW1lbnQgaXNMb2NrZWRdKQorICAgICAgICBjcmVhdGVQYXNzd29yZEVudHJ5Rm9ybSgp
OworfQorCit2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90
IHN0cmVhbUlELCBjb25zdCBVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRS
ZXF1ZXN0SUQpOworCisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
OworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCBwb3N0U2NyaXB0TUlNRVR5
cGUpKQorICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0
ZXMsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQg
PT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIG1f
ZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFB
cHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihi
eXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKHVpbnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0
cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIGNvbnZlcnRQb3N0U2NyaXB0
RGF0YUlmTmVlZGVkKCk7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxl
ZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVu
dFJlcXVlc3RJRCk7CisKKyAgICBtX2RhdGEuY2xlYXIoKTsKK30KKwordm9pZCBQREZQbHVnaW46
Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1
aW50MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZp
bGVuYW1lOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCBwb3N0U2NyaXB0
TUlNRVR5cGUpKQorICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50
IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgbV9kYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0
YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsK
K30KKwordm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQorewor
ICAgIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7CisgICAgcGRmRG9jdW1lbnREaWRM
b2FkKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCit7
CisgICAgbV9kYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpydW5TY3JpcHRzSW5Q
REZEb2N1bWVudCgpCit7CisgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IHNjcmlw
dHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQgZG9jdW1l
bnRSZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6
ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmpl
Y3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKKyAgICAgICAg
SlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOworICAgICAg
ICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisgICAgCisgICAgSlNHbG9iYWxDb250
ZXh0UmVsZWFzZShjdHgpOworfQorCit2b2lkIFBERlBsdWdpbjo6Y3JlYXRlUGFzc3dvcmRFbnRy
eUZvcm0oKQoreworICAgIG1fcGFzc3dvcmRGaWVsZCA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQ6
OmNyZWF0ZShtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7CisgICAgbV9wYXNzd29y
ZEZpZWxkLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgpKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQorewor
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6cGFz
c3dvcmRdOworCisgICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKKyAgICAgICAg
bV9wYXNzd29yZEZpZWxkID0gbnVsbHB0cjsKKworICAgICAgICBjYWxjdWxhdGVTaXplcygpOwor
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgfQorfQorCit2b2lkIFBERlBsdWdpbjo6
dXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpCit7CisgICAgZG91YmxlIG5ld1NjYWxl
RmFjdG9yID0gY29udHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7CisgICAgaWYgKCFo
YW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgIG5ld1NjYWxlRmFjdG9yICo9IHdlYkZy
YW1lKCktPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICBpZiAobmV3U2NhbGVGYWN0
b3IgIT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGRldmljZVNjYWxlRmFjdG9yXSkKKyAgICAgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHNldERldmljZVNjYWxlRmFjdG9yOm5ld1NjYWxlRmFjdG9y
XTsKK30KKwordm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0
KQoreworICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmNvbXB1dGVQYWdlQm94ZXMoKQoreworICAgIHNpemVfdCBwYWdlQ291bnQgPSBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0p
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAg
Q0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVu
dCBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOworCisgICAg
ICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BC
b3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAgICAgICAgYm94ID0g
Q0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7CisgICAgICAgIG1f
cGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KK30KKwordm9pZCBQREZQbHVn
aW46OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICBpZiAoW3BkZkRvY3VtZW50KCkgaXNMb2NrZWRd
KSB7CisgICAgICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKDAsIDApKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjb21lIHN0cmFpZ2h0
IGZyb20gUERGS2l0LgorICAgIGNvbXB1dGVQYWdlQm94ZXMoKTsKKworICAgIHNldFBERkRvY3Vt
ZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2l6ZVJlc3BlY3Rp
bmdab29tXSkpOworfQorCitib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7Cisg
ICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVycy51
cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9jdW1lbnRS
ZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhUVFBI
ZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNlKTsKKworICAgIGNvbnRyb2xsZXIo
KS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBE
RlBsdWdpbjo6ZGVzdHJveSgpCit7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVs
ZWdhdGUgPSAwOworCisgICAgaWYgKHdlYkZyYW1lKCkpIHsKKyAgICAgICAgaWYgKEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXcoKSkKKyAgICAgICAg
ICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgfQorCisgICAg
bV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKKyAgICBtX2Fubm90YXRpb25Db250YWluZXIg
PSBudWxscHRyOworCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAKKyAgICBbbV9z
Y3JvbGxDb3JuZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKwordm9pZCBQREZQbHVnaW46OnVwZGF0ZUNv
bnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKK3sKKyAgICBBU1NF
UlQoZ3JhcGhpY3NDb250ZXh0LnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpOworCisgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNj
cm9sbENvcm5lclJlY3QoKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKKyAgICAKKyAgICBp
ZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3JuZXJMYXllcikgeworICAgICAgICBJbnRSZWN0IHNjcm9s
bENvcm5lclJlY3QgPSB0aGlzLT5zY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAgIGdyYXBoaWNz
Q29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lclJlY3QueCgpLCAtc2Nyb2xsQ29ybmVyUmVj
dC55KCkpOworICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5l
cihudWxscHRyLCBncmFwaGljc0NvbnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbnVsbHB0cjsK
KyAgICAKKyAgICBpZiAobGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQorICAgICAg
ICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGVsc2UgaWYgKGxheWVyID09
IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorICAgICAgICBzY3JvbGxiYXIgPSBob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbGJhci0+eCgpLCAtc2Ny
b2xsYmFyLT55KCkpOworICAgIHNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpKTsKK30KKworUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUERGUGx1
Z2luOjpzbmFwc2hvdCgpCit7CisgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgZmxvYXQgY29udGVudHNTY2FsZUZhY3RvciA9IGNvbnRyb2xs
ZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOworICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZSA9IHNpemUoKTsKKyAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNvbnRlbnRzU2NhbGVGYWN0
b3IpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpT
dXBwb3J0c0FscGhhKTsKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpOworCisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGNvbnRlbnRzU2NhbGVG
YWN0b3IsIC1jb250ZW50c1NjYWxlRmFjdG9yKSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1t
X3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgKyBtX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc25hcHNo
b3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCldOworCisgICAgcmV0dXJuIGJp
dG1hcDsKK30KKworUGxhdGZvcm1MYXllciogUERGUGx1Z2luOjpwbHVnaW5MYXllcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7Cit9CisKK0ludFBvaW50IFBERlBsdWdp
bjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBv
aW50LnkoKSk7Cit9CisKK0ludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlld1Rv
UGx1Z2luKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yb290
Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKK30KKworSW50UG9pbnQgUERG
UGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQu
eCgpLCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOworICAgIHJldHVybiBtX3Jvb3RWaWV3
VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGlu
YXRlcyk7Cit9CisKK0Zsb2F0UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2Ny
ZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1l
VmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRQb2ludCBvcmln
aW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSByZWN0Lnko
KSAtIHJlY3QuaGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0
UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzLCByZWN0LnNpemUoKSkpOworCisgICAgcmV0
dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30KKworSW50UmVjdCBQREZQbHVnaW46OmJvdW5kc09uU2Ny
ZWVuKCkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNv
cmVGcmFtZSgpLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBzaXplKCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0g
bV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KGJvdW5kcyk7Cisg
ICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30KKwordm9pZCBQREZQbHVnaW46Omdlb21ldHJ5
RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCit7CisgICAgaWYg
KHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkg
PT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9yb290Vmlld1RvUGx1Z2lu
VHJhbnNmb3JtID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTpwbHVnaW5TaXplXTsKKworICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOworICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2Fs
ZSgxLCAtMSwgMSk7CisgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFu
c2Zvcm0sIDAsIC1wbHVnaW5TaXplLmhlaWdodCgpLCAwKTsKKyAgICAKKyAgICBpZiAoaGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpKSB7CisgICAgICAgIENHRmxvYXQgbWFnbmlmaWNhdGlvbiA9IHBs
dWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29u
dGVudFNjYWxlRmFjdG9yXTsKKworICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBtX2xhc3RN
b3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcywgd2Ugc2hvdWxkIHVzZSB0aGUgem9vbSBv
cmlnaW4gZnJvbSBQbHVnaW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgIGlmICht
YWduaWZpY2F0aW9uKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1hZ25pZnlX
aXRoTWFnbmlmaWNhdGlvbjptYWduaWZpY2F0aW9uIGF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5U
b1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpIGltbWVkaWF0
ZWx5Ok5PXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYW5kbGUgcGFn
ZSBzY2FsZSBvdXJzZWx2ZXMsIHdlIG5lZWQgdG8gcmVzcGVjdCBvdXIgcGFyZW50IHBhZ2Uncwor
ICAgICAgICAvLyBzY2FsZSwgd2hpY2ggbWF5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgdXBkYXRl
UGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOworICAgIH0gCisKKyAgICBjYWxjdWxhdGVTaXpl
cygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGlmIChtX2FjdGl2ZUFubm90YXRp
b24pCisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKKworICAg
IFttX2NvbnRlbnRMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0cmFuc2Zvcm1dOworICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpmcmFtZURpZEZpbmlz
aExvYWRpbmcodWludDY0X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QsIGJvb2wpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRFdmFsdWF0ZUphdmFTY3Jp
cHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworICAgIAorc3RhdGljIE5TVUludGVnZXIgbW9kaWZpZXJGbGFnc0Zyb21XZWJF
dmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJuIChldmVudC5zaGlmdEtl
eSgpID8gTlNTaGlmdEtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5jb250cm9sS2V5KCkg
PyBOU0NvbnRyb2xLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQuYWx0S2V5KCkgPyBOU0Fs
dGVybmF0ZUtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5tZXRhS2V5KCkgPyBOU0NvbW1h
bmRLZXlNYXNrIDogMCk7Cit9CisgICAgCitzdGF0aWMgYm9vbCBnZXRFdmVudFR5cGVGcm9tV2Vi
RXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYgZXZlbnRUeXBlKQorewor
ICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoK
KyAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlEb3duOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpLZXlVcDoKKyAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlVcDsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgorICAgICAg
ICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9u
KCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAg
ICAgZXZlbnRUeXBlID0gTlNMZWZ0TW91c2VEb3duOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICBl
dmVudFR5cGUgPSBOU1JpZ2h0TW91c2VEb3duOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNMZWZ0TW91
c2VVcDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZl
bnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNSaWdodE1vdXNlVXA7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToK
KyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQp
LmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAg
ICAgICAgICAgIGV2ZW50VHlwZSA9IE5TTGVmdE1vdXNlRHJhZ2dlZDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAg
ICAgICAgICAgZXZlbnRUeXBlID0gTlNSaWdodE1vdXNlRHJhZ2dlZDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAg
ICAgICAgZXZlbnRUeXBlID0gTlNNb3VzZU1vdmVkOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorICAgIAorTlNF
dmVudCAqUERGUGx1Z2luOjpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JiBldmVudCkKK3sKKyAgICBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRl
cyA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5wb3NpdGlvbigpKTsKKworICAg
IEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMoY29udmVydEZyb21QbHVnaW5U
b1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKTsKKworICAg
IE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKKworICAgIGlmICghZ2V0RXZlbnRUeXBlRnJvbVdlYkV2
ZW50KGV2ZW50LCBldmVudFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5TVUludGVn
ZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZlbnQpOworCisg
ICAgcmV0dXJuIFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246
cG9zaXRpb25JblBERlZpZXdDb29yZGluYXRlcyBtb2RpZmllckZsYWdzOm1vZGlmaWVyRmxhZ3Mg
dGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4dDpuaWwgZXZlbnROdW1iZXI6MCBjbGlj
a0NvdW50OmV2ZW50LmNsaWNrQ291bnQoKSBwcmVzc3VyZTowXTsKK30KKwordm9pZCBQREZQbHVn
aW46OnVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCwgVXBkYXRlQ3Vyc29y
TW9kZSBtb2RlKQoreworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IE5vbmU7CisK
KyAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvblVuZGVyTW91c2UgPSBbbV9wZGZMYXllckNvbnRy
b2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5Ub1BERlZp
ZXcoZXZlbnQucG9zaXRpb24oKSldOworICAgIGlmIChzZWxlY3Rpb25VbmRlck1vdXNlICYmIFtb
c2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmddIGxlbmd0aF0pCisgICAgICAgIGhpdFRlc3RSZXN1
bHQgPSBUZXh0OworCisgICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9sYXN0SGl0VGVzdFJlc3Vs
dCAmJiBtb2RlID09IFVwZGF0ZUlmTmVlZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJG
cmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q3Vyc29yKGhp
dFRlc3RSZXN1bHQgPT0gVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiBwb2ludGVyQ3Vyc29yKCkpKTsK
KyAgICBtX2xhc3RIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKK30KKworYm9vbCBQREZQ
bHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7Cisg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7Cisg
ICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbiA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihl
dmVudC5wb3NpdGlvbigpKTsKKworICAgIG1fbGFzdE1vdXNlRXZlbnQgPSBldmVudDsKKworICAg
IFJlZlB0cjxTY3JvbGxiYXI+IHRhcmdldFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbjsKKworICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhckZy
YW1lKG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7CisgICAgICAgIGlmICh2
ZXJ0aWNhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgICAgICAg
ICAgdGFyZ2V0U2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgaWYgKHZl
cnRpY2FsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2lu
Q29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9z
aXRpb24gPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIH0KKworICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXJG
cmFtZShtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7CisgICAgICAgIGlm
IChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAg
ICAgICAgICB0YXJnZXRTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAg
IGlmIChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlv
bkluUGx1Z2luQ29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFz
dE1vdXNlUG9zaXRpb24gPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgaWYg
KG1fc2Nyb2xsQ29ybmVyTGF5ZXIgJiYgSW50UmVjdChtX3Njcm9sbENvcm5lckxheWVyLmdldCgp
LmZyYW1lKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gUmlnaHQtY2xpY2tzIGFuZCBDb250cm9sLWNsaWNrcyBhbHdheXMgY2FsbCBo
YW5kbGVDb250ZXh0TWVudUV2ZW50IGFzIHdlbGwuCisgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09
IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uIHx8IChldmVudC5idXR0b24oKSA9PSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uICYmIGV2ZW50LmNvbnRyb2xLZXkoKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgTlNFdmVudCAqbnNFdmVudCA9IG5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50
KGV2ZW50KTsKKworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VNb3ZlOgorICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAg
ICB1cGRhdGVDdXJzb3IoZXZlbnQpOworCisgICAgICAgIGlmICh0YXJnZXRTY3JvbGxiYXIpIHsK
KyAgICAgICAgICAgIGlmICghdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb24pIHsK
KyAgICAgICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRW50ZXJlZCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRhcmdldFNjcm9sbGJhci0+bW91c2VNb3ZlZChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGFyZ2V0U2Nyb2xsYmFyICYmIHRhcmdldFNjcm9sbGJhckZvckxhc3RN
b3VzZVBvc2l0aW9uKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9z
aXRpb24tPm1vdXNlRXhpdGVkKCk7CisKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkg
eworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VEcmFnZ2VkOm5zRXZlbnRdOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246Cisg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAg
ICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlTW92ZWQ6bnNFdmVudF07CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93
bjoKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1v
dXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRG93bihwbGF0Zm9y
bUV2ZW50KTsKKworICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpu
c0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHJp
Z2h0TW91c2VEb3duOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok5vQnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24o
KSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAg
ICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3Jv
bGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisKKyAgICAgICAgICAgIFttX3BkZkxheWVy
Q29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgIGNhc2UgV2Vi
TW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5v
QnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFBERlBsdWdpbjo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
ZW50KQoreworICAgIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgdXBkYXRlQ3Vyc29y
KGV2ZW50LCBGb3JjZVVwZGF0ZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBERlBs
dWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAg
IG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCiti
b29sIFBERlBsdWdpbjo6c2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUo
KS0+dmlldygpOworICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBmcmFtZVZpZXctPmNvbnRl
bnRzVG9Sb290Vmlldyhwb2ludCk7CisgICAgV2ViTW91c2VFdmVudCBldmVudChXZWJFdmVudDo6
TW91c2VEb3duLCBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiwgY29udGVudHNQb2ludCwgY29u
dGVudHNQb2ludCwgMCwgMCwgMCwgMSwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4o
MCksIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCBXZWJDb3JlOjpGb3JjZUF0Q2xpY2sp
OworICAgIHJldHVybiBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKK30KKworYm9vbCBQ
REZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZl
bnQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUo
KS0+dmlldygpOworICAgIEludFBvaW50IHBvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvU2Ny
ZWVuKEludFJlY3QoZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvc2l0aW9uKCkp
LCBJbnRTaXplKCkpKS5sb2NhdGlvbigpOworICAgIAorICAgIGlmIChOU01lbnUgKm5zTWVudSA9
IFttX3BkZkxheWVyQ29udHJvbGxlciBtZW51Rm9yRXZlbnQ6bnNFdmVudEZvcldlYk1vdXNlRXZl
bnQoZXZlbnQpXSkgeworICAgICAgICBXS1BvcHVwQ29udGV4dE1lbnUobnNNZW51LCBwb2ludCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGV2ZW50KQoreworICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKKworICAgIGlmICgh
Z2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdz
RnJvbVdlYkV2ZW50KGV2ZW50KTsKKyAgICAKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBrZXlFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2NhdGlvbjpOU1plcm9Qb2ludCBtb2Rp
ZmllckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4
dDowIGNoYXJhY3RlcnM6ZXZlbnQudGV4dCgpIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpl
dmVudC51bm1vZGlmaWVkVGV4dCgpIGlzQVJlcGVhdDpldmVudC5pc0F1dG9SZXBlYXQoKSBrZXlD
b2RlOmV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCldOworICAgIAorICAgIHN3aXRjaCAoZXZl
bnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKKyAgICAgICAgcmV0dXJu
IFttX3BkZkxheWVyQ29udHJvbGxlciBrZXlEb3duOmZha2VFdmVudF07CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitib29sIFBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBpZiAoY29tbWFu
ZE5hbWUgPT0gImNvcHkiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29weVNlbGVj
dGlvbl07CisgICAgZWxzZSBpZiAoY29tbWFuZE5hbWUgPT0gInNlbGVjdEFsbCIpCisgICAgICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBzZWxlY3RBbGxdOworICAgIGVsc2UgaWYgKGNvbW1hbmRO
YW1lID09ICJ0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24iKSB7CisgICAgICAgIE5TU3RyaW5n
ICpzdHJpbmcgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl0uc3RyaW5n
OworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAgIHdyaXRlSXRlbXNUb1Bh
c3RlYm9hcmQoTlNGaW5kUGJvYXJkLCBAWyBbc3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXSBdLCBAWyBOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nIF0pOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBERlBsdWdpbjo6aXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICBpZiAoY29tbWFuZE5h
bWUgPT0gImNvcHkiIHx8IGNvbW1hbmROYW1lID09ICJ0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rp
b24iKQorICAgICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRTZWxlY3Rp
b25dOworCisgICAgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwiKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQREZQbHVnaW46OnNldFNj
cm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsT2Zmc2V0
ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKworICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2Nyb2xsUG9zaXRpb246b2Zm
c2V0XTsKKworICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCisgICAgICAgIG1fYWN0aXZlQW5u
b3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoc2Nyb2xsYmFyID09
IGhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNE
aXNwbGF5XTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgc2V0TmVl
ZHNEaXNwbGF5XTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzRnVsbEZyYW1lUGx1Z2luKCkgY29u
c3QKK3sKKyAgICAvLyA8b2JqZWN0PiBvciA8ZW1iZWQ+IHBsdWdpbnMgd2lsbCBhcHBlYXIgdG8g
YmUgaW4gdGhlaXIgcGFyZW50IGZyYW1lLCBzbyB3ZSBoYXZlIHRvCisgICAgLy8gY2hlY2sgd2hl
dGhlciBvdXIgZnJhbWUncyB3aWRnZXQgaXMgZXhhY3RseSBvdXIgUGx1Z2luVmlldy4KKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxQ
bHVnaW5Eb2N1bWVudCo+KGRvY3VtZW50KS0+cGx1Z2luV2lkZ2V0KCkgPT0gcGx1Z2luVmlldygp
OworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHdlYkZyYW1lKCktPmlzTWFpbkZyYW1lKCkgJiYgaXNGdWxsRnJhbWVQbHVn
aW4oKTsKK30KKwordm9pZCBQREZQbHVnaW46OmNsaWNrZWRMaW5rKE5TVVJMICp1cmwpCit7Cisg
ICAgVVJMIGNvcmVVUkwgPSB1cmw7CisgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGNvcmVV
UkwpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5j
b3JlRnJhbWUoKTsKKworICAgIFJlZlB0cjxFdmVudD4gY29yZUV2ZW50OworICAgIGlmIChtX2xh
c3RNb3VzZUV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6Tm9UeXBlKQorICAgICAgICBjb3JlRXZl
bnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZyYW1lLT5k
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybShtX2xhc3RNb3VzZUV2ZW50KSwgMCwg
MCk7CisKKyAgICBmcmFtZS0+bG9hZGVyKCkudXJsU2VsZWN0ZWQoY29yZVVSTCwgZW1wdHlTdHJp
bmcoKSwgY29yZUV2ZW50LmdldCgpLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExp
c3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6
U2hvdWxkQWxsb3cpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2V0QWN0aXZlQW5ub3RhdGlvbihQ
REZBbm5vdGF0aW9uICphbm5vdGF0aW9uKQoreworICAgIGlmICghc3VwcG9ydHNGb3JtcygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAgICBt
X2FjdGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworCisgICAgaWYgKGFubm90YXRpb24pIHsKKyAg
ICAgICAgaWYgKFthbm5vdGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvblRleHRXaWRn
ZXRDbGFzcygpXSAmJiBzdGF0aWNfY2FzdDxQREZBbm5vdGF0aW9uVGV4dFdpZGdldCAqPihhbm5v
dGF0aW9uKS5pc1JlYWRPbmx5KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hY3Rp
dmVBbm5vdGF0aW9uID0gUERGUGx1Z2luQW5ub3RhdGlvbjo6Y3JlYXRlKGFubm90YXRpb24sIG1f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsKKyAgICAgICAgbV9hY3RpdmVBbm5vdGF0
aW9uLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKK30KKworYm9vbCBQREZQbHVnaW46
OnN1cHBvcnRzRm9ybXMoKQoreworICAgIC8vIEZJWE1FOiBXZSBzdXBwb3J0IGZvcm1zIGZvciBm
dWxsLW1haW4tZnJhbWUgYW5kIDxpZnJhbWU+IFBERnMsIGJ1dCBub3QgPGVtYmVkPiBvciA8b2Jq
ZWN0PiwgYmVjYXVzZSB0aG9zZSBjYXNlcyBkbyBub3QgaGF2ZSB0aGVpciBvd24gRG9jdW1lbnQg
aW50byB3aGljaCB0byBpbmplY3QgZm9ybSBlbGVtZW50cy4KKyAgICByZXR1cm4gaXNGdWxsRnJh
bWVQbHVnaW4oKTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlmeUNvbnRlbnRTY2FsZUZhY3Rv
ckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3RvcikKK3sKKyAgICBpZiAoaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpKQorICAgICAgICBwbHVnaW5WaWV3KCktPnNldFBhZ2VTY2FsZUZhY3RvcihzY2Fs
ZUZhY3RvciwgSW50UG9pbnQoKSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0
ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlmeURpc3BsYXlNb2RlQ2hh
bmdlZChpbnQpCit7CisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJz
KCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBERlBsdWdpbjo6bGl2ZVJlc291cmNlRGF0
YSgpIGNvbnN0Cit7CisgICAgTlNEYXRhICpwZGZEYXRhID0gbGl2ZURhdGEoKTsKKworICAgIGlm
ICghcGRmRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjp3cmFwTlNEYXRhKHBkZkRhdGEpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2F2ZVRv
UERGKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlmeSB0aGUgdXNl
ciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZpbmlzaGVkIGxv
YWRpbmcuCisgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRo
YXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgIGlmICghcGRmRG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsKKyAgICB3ZWJGcmFtZSgp
LT5wYWdlKCktPnNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihtX3N1Z2dlc3RlZEZpbGVu
YW1lLCB3ZWJGcmFtZSgpLT51cmwoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAq
PihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKK30KKwordm9pZCBQREZQbHVnaW46Om9w
ZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKQoreworICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlE
KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgbm90aWZ5IHRoZSB1c2Vy
IHRoYXQgdGhleSBjYW4ndCBzYXZlIGJlZm9yZSB0aGUgZG9jdW1lbnQgaXMgZmluaXNoZWQgbG9h
ZGluZy4KKyAgICAgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0
IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgICAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsK
KworICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBXZWJDb3JlOjpjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCk7CisgICAgICAgIEFTU0VSVChtX3RlbXBvcmFyeVBERlVVSUQpOworCisgICAg
ICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvbihtX3N1Z2dlc3RlZEZpbGVuYW1lLCB3ZWJGcmFtZSgpLT51cmwo
KSwgc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihbZGF0YSBieXRlc10pLCBbZGF0
YSBsZW5ndGhdLCBtX3RlbXBvcmFyeVBERlVVSUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok9w
ZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fdGVtcG9yYXJ5
UERGVVVJRCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChO
U1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXM7CisKKyAgICBmb3IgKE5TU3Ry
aW5nICp0eXBlIGluIHR5cGVzKQorICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUp
OworCisgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7CisgICAgYXV0byYgd2ViUHJvY2VzcyA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFz
dGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAorICAgICAgICBN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5l
d0NoYW5nZUNvdW50KSwgMCk7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0g
aXRlbXMuY291bnQ7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TU3RyaW5nICp0eXBlID0g
W3R5cGVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtpdGVtcyBv
YmplY3RBdEluZGV4OmldOworCisgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgZGF0YSBm
b3IgYW55IGl0ZW1zIHRvIGJlIGVtcHR5LCBidXQgYXJlbid0IGNvbXBsZXRlbHkgc3VyZS4KKyAg
ICAgICAgLy8gQXZvaWQgY3Jhc2hpbmcgaW4gdGhlIFNoYXJlZE1lbW9yeSBjb25zdHJ1Y3RvciBp
biByZWxlYXNlIGJ1aWxkcyBpZiB3ZSdyZSB3cm9uZy4KKyAgICAgICAgQVNTRVJUKGRhdGEubGVu
Z3RoKTsKKyAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSB8
fCBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKKyAgICAg
ICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nID0gYWRvcHROUyhbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ10pOworICAgICAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3Ry
aW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6
OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEo
ZGF0YSk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAg
ICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFs
bG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShzaGFyZWRNZW1vcnkt
PmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIHNo
YXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSk7CisgICAgICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9h
cmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+c2l6
ZSgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZv
clR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgUERGUGx1Z2luOjpzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIENHUG9pbnQgcG9pbnQpCit7CisgICAgRGljdGlvbmFyeVBv
cHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3Jp
Z2luID0gY29udmVydEZyb21QREZWaWV3VG9Sb290VmlldyhJbnRQb2ludChwb2ludCkpOworICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHN0cmluZzsKKworICAgIHdl
YkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvKSk7Cit9CisKK3Vuc2lnbmVkIFBE
RlBsdWdpbjo6Y291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgV2ViQ29yZTo6
RmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBpZiAo
IXRhcmdldC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgbnNPcHRpb25z
ID0gKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkgPyBOU0Nhc2VJbnNlbnNp
dGl2ZVNlYXJjaCA6IDA7CisKKyAgICByZXR1cm4gW1twZGZEb2N1bWVudCgpIGZpbmRTdHJpbmc6
dGFyZ2V0IHdpdGhPcHRpb25zOm5zT3B0aW9uc10gY291bnRdOworfQorCitQREZTZWxlY3Rpb24g
KlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBCT09M
IHNlYXJjaEZvcndhcmQsIEJPT0wgY2FzZVNlbnNpdGl2ZSwgQk9PTCB3cmFwU2VhcmNoLCBQREZT
ZWxlY3Rpb24gKmluaXRpYWxTZWxlY3Rpb24sIEJPT0wgc3RhcnRJblNlbGVjdGlvbikKK3sKKyAg
ICBpZiAoIXRhcmdldC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TU3Ry
aW5nQ29tcGFyZU9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgaWYgKCFzZWFyY2hGb3J3YXJkKQor
ICAgICAgICBvcHRpb25zIHw9IE5TQmFja3dhcmRzU2VhcmNoOworCisgICAgaWYgKCFjYXNlU2Vu
c2l0aXZlKQorICAgICAgICBvcHRpb25zIHw9IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoOworCisg
ICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0gcGRmRG9jdW1lbnQoKS5nZXQoKTsKKworICAgIFBE
RlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCA9IFtpbml0aWFsU2VsZWN0aW9u
IGNvcHldOworICAgIGlmIChzdGFydEluU2VsZWN0aW9uKSB7CisgICAgICAgIC8vIEluaXRpYWxs
eSB3ZSB3YW50IHRvIGluY2x1ZGUgdGhlIHNlbGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaC4gU28g
d2UgbXVzdCBtb2RpZnkgdGhlIHN0YXJ0aW5nIHNlYXJjaAorICAgICAgICAvLyBzZWxlY3Rpb24g
dG8gZml0IFBERkRvY3VtZW50J3Mgc2VhcmNoIHJlcXVpcmVtZW50czogc2VsZWN0aW9uIG11c3Qg
aGF2ZSBhIGxlbmd0aCA+PSAxLCBiZWdpbiBiZWZvcmUKKyAgICAgICAgLy8gdGhlIGN1cnJlbnQg
c2VsZWN0aW9uIChpZiBzZWFyY2hpbmcgZm9yd2FyZHMpIG9yIGFmdGVyIChpZiBzZWFyY2hpbmcg
YmFja3dhcmRzKS4KKyAgICAgICAgaW50IGluaXRpYWxTZWxlY3Rpb25MZW5ndGggPSBbW2luaXRp
YWxTZWxlY3Rpb24gc3RyaW5nXSBsZW5ndGhdOworICAgICAgICBpZiAoc2VhcmNoRm9yd2FyZCkg
eworICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9u
QXRTdGFydDoxXTsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVu
ZFNlbGVjdGlvbkF0RW5kOi1pbml0aWFsU2VsZWN0aW9uTGVuZ3RoXTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlv
bkF0RW5kOjFdOworICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5k
U2VsZWN0aW9uQXRTdGFydDotaW5pdGlhbFNlbGVjdGlvbkxlbmd0aF07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRT
dHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCB3aXRo
T3B0aW9uczpvcHRpb25zXTsKKyAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCByZWxlYXNl
XTsKKworICAgIC8vIElmIHdlIGZpcnN0IHNlYXJjaGVkIGluIHRoZSBzZWxlY3Rpb24sIGFuZCB3
ZSBmb3VuZCB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggYWdhaW4gZnJvbSBqdXN0IHBhc3QgdGhlIHNl
bGVjdGlvbi4KKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBbZm91bmRTZWxlY3Rpb24gaXNF
cXVhbDppbml0aWFsU2VsZWN0aW9uXSkKKyAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1l
bnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjppbml0aWFsU2VsZWN0aW9uIHdpdGhP
cHRpb25zOm9wdGlvbnNdOworCisgICAgaWYgKCFmb3VuZFNlbGVjdGlvbiAmJiB3cmFwU2VhcmNo
KQorICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBm
cm9tU2VsZWN0aW9uOm5pbCB3aXRoT3B0aW9uczpvcHRpb25zXTsKKworICAgIHJldHVybiBmb3Vu
ZFNlbGVjdGlvbjsKK30KKworYm9vbCBQREZQbHVnaW46OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNo
Q291bnQpCit7CisgICAgQk9PTCBzZWFyY2hGb3J3YXJkID0gIShvcHRpb25zICYgRmluZE9wdGlv
bnNCYWNrd2FyZHMpOworICAgIEJPT0wgY2FzZVNlbnNpdGl2ZSA9ICEob3B0aW9ucyAmIEZpbmRP
cHRpb25zQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICBCT09MIHdyYXBTZWFyY2ggPSBvcHRpb25zICYg
RmluZE9wdGlvbnNXcmFwQXJvdW5kOworCisgICAgdW5zaWduZWQgbWF0Y2hDb3VudDsKKyAgICBp
ZiAoIW1heE1hdGNoQ291bnQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1heCB3YXMgemVybywgYW55
IHJlc3VsdCBtZWFucyB3ZSBleGNlZWRlZCB0aGUgbWF4LiBXZSBjYW4gc2tpcCBjb21wdXRpbmcg
dGhlIGFjdHVhbCBjb3VudC4KKyAgICAgICAgbWF0Y2hDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihrV0tNb3JlVGhhbk1heGltdW1NYXRjaENvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtYXRjaENvdW50ID0gY291bnRGaW5kTWF0Y2hlcyh0YXJnZXQsIG9wdGlvbnMsIG1heE1hdGNo
Q291bnQpOworICAgICAgICBpZiAobWF0Y2hDb3VudCA+IG1heE1hdGNoQ291bnQpCisgICAgICAg
ICAgICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11
bU1hdGNoQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKSB7CisgICAg
ICAgIFBERlNlbGVjdGlvbiogc2VhcmNoU2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IHNlYXJjaFNlbGVjdGlvbl07CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBmaW5kU3Ry
aW5nOnRhcmdldCBjYXNlU2Vuc2l0aXZlOmNhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hlczpZ
RVNdOworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2VhcmNoU2VsZWN0aW9uOnNl
YXJjaFNlbGVjdGlvbl07CisgICAgICAgIG1fbGFzdEZvdW5kU3RyaW5nID0gZW1wdHlTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX2xhc3RGb3VuZFN0
cmluZyA9PSB0YXJnZXQpIHsKKyAgICAgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBuZXh0
TWF0Y2hGb3JTdHJpbmcodGFyZ2V0LCBzZWFyY2hGb3J3YXJkLCBjYXNlU2Vuc2l0aXZlLCB3cmFw
U2VhcmNoLCBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2VhcmNoU2VsZWN0aW9uXSwgTk8pOworICAg
ICAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2VhcmNoU2VsZWN0aW9uOnNlbGVjdGlvbl07Cisg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvU2VsZWN0aW9uOnNlbGVjdGlvbl07Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGZpbmRTdHJpbmc6dGFy
Z2V0IGNhc2VTZW5zaXRpdmU6Y2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOllFU107Cisg
ICAgICAgIG1fbGFzdEZvdW5kU3RyaW5nID0gdGFyZ2V0OworICAgIH0KKworICAgIHJldHVybiBt
YXRjaENvdW50ID4gMDsKK30KKworYm9vbCBQREZQbHVnaW46OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBJ
bnRQb2ludCBsb2NhbFBvaW50ID0gY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5kZWRJ
bnRQb2ludChwb2ludCkpOworICAgIFBERlNlbGVjdGlvbiogbG9va3VwU2VsZWN0aW9uID0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OmNvbnZlcnRGcm9t
UGx1Z2luVG9QREZWaWV3KGxvY2FsUG9pbnQpXTsKKworICAgIGlmIChbW2xvb2t1cFNlbGVjdGlv
biBzdHJpbmddIGxlbmd0aF0pCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZWFyY2hJ
bkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOmxvb2t1cFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQREZQbHVnaW46OmZvY3VzTmV4dEFubm90YXRpb24oKQoreworICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOmZhbHNlXTsKK30K
Kwordm9pZCBQREZQbHVnaW46OmZvY3VzUHJldmlvdXNBbm5vdGF0aW9uKCkKK3sKKyAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjp0cnVlXTsKK30KKwordm9p
ZCBQREZQbHVnaW46Om5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICopCit7Cisg
ICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5kaWRDaGFuZ2VTZWxlY3Rpb24oKTsKK30KKworU3RyaW5n
IFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW1tt
X3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXSBzdHJpbmddOworfQorCitTdHJp
bmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludEluVmlldyA9IGNv
bnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihyb3Vu
ZGVkSW50UG9pbnQocG9pbnQpKSk7CisgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25Gb3JXb3Jk
ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OnBvaW50
SW5WaWV3XTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudFNlbGVjdGlvbjpz
ZWxlY3Rpb25Gb3JXb3JkXTsKKyAgICAKKyAgICByZXR1cm4gW3NlbGVjdGlvbkZvcldvcmQgc3Ry
aW5nXTsKK30KKworYm9vbCBQREZQbHVnaW46OmV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2lu
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSBj
b25zdAoreworICAgIFBERlNlbGVjdGlvbiAqY3VycmVudFNlbGVjdGlvbiA9IFttX3BkZkxheWVy
Q29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKKyAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBJbnRQb2ludCBwb2ludEluUERGVmll
dyA9IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdp
bihyb3VuZGVkSW50UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRlcykpKTsKKyAgICBQREZT
ZWxlY3Rpb24gKnNlbGVjdGlvbkZvcldvcmQgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2Vs
ZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9pbnRJblBERlZpZXddOworCisgICAgTlNVSW50ZWdlciBj
dXJyZW50UGFnZUluZGV4ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRQYWdlSW5kZXhd
OworICAgIAorICAgIE5TQXJyYXkgKnNlbGVjdGlvblJlY3RzID0gW21fcGRmTGF5ZXJDb250cm9s
bGVyIHJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTpjdXJyZW50U2VsZWN0aW9uXTsKKyAg
ICBpZiAoIXNlbGVjdGlvblJlY3RzIHx8ICFzZWxlY3Rpb25SZWN0cy5jb3VudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChjdXJyZW50UGFnZUluZGV4ID49IHNlbGVjdGlv
blJlY3RzLmNvdW50KQorICAgICAgICBjdXJyZW50UGFnZUluZGV4ID0gc2VsZWN0aW9uUmVjdHMu
Y291bnQgLSAxOworCisgICAgTlNBcnJheSAqd29yZFNlbGVjdGlvblJlY3RzID0gW21fcGRmTGF5
ZXJDb250cm9sbGVyIHJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTpzZWxlY3Rpb25Gb3JX
b3JkXTsKKyAgICBpZiAoIXdvcmRTZWxlY3Rpb25SZWN0cyB8fCAhd29yZFNlbGVjdGlvblJlY3Rz
LmNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZhbHVlICpzZWxlY3Rpb25C
b3VuZHMgPSBbc2VsZWN0aW9uUmVjdHMgb2JqZWN0QXRJbmRleDpjdXJyZW50UGFnZUluZGV4XTsK
KyAgICBOU1ZhbHVlICp3b3JkU2VsZWN0aW9uQm91bmRzID0gW3dvcmRTZWxlY3Rpb25SZWN0cyBv
YmplY3RBdEluZGV4OjBdOworCisgICAgTlNSZWN0IHNlbGVjdGlvbkJvdW5kc1JlY3QgPSBzZWxl
Y3Rpb25Cb3VuZHMucmVjdFZhbHVlOworICAgIE5TUmVjdCB3b3JkU2VsZWN0aW9uQm91bmRzUmVj
dCA9IHdvcmRTZWxlY3Rpb25Cb3VuZHMucmVjdFZhbHVlOworICAgIHJldHVybiBOU0ludGVyc2Vj
dHNSZWN0KHdvcmRTZWxlY3Rpb25Cb3VuZHNSZWN0LCBzZWxlY3Rpb25Cb3VuZHNSZWN0KTsKK30K
Kworc3RhdGljIE5TUG9pbnQgcG9pbnRJbkxheW91dFNwYWNlRm9yUG9pbnRJbldpbmRvd1NwYWNl
KFBERkxheWVyQ29udHJvbGxlciogcGRmTGF5ZXJDb250cm9sbGVyLCBOU1BvaW50IHBvaW50SW5W
aWV3KQoreworICAgIENHUG9pbnQgcG9pbnQgPSBOU1BvaW50VG9DR1BvaW50KHBvaW50SW5WaWV3
KTsKKyAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IFtwZGZMYXllckNvbnRyb2xsZXIgc2Nyb2xs
UG9zaXRpb25dOworICAgIENHRmxvYXQgc2NhbGVGYWN0b3IgPSBbcGRmTGF5ZXJDb250cm9sbGVy
IGNvbnRlbnRTY2FsZUZhY3Rvcl07CisKKyAgICBzY3JvbGxPZmZzZXQueSA9IFtwZGZMYXllckNv
bnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0uaGVpZ2h0IC0gTlNSZWN0VG9DR1Jl
Y3QoW3BkZkxheWVyQ29udHJvbGxlciBmcmFtZV0pLnNpemUuaGVpZ2h0IC0gc2Nyb2xsT2Zmc2V0
Lnk7CisgICAgCisgICAgQ0dQb2ludCBuZXdQb2ludCA9IENHUG9pbnRNYWtlKHNjcm9sbE9mZnNl
dC54ICsgcG9pbnQueCwgc2Nyb2xsT2Zmc2V0LnkgKyBwb2ludC55KTsKKyAgICBuZXdQb2ludC54
IC89IHNjYWxlRmFjdG9yOworICAgIG5ld1BvaW50LnkgLz0gc2NhbGVGYWN0b3I7CisgICAgcmV0
dXJuIE5TUG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7Cit9CisKK1N0cmluZyBQREZQbHVnaW46
Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9u
SW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBQREZTZWxlY3Rp
b24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0Cit7CisgICAg
UERGU2VsZWN0aW9uKiYgc2VsZWN0aW9uID0gKnNlbGVjdGlvblB0cjsKKworICAgIHNlbGVjdGlv
biA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKKyAgICBpZiAoZXhp
c3RpbmdTZWxlY3Rpb25Db250YWluc1BvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKQor
ICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnN0cmluZzsKKyAgICAgICAgCisgICAgSW50UG9pbnQg
cG9pbnRJblBERlZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJv
b3RWaWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMp
KSk7CisgICAgc2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZv
cldvcmRBdFBvaW50OnBvaW50SW5QREZWaWV3XTsKKyAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAg
ICAgcmV0dXJuICIiOworCisgICAgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2UgPSBwb2ludElu
TGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UobV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCksIHBvaW50SW5QREZWaWV3KTsKKworICAgIFBERlBhZ2UgKmN1cnJlbnRQYWdlID0gW1ttX3Bk
ZkxheWVyQ29udHJvbGxlciBsYXlvdXRdIHBhZ2VOZWFyZXN0UG9pbnQ6cG9pbnRJbkxheW91dFNw
YWNlIGN1cnJlbnRQYWdlOlttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZV1dOworICAg
IAorICAgIE5TUG9pbnQgcG9pbnRJblBhZ2VTcGFjZSA9IFtbbV9wZGZMYXllckNvbnRyb2xsZXIg
bGF5b3V0XSBjb252ZXJ0UG9pbnQ6cG9pbnRJbkxheW91dFNwYWNlIHRvUGFnZTpjdXJyZW50UGFn
ZSBmb3JTY2FsZUZhY3RvcjoxLjBdOworICAgIAorICAgIGZvciAoUERGQW5ub3RhdGlvbiAqYW5u
b3RhdGlvbiBpbiBjdXJyZW50UGFnZS5hbm5vdGF0aW9ucykgeworICAgICAgICBpZiAoIVthbm5v
dGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpXSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBOU1JlY3QgYm91bmRzID0gYW5ub3RhdGlvbi5i
b3VuZHM7CisgICAgICAgIGlmICghTlNQb2ludEluUmVjdChwb2ludEluUGFnZVNwYWNlLCBib3Vu
ZHMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBQREZBbm5vdGF0
aW9uTGluayAqbGlua0Fubm90YXRpb24gPSAoUERGQW5ub3RhdGlvbkxpbmsgKilhbm5vdGF0aW9u
OworICAgICAgICBOU1VSTCAqdXJsID0gbGlua0Fubm90YXRpb24uVVJMOworICAgICAgICBpZiAo
IXVybCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZGF0YS5hYnNv
bHV0ZUxpbmtVUkwgPSB1cmwuYWJzb2x1dGVTdHJpbmc7CisgICAgICAgIGRhdGEubGlua0xhYmVs
ID0gc2VsZWN0aW9uLnN0cmluZzsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5zdHJpbmc7Cisg
ICAgfQorICAgIAorICAgIE5TU3RyaW5nICpsb29rdXBUZXh0ID0gRGljdGlvbmFyeUxvb2t1cDo6
c3RyaW5nRm9yUERGU2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgaWYgKCFsb29r
dXBUZXh0IHx8ICFsb29rdXBUZXh0Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRTZWxlY3Rpb246c2VsZWN0aW9uXTsKKyAg
ICByZXR1cm4gbG9va3VwVGV4dDsKK30KKworc3RhdGljIE5TUmVjdCByZWN0SW5WaWV3U3BhY2VG
b3JSZWN0SW5MYXlvdXRTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxl
ciwgTlNSZWN0IGxheW91dFNwYWNlUmVjdCkKK3sKKyAgICBDR1JlY3QgbmV3UmVjdCA9IE5TUmVj
dFRvQ0dSZWN0KGxheW91dFNwYWNlUmVjdCk7CisgICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9IHBk
ZkxheWVyQ29udHJvbGxlci5jb250ZW50U2NhbGVGYWN0b3I7CisgICAgQ0dQb2ludCBzY3JvbGxP
ZmZzZXQgPSBwZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb247CisKKyAgICBzY3JvbGxP
ZmZzZXQueSA9IHBkZkxheWVyQ29udHJvbGxlci5jb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tLmhl
aWdodCAtIE5TUmVjdFRvQ0dSZWN0KHBkZkxheWVyQ29udHJvbGxlci5mcmFtZSkuc2l6ZS5oZWln
aHQgLSBzY3JvbGxPZmZzZXQueTsKKworICAgIG5ld1JlY3Qub3JpZ2luLnggKj0gc2NhbGVGYWN0
b3I7CisgICAgbmV3UmVjdC5vcmlnaW4ueSAqPSBzY2FsZUZhY3RvcjsKKyAgICBuZXdSZWN0LnNp
emUud2lkdGggKj0gc2NhbGVGYWN0b3I7CisgICAgbmV3UmVjdC5zaXplLmhlaWdodCAqPSBzY2Fs
ZUZhY3RvcjsKKworICAgIG5ld1JlY3Qub3JpZ2luLnggLT0gc2Nyb2xsT2Zmc2V0Lng7CisgICAg
bmV3UmVjdC5vcmlnaW4ueSAtPSBzY3JvbGxPZmZzZXQueTsKKworICAgIHJldHVybiBOU1JlY3RG
cm9tQ0dSZWN0KG5ld1JlY3QpOworfQorCitXZWJDb3JlOjpGbG9hdFJlY3QgUERGUGx1Z2luOjpy
ZWN0Rm9yU2VsZWN0aW9uSW5Sb290VmlldyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikgY29uc3QK
K3sKKyAgICBQREZQYWdlICpjdXJyZW50UGFnZSA9IG5pbDsKKyAgICBOU0FycmF5KiBwYWdlcyA9
IHNlbGVjdGlvbi5wYWdlczsKKyAgICBpZiAocGFnZXMuY291bnQpCisgICAgICAgIGN1cnJlbnRQ
YWdlID0gKFBERlBhZ2UgKilbcGFnZXMgb2JqZWN0QXRJbmRleDowXTsKKworICAgIGlmICghY3Vy
cmVudFBhZ2UpCisgICAgICAgIGN1cnJlbnRQYWdlID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1
cnJlbnRQYWdlXTsKKyAgICAKKyAgICBOU1JlY3QgcmVjdEluUGFnZVNwYWNlID0gW3NlbGVjdGlv
biBib3VuZHNGb3JQYWdlOmN1cnJlbnRQYWdlXTsKKyAgICBOU1JlY3QgcmVjdEluTGF5b3V0U3Bh
Y2UgPSBbW21fcGRmTGF5ZXJDb250cm9sbGVyIGxheW91dF0gY29udmVydFJlY3Q6cmVjdEluUGFn
ZVNwYWNlIGZyb21QYWdlOmN1cnJlbnRQYWdlIGZvclNjYWxlRmFjdG9yOjEuMF07CisgICAgTlNS
ZWN0IHJlY3RJblZpZXcgPSByZWN0SW5WaWV3U3BhY2VGb3JSZWN0SW5MYXlvdXRTcGFjZShtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSwgcmVjdEluTGF5b3V0U3BhY2UpOworCisgICAgcmVjdElu
Vmlldy5vcmlnaW4gPSBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFBvaW50KHJlY3RJ
blZpZXcub3JpZ2luKSk7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHJlY3RJblZp
ZXcpOworfQorCitDR0Zsb2F0IFBERlBsdWdpbjo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAg
IHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsKK30KKwor
dm9pZCBQREZQbHVnaW46OnBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKnN0cmluZykKK3sKKyAg
ICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VhcmNo
VGhlV2ViKHN0cmluZykpOworfQorCit2b2lkIFBERlBsdWdpbjo6cGVyZm9ybVNwb3RsaWdodFNl
YXJjaChOU1N0cmluZyAqc3RyaW5nKQoreworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWFyY2hXaXRoU3BvdGxpZ2h0KHN0cmluZykpOworfQor
Citib29sIFBERlBsdWdpbjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBl
dmVudCkKK3sKKyAgICBQREZEaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciBkaXNwbGF5TW9kZV07CisKKyAgICBpZiAoZGlzcGxheU1vZGUgPT0ga1BERkRpc3Bs
YXlTaW5nbGVQYWdlQ29udGludW91cyB8fCBkaXNwbGF5TW9kZSA9PSBrUERGRGlzcGxheVR3b1Vw
Q29udGludW91cykKKyAgICAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2
ZW50KHBsYXRmb3JtKGV2ZW50KSk7CisKKyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRQYWdlSW5kZXgg
PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFBhZ2VJbmRleF07CisgICAgYm9vbCBpbkZp
cnN0UGFnZSA9ICFjdXJyZW50UGFnZUluZGV4OworICAgIGJvb2wgaW5MYXN0UGFnZSA9IFttX3Bk
ZkxheWVyQ29udHJvbGxlciBsYXN0UGFnZUluZGV4XSA9PSBjdXJyZW50UGFnZUluZGV4OworCisg
ICAgYm9vbCBhdFNjcm9sbFRvcCA9ICFzY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICBib29sIGF0
U2Nyb2xsQm90dG9tID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgPT0gbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkueSgpOworCisgICAgYm9vbCBpbk1vbWVudHVtU2Nyb2xsID0gZXZlbnQubW9tZW50dW1Q
aGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNlTm9uZTsKKworICAgIGludCBzY3JvbGxNYWdu
aXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IGRlZmF1bHRTY3JvbGxNYWduaXR1ZGVUaHJlc2hv
bGRGb3JQYWdlRmxpcDsKKworICAgIC8vIEltcHJlY2lzZSBpbnB1dCBkZXZpY2VzIHNob3VsZCBo
YXZlIGEgbG93ZXIgdGhyZXNob2xkIHNvIHRoYXQgImNsaWNreSIgc2Nyb2xsIHdoZWVscyBjYW4g
ZmxpcCBwYWdlcy4KKyAgICBpZiAoIWV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSkK
KyAgICAgICAgc2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAwOworCisgICAg
aWYgKGF0U2Nyb2xsQm90dG9tICYmICFpbkxhc3RQYWdlICYmIGV2ZW50LmRlbHRhKCkuaGVpZ2h0
KCkgPCAwKSB7CisgICAgICAgIGlmIChldmVudC5kZWx0YSgpLmhlaWdodCgpIDw9IC1zY3JvbGxN
YWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCAmJiAhaW5Nb21lbnR1bVNjcm9sbCkKKyAgICAg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvTmV4dFBhZ2VdOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXRTY3JvbGxUb3AgJiYgIWluRmlyc3RQYWdlICYm
IGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPiAwKSB7CisgICAgICAgIGlmIChldmVudC5kZWx0YSgp
LmhlaWdodCgpID49IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1v
bWVudHVtU2Nyb2xsKSB7CisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAg
ICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ290b1ByZXZpb3VzUGFnZV07CisgICAgICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkpOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKK30KKworTlNEYXRhICpQREZQbHVnaW46
OmxpdmVEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAg
ICBtX2FjdGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworCisgICAgLy8gU2F2ZSBkYXRhIHN0cmFp
Z2h0IGZyb20gdGhlIHJlc291cmNlIGluc3RlYWQgb2YgUERGS2l0IGlmIHRoZSBkb2N1bWVudCBp
cworICAgIC8vIHVudG91Y2hlZCBieSB0aGUgdXNlciwgc28gdGhhdCBQREZzIHdoaWNoIFBERktp
dCBjYW4ndCBkaXNwbGF5IHdpbGwgc3RpbGwgYmUgZG93bmxvYWRhYmxlLgorICAgIGlmIChtX3Bk
ZkRvY3VtZW50V2FzTXV0YXRlZCkKKyAgICAgICAgcmV0dXJuIFttX3BkZkRvY3VtZW50IGRhdGFS
ZXByZXNlbnRhdGlvbl07CisgICAgCisgICAgcmV0dXJuIHJhd0RhdGEoKTsKK30KKworTlNPYmpl
Y3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJEZXRhaWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzUwMjJiOTM1ZTI1
ZGIwNWFhZWVkMDBlOTVmNTA1YTcwMWZjYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLQotQGNsYXNz
IENQUmVhZGluZ01vZGVsOwotQGNsYXNzIFBERlZpZXdMYXlvdXQ7Ci0KLUBwcm90b2NvbCBQREZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0KLS0gKHZvaWQpdXBkYXRlU2Nyb2xs
UG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247Ci0tICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3Rl
Ym9hcmQ6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsKLS0gKHZv
aWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKLS0gKHZvaWQpcGVyZm9ybVdlYlNlYXJj
aDooTlNTdHJpbmcgKilzdHJpbmc7Ci0tICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5T
U3RyaW5nICopc3RyaW5nOwotLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uOwotLSAo
dm9pZClzYXZlVG9QREY7Ci0KLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNv
bnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3RhdGlvbjoo
UERGQW5ub3RhdGlvbiAqKWFubm90YXRpb247Ci0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjoo
UERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVS
TDooTlNVUkwgKil1cmw7Ci0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3Rvcjoo
Q0dGbG9hdClzY2FsZUZhY3RvcjsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXll
ckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGlu
dCltb2RlOwotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNl
bGVjdGlvbjsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6IE5TT2Jq
ZWN0Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyIChEZXRhaWxzKQotCi1A
cHJvcGVydHkocmV0YWluKSBDQUxheWVyICpwYXJlbnRMYXllcjsKLUBwcm9wZXJ0eShyZXRhaW4p
IFBERkRvY3VtZW50ICpkb2N1bWVudDsKLUBwcm9wZXJ0eShyZXRhaW4pIGlkPFBERkxheWVyQ29u
dHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKLQotLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6
ZSlzaXplOwotCi0tIChQREZEaXNwbGF5TW9kZSlkaXNwbGF5TW9kZTsKLS0gKHZvaWQpc2V0RGlz
cGxheU1vZGU6KFBERkRpc3BsYXlNb2RlKW1vZGU7Ci0tICh2b2lkKXNldERpc3BsYXlzUGFnZUJy
ZWFrczooQk9PTClwYWdlQnJlYWtzOwotCi0tIChDR0Zsb2F0KWNvbnRlbnRTY2FsZUZhY3RvcjsK
LS0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yOwotCi0t
IChDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yOwotLSAodm9pZClzZXREZXZpY2VTY2FsZUZhY3Rv
cjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKLQotLSAoQ0dTaXplKWNvbnRlbnRTaXplOwotLSAoQ0dT
aXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207Ci0KLS0gKHZvaWQpc25hcHNob3RJbkNvbnRl
eHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwotCi0tICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNh
dGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRp
YXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7Ci0KLS0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247Ci0t
ICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uOwotLSAodm9pZClz
Y3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0YTsKLQotLSAodm9pZCltb3VzZURvd246KE5TRXZl
bnQgKilldmVudDsKLS0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKLS0g
KHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZCltb3VzZVVwOihOU0V2
ZW50ICopZXZlbnQ7Ci0tICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50OwotLSAo
dm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpbW91c2VFeGl0ZWQ6
KE5TRXZlbnQgKilldmVudDsKLQotLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICop
ZXZlbnQ7Ci0KLS0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNl
U2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNo
b3VsZEhpZ2hsaWdodE1hdGNoZXM7Ci0KLS0gKFBERlNlbGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rp
b247Ci0tICh2b2lkKXNldEN1cnJlbnRTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlv
bjsKLS0gKFBERlNlbGVjdGlvbiAqKXNlYXJjaFNlbGVjdGlvbjsKLS0gKHZvaWQpc2V0U2VhcmNo
U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0tICh2b2lkKWdvdG9TZWxlY3Rp
b246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKLS0gKFBERlNlbGVjdGlvbiAqKWdldFNlbGVj
dGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50KXBvaW50OwotLSAoTlNBcnJheSAqKXJlY3RzRm9y
U2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwotLSAoTlNB
cnJheSAqKXJlY3RzRm9yQW5ub3RhdGlvbkluTGF5b3V0U3BhY2U6KFBERkFubm90YXRpb24gKilh
bm5vdGF0aW9uOwotLSAoUERGVmlld0xheW91dCAqKWxheW91dDsKLS0gKE5TUmVjdClmcmFtZTsK
LQotLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOwotLSAoTlNVSW50ZWdlcilsYXN0UGFnZUluZGV4
OwotLSAoTlNVSW50ZWdlciljdXJyZW50UGFnZUluZGV4OwotLSAodm9pZClnb3RvTmV4dFBhZ2U7
Ci0tICh2b2lkKWdvdG9QcmV2aW91c1BhZ2U7Ci0KLS0gKHZvaWQpY29weVNlbGVjdGlvbjsKLS0g
KHZvaWQpc2VsZWN0QWxsOwotCi0tIChib29sKWtleURvd246KE5TRXZlbnQgKilldmVudDsKLQot
LSAodm9pZClzZXRIVURFbmFibGVkOihCT09MKWVuYWJsZWQ7Ci0tIChCT09MKWh1ZEVuYWJsZWQ7
Ci0KLS0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3Rh
dGlvbjsKLS0gKHZvaWQpYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjooQk9PTClwcmV2aW91czsKLQot
LSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7
Ci0KLS0gKHZvaWQpc2VhcmNoSW5EaWN0aW9uYXJ5V2l0aFNlbGVjdGlvbjooUERGU2VsZWN0aW9u
ICopc2VsZWN0aW9uOwotCi0vLyBBY2Nlc3NpYmlsaXR5Ci0KLS0gKENQUmVhZGluZ01vZGVsICop
cmVhZGluZ01vZGVsOwotLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7Ci0tIChO
U0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzOwotLSAoQk9PTClhY2Nlc3NpYmls
aXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcgKilhdHRyaWJ1dGU7Ci0tICh2b2lkKWFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0
dHJpYnV0ZTsKLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZU5hbWVzOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZTsKLS0gKE5T
U3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZTsKLS0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlOwotLSAoQk9PTClhY2Nlc3NpYmlsaXR5
SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0QXR0cmlidXRlOwotLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNTZWxlY3RlZFRleHRB
dHRyaWJ1dGVTZXR0YWJsZTsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0
UmFuZ2VBdHRyaWJ1dGU7Ci0tIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJh
Y3RlcnNBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc051bWJlck9mQ2hhcmFjdGVy
c0F0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hh
cmFjdGVyUmFuZ2VBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc1Zpc2libGVDaGFy
YWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5
TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7Ci0tIChOU1Zh
bHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQp
cGFyYW1ldGVyOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRy
aWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmls
aXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKLQot
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2YzNWRjMjY5YTg1OWY5
MGM1N2E2YjUxODRiMjJkODM1ZWFhN2IwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKQEAgLTAs
MCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBERkxheWVyQ29udHJvbGxl
clNQSV9oCisjZGVmaW5lIFBERkxheWVyQ29udHJvbGxlclNQSV9oCisKKyNpbmNsdWRlICJQREZL
aXRJbXBvcnRzLmgiCisKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYgVVNFKERFUFJFQ0FU
RURfUERGX1BMVUdJTikKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJT
UEkuaCIKKworI2Vsc2UKKworI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorCitAY2xhc3MgQ1BS
ZWFkaW5nTW9kZWw7CitAY2xhc3MgUERGVmlld0xheW91dDsKKworQHByb3RvY29sIFBERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KKworQG9wdGlvbmFsCisKKy0gKHZvaWQpcGRm
TGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIg
c2Nyb2xsVG9Qb2ludDooQ0dQb2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpcGRmTGF5ZXJDb250
cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgaW52YWxpZGF0
ZVJlY3Q6KENHUmVjdClyZWN0OworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJJbnZhbGlkYXRl
SFVEOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXI7CisKKy0gKHZvaWQp
cGRmTGF5ZXJDb250cm9sbGVyWm9vbUluOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNv
bnRyb2xsZXI7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlclpvb21PdXQ6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKworLSAodm9pZClwZGZMYXllckNvbnRyb2xs
ZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VBY3Rp
dmVBbm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQpcGRmTGF5
ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlk
Q2xpY2tMaW5rV2l0aFVSTDooTlNVUkwgKil1cmw7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxl
cjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZURpc3Bs
YXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNv
bnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlU2VsZWN0aW9uOihQREZTZWxl
Y3Rpb24gKilzZWxlY3Rpb247CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXll
ckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY29weUl0ZW1zOihOU0FycmF5ICopaXRl
bXMgd2l0aFR5cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxl
cjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHNob3dEZWZpbml0aW9u
Rm9yQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6
KENHUG9pbnQpcG9pbnQ7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHBlcmZvcm1XZWJTZWFyY2hGb3JTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nOworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoRm9yU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyU2F2ZVRv
UERGOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXI7CistICh2b2lkKXBk
ZkxheWVyQ29udHJvbGxlck9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb246KFBERkxheWVyQ29udHJv
bGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKworLSAoTlNDb2xvclNwYWNlKilwZGZMYXllckNv
bnRyb2xsZXJDb2xvclNwYWNlOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xs
ZXI7CisKK0BlbmQKKworQGludGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgOiBOU09iamVjdAor
QGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciAoKQorCitAcHJvcGVydHkgKHJl
dGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHByb3BlcnR5IChhc3NpZ24pIGlkPFBERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAocmV0YWluKSBOU0Fy
cmF5ICpzZWFyY2hNYXRjaGVzOworCistICh2b2lkKXNldEZyYW1lU2l6ZTooQ0dTaXplKXNpemU7
CisKKy0gKHZvaWQpc2V0RGlzcGxheU1vZGU6KGludCltb2RlOworLSAoaW50KWRpc3BsYXlNb2Rl
OworLSAoaW50KXJlYWxEaXNwbGF5TW9kZTsKKworLSAoQ0dTaXplKWNvbnRlbnRTaXplOworLSAo
Q0dTaXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207CisKKy0gKENHRmxvYXQpY29udGVudFNj
YWxlRmFjdG9yOworLSAodm9pZClzZXRDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQpY29udGVu
dFNjYWxlRmFjdG9yOworCistIChQREZWaWV3TGF5b3V0ICopbGF5b3V0OworCistICh2b2lkKWRy
YXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OworLSAodm9pZClkcmF3SFVESW5Db250
ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQg
KilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3Vz
ZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoQk9PTCltb3VzZURvd246KE5TRXZlbnQg
KilldmVudCBpbkhVRFdpdGhCb3VuZHM6KENHUmVjdClib3VuZHM7CistIChCT09MKW1vdXNlVXA6
KE5TRXZlbnQgKilldmVudCBpbkhVRFdpdGhCb3VuZHM6KENHUmVjdClib3VuZHM7CistIChCT09M
KW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5kczooQ0dSZWN0KWJv
dW5kczsKKworLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CisKKy0g
KE5TQXJyYXkgKilwYWdlUmVjdHM7CisKKy0gKHZvaWQpc2V0VmlzaWJsZVJlY3Q6KENHUmVjdCl2
aXNpYmxlUmVjdDsKKworLSAodm9pZClnb3RvU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxl
Y3Rpb247CistICh2b2lkKWdvdG9EZXN0aW5hdGlvbjooUERGRGVzdGluYXRpb24gKilkZXN0aW5h
dGlvbjsKKy0gKHZvaWQpZ290b1JlY3Q6KENHUmVjdClyZWN0IG9uUGFnZTooUERGUGFnZSAqKXBh
Z2U7CisKKy0gKFBERlNlbGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lkKXNldEN1
cnJlbnRTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKworLSAodm9pZClzZWFy
Y2hJbkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Cist
IChQREZTZWxlY3Rpb24gKilnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDooQ0dQb2ludClwb2lu
dDsKKy0gKE5TQXJyYXkgKilyZWN0c0ZvclNlbGVjdGlvbkluTGF5b3V0U3BhY2U6KFBERlNlbGVj
dGlvbiAqKXNlbGVjdGlvbjsKKworLSAoTlNBcnJheSAqKWhpZ2hsaWdodHM7CistICh2b2lkKXNl
dEhpZ2hsaWdodHM6KE5TQXJyYXkqKWhpZ2hsaWdodHM7CisKKy0gKFBERlNlbGVjdGlvbiAqKXNl
YXJjaFNlbGVjdGlvbjsKKy0gKE5TQXJyYXkgKilzZWFyY2hNYXRjaGVzOworLSAodm9pZClzZXRT
ZWFyY2hTZWxlY3Rpb246KFBERlNlbGVjdGlvbiopc2VsZWN0aW9uOworLSAoTlNBcnJheSAqKWZp
bmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpaXNDYXNlU2Vu
c2l0aXZlIGhpZ2hsaWdodE1hdGNoZXM6KEJPT0wpc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlczsKKwor
LSAodm9pZCljb3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7CisKKy0gKFBERlBhZ2Ug
KiljdXJyZW50UGFnZTsKKy0gKE5TVUludGVnZXIpY3VycmVudFBhZ2VJbmRleDsKKworLSAoQk9P
TClkb2N1bWVudElzTG9ja2VkOworLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6
KE5TU3RyaW5nICopcGFzc3dvcmQ7CisKKy0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0aW9uOihQ
REZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQpYWN0aXZhdGVOZXh0QW5ub3RhdGlv
bjooQk9PTClwcmV2aW91czsKKworLSAoTlNSZWN0KWZyYW1lOworCisvLyBBY2Nlc3NpYmlsaXR5
CisKKy0gKENQUmVhZGluZ01vZGVsICopcmVhZGluZ01vZGVsOworLSAoaWQpYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnQ7CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcg
KilhdHRyaWJ1dGU7CistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9y
QXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5Um9sZUF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlw
dGlvbkF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRl
OworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNT
dHJpbmcgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlOworLSAoQk9PTClhY2Nl
c3NpYmlsaXR5SXNTZWxlY3RlZFRleHRBdHRyaWJ1dGVTZXR0YWJsZTsKKy0gKE5TVmFsdWUgKilh
Y2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGU7CistIChOU051bWJlciAqKWFj
Y2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2li
aWxpdHlJc051bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNWYWx1ZSAq
KWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGU7CistIChCT09MKWFj
Y2Vzc2liaWxpdHlJc1Zpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxlOworLSAo
TlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVy
OihpZClwYXJhbWV0ZXI7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0
dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworLSAoTlNTdHJpbmcgKilhY2Nlc3Np
YmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsK
Ky0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJh
bWV0ZXI6KGlkKXBhcmFtZXRlcjsKKworQGVuZAorCisjZW5kaWYKKworI2VuZGlmIC8vIFBERkxh
eWVyQ29udHJvbGxlclNQSV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4uaAppbmRleCAyMThkZWYzYWRlY2JiNWE2ZmFjMTQ1Y2UzNjg5ZDFk
OWRmNWJhMjBmLi5lZGQ2OWEyNjllNmNiYzk3MDIwNTBmNWQyMGYyNjZiZWM4ZGM2MTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgK
QEAgLTI2LDEzICsyNiwyMCBAQAogI2lmbmRlZiBQREZQbHVnaW5faAogI2RlZmluZSBQREZQbHVn
aW5faAogCi0jaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiUERGS2l0SW1wb3J0
cy5oIgorCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmIFVTRShERVBSRUNBVEVEX1BERl9Q
TFVHSU4pCisKKyNpbmNsdWRlICJEZXByZWNhdGVkUERGUGx1Z2luLmgiCisKKyNlbHNlCiAKICNp
bmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkhp
dFRlc3RSZXN1bHREYXRhLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
T3ZlcmxheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTY2LDcgKzczLDcgQEAgY2xhc3MgUERGUGx1Z2luUGFz
c3dvcmRGaWVsZDsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsKIAotY2xhc3Mg
UERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYSB7CitjbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1Z2luIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7CiAgICAgflBE
RlBsdWdpbigpOwpAQCAtNzQsMTQgKzgxLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViQ29y
ZTo6UGx1Z2luSW5mbyBwbHVnaW5JbmZvKCk7CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0
OwogCiAgICAgdm9pZCBkaWRNdXRhdGVQREZEb2N1bWVudCgpIHsgbV9wZGZEb2N1bWVudFdhc011
dGF0ZWQgPSB0cnVlOyB9CiAKLSAgICB2b2lkIHBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0
KENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKICAgICB2b2lkIHNldEFjdGl2ZUFubm90YXRpb24o
UERGQW5ub3RhdGlvbiAqKTsKLSAgICAKLSAgICB1c2luZyBTY3JvbGxhYmxlQXJlYTo6bm90aWZ5
U2Nyb2xsUG9zaXRpb25DaGFuZ2VkOwotICAgIHZvaWQgbm90aWZ5Q29udGVudFNjYWxlRmFjdG9y
Q2hhbmdlZChDR0Zsb2F0IHNjYWxlRmFjdG9yKTsKKwogICAgIHZvaWQgbm90aWZ5RGlzcGxheU1v
ZGVDaGFuZ2VkKGludCk7CiAKICAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2Vs
ZWN0aW9uICopOwpAQCAtOTMsMjEgKzk4LDM2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQb2ludCk7
CiAgICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwogICAgIHZvaWQgcGVyZm9y
bVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAqKTsKKyAgICB2b2lkIGludmFsaWRhdGVQREZSZWN0
KFdlYkNvcmU6OkludFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0ZUhVRCgpOworICAgIHZvaWQg
c2Nyb2xsVG9Qb2ludChXZWJDb3JlOjpJbnRQb2ludCk7CisKKyAgICB2b2lkIHpvb21JbigpOwor
ICAgIHZvaWQgem9vbU91dCgpOwogCiAgICAgdm9pZCBmb2N1c05leHRBbm5vdGF0aW9uKCk7CiAg
ICAgdm9pZCBmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpOwogCiAgICAgdm9pZCBhdHRlbXB0VG9V
bmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAKKyAgICBXZWJDb3JlOjpJbnRQb2lu
dCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNv
bnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNv
bnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25z
dDsKKworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNv
bnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0
OworCiAgICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0OwogICAgIAog
ICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
OwogCiAgICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNEaWN0aW9u
YXJ5ICoqKSBjb25zdDsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlld1JlY3RGb3JTZWxlY3Rp
b24oUERGU2VsZWN0aW9uICopIGNvbnN0OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0Rm9y
U2VsZWN0aW9uSW5Sb290VmlldyhQREZTZWxlY3Rpb24gKikgY29uc3Q7CisKKyAgICBQREZMYXll
ckNvbnRyb2xsZXIgKnBkZkxheWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpOyB9CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgQ0dGbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OworICAg
IGJvb2wgaXNMb2NrZWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVn
aW4oV2ViRnJhbWUqKTsKQEAgLTExNSwxNSArMTM1LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gUGx1
Z2luIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0
ZXJzJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcykgb3ZlcnJpZGUgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb250cm9sVGludHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jikgb3ZlcnJpZGUgeyB9Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzU25hcHNob3R0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBz
aG90KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVy
cmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQo
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVs
RXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCB3YW50
c1doZWVsRXZlbnRzKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIG92ZXJyaWRlIHsg
fQogICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIG92ZXJyaWRlIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVz
dElEKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJl
cXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOwpAQCAtMTM4LDMwICsxNTgsMzIg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZygpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wg
d2FzQ2FuY2VsbGVkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29u
c3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3Vz
ZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2Fy
ZEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQo
Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBp
c0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkg
b3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykgb3Zl
cnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wp
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1
dElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KSBvdmVycmlk
ZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdN
b2RlKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5n
ZXQoKTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
cigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVh
bCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
IHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpIG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChX
ZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVj
dGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3Vy
Y2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VT
Y2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRp
YWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwg
UmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQpAQCAtMTgwLDU2ICsyMDIsMjAgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25G
cm9tRHJhZ3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOyB9Ci0gICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFy
KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3NpemU7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVw
IGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmlt
YXRlLgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoV2ViQ29yZTo6U2Ny
b2xsYmFyU3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
V2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsYmFyUmVj
dCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQ3JlYXRlVHJhbnNpZW50
UGFpbnRpbmdTbmFwc2hvdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICAvLyBQREZQbHVnaW4gZnVuY3Rpb25zLgotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29y
ZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJD
b3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CiAgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQo
KTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQgY29tcHV0ZVBhZ2VC
b3hlcygpOwogICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB2b2lkIGRpZENhbGN1bGF0
ZVNpemVzKCk7CiAgICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAgTlNF
dmVudCAqbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAg
IFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21S
b290Vmlld1RvUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2Vi
Q29yZTo6SW50UG9pbnQgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpIGNvbnN0OwotICAgIAotICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOwotICAg
IGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKTsKIAotICAgIHZvaWQgdXBkYXRlUGFnZUFuZERldmlj
ZVNjYWxlRmFjdG9ycygpOworICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOworICAgIGJvb2wgaXNG
dWxsRnJhbWVQbHVnaW4oKSBjb25zdDsKIAogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZv
cm0oKTsKIApAQCAtMjQyLDQ5ICsyMjgsNjcgQEAgcHJpdmF0ZToKICAgICBOU0RhdGEgKmxpdmVE
YXRhKCkgY29uc3Q7CiAgICAgTlNEYXRhICpyYXdEYXRhKCkgY29uc3QgeyByZXR1cm4gKE5TRGF0
YSAqKW1fZGF0YS5nZXQoKTsgfQogCi0gICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgZW51bSBVcGRhdGVDdXJzb3JNb2RlIHsKLSAgICAgICAg
VXBkYXRlSWZOZWVkZWQsCi0gICAgICAgIEZvcmNlVXBkYXRlCisgICAgZW51bSBjbGFzcyBVcGRh
dGVDdXJzb3IgeworICAgICAgICBJZk5lZWRlZCwKKyAgICAgICAgRm9yY2UKICAgICB9OwogCi0g
ICAgZW51bSBIaXRUZXN0UmVzdWx0IHsKKyAgICBlbnVtIGNsYXNzIEhpdFRlc3RSZXN1bHQgewog
ICAgICAgICBOb25lLAotICAgICAgICBUZXh0CisgICAgICAgIFRleHQsCisgICAgICAgIEhVRAog
ICAgIH07CiAKLSAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiwgVXBk
YXRlQ3Vyc29yTW9kZSA9IFVwZGF0ZUlmTmVlZGVkKTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcihj
b25zdCBXZWJNb3VzZUV2ZW50JiwgVXBkYXRlQ3Vyc29yID0gVXBkYXRlQ3Vyc29yOjpJZk5lZWRl
ZCk7CiAKICAgICBKU09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKICAgICBz
dGF0aWMgSlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiAg
ICAgdm9pZCBjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpOwogCi0gICAgLy8gUmVndWxh
ciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJh
cnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgogICAg
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKICAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5W
aWV3KCkgY29uc3Q7CiAKLSAgICBXZWJGcmFtZSogbV9mcmFtZTsKKyAgICBjbGFzcyBIVUQgOiBw
dWJsaWMgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICBleHBsaWNpdCBIVUQoUERGUGx1Z2luJiBwbHVnaW4pOworICAgICAgICB2aXJ0dWFsIH5IVUQo
KTsKKworICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICAgICAgYm9vbCBjb250YWluc1Bv
aW50SW5Sb290VmlldyhXZWJDb3JlOjpJbnRQb2ludCk7CiAKLSAgICBib29sIG1faXNQb3N0U2Ny
aXB0OwotICAgIGJvb2wgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQ7CisgICAgICAgIGVudW0gY2xh
c3MgQW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uIHsgTm8sIFllcyB9OworICAgICAgICB2b2lk
IHNldFZpc2libGUoYm9vbCwgQW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uKTsKIAotICAgIFdl
YkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3Zl
cnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdl
T3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3Zl
cnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCkgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3Zl
cnJpZGU7CisKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZUluUm9vdFZpZXcoKSBjb25z
dDsKKworICAgICAgICBib29sIG1fdmlzaWJsZSB7IGZhbHNlIH07CisgICAgICAgIFJlZjxXZWJD
b3JlOjpQYWdlT3ZlcmxheT4gbV9vdmVybGF5OworICAgICAgICBQREZQbHVnaW4mIG1fcGx1Z2lu
OworICAgIH07CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsKKworICAgIGJvb2wgbV9pc1Bvc3RT
Y3JpcHQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV91c2luZ0NvbnRpbnVvdXNNb2RlIHsgdHJ1ZSB9OwogCi0gICAgUmV0
YWluUHRyPENBTGF5ZXI+IG1fY29udGFpbmVyTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+
IG1fY29udGVudExheWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Njcm9sbENvcm5lckxheWVyOwogICAgIFJl
dGFpblB0cjxQREZMYXllckNvbnRyb2xsZXI+IG1fcGRmTGF5ZXJDb250cm9sbGVyOwogICAgIFJl
dGFpblB0cjxXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3Q+IG1fYWNjZXNzaWJpbGl0eU9i
amVjdDsKLSAgICAKKwogICAgIFJlZlB0cjxQREZQbHVnaW5Bbm5vdGF0aW9uPiBtX2FjdGl2ZUFu
bm90YXRpb247CiAgICAgUmVmUHRyPFBERlBsdWdpblBhc3N3b3JkRmllbGQ+IG1fcGFzc3dvcmRG
aWVsZDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gbV9hbm5vdGF0aW9uQ29udGFpbmVy
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX3Bhc3N3b3JkQ29udGFpbmVyOwogCiAg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybTsK
KyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
OwogICAgIFdlYk1vdXNlRXZlbnQgbV9sYXN0TW91c2VFdmVudDsKICAgICBXZWJDb3JlOjpJbnRQ
b2ludCBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsKIApAQCAtMzA0LDEx
ICszMDgsOSBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2Rh
dGE7CiAKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Ci0gICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOwogICAgIFdlYkNvcmU6OkludFNpemUg
bV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCiAKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBIVUQgbV9I
VUQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggM2YwZDFmZjY3ZWExY2M5
MDRkNjljMTk3OTM4YzNlYzNhOTc4ODYwMi4uNzYxY2RkMTlmYTM3ZWE2MDE1YTllNWZmOThlOTMw
YzEyNWM0M2VlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KQEAgLTI2LDEzICsyNiwxMiBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKIAotI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2lm
IEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiAhVVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKIAog
I2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bXBvcnQgIlBERkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgotI2ltcG9ydCAiUERGS2l0
SW1wb3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgorI2ltcG9y
dCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9u
LmgiCiAjaW1wb3J0ICJQREZQbHVnaW5QYXNzd29yZEZpZWxkLmgiCiAjaW1wb3J0ICJQbHVnaW5W
aWV3LmgiCkBAIC02Miw2ICs2MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5oPgpAQCAtNjksMzUgKzY5
LDMyIEBACiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
b3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1BsdWdpbkRhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsQW5pbWF0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaD4KICNpbXBvcnQgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBTZXQgb3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUgYW5u
b3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBzY3JvbGxlZCBvdXQgb2Ygdmll
dyBkb24ndCBzaG93Ci0vLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5LiBXZSBjYW4ndCBhZGQgYW5u
b3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ugb3ZlcmZsb3c6IGhpZGRlbiBv
biB0aGUgYm9keQotLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGluZy4KIHN0YXRpYyBjb25zdCBj
aGFyKiBhbm5vdGF0aW9uU3R5bGUgPQotIiNhbm5vdGF0aW9uQ29udGFpbmVyIHsiCi0iICAgIG92
ZXJmbG93OiBoaWRkZW47ICIKLSIgICAgcG9zaXRpb246IGFic29sdXRlOyAiCi0iICAgIHBvaW50
ZXItZXZlbnRzOiBub25lOyAiCisiYm9keSB7ICIKKyIgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
KDE0NiwgMTQ2LCAxNDYpICFpbXBvcnRhbnQ7IgorIn0gIgorIiNwYXNzd29yZENvbnRhaW5lciB7
IgorIiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsgIgorIiAgICAtd2Via2l0LWJveC1hbGlnbjog
Y2VudGVyOyAiCisiICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsgIgorIiAgICBwb3NpdGlv
bjogZml4ZWQ7ICIKICIgICAgdG9wOiAwOyAiCiAiICAgIGxlZnQ6IDA7ICIKICIgICAgcmlnaHQ6
IDA7ICIKICIgICAgYm90dG9tOiAwOyAiCi0iICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OyAiCi0i
ICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7ICIKLSIgICAgLXdlYmtpdC1ib3gtcGFjazog
Y2VudGVyOyAiCiAifSAiCiAiLmFubm90YXRpb24geyAiCiAiICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsgIgpAQCAtMTEyLDkgKzEwOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBhbm5vdGF0aW9uU3R5
bGUgPQogIiAgICBtYXJnaW4tdG9wOiAxMDBweDsgIgogIn0gIjsKIAotLy8gSW4gbm9uLWNvbnRp
bnVvdXMgbW9kZXMsIGEgc2luZ2xlIHNjcm9sbCBldmVudCB3aXRoIGEgbWFnbml0dWRlIG9mID49
IDIwcHgKLS8vIHdpbGwganVtcCB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlLCB0byBtYXRj
aCBQREZLaXQgYmVoYXZpb3IuCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRTY3JvbGxNYWduaXR1
ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIwOworY29uc3QgZG91YmxlIHpvb21CdXR0b25TY2Fs
ZU11bHRpcGxpZXIgPSAxLjE4OTIwOwogCiBAaW50ZXJmYWNlIFdLUERGUGx1Z2luQWNjZXNzaWJp
bGl0eU9iamVjdCA6IE5TT2JqZWN0IHsKICAgICBQREZMYXllckNvbnRyb2xsZXIgKl9wZGZMYXll
ckNvbnRyb2xsZXI7CkBAIC0yNzYsNDEgKzI3MSw2IEBAIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMjA7CiAKIEBlbmQKIAotCi1A
aW50ZXJmYWNlIFdLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJL
aXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKLX0KLQotQHByb3BlcnR5IChhc3NpZ24pIFdlYktp
dDo6UERGUGx1Z2luKiBwZGZQbHVnaW47Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUERG
UGx1Z2luU2Nyb2xsYmFyTGF5ZXIKLQotQHN5bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47
Ci0KLS0gKGlkKWluaXRXaXRoUERGUGx1Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Ci17Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4
Ci17Ci0gICAgX3BkZlBsdWdpbi0+cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoc2VsZiwg
Y3R4KTsKLX0KLQotQGVuZAotCiBAaW50ZXJmYWNlIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUgOiBOU09iamVjdDxQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZT4gewogICAgIFdlYktpdDo6
UERGUGx1Z2luKiBfcGRmUGx1Z2luOwogfQpAQCAtMzMzLDQyICsyOTMsNDIgQEAgc3RhdGljIGNv
bnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsK
ICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAodm9pZCl1cGRhdGVTY3JvbGxQb3NpdGlvbjooQ0dQ
b2ludCluZXdQb3NpdGlvbgorLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBzY3JvbGxUb1BvaW50OihDR1BvaW50KW5ld1Bv
c2l0aW9uCiB7Ci0gICAgX3BkZlBsdWdpbi0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKElu
dFBvaW50KG5ld1Bvc2l0aW9uKSk7CisgICAgX3BkZlBsdWdpbi0+c2Nyb2xsVG9Qb2ludChJbnRQ
b2ludChuZXdQb3NpdGlvbikpOwogfQogCi0tICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6
KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlcworLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBj
b3B5SXRlbXM6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlcwogewog
ICAgIF9wZGZQbHVnaW4tPndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNHZW5lcmFsUGJvYXJkLCBp
dGVtcywgdHlwZXMpOwogfQogCi0tICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0
cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQK
Ky0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXll
ckNvbnRyb2xsZXIgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0
ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludAogewogICAgIF9wZGZQbHVn
aW4tPnNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcsIHBvaW50KTsKIH0K
IAotLSAodm9pZClwZXJmb3JtV2ViU2VhcmNoOihOU1N0cmluZyAqKXN0cmluZworLSAodm9pZClw
ZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxl
ciBwZXJmb3JtV2ViU2VhcmNoRm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwogewogICAgIF9w
ZGZQbHVnaW4tPnBlcmZvcm1XZWJTZWFyY2goc3RyaW5nKTsKIH0KIAotLSAodm9pZClwZXJmb3Jt
U3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZworLSAodm9pZClwZGZMYXllckNvbnRy
b2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtU3Bv
dGxpZ2h0U2VhcmNoRm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwogewogICAgIF9wZGZQbHVn
aW4tPnBlcmZvcm1TcG90bGlnaHRTZWFyY2goc3RyaW5nKTsKIH0KIAotLSAodm9pZClvcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlck9wZW5XaXRoTmF0
aXZlQXBwbGljYXRpb246KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcgog
ewogICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKIH0KIAotLSAo
dm9pZClzYXZlVG9QREYKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyU2F2ZVRvUERGOihQREZM
YXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIKIHsKICAgICBfcGRmUGx1Z2luLT5z
YXZlVG9QREYoKTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICop
dXJsCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIGRpZENsaWNrTGlua1dpdGhVUkw6KE5TVVJMICopdXJsCiB7CiAgICAg
X3BkZlBsdWdpbi0+Y2xpY2tlZExpbmsodXJsKTsKIH0KQEAgLTM3OCwxMSArMzM4LDYgQEAgc3Rh
dGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAg
PSAyMDsKICAgICBfcGRmUGx1Z2luLT5zZXRBY3RpdmVBbm5vdGF0aW9uKGFubm90YXRpb24pOwog
fQogCi0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2Fs
ZUZhY3RvcgotewotICAgIF9wZGZQbHVnaW4tPm5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5n
ZWQoc2NhbGVGYWN0b3IpOwotfQotCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihp
bnQpbW9kZQogewogICAgIF9wZGZQbHVnaW4tPm5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChtb2Rl
KTsKQEAgLTM5Myw2ICszNDgsNTAgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFn
bml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsKICAgICBfcGRmUGx1Z2luLT5ub3RpZnlT
ZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbik7CiB9CiAKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgaW52YWxpZGF0ZVJl
Y3Q6KENHUmVjdClyZWN0Cit7CisgICAgX3BkZlBsdWdpbi0+aW52YWxpZGF0ZVBERlJlY3QoZW5j
bG9zaW5nSW50UmVjdChyZWN0KSk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVySW52
YWxpZGF0ZUhVRDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7Cisg
ICAgX3BkZlBsdWdpbi0+aW52YWxpZGF0ZUhVRCgpOworfQorCistICh2b2lkKXBkZkxheWVyQ29u
dHJvbGxlclpvb21JbjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7
CisgICAgX3BkZlBsdWdpbi0+em9vbUluKCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9s
bGVyWm9vbU91dDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCit7Cisg
ICAgX3BkZlBsdWdpbi0+em9vbU91dCgpOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tQREZI
VURBbmltYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQo
Ym9vbCk+IF9jb21wbGV0aW9uSGFuZGxlcjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdL
UERGSFVEQW5pbWF0aW9uRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhBbmltYXRpb25Db21wbGV0
aW9uSGFuZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5p
bWF0aW9uICopYW5pbWF0aW9uIGZpbmlzaGVkOihCT09MKWZsYWcKK3sKKyAgICBfY29tcGxldGlv
bkhhbmRsZXIoZmxhZyk7Cit9CisKIEBlbmQKIAogQGludGVyZmFjZSBQREZWaWV3TGF5b3V0CkBA
IC01MDksMzUgKzUwOCwyNCBAQCBSZWY8UERGUGx1Z2luPiBQREZQbHVnaW46OmNyZWF0ZShXZWJG
cmFtZSogZnJhbWUpCiBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSogZnJhbWUpCiAgICAg
OiBQbHVnaW4oUERGUGx1Z2luVHlwZSkKICAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2lz
UG9zdFNjcmlwdChmYWxzZSkKLSAgICAsIG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKGZhbHNlKQot
ICAgICwgbV9jb250YWluZXJMYXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQot
ICAgICwgbV9jb250ZW50TGF5ZXIoYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKSkKLSAg
ICAsIG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5
ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKICAgICAsIG1fcGRmTGF5ZXJDb250
cm9sbGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkp
CiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXS1BERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCisgICAg
LCBtX0hVRCgqdGhpcykKIHsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0
ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7Ci0gICAgbV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKKyAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV9wZGZMYXllckNvbnRyb2xsZXJEZWxl
Z2F0ZS5nZXQoKV07CiAKICAgICBpZiAoc3VwcG9ydHNGb3JtcygpKSB7CiAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpOwotICAg
ICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChkaXZU
YWcsIGZhbHNlKTsKLSAgICAgICAgbV9hbm5vdGF0aW9uQ29udGFpbmVyLT5zZXRBdHRyaWJ1dGUo
aWRBdHRyLCAiYW5ub3RhdGlvbkNvbnRhaW5lciIpOwogCiAgICAgICAgIFJlZjxFbGVtZW50PiBh
bm5vdGF0aW9uU3R5bGVFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoc3R5bGVUYWcs
IGZhbHNlKTsKICAgICAgICAgYW5ub3RhdGlvblN0eWxlRWxlbWVudC0+c2V0VGV4dENvbnRlbnQo
YW5ub3RhdGlvblN0eWxlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAotICAgICAgICBtX2Fubm90
YXRpb25Db250YWluZXItPmFwcGVuZENoaWxkKFdURjo6bW92ZShhbm5vdGF0aW9uU3R5bGVFbGVt
ZW50KSk7Ci0gICAgICAgIGRvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpLT5hcHBlbmRDaGlsZCgq
bV9hbm5vdGF0aW9uQ29udGFpbmVyKTsKKyAgICAgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0
KCktPmFwcGVuZENoaWxkKGFubm90YXRpb25TdHlsZUVsZW1lbnQuZ2V0KCkpOwogICAgIH0KIAog
ICAgIG1fYWNjZXNzaWJpbGl0eU9iamVjdCA9IGFkb3B0TlMoW1tXS1BERlBsdWdpbkFjY2Vzc2li
aWxpdHlPYmplY3QgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKLSAgICBtX2FjY2Vz
c2liaWxpdHlPYmplY3QuZ2V0KCkucGRmTGF5ZXJDb250cm9sbGVyID0gbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCk7Ci0gICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpLnBhcmVudCA9IHdl
YkZyYW1lKCktPnBhZ2UoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOwotCi0gICAgW21f
Y29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOwotICAgIFtt
X2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOwor
ICAgIFttX2FjY2Vzc2liaWxpdHlPYmplY3Qgc2V0UGRmTGF5ZXJDb250cm9sbGVyOm1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpXTsKKyAgICBbbV9hY2Nlc3NpYmlsaXR5T2JqZWN0IHNldFBhcmVu
dDp3ZWJGcmFtZSgpLT5wYWdlKCktPmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKV07CiB9CiAK
IFBERlBsdWdpbjo6flBERlBsdWdpbigpCkBAIC01NzIsNzQgKzU2MCw2IEBAIFBsdWdpbkluZm8g
UERGUGx1Z2luOjpwbHVnaW5JbmZvKCkKICAgICByZXR1cm4gaW5mbzsKIH0KIAotdm9pZCBQREZQ
bHVnaW46OnVwZGF0ZVNjcm9sbGJhcnMoKQotewotICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9w
ZGZEb2N1bWVudFNpemUud2lkdGgoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgoKSA8IG1fcGRm
RG9jdW1lbnRTaXplLndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKLSAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDog
MDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFy
ICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJv
eGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKLQotICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53aWR0aCgpIC0g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7Ci0gICAg
ICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygp
LT55KCkgKyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgp
LCBtX3NpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAg
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5j
b250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKLSAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Ci0gICAgfQotICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5oZWlnaHQoKSAt
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkg
KyBtX3NpemUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZp
ZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkp
KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9s
bGJhclJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0g
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsK
LSAgICB9Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgp
LT52aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOwotICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKLSAgICAg
ICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0gICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFi
bGVBcmVhKHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0gICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlv
dXQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgewot
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNj
cm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXll
ciBzZXROZWVkc0Rpc3BsYXldOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCku
ZnJhbWUgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOwotICAgICAgICBbbV9o
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXll
ci5nZXQoKS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICAgICAgW21fc2Nyb2xsQ29y
bmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci19Ci0KIFBsdWdpblZpZXcqIFBERlBs
dWdpbjo6cGx1Z2luVmlldygpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcq
Pihjb250cm9sbGVyKCkpOwpAQCAtNjUwLDE3NSArNTcwLDYgQEAgY29uc3QgUGx1Z2luVmlldyog
UERGUGx1Z2luOjpwbHVnaW5WaWV3KCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7CiB9CiAKLVBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwot
ICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFy
TGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKLSAgICAgICAgW21fY29udGFp
bmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllciA9IGFkb3B0TlMo
W1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlz
XSk7Ci0gICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fdmVydGljYWxTY3Jv
bGxiYXJMYXllci5nZXQoKV07Ci0gICAgfQotICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0
KCksIG9yaWVudGF0aW9uKTsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gd2ViRnJhbWUoKS0+Y29y
ZUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAocGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2VycygpKQotICAgICAg
ICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2Ut
PnRlc3RUcmlnZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwotICAgIHJldHVybiB3aWRnZXQu
cmVsZWFzZSgpOwotfQotCi12b2lkIFBERlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Ny
b2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRh
bFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
LCBvcmllbnRhdGlvbik7Ci0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAg
c2Nyb2xsYmFyID0gbnVsbHB0cjsKLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllciByZW1vdmVG
cm9tU3VwZXJsYXllcl07Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gMDsKLSAg
ICB9Ci19Ci0KLUludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9s
bGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKLSAg
ICByZWN0Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlv
bigpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVy
dEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50
KCktPnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHBs
dWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9S
ZW5kZXJlcihwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFyZW50
UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJh
ci0+bG9jYXRpb24oKSk7Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAg
ICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xs
YmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLQotICAgIHJldHVy
biBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlclRvQ29u
dGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50KCktPnJlbmRlcmVyKCksIHBv
aW50KTsKLX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBw
YXJlbnRQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdpblZpZXcoKS0+
ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcihwbHVn
aW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAg
IHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlv
bigpKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpoYW5k
bGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCi17Ci0gICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsK
LX0KLQotSW50UmVjdCBQREZQbHVnaW46OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAotewotICAg
IGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAg
fQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFBERlBsdWdp
bjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXYWxr
IHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZyYW1l
IG9yIFJlbmRlckxheWVyLgotICAgIHJldHVybiBudWxscHRyOwotfQotCi1JbnRSZWN0IFBERlBs
dWdpbjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBs
dWdpblZpZXcoKS0+ZnJhbWVSZWN0KCk7Ci19Ci0KLWludCBQREZQbHVnaW46OnNjcm9sbFNpemUo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0
dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpKSA6IDA7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFBERlBsdWdpbjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChQYWdlKiBw
YWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGlu
Z3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBQREZQbHVnaW46OnNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1JbnRQb2ludCBQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0
KCkpOwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KCk7Ci19Ci0KLUludFBvaW50IFBERlBsdWdpbjo6
bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSA6IDA7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNj
cm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVt
T2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBtX3NpemUud2lkdGgoKSArIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9zaXplLmhl
aWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgbWF4aW11bU9mZnNldC5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Ci19Ci0KLXZv
aWQgUERGUGx1Z2luOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoU2Nyb2xsYmFyU3R5bGUgc3R5bGUs
IGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFmb3JjZVVwZGF0ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90
dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVybGF5IHN0eWxlLCB3ZSBkb24n
dCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUu
Ci0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQp
LnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKLSAgICBzZXRTY3JvbGxPZmZzZXQo
bmV3U2Nyb2xsT2Zmc2V0KTsKLSAgICAKLSAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyU3R5
bGVDaGFuZ2VkKHN0eWxlLCBmb3JjZVVwZGF0ZSk7Ci0gICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29u
dGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRp
c2FwcGVhci4KLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0KIHZvaWQgUERGUGx1Z2luOjph
ZGRBcmNoaXZlUmVzb3VyY2UoKQogewogICAgIC8vIEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3Jj
ZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExvYWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQg
anVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291cmNlcy4KQEAgLTkyMCwyMyArNjcxLDIyIEBA
IHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogCiAgICAgc2V0UERGRG9jdW1l
bnQoZG9jdW1lbnQpOwogCi0gICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwot
Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTpzaXplKCldOwotICAgIG1f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRvY3VtZW50ID0gZG9jdW1lbnQuZ2V0KCk7Ci0KLSAg
ICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAgICBwbHVnaW5WaWV3KCktPnNl
dFBhZ2VTY2FsZUZhY3RvcihbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9y
XSwgSW50UG9pbnQoKSk7Ci0KLSAgICBub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoSW50UG9p
bnQoW21fcGRmTGF5ZXJDb250cm9sbGVyIHNjcm9sbFBvc2l0aW9uXSkpOworICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6d2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpXTsgLy8vID8/PworICAgIFttX3BkZkxheWVy
Q29udHJvbGxlciBzZXREb2N1bWVudDpkb2N1bWVudC5nZXQoKV07CiAKICAgICBjYWxjdWxhdGVT
aXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAgIHJ1blNjcmlwdHNJblBERkRv
Y3VtZW50KCk7CiAKLSAgICBpZiAoW2RvY3VtZW50IGlzTG9ja2VkXSkKKyAgICBpZiAoaXNMb2Nr
ZWQoKSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKKworICAgIG1fSFVELnNl
dFZpc2libGUoIWlzTG9ja2VkKCksIEhVRDo6QW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uOjpO
byk7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjppc0xvY2tlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXTsKIH0KIAogdm9pZCBQREZQbHVnaW46OnN0cmVhbURp
ZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiwgdWludDMyX3Qs
IHVpbnQzMl90LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQpAQCAtMTAyMiw2NCArNzcyLDkxIEBAIHZvaWQgUERG
UGx1Z2luOjpydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpCiAgICAgSlNHbG9iYWxDb250ZXh0UmVs
ZWFzZShjdHgpOwogfQogCit2b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0ZVBERlJlY3QoSW50UmVj
dCByZWN0KQoreworICAgIFdpZGdldCogd2lkZ2V0ID0gcGx1Z2luVmlldygpOworCisgICAgLy8g
RklYTUU6IE9uZSBvZiB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGRvIHRoaXMgKHdp
dGggdGhlIGZsaXBwaW5nKS4KKyAgICBJbnRSZWN0IGludmFsaWRSZWN0ID0gcmVjdDsKKyAgICBp
bnZhbGlkUmVjdC5zZXRZKG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gaW52YWxpZFJlY3Qu
eSgpIC0gaW52YWxpZFJlY3QuaGVpZ2h0KCkpOworCisgICAgd2lkZ2V0LT5pbnZhbGlkYXRlUmVj
dChpbnZhbGlkUmVjdCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlSFVEKCkKK3sK
KyAgICBtX0hVRC5pbnZhbGlkYXRlKCk7Cit9CisKIHZvaWQgUERGUGx1Z2luOjpjcmVhdGVQYXNz
d29yZEVudHJ5Rm9ybSgpCiB7CisgICAgaWYgKCFzdXBwb3J0c0Zvcm1zKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgp
LT5kb2N1bWVudCgpOworICAgIG1fcGFzc3dvcmRDb250YWluZXIgPSBkb2N1bWVudC0+Y3JlYXRl
RWxlbWVudChkaXZUYWcsIGZhbHNlKTsKKyAgICBtX3Bhc3N3b3JkQ29udGFpbmVyLT5zZXRBdHRy
aWJ1dGUoaWRBdHRyLCAicGFzc3dvcmRDb250YWluZXIiKTsKKwogICAgIG1fcGFzc3dvcmRGaWVs
ZCA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQ6OmNyZWF0ZShtX3BkZkxheWVyQ29udHJvbGxlci5n
ZXQoKSwgdGhpcyk7Ci0gICAgbV9wYXNzd29yZEZpZWxkLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29u
dGFpbmVyLmdldCgpKTsKKyAgICBtX3Bhc3N3b3JkRmllbGQtPmF0dGFjaChtX3Bhc3N3b3JkQ29u
dGFpbmVyLmdldCgpKTsKKyAgICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+YXBwZW5kQ2hp
bGQoKm1fcGFzc3dvcmRDb250YWluZXIpOwogfQogCiB2b2lkIFBERlBsdWdpbjo6YXR0ZW1wdFRv
VW5sb2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCiB7CiAgICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyIGF0dGVtcHRUb1VubG9ja1dpdGhQYXNzd29yZDpwYXNzd29yZF07CiAKLSAgICBpZiAo
IVtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkgeworICAgIGlmICghaXNMb2NrZWQoKSkgeworICAg
ICAgICBtX3Bhc3N3b3JkQ29udGFpbmVyID0gbnVsbHB0cjsKICAgICAgICAgbV9wYXNzd29yZEZp
ZWxkID0gbnVsbHB0cjsKIAogICAgICAgICBjYWxjdWxhdGVTaXplcygpOwotICAgICAgICB1cGRh
dGVTY3JvbGxiYXJzKCk7CisKKyAgICAgICAgbV9IVUQuc2V0VmlzaWJsZSh0cnVlLCBIVUQ6OkFu
aW1hdGVWaXNpYmlsaXR5VHJhbnNpdGlvbjo6WWVzKTsKICAgICB9CiB9CiAKLXZvaWQgUERGUGx1
Z2luOjp1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCkKK3ZvaWQgUERGUGx1Z2luOjpj
YWxjdWxhdGVTaXplcygpCiB7Ci0gICAgZG91YmxlIG5ld1NjYWxlRmFjdG9yID0gY29udHJvbGxl
cigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgaWYgKCFoYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKCkpCi0gICAgICAgIG5ld1NjYWxlRmFjdG9yICo9IHdlYkZyYW1lKCktPnBhZ2UoKS0+cGFn
ZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAobmV3U2NhbGVGYWN0b3IgIT0gW21fcGRmTGF5ZXJD
b250cm9sbGVyIGRldmljZVNjYWxlRmFjdG9yXSkKLSAgICAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHNldERldmljZVNjYWxlRmFjdG9yOm5ld1NjYWxlRmFjdG9yXTsKLX0KKyAgICBzZXRQREZE
b2N1bWVudFNpemUoaXNMb2NrZWQoKSA/IEludFNpemUoKSA6IEludFNpemUoW21fcGRmTGF5ZXJD
b250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKSk7CiAKLXZvaWQgUERGUGx1Z2lu
Ojpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLSAgICB1cGRhdGVQYWdlQW5k
RGV2aWNlU2NhbGVGYWN0b3JzKCk7CisgICAgLy8gV2UgaGF2ZSB0byBhc3luY2hyb25vdXNseSB1
cGRhdGUgc3R5bGVzIGJlY2F1c2Ugd2UgY291bGQgYmUgaW5zaWRlIGxheW91dC4KKyAgICBSZWZQ
dHI8UERGUGx1Z2luPiByZWZmZWRUaGlzID0gdGhpczsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcmVmZmVkVGhpc10geworICAgICAgICByZWZmZWRUaGlz
LT5kaWRDYWxjdWxhdGVTaXplcygpOworICAgIH0pOwogfQogCi12b2lkIFBERlBsdWdpbjo6Y29t
cHV0ZVBhZ2VCb3hlcygpCit2b2lkIFBERlBsdWdpbjo6ZGlkQ2FsY3VsYXRlU2l6ZXMoKQogewot
ICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9w
ZGZEb2N1bWVudCBkb2N1bWVudFJlZl0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFn
ZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3Vt
ZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLSAgICAgICAg
QVNTRVJUKHBkZlBhZ2UpOworICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50ID0g
ZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCp3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1l
bnQoKSkucGx1Z2luRWxlbWVudCgpOwogCi0gICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VH
ZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOwotICAgICAgICBpZiAoQ0dSZWN0SXNF
bXB0eShib3gpKQotICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdl
LCBrQ0dQREZNZWRpYUJveCk7Ci0gICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJv
eCkpOworICAgIGlmIChpc0xvY2tlZCgpKSB7CisgICAgICAgIHBsdWdpbkVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgMTAwLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci19CiAKLXZvaWQgUERGUGx1Z2lu
OjpjYWxjdWxhdGVTaXplcygpCi17Ci0gICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkg
ewotICAgICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZSgwLCAwKSk7CisgICAgcGx1Z2lu
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBtX3BkZkRv
Y3VtZW50U2l6ZS53aWR0aCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICBwbHVn
aW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBtX3Bk
ZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisKKyAg
ICAvLyBGSVhNRTogQ2FuJ3QgZG8gdGhpcyBpbiB0aGUgb3ZlcmZsb3cvc3ViZnJhbWUgY2FzZS4g
V2hlcmUgZG9lcyBzY3JvbGwtc25hcC10eXBlIGdvPworICAgIGlmIChtX3VzaW5nQ29udGludW91
c01vZGUgfHwgIW1fZnJhbWUtPmlzTWFpbkZyYW1lKCkgfHwgIWlzRnVsbEZyYW1lUGx1Z2luKCkp
CiAgICAgICAgIHJldHVybjsKKworICAgIFJldGFpblB0cjxOU0FycmF5PiBwYWdlUmVjdHMgPSBb
bV9wZGZMYXllckNvbnRyb2xsZXIgcGFnZVJlY3RzXTsKKworICAgIFN0cmluZ0J1aWxkZXIgY29v
cmRpbmF0ZXM7CisgICAgZm9yIChOU1ZhbHVlICpyZWN0IGluIHBhZ2VSZWN0cy5nZXQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogV2h5IDQ/CisgICAgICAgIGNvb3JkaW5hdGVzLmFwcGVuZE51bWJl
cigobG9uZylbcmVjdCByZWN0VmFsdWVdLm9yaWdpbi55IC8gNCk7CisgICAgICAgIGNvb3JkaW5h
dGVzLmFwcGVuZExpdGVyYWwoInB4ICIpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBjb21lIHN0cmFpZ2h0IGZyb20gUERGS2l0LgotICAgIGNvbXB1dGVQYWdlQm94ZXMoKTsK
KyAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0U2Nyb2xsU25hcENvb3JkaW5hdGUsIGNvb3JkaW5hdGVzLnRvU3RyaW5nKCkpOwogCi0gICAg
c2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRT
aXplUmVzcGVjdGluZ1pvb21dKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUo
KS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0
KCktPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwVHlw
ZSwgIm1hbmRhdG9yeSIpOwogfQogCiBib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMTA5NCw5MCArODcxLDI3IEBAIGJvb2wgUERGUGx1
Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKIHZvaWQgUERG
UGx1Z2luOjpkZXN0cm95KCkKIHsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxl
Z2F0ZSA9IDA7Ci0KLSAgICBpZiAod2ViRnJhbWUoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAgICAgICAg
ICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICB9CisgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07CiAKICAgICBtX2FjdGl2ZUFubm90
YXRpb24gPSBudWxscHRyOwotICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IG51bGxwdHI7Ci0K
LSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lT
Y3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAgIAotICAgIFttX3Njcm9sbENvcm5lckxh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbbV9jb250ZW50TGF5ZXIgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOwogfQogCi12b2lkIFBERlBsdWdpbjo6dXBkYXRlQ29udHJvbFRpbnRzKEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KQordm9pZCBQREZQbHVnaW46OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dD
b29yZGluYXRlcykKIHsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LnVwZGF0aW5nQ29udHJv
bFRpbnRzKCkpOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLSAgICBp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Ci19Ci0KLXZvaWQgUERG
UGx1Z2luOjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dD
b250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKLSAgICAKLSAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29u
dGV4dCh0cnVlKTsKLSAgICAKLSAgICBpZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3JuZXJMYXllcikg
ewotICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QgPSB0aGlzLT5zY3JvbGxDb3JuZXJS
ZWN0KCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lclJl
Y3QueCgpLCAtc2Nyb2xsQ29ybmVyUmVjdC55KCkpOwotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihudWxscHRyLCBncmFwaGljc0NvbnRleHQsIHNjcm9s
bENvcm5lclJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFNjcm9sbGJh
ciogc2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAobGF5ZXIgPT0gbV92ZXJ0aWNh
bFNjcm9sbGJhckxheWVyKQotICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigp
OwotICAgIGVsc2UgaWYgKGxheWVyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQotICAg
ICAgICBzY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0KLSAgICBpZiAoIXNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xh
dGUoLXNjcm9sbGJhci0+eCgpLCAtc2Nyb2xsYmFyLT55KCkpOwotICAgIHNjcm9sbGJhci0+cGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICBjb250ZXh0
LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworLy8gICAgY29udGV4dC50cmFuc2xhdGUoMCwgLW1f
c2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLW1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZHJhd0luQ29udGV4dDpj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpXTsKIH0KIAogUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
UERGUGx1Z2luOjpzbmFwc2hvdCgpCiB7Ci0gICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZmxvYXQgY29udGVudHNTY2FsZUZhY3RvciA9IGNv
bnRyb2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOwotICAgIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSA9IHNpemUoKTsKLSAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNvbnRlbnRzU2Nh
bGVGYWN0b3IpOwotCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOwotCi0gICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGNvbnRlbnRz
U2NhbGVGYWN0b3IsIC1jb250ZW50c1NjYWxlRmFjdG9yKSk7Ci0gICAgY29udGV4dC0+dHJhbnNs
YXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkg
KyBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIg
c25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCldOwotCi0gICAgcmV0
dXJuIGJpdG1hcDsKLX0KLQotUGxhdGZvcm1MYXllciogUERGUGx1Z2luOjpwbHVnaW5MYXllcigp
Ci17Ci0gICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXco
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CisgICAgcmV0dXJuIEludFBvaW50
KHBvaW50LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKIH0KIAogSW50UG9pbnQg
UERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdApAQCAtMTE4Nyw4ICs5MDEsOCBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZl
cnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAKIElu
dFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5h
dGVzKHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKLSAgICByZXR1cm4g
bV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGx1
Z2luQ29vcmRpbmF0ZXMpOworICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyhw
b2ludC54KCksIG1fc2l6ZS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CisgICAgcmV0dXJuIG1fcGx1
Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBQb2ludChwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMp
OwogfQogCiBGbG9hdFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1NjcmVlbihj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CkBAIC0xMTk4LDggKzkxMiw4IEBAIEZsb2F0UmVj
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwogCi0gICAgRmxvYXRQb2ludCBvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgp
LCBzaXplKCkuaGVpZ2h0KCkgLSByZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwotICAgIEZsb2F0
UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNm
b3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVz
LCByZWN0LnNpemUoKSkpOworICAgIEZsb2F0UG9pbnQgb3JpZ2luSW5QbHVnaW5Db29yZGluYXRl
cyhyZWN0LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsK
KyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVz
LCByZWN0LnNpemUoKSkpOwogCiAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVl
bihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKIH0KQEAgLTEy
MTIsNDQgKzkyNiwyNSBAQCBJbnRSZWN0IFBERlBsdWdpbjo6Ym91bmRzT25TY3JlZW4oKSBjb25z
dAogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1h
cFJlY3QoYm91bmRzKTsKKyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9
IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBSZWN0KGJvdW5kcyk7CiAgICAgcmV0dXJu
IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMpKTsKIH0KIAogdm9pZCBQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdl
KGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHNpemUoKSA9
PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgPT0gW21fcGRm
TGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
ID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybTsKICAgICBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFu
c2Zvcm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgc2V0RnJhbWVTaXplOnBsdWdpblNpemVdOworICAgIG1fc2l6ZSA9IHBs
dWdpblNpemU7CiAKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9
IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoMSwgLTEsIDEpOwotICAgIHRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCk7
Ci0gICAgCi0gICAgaWYgKGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkgewotICAgICAgICBDR0Zs
b2F0IG1hZ25pZmljYXRpb24gPSBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpIC0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl07CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOwogCi0gICAgICAgIC8v
IEZJWE1FOiBJbnN0ZWFkIG9mIG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVz
LCB3ZSBzaG91bGQgdXNlIHRoZSB6b29tIG9yaWdpbiBmcm9tIFBsdWdpblZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3Rvci4KLSAgICAgICAgaWYgKG1hZ25pZmljYXRpb24pCi0gICAgICAgICAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOm1hZ25pZmljYXRpb24g
YXRQb2ludDpjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhtX2xhc3RNb3VzZVBvc2l0aW9uSW5Q
bHVnaW5Db29yZGluYXRlcykgaW1tZWRpYXRlbHk6Tk9dOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIElmIHdlIGRvbid0IGhhbmRsZSBwYWdlIHNjYWxlIG91cnNlbHZlcywgd2UgbmVlZCB0byBy
ZXNwZWN0IG91ciBwYXJlbnQgcGFnZSdzCi0gICAgICAgIC8vIHNjYWxlLCB3aGljaCBtYXkgaGF2
ZSBjaGFuZ2VkLgotICAgICAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7Ci0g
ICAgfSAKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RnJhbWVTaXplOmZyYW1lVmlldy0+
ZnJhbWVSZWN0KCkuc2l6ZSgpXTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0VmlzaWJs
ZVJlY3Q6ZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKV07CiAKICAgICBjYWxjdWxhdGVT
aXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAgIGlmIChtX2FjdGl2ZUFubm90
YXRpb24pCiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKLQot
ICAgIFttX2NvbnRlbnRMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAg
IFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9CiAKIHZvaWQgUERGUGx1Z2luOjpmcmFtZURpZEZp
bmlzaExvYWRpbmcodWludDY0X3QpCkBAIC0xMjY3LDcgKzk2Miw2IEBAIHZvaWQgUERGUGx1Z2lu
OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotICAgIAogc3RhdGljIE5TVUludGVnZXIgbW9k
aWZpZXJGbGFnc0Zyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0
dXJuIChldmVudC5zaGlmdEtleSgpID8gTlNTaGlmdEtleU1hc2sgOiAwKQpAQCAtMTI3OSwxMiAr
OTczLDYgQEAgc3RhdGljIE5TVUludGVnZXIgbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChjb25z
dCBXZWJFdmVudCYgZXZlbnQpCiBzdGF0aWMgYm9vbCBnZXRFdmVudFR5cGVGcm9tV2ViRXZlbnQo
Y29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYgZXZlbnRUeXBlKQogewogICAgIHN3
aXRjaCAoZXZlbnQudHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKLSAgICAg
ICAgZXZlbnRUeXBlID0gTlNLZXlEb3duOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IFdlYkV2ZW50OjpLZXlVcDoKLSAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlVcDsKLSAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgogICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsK
ICAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgpAQCAtMTMyOSwxMjcgKzEw
MTcsODAgQEAgc3RhdGljIGJvb2wgZ2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2
ZW50JiBldmVudCwgTlNFdmVudFR5cGUmIGV2ZW50VHkKIE5TRXZlbnQgKlBERlBsdWdpbjo6bnNF
dmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAg
bV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMgPSBjb252ZXJ0RnJvbVJvb3RW
aWV3VG9QbHVnaW4oZXZlbnQucG9zaXRpb24oKSk7Ci0KICAgICBJbnRQb2ludCBwb3NpdGlvbklu
UERGVmlld0Nvb3JkaW5hdGVzKGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KG1fbGFzdE1vdXNl
UG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSk7CiAKICAgICBOU0V2ZW50VHlwZSBldmVudFR5
cGU7CiAKICAgICBpZiAoIWdldEV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgZXZlbnRUeXBl
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgTlNV
SW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7
CiAKICAgICByZXR1cm4gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2Nh
dGlvbjpwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5hdGVzIG1vZGlmaWVyRmxhZ3M6bW9kaWZpZXJG
bGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0Om5pbCBldmVudE51bWJlcjow
IGNsaWNrQ291bnQ6ZXZlbnQuY2xpY2tDb3VudCgpIHByZXNzdXJlOjBdOwogfQogCi12b2lkIFBE
RlBsdWdpbjo6dXBkYXRlQ3Vyc29yKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50LCBVcGRhdGVD
dXJzb3JNb2RlIG1vZGUpCit2b2lkIFBERlBsdWdpbjo6dXBkYXRlQ3Vyc29yKGNvbnN0IFdlYk1v
dXNlRXZlbnQmIGV2ZW50LCBVcGRhdGVDdXJzb3IgbW9kZSkKIHsKLSAgICBIaXRUZXN0UmVzdWx0
IGhpdFRlc3RSZXN1bHQgPSBOb25lOworICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2ZSBhIGhhbmQg
Zm9yIGxpbmtzLCBhbmQgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGFubm90YXRpb25zLgogCi0gICAg
UERGU2VsZWN0aW9uICpzZWxlY3Rpb25VbmRlck1vdXNlID0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGV2
ZW50LnBvc2l0aW9uKCkpXTsKLSAgICBpZiAoc2VsZWN0aW9uVW5kZXJNb3VzZSAmJiBbW3NlbGVj
dGlvblVuZGVyTW91c2Ugc3RyaW5nXSBsZW5ndGhdKQotICAgICAgICBoaXRUZXN0UmVzdWx0ID0g
VGV4dDsKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0OjpO
b25lOwogCi0gICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9sYXN0SGl0VGVzdFJlc3VsdCAmJiBt
b2RlID09IFVwZGF0ZUlmTmVlZGVkKQorICAgIEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3Q29v
cmRpbmF0ZXMoY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbklu
UGx1Z2luQ29vcmRpbmF0ZXMpKTsKKyAgICBpZiAobV9IVUQuY29udGFpbnNQb2ludEluUm9vdFZp
ZXcoZXZlbnQucG9zaXRpb24oKSkpCisgICAgICAgIGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVz
dWx0OjpIVUQ7CisgICAgZWxzZSB7CisgICAgICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uVW5k
ZXJNb3VzZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2lu
dDpwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5hdGVzXTsKKyAgICAgICAgaWYgKHNlbGVjdGlvblVu
ZGVyTW91c2UgJiYgW1tzZWxlY3Rpb25VbmRlck1vdXNlIHN0cmluZ10gbGVuZ3RoXSkKKyAgICAg
ICAgICAgIGhpdFRlc3RSZXN1bHQgPSBIaXRUZXN0UmVzdWx0OjpUZXh0OworICAgIH0KKworICAg
IGlmIChoaXRUZXN0UmVzdWx0ID09IG1fbGFzdEhpdFRlc3RSZXN1bHQgJiYgbW9kZSA9PSBVcGRh
dGVDdXJzb3I6OklmTmVlZGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICB3ZWJGcmFtZSgpLT5w
YWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q3Vyc29yKGhpdFRlc3RSZXN1
bHQgPT0gVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiBwb2ludGVyQ3Vyc29yKCkpKTsKKyAgICBjb25z
dCBDdXJzb3ImIGN1cnNvciA9IFtoaXRUZXN0UmVzdWx0XSB7CisgICAgICAgIHN3aXRjaCAoaGl0
VGVzdFJlc3VsdCkgeworICAgICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6Ok5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworICAgICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6
OlRleHQ6CisgICAgICAgICAgICByZXR1cm4gaUJlYW1DdXJzb3IoKTsKKyAgICAgICAgY2FzZSBI
aXRUZXN0UmVzdWx0OjpIVUQ6CisgICAgICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwor
ICAgICAgICB9OworICAgIH0oKTsKKworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTZXRDdXJzb3IoY3Vyc29yKSk7CiAgICAgbV9sYXN0SGl0VGVz
dFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7CiB9CiAKIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIFBsYXRmb3JtTW91c2VF
dmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgIEludFBvaW50IG1vdXNl
UG9zaXRpb24gPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oZXZlbnQucG9zaXRpb24oKSk7
CiAKICAgICBtX2xhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7CiAKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB0YXJnZXRTY3JvbGxiYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gdGFyZ2V0U2Nyb2xsYmFy
Rm9yTGFzdE1vdXNlUG9zaXRpb247Ci0KLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhckxheWVy
KSB7Ci0gICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXJGcmFtZShtX3ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOwotICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJG
cmFtZS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJh
ciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckZy
YW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSkKLSAg
ICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uID0gdmVydGljYWxT
Y3JvbGxiYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIp
IHsKLSAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUobV9ob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9s
bGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQotICAgICAgICAgICAgdGFyZ2V0U2Ny
b2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFNj
cm9sbGJhckZyYW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5h
dGVzKSkKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uID0g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lckxh
eWVyICYmIEludFJlY3QobV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMo
bW91c2VQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChbcGRmRG9j
dW1lbnQoKSBpc0xvY2tlZF0pCisgICAgaWYgKGlzTG9ja2VkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1jbGlja3MgYWx3YXlzIGNh
bGwgaGFuZGxlQ29udGV4dE1lbnVFdmVudCBhcyB3ZWxsLgogICAgIGlmIChldmVudC5idXR0b24o
KSA9PSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gV2Vi
TW91c2VFdmVudDo6TGVmdEJ1dHRvbiAmJiBldmVudC5jb250cm9sS2V5KCkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAorICAgIGlmIChldmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50OjpM
ZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBOU0V2ZW50ICpuc0V2ZW50
ID0gbnNFdmVudEZvcldlYk1vdXNlRXZlbnQoZXZlbnQpOwogCiAgICAgc3dpdGNoIChldmVudC50
eXBlKCkpIHsKICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIG1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCk7CiAgICAgICAgIHVwZGF0ZUN1cnNvcihldmVudCk7Ci0KLSAgICAg
ICAgaWYgKHRhcmdldFNjcm9sbGJhcikgewotICAgICAgICAgICAgaWYgKCF0YXJnZXRTY3JvbGxi
YXJGb3JMYXN0TW91c2VQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIHRhcmdldFNjcm9sbGJh
ci0+bW91c2VFbnRlcmVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0U2Nyb2xsYmFyLT5tb3VzZU1vdmVkKHBs
YXRmb3JtRXZlbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0YXJnZXRTY3JvbGxiYXIg
JiYgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb24pCi0gICAgICAgICAgICB0YXJn
ZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbi0+bW91c2VFeGl0ZWQoKTsKLQotICAgICAg
ICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbigpKSB7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6
TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZURyYWdn
ZWQ6bnNFdmVudF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpNaWRk
bGVCdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6Tm9CdXR0b246Ci0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91
c2VNb3ZlZDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Cisg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZURyYWdnZWQ6bnNFdmVudF07CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKLSAgICAgICAg
c3dpdGNoIChldmVudC5idXR0b24oKSkgewotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Okxl
ZnRCdXR0b246Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRG93bihwbGF0Zm9ybUV2ZW50KTsKLQot
ICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpuc0V2ZW50XTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0
QnV0dG9uOgotICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHJpZ2h0TW91c2VEb3du
Om5zRXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6TWlkZGxlQnV0dG9uOgotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0
dG9uOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBtb3VzZURvd246bnNFdmVudF07CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0
dG9uKCkpIHsKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAg
ICAgICAgaWYgKHRhcmdldFNjcm9sbGJhcikKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
U2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOwotCi0gICAgICAgICAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgbW91c2VVcDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAgICBjYXNl
IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50
OjpOb0J1dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VVcDpuc0V2ZW50XTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ1OSwxNCAr
MTEwMCwxMiBAQCBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBldmVudCkKIAogYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlRW50ZXJFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKIHsKLSAgICBtb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpOwotICAgIHVwZGF0ZUN1cnNvcihldmVudCwgRm9yY2VVcGRhdGUpOworICAgIHVwZGF0ZUN1
cnNvcihldmVudCwgVXBkYXRlQ3Vyc29yOjpGb3JjZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKQogewotICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAgICAgCkBAIC0xNDc0LDcgKzExMTMsNyBAQCBib29sIFBERlBsdWdpbjo6c2hvd0NvbnRl
eHRNZW51QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpOwogICAgIEludFBvaW50
IGNvbnRlbnRzUG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhwb2ludCk7Ci0g
ICAgV2ViTW91c2VFdmVudCBldmVudChXZWJFdmVudDo6TW91c2VEb3duLCBXZWJNb3VzZUV2ZW50
OjpSaWdodEJ1dHRvbiwgY29udGVudHNQb2ludCwgY29udGVudHNQb2ludCwgMCwgMCwgMCwgMSwg
c3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4oMCksIG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpLCBXZWJDb3JlOjpGb3JjZUF0Q2xpY2spOworICAgIFdlYk1vdXNlRXZlbnQgZXZl
bnQoV2ViRXZlbnQ6Ok1vdXNlRG93biwgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b24sIGNvbnRl
bnRzUG9pbnQsIGNvbnRlbnRzUG9pbnQsIDAsIDAsIDAsIDEsIHN0YXRpY19jYXN0PFdlYkV2ZW50
OjpNb2RpZmllcnM+KDApLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgRm9yY2VBdENs
aWNrKTsKICAgICByZXR1cm4gaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7CiB9CiAKQEAg
LTE0OTAsMjcgKzExMjksNiBAQCBib29sIFBERlBsdWdpbjo6aGFuZGxlQ29udGV4dE1lbnVFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9
Ci0KLWJvb2wgUERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGV2ZW50KQotewotICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKLQotICAgIGlmICgh
Z2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdz
RnJvbVdlYkV2ZW50KGV2ZW50KTsKLSAgICAKLSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBrZXlFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2NhdGlvbjpOU1plcm9Qb2ludCBtb2Rp
ZmllckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4
dDowIGNoYXJhY3RlcnM6ZXZlbnQudGV4dCgpIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpl
dmVudC51bm1vZGlmaWVkVGV4dCgpIGlzQVJlcGVhdDpldmVudC5pc0F1dG9SZXBlYXQoKSBrZXlD
b2RlOmV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCldOwotICAgIAotICAgIHN3aXRjaCAoZXZl
bnQudHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKLSAgICAgICAgcmV0dXJu
IFttX3BkZkxheWVyQ29udHJvbGxlciBrZXlEb3duOmZha2VFdmVudF07Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19
CiAgICAgCiBib29sIFBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKQEAgLTE1MzgsMzMgKzEx
NTYsNyBAQCBib29sIFBERlBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUERGUGx1Z2lu
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldFNjcm9sbFBvc2l0
aW9uOm9mZnNldF07Ci0KLSAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQotICAgICAgICBtX2Fj
dGl2ZUFubm90YXRpb24tPnVwZGF0ZUdlb21ldHJ5KCk7Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi12b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHNjcm9s
bGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFttX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXldOwotICAgIGVsc2UgaWYgKHNjcm9sbGJhciA9PSB2
ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHNl
dE5lZWRzRGlzcGxheV07Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIFttX3Njcm9sbENvcm5lckxheWVy
IHNldE5lZWRzRGlzcGxheV07Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdp
bigpCitib29sIFBERlBsdWdpbjo6aXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdAogewogICAgIC8v
IDxvYmplY3Q+IG9yIDxlbWJlZD4gcGx1Z2lucyB3aWxsIGFwcGVhciB0byBiZSBpbiB0aGVpciBw
YXJlbnQgZnJhbWUsIHNvIHdlIGhhdmUgdG8KICAgICAvLyBjaGVjayB3aGV0aGVyIG91ciBmcmFt
ZSdzIHdpZGdldCBpcyBleGFjdGx5IG91ciBQbHVnaW5WaWV3LgpAQCAtMTU3MiwxMSArMTE2NCw2
IEBAIGJvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdpbigpCiAgICAgcmV0dXJuIGRvY3Vt
ZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihk
b2N1bWVudCktPnBsdWdpbldpZGdldCgpID09IHBsdWdpblZpZXcoKTsKIH0KIAotYm9vbCBQREZQ
bHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQotewotICAgIHJldHVybiB3ZWJGcmFtZSgp
LT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1lUGx1Z2luKCk7Ci19Ci0KIHZvaWQgUERGUGx1
Z2luOjpjbGlja2VkTGluayhOU1VSTCAqdXJsKQogewogICAgIFVSTCBjb3JlVVJMID0gdXJsOwpA
QCAtMTYwNyw3ICsxMTk0LDggQEAgdm9pZCBQREZQbHVnaW46OnNldEFjdGl2ZUFubm90YXRpb24o
UERGQW5ub3RhdGlvbiAqYW5ub3RhdGlvbikKICAgICAgICAgfQogCiAgICAgICAgIG1fYWN0aXZl
QW5ub3RhdGlvbiA9IFBERlBsdWdpbkFubm90YXRpb246OmNyZWF0ZShhbm5vdGF0aW9uLCBtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7Ci0gICAgICAgIG1fYWN0aXZlQW5ub3RhdGlv
bi0+YXR0YWNoKG1fYW5ub3RhdGlvbkNvbnRhaW5lci5nZXQoKSk7CisgICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpOworICAgICAg
ICBtX2FjdGl2ZUFubm90YXRpb24tPmF0dGFjaChkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7CiB9CkBA
IC0xNjE4LDE5ICsxMjA2LDEwIEBAIGJvb2wgUERGUGx1Z2luOjpzdXBwb3J0c0Zvcm1zKCkKICAg
ICByZXR1cm4gaXNGdWxsRnJhbWVQbHVnaW4oKTsKIH0KIAotdm9pZCBQREZQbHVnaW46Om5vdGlm
eUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3RvcikKLXsKLSAgICBp
ZiAoaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAgICBwbHVnaW5WaWV3KCktPnNldFBh
Z2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvciwgSW50UG9pbnQoKSk7Ci0KLSAgICBjYWxjdWxhdGVT
aXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBQREZQbHVnaW46Om5v
dGlmeURpc3BsYXlNb2RlQ2hhbmdlZChpbnQpCit2b2lkIFBERlBsdWdpbjo6bm90aWZ5RGlzcGxh
eU1vZGVDaGFuZ2VkKGludCBtb2RlKQogeworICAgIG1fdXNpbmdDb250aW51b3VzTW9kZSA9ICht
b2RlID09IGtQREZEaXNwbGF5U2luZ2xlUGFnZUNvbnRpbnVvdXMgfHwgbW9kZSA9PSBrUERGRGlz
cGxheVR3b1VwQ29udGludW91cyk7CiAgICAgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB1cGRhdGVT
Y3JvbGxiYXJzKCk7CiB9CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFBERlBsdWdpbjo6bGl2ZVJl
c291cmNlRGF0YSgpIGNvbnN0CkBAIC0xNjY0LDcgKzEyNDMsNyBAQCB2b2lkIFBERlBsdWdpbjo6
b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpCiAKICAgICAgICAgTlNEYXRhICpkYXRhID0gbGl2
ZURhdGEoKTsKIAotICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBXZWJDb3JlOjpjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgICAgIG1fdGVtcG9yYXJ5UERGVVVJRCA9IGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKICAgICAgICAgQVNTRVJUKG1fdGVtcG9yYXJ5UERGVVVJ
RCk7CiAKICAgICAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zYXZlUERGVG9UZW1wb3JhcnlGb2xk
ZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIHdlYkZy
YW1lKCktPnVybCgpLCBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KFtkYXRhIGJ5
dGVzXSksIFtkYXRhIGxlbmd0aF0sIG1fdGVtcG9yYXJ5UERGVVVJRCk7CkBAIC0xODE0LDcgKzEz
OTMsNyBAQCBib29sIFBERlBsdWdpbjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
V2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucywgdQogICAgIHJldHVybiBtYXRjaENvdW50ID4g
MDsKIH0KIAotYm9vbCBQREZQbHVnaW46OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK2Jvb2wgUERGUGx1Z2luOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7
CiAgICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihy
b3VuZGVkSW50UG9pbnQocG9pbnQpKTsKICAgICBQREZTZWxlY3Rpb24qIGxvb2t1cFNlbGVjdGlv
biA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpjb252
ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhsb2NhbFBvaW50KV07CkBAIC0xODM1LDcgKzE0MTQsNyBA
QCB2b2lkIFBERlBsdWdpbjo6Zm9jdXNQcmV2aW91c0Fubm90YXRpb24oKQogICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOnRydWVdOwogfQogCi12b2lkIFBE
RlBsdWdpbjo6bm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKikKK3ZvaWQgUERG
UGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKQog
ewogICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+ZGlkQ2hhbmdlU2VsZWN0aW9uKCk7CiB9CkBAIC0x
ODQ1LDcgKzE0MjQsNyBAQCBTdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25TdHJpbmcoKSBj
b25zdAogICAgIHJldHVybiBbW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRTZWxlY3Rpb25d
IHN0cmluZ107CiB9CiAKLVN0cmluZyBQREZQbHVnaW46OmdldFNlbGVjdGlvbkZvcldvcmRBdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorU3RyaW5nIFBERlBs
dWdpbjo6Z2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CiB7CiAgICAgSW50UG9pbnQgcG9pbnRJblZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRv
UERGVmlldyhjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KHBvaW50
KSkpOwogICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9yV29yZCA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpwb2ludEluVmlld107CkBAIC0xODU0
LDcgKzE0MzMsNyBAQCBTdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2lu
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkgYwogICAgIHJldHVybiBbc2VsZWN0
aW9uRm9yV29yZCBzdHJpbmddOwogfQogCi1ib29sIFBERlBsdWdpbjo6ZXhpc3RpbmdTZWxlY3Rp
b25Db250YWluc1BvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3
Q29vcmRpbmF0ZXMpIGNvbnN0Citib29sIFBERlBsdWdpbjo6ZXhpc3RpbmdTZWxlY3Rpb25Db250
YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpIGNv
bnN0CiB7CiAgICAgUERGU2VsZWN0aW9uICpjdXJyZW50U2VsZWN0aW9uID0gW21fcGRmTGF5ZXJD
b250cm9sbGVyIGN1cnJlbnRTZWxlY3Rpb25dOwogICAgIGlmICghY3VycmVudFNlbGVjdGlvbikK
QEAgLTE4ODcsNyArMTQ2Niw4IEBAIGJvb2wgUERGUGx1Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNv
bnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpCiBzdGF0aWMgTlNQ
b2ludCBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UoUERGTGF5ZXJDb250
cm9sbGVyKiBwZGZMYXllckNvbnRyb2xsZXIsIE5TUG9pbnQgcG9pbnRJblZpZXcpCiB7CiAgICAg
Q0dQb2ludCBwb2ludCA9IE5TUG9pbnRUb0NHUG9pbnQocG9pbnRJblZpZXcpOwotICAgIENHUG9p
bnQgc2Nyb2xsT2Zmc2V0ID0gW3BkZkxheWVyQ29udHJvbGxlciBzY3JvbGxQb3NpdGlvbl07CisK
KyAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IENHUG9pbnRaZXJvOwogICAgIENHRmxvYXQgc2Nh
bGVGYWN0b3IgPSBbcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl07CiAKICAg
ICBzY3JvbGxPZmZzZXQueSA9IFtwZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0
aW5nWm9vbV0uaGVpZ2h0IC0gTlNSZWN0VG9DR1JlY3QoW3BkZkxheWVyQ29udHJvbGxlciBmcmFt
ZV0pLnNpemUuaGVpZ2h0IC0gc2Nyb2xsT2Zmc2V0Lnk7CkBAIC0xODk4LDcgKzE0NzgsNyBAQCBz
dGF0aWMgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UoUERG
TGF5ZXJDb250cm9sbGVyKiBwZGZMYQogICAgIHJldHVybiBOU1BvaW50RnJvbUNHUG9pbnQobmV3
UG9pbnQpOwogfQogCi1TdHJpbmcgUERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzLCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYgZGF0YSwgUERGU2VsZWN0aW9uICoqc2VsZWN0aW9uUHRyLCBOU0RpY3Rp
b25hcnkgKipvcHRpb25zKSBjb25zdAorU3RyaW5nIFBERlBsdWdpbjo6bG9va3VwVGV4dEF0TG9j
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcywgV2ViSGl0
VGVzdFJlc3VsdERhdGEmIGRhdGEsIFBERlNlbGVjdGlvbiAqKnNlbGVjdGlvblB0ciwgTlNEaWN0
aW9uYXJ5ICoqb3B0aW9ucykgY29uc3QKIHsKICAgICBQREZTZWxlY3Rpb24qJiBzZWxlY3Rpb24g
PSAqc2VsZWN0aW9uUHRyOwogCkBAIC0xOTA5LDcgKzE0ODksNyBAQCBTdHJpbmcgUERGUGx1Z2lu
Ojpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlv
bkluVmlldwogICAgIEludFBvaW50IHBvaW50SW5QREZWaWV3ID0gY29udmVydEZyb21QbHVnaW5U
b1BERlZpZXcoY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5kZWRJbnRQb2ludChsb2Nh
dGlvbkluVmlld0Nvb3JkaW5hdGVzKSkpOwogICAgIHNlbGVjdGlvbiA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpwb2ludEluUERGVmlld107CiAgICAg
aWYgKCFzZWxlY3Rpb24pCi0gICAgICAgIHJldHVybiBAIiI7CisgICAgICAgIHJldHVybiAiIjsK
IAogICAgIE5TUG9pbnQgcG9pbnRJbkxheW91dFNwYWNlID0gcG9pbnRJbkxheW91dFNwYWNlRm9y
UG9pbnRJbldpbmRvd1NwYWNlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCBwb2ludEluUERG
Vmlldyk7CiAKQEAgLTE5MzcsNyArMTUxNyw3IEBAIFN0cmluZyBQREZQbHVnaW46Omxvb2t1cFRl
eHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3CiAg
ICAgCiAgICAgTlNTdHJpbmcgKmxvb2t1cFRleHQgPSBEaWN0aW9uYXJ5TG9va3VwOjpzdHJpbmdG
b3JQREZTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICBpZiAoIWxvb2t1cFRleHQg
fHwgIWxvb2t1cFRleHQubGVuZ3RoKQotICAgICAgICByZXR1cm4gQCIiOworICAgICAgICByZXR1
cm4gIiI7CiAKICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudFNlbGVjdGlvbjpz
ZWxlY3Rpb25dOwogICAgIHJldHVybiBsb29rdXBUZXh0OwpAQCAtMTk0Nyw3ICsxNTI3LDcgQEAg
c3RhdGljIE5TUmVjdCByZWN0SW5WaWV3U3BhY2VGb3JSZWN0SW5MYXlvdXRTcGFjZShQREZMYXll
ckNvbnRyb2xsZXIqIHBkZkxheWVyQ28KIHsKICAgICBDR1JlY3QgbmV3UmVjdCA9IE5TUmVjdFRv
Q0dSZWN0KGxheW91dFNwYWNlUmVjdCk7CiAgICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9IHBkZkxh
eWVyQ29udHJvbGxlci5jb250ZW50U2NhbGVGYWN0b3I7Ci0gICAgQ0dQb2ludCBzY3JvbGxPZmZz
ZXQgPSBwZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb247CisgICAgQ0dQb2ludCBzY3Jv
bGxPZmZzZXQgPSBDR1BvaW50WmVybzsKIAogICAgIHNjcm9sbE9mZnNldC55ID0gcGRmTGF5ZXJD
b250cm9sbGVyLmNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb20uaGVpZ2h0IC0gTlNSZWN0VG9DR1Jl
Y3QocGRmTGF5ZXJDb250cm9sbGVyLmZyYW1lKS5zaXplLmhlaWdodCAtIHNjcm9sbE9mZnNldC55
OwogCkBAIC0xOTYyLDcgKzE1NDIsNyBAQCBzdGF0aWMgTlNSZWN0IHJlY3RJblZpZXdTcGFjZUZv
clJlY3RJbkxheW91dFNwYWNlKFBERkxheWVyQ29udHJvbGxlciogcGRmTGF5ZXJDbwogICAgIHJl
dHVybiBOU1JlY3RGcm9tQ0dSZWN0KG5ld1JlY3QpOwogfQogCi1XZWJDb3JlOjpGbG9hdFJlY3Qg
UERGUGx1Z2luOjp2aWV3UmVjdEZvclNlbGVjdGlvbihQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikg
Y29uc3QKK0Zsb2F0UmVjdCBQREZQbHVnaW46OnJlY3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3KFBE
RlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zdAogewogICAgIFBERlBhZ2UgKmN1cnJlbnRQYWdl
ID0gbmlsOwogICAgIE5TQXJyYXkqIHBhZ2VzID0gc2VsZWN0aW9uLnBhZ2VzOwpAQCAtMTk3OCwx
MiArMTU1OCw3IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBQREZQbHVnaW46OnZpZXdSZWN0Rm9yU2Vs
ZWN0aW9uKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zCiAKICAgICByZWN0SW5WaWV3Lm9y
aWdpbiA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9pbnQocmVjdEluVmlldy5v
cmlnaW4pKTsKIAotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJlY3QocmVjdEluVmlldyk7Ci19
Ci0KLUNHRmxvYXQgUERGUGx1Z2luOjpzY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdOworICAgIHJldHVybiBG
bG9hdFJlY3QocmVjdEluVmlldyk7CiB9CiAKIHZvaWQgUERGUGx1Z2luOjpwZXJmb3JtV2ViU2Vh
cmNoKE5TU3RyaW5nICpzdHJpbmcpCkBAIC0xOTk2LDYzICsxNTcxLDIwNiBAQCB2b2lkIFBERlBs
dWdpbjo6cGVyZm9ybVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAqc3RyaW5nKQogICAgIHdlYkZy
YW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWFyY2hXaXRoU3Bv
dGxpZ2h0KHN0cmluZykpOwogfQogCi1ib29sIFBERlBsdWdpbjo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK05TRGF0YSAqUERGUGx1Z2luOjpsaXZlRGF0YSgp
IGNvbnN0CiB7Ci0gICAgUERGRGlzcGxheU1vZGUgZGlzcGxheU1vZGUgPSBbbV9wZGZMYXllckNv
bnRyb2xsZXIgZGlzcGxheU1vZGVdOwotCi0gICAgaWYgKGRpc3BsYXlNb2RlID09IGtQREZEaXNw
bGF5U2luZ2xlUGFnZUNvbnRpbnVvdXMgfHwgZGlzcGxheU1vZGUgPT0ga1BERkRpc3BsYXlUd29V
cENvbnRpbnVvdXMpCi0gICAgICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxF
dmVudChwbGF0Zm9ybShldmVudCkpOwotCi0gICAgTlNVSW50ZWdlciBjdXJyZW50UGFnZUluZGV4
ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRQYWdlSW5kZXhdOwotICAgIGJvb2wgaW5G
aXJzdFBhZ2UgPSAhY3VycmVudFBhZ2VJbmRleDsKLSAgICBib29sIGluTGFzdFBhZ2UgPSBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgbGFzdFBhZ2VJbmRleF0gPT0gY3VycmVudFBhZ2VJbmRleDsKKyAg
ICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24tPmNv
bW1pdCgpOwogCi0gICAgYm9vbCBhdFNjcm9sbFRvcCA9ICFzY3JvbGxQb3NpdGlvbigpLnkoKTsK
LSAgICBib29sIGF0U2Nyb2xsQm90dG9tID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgPT0gbWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkueSgpOworICAgIC8vIFNhdmUgZGF0YSBzdHJhaWdodCBmcm9tIHRo
ZSByZXNvdXJjZSBpbnN0ZWFkIG9mIFBERktpdCBpZiB0aGUgZG9jdW1lbnQgaXMKKyAgICAvLyB1
bnRvdWNoZWQgYnkgdGhlIHVzZXIsIHNvIHRoYXQgUERGcyB3aGljaCBQREZLaXQgY2FuJ3QgZGlz
cGxheSB3aWxsIHN0aWxsIGJlIGRvd25sb2FkYWJsZS4KKyAgICBpZiAobV9wZGZEb2N1bWVudFdh
c011dGF0ZWQpCisgICAgICAgIHJldHVybiBbbV9wZGZEb2N1bWVudCBkYXRhUmVwcmVzZW50YXRp
b25dOworICAgIAorICAgIHJldHVybiByYXdEYXRhKCk7Cit9CiAKLSAgICBib29sIGluTW9tZW50
dW1TY3JvbGwgPSBldmVudC5tb21lbnR1bVBoYXNlKCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VO
b25lOworTlNPYmplY3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsKK30KIAotICAgIGludCBz
Y3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IGRlZmF1bHRTY3JvbGxNYWduaXR1
ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcDsKK3ZvaWQgUERGUGx1Z2luOjpzY3JvbGxUb1BvaW50KElu
dFBvaW50IHNjcm9sbFBvaW50KQoreworICAgIEZyYW1lKiBmcmFtZSA9IHBsdWdpblZpZXcoKS0+
ZnJhbWUoKTsKKyAgICBmbG9hdCBzY2FsZSA9IGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3Rv
cigpOworICAgIHNjcm9sbFBvaW50LnNjYWxlKHNjYWxlLCBzY2FsZSk7CisgICAgZnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHNjcm9sbFBvaW50KTsKK30KIAot
ICAgIC8vIEltcHJlY2lzZSBpbnB1dCBkZXZpY2VzIHNob3VsZCBoYXZlIGEgbG93ZXIgdGhyZXNo
b2xkIHNvIHRoYXQgImNsaWNreSIgc2Nyb2xsIHdoZWVscyBjYW4gZmxpcCBwYWdlcy4KLSAgICBp
ZiAoIWV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSkKLSAgICAgICAgc2Nyb2xsTWFn
bml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAwOworZmxvYXQgUERGUGx1Z2luOjpzY2FsZUZh
Y3RvcigpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1lID0gcGx1Z2luVmlldygpLT5mcmFtZSgp
OworICAgIHJldHVybiBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKK30KIAotICAg
IGlmIChhdFNjcm9sbEJvdHRvbSAmJiAhaW5MYXN0UGFnZSAmJiBldmVudC5kZWx0YSgpLmhlaWdo
dCgpIDwgMCkgewotICAgICAgICBpZiAoZXZlbnQuZGVsdGEoKS5oZWlnaHQoKSA8PSAtc2Nyb2xs
TWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgJiYgIWluTW9tZW50dW1TY3JvbGwpCi0gICAg
ICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ290b05leHRQYWdlXTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Cit2b2lkIFBERlBsdWdpbjo6em9vbUluKCkKK3sKKyAgICBpZiAod2ViRnJhbWUo
KS0+aXNNYWluRnJhbWUoKSAmJiBpc0Z1bGxGcmFtZVBsdWdpbigpKSB7CisgICAgICAgIFdlYlBh
Z2UqIHBhZ2UgPSB3ZWJGcmFtZSgpLT5wYWdlKCk7CisgICAgICAgIHBhZ2UtPnNjYWxlUGFnZShw
YWdlLT5wYWdlU2NhbGVGYWN0b3IoKSAqIHpvb21CdXR0b25TY2FsZU11bHRpcGxpZXIsIEludFBv
aW50KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRD
b250ZW50U2NhbGVGYWN0b3I6W21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rv
cl0gKiB6b29tQnV0dG9uU2NhbGVNdWx0aXBsaWVyXTsKKyAgICAgICAgY2FsY3VsYXRlU2l6ZXMo
KTsKICAgICB9Cit9CiAKLSAgICBpZiAoYXRTY3JvbGxUb3AgJiYgIWluRmlyc3RQYWdlICYmIGV2
ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPiAwKSB7Ci0gICAgICAgIGlmIChldmVudC5kZWx0YSgpLmhl
aWdodCgpID49IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1vbWVu
dHVtU2Nyb2xsKSB7Ci0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAg
ICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ290b1ByZXZpb3VzUGFnZV07Ci0gICAgICAgICAg
ICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkp
OwotICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKK3ZvaWQgUERGUGx1Z2luOjp6b29tT3V0KCkKK3sKKyAgICBpZiAod2Vi
RnJhbWUoKS0+aXNNYWluRnJhbWUoKSAmJiBpc0Z1bGxGcmFtZVBsdWdpbigpKSB7CisgICAgICAg
IFdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZSgpLT5wYWdlKCk7CisgICAgICAgIHBhZ2UtPnNjYWxl
UGFnZShwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKSAvIHpvb21CdXR0b25TY2FsZU11bHRpcGxpZXIs
IEludFBvaW50KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciBzZXRDb250ZW50U2NhbGVGYWN0b3I6W21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2Fs
ZUZhY3Rvcl0gLyB6b29tQnV0dG9uU2NhbGVNdWx0aXBsaWVyXTsKKyAgICAgICAgY2FsY3VsYXRl
U2l6ZXMoKTsKICAgICB9Cit9CisKK1BERlBsdWdpbjo6SFVEOjpIVUQoUERGUGx1Z2luJiBwbHVn
aW4pCisgICAgOiBtX292ZXJsYXkoUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcykpCisgICAgLCBt
X3BsdWdpbihwbHVnaW4pCit7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gcGx1Z2luLndlYkZy
YW1lKCk7CisKKyAgICAvLyBJbiBvcmRlciB0byBhdm9pZCB0aGUgb3ZlcmxheSBsYWdnaW5nIGJl
aGluZCBtYWluLWZyYW1lIHNjcm9sbGluZywgd2UgbmVlZAorICAgIC8vIHRvIGZvcmNlIHN5bmNo
cm9ub3VzIHNjcm9sbGluZyBmb3IgdGhlIHdob2xlIHBhZ2UgaWYgd2UgaGF2ZSBhIEhVRCBpbiBh
IHN1YmZyYW1lIFBERi4KKyAgICBtX292ZXJsYXktPnNldE5lZWRzU3luY2hyb25vdXNTY3JvbGxp
bmcoIXdlYkZyYW1lLT5pc01haW5GcmFtZSgpKTsKKworICAgIE1haW5GcmFtZSYgbWFpbkZyYW1l
ID0gd2ViRnJhbWUtPmNvcmVGcmFtZSgpLT5tYWluRnJhbWUoKTsKKyAgICBtYWluRnJhbWUucGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG1fb3ZlcmxheS5wdHIoKSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIG1fb3ZlcmxheS0+c2V0TmVl
ZHNEaXNwbGF5KCk7CiAKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZl
bnQocGxhdGZvcm0oZXZlbnQpKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBwbGF0Zm9y
bUNBTGF5ZXIgPSBkb3duY2FzdDxHcmFwaGljc0xheWVyQ0E+KG1fb3ZlcmxheS0+bGF5ZXIoKSku
cGxhdGZvcm1DQUxheWVyKCk7CisgICAgcGxhdGZvcm1DQUxheWVyLT5zZXRPcGFjaXR5KDApOwog
fQogCi1OU0RhdGEgKlBERlBsdWdpbjo6bGl2ZURhdGEoKSBjb25zdAorUERGUGx1Z2luOjpIVUQ6
On5IVUQoKQogewotICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCi0gICAgICAgIG1fYWN0aXZl
QW5ub3RhdGlvbi0+Y29tbWl0KCk7CisgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUgPSBtX3BsdWdp
bi53ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+bWFpbkZyYW1lKCk7CisgICAgbWFpbkZyYW1lLnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fb3ZlcmxheS5wdHIo
KSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworfQogCi0gICAgLy8gU2F2ZSBk
YXRhIHN0cmFpZ2h0IGZyb20gdGhlIHJlc291cmNlIGluc3RlYWQgb2YgUERGS2l0IGlmIHRoZSBk
b2N1bWVudCBpcwotICAgIC8vIHVudG91Y2hlZCBieSB0aGUgdXNlciwgc28gdGhhdCBQREZzIHdo
aWNoIFBERktpdCBjYW4ndCBkaXNwbGF5IHdpbGwgc3RpbGwgYmUgZG93bmxvYWRhYmxlLgotICAg
IGlmIChtX3BkZkRvY3VtZW50V2FzTXV0YXRlZCkKLSAgICAgICAgcmV0dXJuIFttX3BkZkRvY3Vt
ZW50IGRhdGFSZXByZXNlbnRhdGlvbl07Ci0gICAgCi0gICAgcmV0dXJuIHJhd0RhdGEoKTsKK3Zv
aWQgUERGUGx1Z2luOjpIVUQ6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKK3sK
IH0KIAotTlNPYmplY3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Cit2
b2lkIFBERlBsdWdpbjo6SFVEOjp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBh
Z2UpCiB7Ci0gICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsKK30KKwordm9p
ZCBQREZQbHVnaW46OkhVRDo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQorewor
fQorCitJbnRSZWN0IFBERlBsdWdpbjo6SFVEOjpmcmFtZUluUm9vdFZpZXcoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgY29tZSBmcm9tIFBERktpdC4KKyAgICBjb25zdCBp
bnQgSFVEV2lkdGggPSAyMzY7CisgICAgY29uc3QgaW50IEhVREhlaWdodCA9IDcyOworICAgIGNv
bnN0IGludCBIVURZT2Zmc2V0ID0gNTA7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
cGx1Z2luLndlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgSW50UmVjdCBmcmFt
ZVJlY3RJblJvb3RWaWV3ID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Sb290VmlldyhmcmFtZVZpZXct
PmJvdW5kc1JlY3QoKSk7CisgICAgRmxvYXRSZWN0IEhVRFJlY3QoZnJhbWVSZWN0SW5Sb290Vmll
dy54KCkgKyAoZnJhbWVSZWN0SW5Sb290Vmlldy53aWR0aCgpIC8gMiAtIChIVURXaWR0aCAvIDIp
KSwgZnJhbWVSZWN0SW5Sb290Vmlldy55KCkgKyAoZnJhbWVSZWN0SW5Sb290Vmlldy5oZWlnaHQo
KSAtIEhVRFlPZmZzZXQgLSBIVURIZWlnaHQpLCBIVURXaWR0aCwgSFVESGVpZ2h0KTsKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChIVURSZWN0KTsKK30KKworYm9vbCBQREZQbHVnaW46OkhV
RDo6Y29udGFpbnNQb2ludEluUm9vdFZpZXcoSW50UG9pbnQgcG9pbnQpCit7CisgICAgaWYgKG1f
cGx1Z2luLmlzTG9ja2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBm
cmFtZUluUm9vdFZpZXcoKS5jb250YWlucyhwb2ludCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpI
VUQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCBmcmFtZUluUm9vdFZpZXcgPSB0
aGlzLT5mcmFtZUluUm9vdFZpZXcoKTsKKworICAgIGNvbnRleHQudHJhbnNsYXRlKEludFNpemUo
ZnJhbWVJblJvb3RWaWV3LngoKSwgZnJhbWVJblJvb3RWaWV3LnkoKSArIGZyYW1lSW5Sb290Vmll
dy5oZWlnaHQoKSkpOworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisKKyAg
ICBJbnRSZWN0IGxvY2FsUmVjdChJbnRQb2ludCgpLCBmcmFtZUluUm9vdFZpZXcuc2l6ZSgpKTsK
KyAgICBjb250ZXh0LmNsaXAobG9jYWxSZWN0KTsKKworICAgIFttX3BsdWdpbi5wZGZMYXllckNv
bnRyb2xsZXIoKSBkcmF3SFVESW5Db250ZXh0OmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCldOwor
fQorCit2b2lkIFBERlBsdWdpbjo6SFVEOjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX292ZXJsYXkt
PnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFBERlBsdWdpbjo6SFVEOjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSwgQW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uIGFuaW1hdGVUcmFuc2l0
aW9uKQoreworICAgIGlmICh2aXNpYmxlID09IG1fdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKKworICAgIGZsb2F0IHRvVmFsdWUgPSBtX3Zpc2li
bGUgPyAwLjc1IDogMDsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBwbGF0Zm9ybUNBTGF5
ZXIgPSBkb3duY2FzdDxHcmFwaGljc0xheWVyQ0E+KG1fb3ZlcmxheS0+bGF5ZXIoKSkucGxhdGZv
cm1DQUxheWVyKCk7CisKKyAgICBpZiAoYW5pbWF0ZVRyYW5zaXRpb24gPT0gQW5pbWF0ZVZpc2li
aWxpdHlUcmFuc2l0aW9uOjpObykgeworICAgICAgICBwbGF0Zm9ybUNBTGF5ZXItPnJlbW92ZUFu
aW1hdGlvbkZvcktleSgiSFVERmFkZSIpOworICAgICAgICBwbGF0Zm9ybUNBTGF5ZXItPnNldE9w
YWNpdHkodG9WYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmbG9hdCBkdXJh
dGlvbiA9IG1fdmlzaWJsZSA/IDAuMjUgOiAwLjU7CisKKyAgICBSZXRhaW5QdHI8Q0FCYXNpY0Fu
aW1hdGlvbj4gZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhL
ZXlQYXRoOkAib3BhY2l0eSJdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0
aW9uXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbjpbQ0FNZWRpYVRpbWlu
Z0Z1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6a0NBTWVkaWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVh
c2VPdXRdXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpbW1tXS1BERkhVREFuaW1h
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aEFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOltw
bGF0Zm9ybUNBTGF5ZXIsIHRvVmFsdWVdIChib29sIGNvbXBsZXRlZCkgeworICAgICAgICBpZiAo
Y29tcGxldGVkKQorICAgICAgICAgICAgcGxhdGZvcm1DQUxheWVyLT5zZXRPcGFjaXR5KHRvVmFs
dWUpOworCisgICAgfV0gYXV0b3JlbGVhc2VdXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRGcm9t
VmFsdWU6QCgoKENBTGF5ZXIgKilwbGF0Zm9ybUNBTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS5wcmVz
ZW50YXRpb25MYXllcikub3BhY2l0eSldOworICAgIFtmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6
QCh0b1ZhbHVlKV07CisKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9u
ID0gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUoZmFkZUFuaW1hdGlvbi5nZXQoKSk7
CisgICAgcGxhdGZvcm1DQUxheWVyLT5yZW1vdmVBbmltYXRpb25Gb3JLZXkoIkhVREZhZGUiKTsK
KyAgICBwbGF0Zm9ybUNBTGF5ZXItPmFkZEFuaW1hdGlvbkZvcktleSgiSFVERmFkZSIsICphbmlt
YXRpb24pOworfQorCitib29sIFBERlBsdWdpbjo6SFVEOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5
JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAobV9wbHVnaW4u
aXNMb2NrZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0aGUgSFVEIHRvIGFwcGVhciB3aGVuIGRyYWdnaW5nIHBhc3QgaXQsIG9yIGRpc2FwcGVhciB3
aGVuIGRyYWdnaW5nIGZyb20gYSBidXR0b24sCisgICAgLy8gc28gZG9uJ3QgdXBkYXRlIHZpc2li
aWxpdHkgd2hpbGUgYW55IG1vdXNlIGJ1dHRvbnMgYXJlIHByZXNzZWQuCisgICAgaWYgKGV2ZW50
LmJ1dHRvbigpID09IE1vdXNlQnV0dG9uOjpOb0J1dHRvbikKKyAgICAgICAgc2V0VmlzaWJsZShj
b250YWluc1BvaW50SW5Sb290VmlldyhldmVudC5wb3NpdGlvbigpKSwgQW5pbWF0ZVZpc2liaWxp
dHlUcmFuc2l0aW9uOjpZZXMpOworCisgICAgaWYgKCFtX3Zpc2libGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChldmVudC5idXR0b24oKSAhPSBNb3VzZUJ1dHRvbjo6TGVmdEJ1
dHRvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UG9pbnQgcG9zaXRpb25JblJv
b3RWaWV3Q29vcmRpbmF0ZXMoZXZlbnQucG9zaXRpb24oKSk7CisgICAgSW50UmVjdCBIVURSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVJblJvb3RWaWV3KCk7CisKKyAgICBhdXRvIGV2
ZW50V2l0aFR5cGUgPSBbJl0oTlNFdmVudFR5cGUgZXZlbnRUeXBlKSAtPiBOU0V2ZW50ICogewor
ICAgICAgICByZXR1cm4gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2Nh
dGlvbjpwb3NpdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcyBtb2RpZmllckZsYWdzOjAgdGltZXN0
YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4dDpuaWwgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50
OmV2ZW50LmNsaWNrQ291bnQoKSBwcmVzc3VyZTowXTsKKyAgICB9OworCisgICAgYXV0byBwZGZM
YXllckNvbnRyb2xsZXIgPSBtX3BsdWdpbi5wZGZMYXllckNvbnRyb2xsZXIoKTsKKworICAgIHN3
aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVk
OgorICAgICAgICByZXR1cm4gW3BkZkxheWVyQ29udHJvbGxlciBtb3VzZURyYWdnZWQ6ZXZlbnRX
aXRoVHlwZShOU0xlZnRNb3VzZURyYWdnZWQpIGluSFVEV2l0aEJvdW5kczpIVURSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzXTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDoK
KyAgICAgICAgcmV0dXJuIFtwZGZMYXllckNvbnRyb2xsZXIgbW91c2VEb3duOmV2ZW50V2l0aFR5
cGUoTlNMZWZ0TW91c2VEb3duKSBpbkhVRFdpdGhCb3VuZHM6SFVEUmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlc107CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOgorICAgICAg
ICByZXR1cm4gW3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOmV2ZW50V2l0aFR5cGUoTlNMZWZ0
TW91c2VVcCkgaW5IVURXaXRoQm91bmRzOkhVRFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXNdOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkFubm90YXRpb24ubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkFubm90YXRpb24ubW0KaW5kZXgg
YTAyOWQyNWY5MWU4MmU2ZGIxYjJmMGZhNWEyYmUzOGQ2YzFjNzJiZC4uZGUzOTRhOWI4NjA0NTc1
NGJmMTBlNjc1NTgyMTk0MWIyZGI2ZTM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5vdGF0aW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbQpAQCAt
MjksNyArMjksNyBAQAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW1wb3J0ICJQREZL
aXRJbXBvcnRzLmgiCi0jaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgiCisjaW1w
b3J0ICJQREZMYXllckNvbnRyb2xsZXJTUEkuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgogI2lt
cG9ydCAiUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oIgogI2ltcG9ydCAiUERGUGx1Z2luVGV4
dEFubm90YXRpb24uaCIKQEAgLTk4LDE0ICs5OCwxOSBAQCBQREZQbHVnaW5Bbm5vdGF0aW9uOjp+
UERGUGx1Z2luQW5ub3RhdGlvbigpCiB2b2lkIFBERlBsdWdpbkFubm90YXRpb246OnVwZGF0ZUdl
b21ldHJ5KCkKIHsKICAgICBJbnRTaXplIGRvY3VtZW50U2l6ZShtX3BkZkxheWVyQ29udHJvbGxl
ci5jb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tKTsKLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlv
bihtX3BkZkxheWVyQ29udHJvbGxlci5zY3JvbGxQb3NpdGlvbik7CiAgICAgTlNSZWN0IGFubm90
YXRpb25SZWN0ID0gTlNSZWN0RnJvbUNHUmVjdChbbV9wZGZMYXllckNvbnRyb2xsZXIgYm91bmRz
Rm9yQW5ub3RhdGlvbjptX2Fubm90YXRpb24uZ2V0KCldKTsKIAogICAgIFN0eWxlZEVsZW1lbnQq
IHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCgpKTsK
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIGFubm90YXRpb25SZWN0LnNpemUud2lkdGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgp
OwogICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlI
ZWlnaHQsIGFubm90YXRpb25SZWN0LnNpemUuaGVpZ2h0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKTsKKyNpZiAhVVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKKyAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgYW5ub3RhdGlvblJlY3Qu
b3JpZ2luLngsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIGRvY3VtZW50U2l6ZS5oZWln
aHQoKSAtIGFubm90YXRpb25SZWN0Lm9yaWdpbi55IC0gYW5ub3RhdGlvblJlY3Quc2l6ZS5oZWln
aHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworI2Vsc2UKKyAgICBJbnRQb2ludCBzY3Jv
bGxQb3NpdGlvbihtX3BkZkxheWVyQ29udHJvbGxlci5zY3JvbGxQb3NpdGlvbik7CiAgICAgc3R5
bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIGFubm90
YXRpb25SZWN0Lm9yaWdpbi54IC0gc2Nyb2xsUG9zaXRpb24ueCgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5VG9wLCBkb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBhbm5vdGF0aW9uUmVjdC5vcmln
aW4ueSAtIGFubm90YXRpb25SZWN0LnNpemUuaGVpZ2h0IC0gc2Nyb2xsUG9zaXRpb24ueSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyNlbmRpZgogfQogCiBib29sIFBERlBsdWdpbkFu
bm90YXRpb246OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNl
QW5ub3RhdGlvbi5tbQppbmRleCA2MjFkYzAxMWRiODc0ZmRmM2RmMjMwNWFlNDA3MzY3OWYzNmYw
ZjM5Li43MTExNTYxYzRkYjNjNjc4M2VjMjJjZGQ3YmQxMmIzNTNkMDM1ODJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFu
bm90YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJQ
REZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLmgiCiAKICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIK
LSNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlckRldGFpbHMuaCIKKyNpbXBvcnQgIlBERkxheWVy
Q29udHJvbGxlclNQSS5oIgogI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9DU1NQcmltaXRpdmVWYWx1ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DU1NQcm9wZXJ0eU5h
bWVzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpblBhc3N3b3JkRmllbGQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW0KaW5kZXggNzM5OGI1MzYwOTc1N2Y2
Y2M3YjhhNGZhMzFhMTRhNzgyYWExNWQ2MC4uYjJhM2M3ZjBmZWZhNWJiMGY1N2YxMzVkM2IzNmFj
NzAyMTdlZGQ3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbQpAQCAtMjksNyArMjks
NyBAQAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW1wb3J0ICJQREZLaXRJbXBvcnRz
LmgiCi0jaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgiCisjaW1wb3J0ICJQREZM
YXllckNvbnRyb2xsZXJTUEkuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgogI2ltcG9ydCA8UERG
S2l0L1BERktpdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlv
bi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4
dEFubm90YXRpb24ubW0KaW5kZXggYTRiNDlhMTQwZGYyZDExOGRkMTQ0NTI2Zjg5OTBjNDJiMDg2
ZmZmNS4uMGIzYWUwMWY2MGNkYTgwZGZlOGFhNGEzMDUyNWIxM2Y0NTgyZTEwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5u
b3RhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpblRleHRBbm5vdGF0aW9uLm1tCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbXBvcnQgIlBE
RkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgogI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5o
IgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5oIgorI2ltcG9ydCAiUERGTGF5
ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW4uaCIKICNpbXBvcnQgPFBERktp
dC9QREZLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJpbWl0aXZlVmFsdWUuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAppbmRleCBlZTk1OTA5OGM1MDYw
ZjY3YzUyNTI4ZDIzYWVjZTBhNTVkMzNlZDhhLi4zM2RiZWU1YmJiYTYxNmZhYjM0MDkwMzJiMTlm
MmY2Y2VhNjhjYmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
bi5oCkBAIC0yMjIsMTAgKzIyMiwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBBc2sgdGhlIHBsdWct
aW4gd2hldGhlciBpdCB3YW50cyBVUkxzIGFuZCBmaWxlcyBkcmFnZ2VkIG9udG8gaXQgdG8gY2F1
c2UgbmF2aWdhdGlvbi4KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJv
bURyYWdzKCkgPSAwOwotICAgIAorCiAgICAgLy8gQXNrIHRoZSBwbHVnLWluIHdoZXRoZXIgaXQg
d2FudHMgdG8gb3ZlcnJpZGUgZnVsbC1wYWdlIHpvb20uCi0gICAgdmlydHVhbCBib29sIGhhbmRs
ZXNQYWdlU2NhbGVGYWN0b3IoKSA9IDA7Ci0gICAgCisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IoKSBjb25zdCA9IDA7CisKICAgICAvLyBUZWxscyB0aGUgcGx1Zy1pbiBh
Ym91dCBmb2N1cyBjaGFuZ2VzLgogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKSA9IDA7
CiAKQEAgLTI5Nyw2ICsyOTcsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG11dGVk
U3RhdGVDaGFuZ2VkKGJvb2wpIHsgfQogCisgICAgdmlydHVhbCBib29sIGNhbkNyZWF0ZVRyYW5z
aWVudFBhaW50aW5nU25hcHNob3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGx1Z2luKFBsdWdpblR5cGUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAppbmRleCA2ZDdi
NDZkMmM2OGZiYmNjNGI1OWJhNjQyY2M3MWQwM2M4MGVjYzc3Li4zYjU4ZTIwYTFmZTBlMjMwOTVk
MGMxM2ViMWM2YzkzMWViNmMzZDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBib29sIFBsdWdp
blByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
KQogICAgIHJldHVybiBlbmFibGVkOwogfQogICAgIAotYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpCitib29sIFBsdWdpblByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKCkgY29uc3QKIHsKICAgICBpZiAobV93YWl0aW5nT25Bc3luY2hyb25vdXNJbml0aWFsaXph
dGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDcwLDYgKzQ3MCwxOCBAQCBib29sIFBs
dWdpblByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkKICAgICByZXR1cm4gaGFuZGxlZDsK
IH0KIAorYm9vbCBQbHVnaW5Qcm94eTo6cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25z
dAoreworICAgIGlmIChtX3dhaXRpbmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHJlcXVpcmVkID0gZmFsc2U7CisgICAgaWYg
KCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6UmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSwgTWVzc2FnZXM6OlBs
dWdpbkNvbnRyb2xsZXJQcm94eTo6UmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3I6OlJlcGx5KHJl
cXVpcmVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiByZXF1aXJlZDsKK30KKwogTlBPYmplY3QqIFBsdWdpblByb3h5OjpwbHVn
aW5TY3JpcHRhYmxlTlBPYmplY3QoKQogewogICAgIC8vIFNlbmRpbmcgdGhlIHN5bmNocm9ub3Vz
IE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldFBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCBtZXNzYWdlIGNhbiBjYXVzZSB1cyB0byBkaXNwYXRjaCBhbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaAppbmRleCAxNTcwYTgyMWY0MzI0
MzhkNjI5MWZjZDkyZDVhZWIwYzAwZjc0Y2JhLi5lYjVlZDE4MzZjOTJlOGQ4OTA1OTMwZTExZjQ0
ZWIwMGUwNTY0YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJveHkuaApAQCAtMTExLDcgKzExMSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxl
RmFjdG9yKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0
b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNVbmlmaWVkU2Nh
bGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKICAgICAKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGMzOTZlODQ4NmU5YjVl
MWY1ZjIwODY5OTBjY2FjOTNjMWUzMzJhNGUuLmI0ODk4ZjI3ODdkZWJhMDA4YmFmZmQyNjAwYTY5
NjM3ZDFjN2FjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKQEAgLTUyMSw2ICs1MjEsMTQgQEAgYm9vbCBQbHVnaW5WaWV3OjpoYW5k
bGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9wbHVnaW4tPmhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IoKTsKIH0KIAorYm9vbCBQbHVnaW5WaWV3OjpyZXF1aXJlc1VuaWZpZWRT
Y2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCAhbV9pc0luaXRpYWxp
emVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9wbHVnaW4tPnJlcXVp
cmVzVW5pZmllZFNjYWxlRmFjdG9yKCk7Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6d2ViUGFnZURl
c3Ryb3llZCgpCiB7CiAgICAgbV93ZWJQYWdlID0gMDsKQEAgLTE4NjMsNiArMTg3MSw5IEBAIGJv
b2wgUGx1Z2luVmlldzo6c2hvdWxkQ3JlYXRlVHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdCgpIGNv
bnN0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIW1fcGx1Z2luLT5jYW5DcmVhdGVUcmFu
c2llbnRQYWludGluZ1NuYXBzaG90KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCBlYzZjN2VlZTBiZmQ4ODkzZTAzN2RkNGQwNzE1ODNhYzdhNzE3Y2E2
Li4wZDIxMzBhZDJmZmNjZDUyOWM1YTVmYjliOTBlYmI0Mzg5YjExMGYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTk1LDYgKzk1LDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3Rv
ciwgV2ViQ29yZTo6SW50UG9pbnQgb3JpZ2luKTsKICAgICBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
KCkgY29uc3Q7CiAgICAgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAg
Ym9vbCByZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpIGNvbnN0OwogCiAgICAgdm9pZCBwYWdl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKICAgICB2b2lkIHRvcENvbnRlbnRJbnNldERpZENoYW5n
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCBjNzMxMGU5NGY1NzVm
ZmI0OGZmN2VmYzc1MjUyYjFmZWNjMGJjMDlmLi45Zjg3NWZkMTgyOTY0ZTZkOGUzMTk0OWJmNDE1
NDhhOGRkZTVkMzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtNDU4
LDcgKzQ1OCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWl0
TG9hZCgpCiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KIAotICAgIHdlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJhbWUt
PmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIGRvY3VtZW50TG9hZGVy
LnJlc3BvbnNlKCkubWltZVR5cGUoKSwgbV9mcmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5sb2Fk
VHlwZSgpKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5jZXJ0aWZpY2F0ZUluZm8oKSwgbV9m
cmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSwgVXNlckRh
dGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2Vy
RGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEaWRDb21taXRMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVu
dExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5taW1lVHlw
ZSgpLCBtX2ZyYW1lSGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCBtX2ZyYW1lLT5oYW5kbGVzUGFn
ZVNjYWxlR2VzdHVyZSgpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9mcmFtZS0+Y29yZUZyYW1l
KCktPmxvYWRlcigpLmxvYWRUeXBlKCkpLCBkb2N1bWVudExvYWRlci5yZXNwb25zZSgpLmNlcnRp
ZmljYXRlSW5mbygpLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5E
b2N1bWVudCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKICAgICB3ZWJQYWdlLT5kaWRD
b21taXRMb2FkKG1fZnJhbWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCBmOWMyNjA2ODFlYWQ4NjY3YzYwZjkzZDc4Yjg0MzU3
ZjZjNDZjN2RiLi4yNTBiNDJiOWRjN2VlZGY0YTQ4MGQwMGQzMzRiYzMxOTkxNGNlZjg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTUx
NCw2ICs1MTQsMTYgQEAgYm9vbCBXZWJGcmFtZTo6aGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUoKSBj
b25zdAogICAgIHJldHVybiBwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKTsKIH0KIAorYm9vbCBXZWJGcmFtZTo6cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0
b3IoKSBjb25zdAoreworICAgIGlmICghbV9jb3JlRnJhbWUtPmRvY3VtZW50KCktPmlzUGx1Z2lu
RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQbHVnaW5Eb2N1bWVudCogcGx1
Z2luRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KG1fY29yZUZyYW1lLT5k
b2N1bWVudCgpKTsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1
Z2luVmlldyo+KHBsdWdpbkRvY3VtZW50LT5wbHVnaW5XaWRnZXQoKSk7CisgICAgcmV0dXJuIHBs
dWdpblZpZXcgJiYgcGx1Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKTsKK30K
Kwogdm9pZCBXZWJGcmFtZTo6c2V0QWNjZXNzaWJsZU5hbWUoY29uc3QgU3RyaW5nJiBhY2Nlc3Np
YmxlTmFtZSkKIHsKICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVk
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCmluZGV4
IGFiNDIxZmJjNzE2ZmNiYmFjMDVmMDIzYjhmMjdjMWY4ZmRjNDNlM2QuLjBmNTYxODE0MGJlMzRm
Yjg5NThjNDUyZTkyNjE4Yzg5ZjU3NzE2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5oCkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgIGJv
b2wgY29udGFpbnNBbnlGb3JtQ29udHJvbHMoKSBjb25zdDsKICAgICB2b2lkIHN0b3BMb2FkaW5n
KCk7CiAgICAgYm9vbCBoYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSgpIGNvbnN0OworICAgIGJvb2wg
cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEFjY2Vzc2li
bGVOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgc3RhdGljIFdlYkZyYW1lKiBmcmFtZUZvckNv
bnRleHQoSlNDb250ZXh0UmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCAxMDcyNDRkMzcwMWU4MmNkODQxYmJmNjM0NWQ4OGRjNDMxZmJj
OGE2Li4wNTU2MDk4YWEwMjBlNDE5ZDQ4ZDZjNjI5NjcyZjFiMGQ4ZDE0MDE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMzQxLDYgKzEz
NDEsMTMgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIAogZG91YmxlIFdlYlBhZ2U6OnRleHRab29t
RmFjdG9yKCkgY29uc3QKIHsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmll
d0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBw
bHVnaW5WaWV3LT5yZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpKSB7CisgICAgICAgIGlmIChw
bHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgICAgICByZXR1cm4g
cGx1Z2luVmlldy0+cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVybiBwYWdlU2NhbGVG
YWN0b3IoKTsKKyAgICB9CisKICAgICBGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS0+Y29yZUZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDE7CkBAIC0xMzUwLDggKzEz
NTcsMTMgQEAgZG91YmxlIFdlYlBhZ2U6OnRleHRab29tRmFjdG9yKCkgY29uc3QKIHZvaWQgV2Vi
UGFnZTo6c2V0VGV4dFpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCiB7CiAgICAgUGx1Z2lu
VmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUo
KSk7Ci0gICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpKQorICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmll
ZFNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSkKKyAgICAgICAgICAgIHBsdWdpblZpZXctPnNldFBhZ2VTY2FsZUZhY3Rvcih6
b29tRmFjdG9yLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NhbGVQ
YWdlKHpvb21GYWN0b3IsIEludFBvaW50KCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAg
ICAgRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCkBAIC0xMzYyLDggKzEzNzQsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRUZXh0Wm9vbUZhY3Rv
cihkb3VibGUgem9vbUZhY3RvcikKIGRvdWJsZSBXZWJQYWdlOjpwYWdlWm9vbUZhY3RvcigpIGNv
bnN0CiB7CiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgm
bV9wYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+
aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQotICAgICAgICByZXR1cm4gcGx1Z2luVmlldy0+cGFn
ZVNjYWxlRmFjdG9yKCk7CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+cmVxdWly
ZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+aGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPnBhZ2VT
Y2FsZUZhY3RvcigpOworICAgICAgICByZXR1cm4gcGFnZVNjYWxlRmFjdG9yKCk7CisgICAgfQog
CiAgICAgRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCkBAIC0xMzc0LDggKzEzODksMTEgQEAgZG91YmxlIFdlYlBhZ2U6OnBhZ2Vab29tRmFj
dG9yKCkgY29uc3QKIHZvaWQgV2ViUGFnZTo6c2V0UGFnZVpvb21GYWN0b3IoZG91YmxlIHpvb21G
YWN0b3IpCiB7CiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFt
ZSgmbV9wYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmll
dy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKSB7Ci0gICAgICAgIHBsdWdpblZpZXctPnNldFBh
Z2VTY2FsZUZhY3Rvcih6b29tRmFjdG9yLCBJbnRQb2ludCgpKTsKKyAgICBpZiAocGx1Z2luVmll
dyAmJiBwbHVnaW5WaWV3LT5yZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpKSB7CisgICAgICAg
IGlmIChwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgICAgICBw
bHVnaW5WaWV3LT5zZXRQYWdlU2NhbGVGYWN0b3Ioem9vbUZhY3RvciwgSW50UG9pbnQoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjYWxlUGFnZSh6b29tRmFjdG9yLCBJbnRQb2ludCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM4OCw4ICsxNDA2LDExIEBAIHZvaWQg
V2ViUGFnZTo6c2V0UGFnZVpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCiB2b2lkIFdlYlBh
Z2U6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZG91YmxlIHBhZ2Vab29tRmFjdG9yLCBkb3Vi
bGUgdGV4dFpvb21GYWN0b3IpCiB7CiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdp
blZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKHBsdWdpblZpZXcg
JiYgcGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKSB7Ci0gICAgICAgIHBsdWdp
blZpZXctPnNldFBhZ2VTY2FsZUZhY3RvcihwYWdlWm9vbUZhY3RvciwgSW50UG9pbnQoKSk7Cisg
ICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0
b3IoKSkgeworICAgICAgICBpZiAocGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcigp
KQorICAgICAgICAgICAgcGx1Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKHBhZ2Vab29tRmFj
dG9yLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NhbGVQYWdlKHBh
Z2Vab29tRmFjdG9yLCBJbnRQb2ludCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CmluZGV4IDE2MjZlMjgwMjkxYWExNzA4OTY1ZWI5MTJmNWE4OWM5MjA2NzZiMTkuLjA1NDJmOTFj
YzI3NmE1YzNhN2M1ZThmMTExZmI4OWQzZTFjZTI3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTU4OCw3ICs1ODgs
NyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JT
ZWxlY3Rpb25JblBERlBsdWdpbihQREZTZWxlYwogICAgIGlmICghc2VsZWN0aW9uLnN0cmluZy5s
ZW5ndGgpCiAgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5UG9wdXBJbmZvOwogCi0gICAgTlNSZWN0
IHJhbmdlUmVjdCA9IHBkZlBsdWdpbi52aWV3UmVjdEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwor
ICAgIE5TUmVjdCByYW5nZVJlY3QgPSBwZGZQbHVnaW4ucmVjdEZvclNlbGVjdGlvbkluUm9vdFZp
ZXcoc2VsZWN0aW9uKTsKIAogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3Ry
aW5nID0gc2VsZWN0aW9uLmF0dHJpYnV0ZWRTdHJpbmc7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264635</attachid>
            <date>2015-11-02 15:21:28 -0800</date>
            <delta_ts>2015-11-02 16:19:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150037-20151102152033.patch</filename>
            <type>text/plain</type>
            <size>226983</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxMjM2M2MzZjU2ZjMz
NjVlNzM3ZDhlOGU0YzhkNzE4Y2VlNDIxOS4uZjBlOWQ0OTdlMGViZGFjMWRlYjljMmE4ZGNjZDJm
MzhiOTkyOTZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE1LTExLTAyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFBERlBsdWdpbiBz
aG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhyZWFkZWQgc2Nyb2xsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICBEb24ndCBy
ZXNldCB0aGUgb3ZlcmxheSBsYXllcidzIG9wYWNpdHkgaWYgd2UncmUgbm90IGFuaW1hdGluZywK
KyAgICAgICAgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRoZSBjbGllbnQgd2FudHMgdG8gbWFuYWdl
IGl0LgorCisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3Vz
U2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMpOgorICAgICAgICBMZXQgdGhlIG92ZXJsYXkgaXRz
ZWxmIGRldGVybWluZSB3aGV0aGVyIGl0IG5lZWRlcyBzeW5jaHJvbm91cyBzY3JvbGxpbmcsCisg
ICAgICAgIGFuZCBsZXQgUGFnZU92ZXJsYXkgY2xpZW50cyBvdmVycmlkZSB0aGUgZGVmYXVsdC4K
KworICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
Ojpib3VuZHNSZWN0KToKKyAgICAgICAgRXhwb3J0IGEgZmV3IHVzZWZ1bCB0aGluZ3MuCisKIDIw
MTUtMTAtMzEgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxh
Y2UgaU9TLW9ubHkgV2ViS2l0U3lzdGVtSW50ZXJmYWNlIGNhbGxzIHdpdGggU1BJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggMzAxOTVmNmU0NjM2NjgzNWU0OTNlYjQ5NmEwMGQxMjdlMzFhZDcxZC4uZTI0YWZjMmU3
YjNhMjBlNjYxMDQwYTY1NDhlZDQwMzRjNzU2YjZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMx
IEBACiAyMDE1LTExLTAyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CisgICAgICAgIFBERlBsdWdpbiBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhyZWFkZWQgc2Ny
b2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTAwMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBE
dXBsaWNhdGUgUERGUGx1Z2luLCBjcmVhdGluZyBQREZQbHVnaW4gKHRoZSBtb2Rlcm4gdmVyc2lv
biksIGFuZAorICAgICAgICBEZXByZWNhdGVkUERGUGx1Z2luIChjb250YWluaW5nIHRoZSBjb2Rl
IHRoYXQgdXNlZCB0byBiZSBpbiBQREZQbHVnaW4KKyAgICAgICAgcHJpb3IgdG8gdGhpcyBwYXRj
aCkuCisKKyAgICAgICAgVGhlIG5ldyBQREZQbHVnaW4gZGlmZmVycyBmcm9tIHRoZSBvbGQgb25l
IGluIGEgZmV3IHNpZ25pZmljYW50IHdheXMsCisgICAgICAgIGFuZCB3ZSBuZWVkIHRvIGtlZXAg
Ym90aCBhbGl2ZSBmb3IgdGhlIHRpbWUgYmVpbmcuIFNpZ25pZmljYW50IGRpZmZlcmVuY2VzCisg
ICAgICAgIGluY2x1ZGU6CisKKyAgICAgICAgLSBQREZQbHVnaW4gaXMgbm8gbG9uZ2VyIGEgU2Ny
b2xsYWJsZUFyZWEKKyAgICAgICAgLSBQREZQbHVnaW4gbm8gbG9uZ2VyIGhvc3RzIGxheWVycyBv
d25lZCBieSBQREZLaXQ7IGluc3RlYWQsIGl0IGRyYXdzCisgICAgICAgICAgaW50byB0aGUgcGFn
ZSB0aWxlcywgYWxsb3dpbmcgV2ViQ29yZSdzIHRocmVhZGVkIHNjcm9sbGluZyB0byBkbyBpdHMg
am9iCisgICAgICAgIC0gUERGUGx1Z2luIG5vdyByZXNpemVzIGl0c2VsZiB0byB0aGUgc2l6ZSBv
ZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgLSBQREZQbHVnaW4gZG9lc24ndCBoYW5kbGUgem9vbWlu
ZyBpdHNlbGYsIGl0IGp1c3QgZGVsZWdhdGVzIHRvIHRoZSBwYWdlCisgICAgICAgIC0gUERGTGF5
ZXJDb250cm9sbGVyIGhhcyBsYXJnZSBhbmQgaW5jb21wYXRpYmxlIEFQSSBjaGFuZ2VzCisgICAg
ICAgIC0gUERGUGx1Z2luIG5vdyBpbXBsZW1lbnRzIG1vcmUgb2YgdGhlIEhVRCBiZWhhdmlvciwg
YnV0IGl0J3Mgc3RpbGwKKyAgICAgICAgICBwYWludGVkIGJ5IFBERkxheWVyQ29udHJvbGxlciAo
aW50byBhIHZpZXctcmVsYXRpdmUgUGFnZU92ZXJsYXkpCisKKyAgICAgICAgWyBGaWxlIGxpc3Qg
ZWxpZGVkIGJlY2F1c2UgaXQncyBsb25nIGFuZCB1c2VsZXNzLiBdCisKKzIwMTUtMTEtMDIgIFRp
bSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKICAgICAgICAgR2V0IHJpZCBv
ZiBXS1dlYlZpZXcncyBpbm5lciBXS1ZpZXcgKFdLVmlldyBiZWluZyBpbnNpZGUgV0tXZWJWaWV3
IGxlYWRzIHRvIHdlaXJkIEFQSSBpc3N1ZXMpCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAxNzQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNw
cAppbmRleCA5ZWNlYTg0NDc0M2UxYTVlZDliNGFiOTZmNzk1ZGQzNDA2NWFhMjljLi5iMjRiMTgw
MzIyMGQ4Y2NhYzYxOTkzMDc5YzljMmMyODU2YWQyNWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VP
dmVybGF5LmNwcApAQCAtNTMsMTQgKzUzLDEwIEBAIFJlZjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJs
YXk6OmNyZWF0ZShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCiAKIFBh
Z2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3Zlcmxh
eVR5cGUpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3BhZ2UobnVsbHB0cikKICAg
ICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKCp0aGlzLCAmUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRp
b25UaW1lckZpcmVkKQotICAgICwgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lKDApCiAgICAgLCBt
X2ZhZGVBbmltYXRpb25EdXJhdGlvbihmYWRlQW5pbWF0aW9uRHVyYXRpb24pCi0gICAgLCBtX2Zh
ZGVBbmltYXRpb25UeXBlKE5vQW5pbWF0aW9uKQotICAgICwgbV9mcmFjdGlvbkZhZGVkSW4oMSkK
KyAgICAsIG1fbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZyhvdmVybGF5VHlwZSA9PSBPdmVybGF5
VHlwZTo6VmlldykKICAgICAsIG1fb3ZlcmxheVR5cGUob3ZlcmxheVR5cGUpCi0gICAgLCBtX2Jh
Y2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpCiAgICAgLCBtX3BhZ2VPdmVybGF5SUQo
Z2VuZXJhdGVQYWdlT3ZlcmxheUlEKCkpCiB7CiB9CkBAIC0xNjMsNyArMTU5LDggQEAgdm9pZCBQ
YWdlT3ZlcmxheTo6c2V0UGFnZShQYWdlKiBwYWdlKQogdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoYXV0byBwYWdl
T3ZlcmxheUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKCkpIHsKLSAgICAgICAgcGFnZU92ZXJsYXlD
b250cm9sbGVyLT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZElu
KTsKKyAgICAgICAgaWYgKG1fZmFkZUFuaW1hdGlvblR5cGUgIT0gRmFkZUFuaW1hdGlvblR5cGU6
Ok5vQW5pbWF0aW9uKQorICAgICAgICAgICAgcGFnZU92ZXJsYXlDb250cm9sbGVyLT5zZXRQYWdl
T3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKICAgICAgICAgcGFnZU92
ZXJsYXlDb250cm9sbGVyLT5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlS
ZWN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVy
bGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmgKaW5kZXggN2ZjMWRkMTFi
OGFlMmQ0NjM5ZGM3YjgyNjQyMGYzMmMxNGYwZjA2NC4uYTYxOTQ3ZTBkNTkwY2YxY2I5MTU1MzE0
NWE3NGM2MzFkODRhYjAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zl
cmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApAQCAtMTE1LDYg
KzExNSw5IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUGFnZU92ZXJsYXkgc2hvdWxkIG93biBp
dHMgbGF5ZXIsIGluc3RlYWQgb2YgUGFnZU92ZXJsYXlDb250cm9sbGVyLgogICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzTGF5ZXImIGxheWVyKCk7CiAKKyAgICBib29sIG5lZWRzU3luY2hyb25v
dXNTY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU3luY2hyb25vdXNTY3JvbGxpbmc7
IH0KKyAgICB2b2lkIHNldE5lZWRzU3luY2hyb25vdXNTY3JvbGxpbmcoYm9vbCBuZWVkc1N5bmNo
cm9ub3VzU2Nyb2xsaW5nKSB7IG1fbmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZyA9IG5lZWRzU3lu
Y2hyb25vdXNTY3JvbGxpbmc7IH0KKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQYWdlT3Zlcmxh
eShDbGllbnQmLCBPdmVybGF5VHlwZSk7CiAKQEAgLTEyMiwxMCArMTI1LDEwIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpOwogCiAgICAgQ2xpZW50JiBtX2Ns
aWVudDsKLSAgICBQYWdlKiBtX3BhZ2U7CisgICAgUGFnZSogbV9wYWdlIHsgbnVsbHB0ciB9Owog
CiAgICAgVGltZXIgbV9mYWRlQW5pbWF0aW9uVGltZXI7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lIHsgMCB9
OwogICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKIAogICAgIGVudW0gRmFkZUFu
aW1hdGlvblR5cGUgewpAQCAtMTM0LDEzICsxMzcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgRmFk
ZU91dEFuaW1hdGlvbiwKICAgICB9OwogCi0gICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5p
bWF0aW9uVHlwZTsKLSAgICBmbG9hdCBtX2ZyYWN0aW9uRmFkZWRJbjsKKyAgICBGYWRlQW5pbWF0
aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBlIHsgTm9BbmltYXRpb24gfTsKKyAgICBmbG9hdCBt
X2ZyYWN0aW9uRmFkZWRJbiB7IDEgfTsKKworICAgIGJvb2wgbV9uZWVkc1N5bmNocm9ub3VzU2Ny
b2xsaW5nOwogCiAgICAgT3ZlcmxheVR5cGUgbV9vdmVybGF5VHlwZTsKICAgICBJbnRSZWN0IG1f
b3ZlcnJpZGVGcmFtZTsKIAotICAgIFJHQkEzMiBtX2JhY2tncm91bmRDb2xvcjsKKyAgICBSR0JB
MzIgbV9iYWNrZ3JvdW5kQ29sb3IgeyBDb2xvcjo6dHJhbnNwYXJlbnQgfTsKICAgICBQYWdlT3Zl
cmxheUlEIG1fcGFnZU92ZXJsYXlJRDsKIAogICAgIGJvb2wgbV9zaG91bGRJZ25vcmVNb3VzZUV2
ZW50c091dHNpZGVCb3VuZHMgeyB0cnVlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHAKaW5kZXggNDJjNzgwYzA0Nzk1ZjUxMzY0NDdjODJkYjJiN2Jm
N2U0ODI2OGE0YS4uZmNkOWQ3ZWIzZWNiMGNiYzBmODdjNWZjZjhhMWZjMmU0Yjg0ODk1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApAQCAtMTYz
LDcgKzE2Myw3IEBAIHZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNo
cm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQogICAgIGJvb2wgZm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7CiAKICAgICBmb3IgKGF1dG8m
IG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3Zlcmxh
eVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCisgICAgICAgIGlmIChv
dmVybGF5LT5uZWVkc1N5bmNocm9ub3VzU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICBmb3JjZVN5
bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCAwN2U0MmM4MTI0Mzc5M2I4Y2E2YTk4ODRjOWJjZGIx
NzUyZDkxMGVhLi5kY2M5ZTJjYTllMTRlOGVlMTljODAxYzEwNmUwODdmODYzNmIxNTdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYp
OwogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3Q7Ci0gICAgSW50
UmVjdCBib3VuZHNSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCAg
aGVpZ2h0KCkpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBib3VuZHNSZWN0KCkgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCAgaGVpZ2h0KCkpOyB9CiAKICAgICB2
b2lkIHJlc2l6ZShpbnQgdywgaW50IGgpIHsgc2V0RnJhbWVSZWN0KEludFJlY3QoeCgpLCB5KCks
IHcsIGgpKTsgfQogICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIHMpIHsgc2V0RnJhbWVS
ZWN0KEludFJlY3QobG9jYXRpb24oKSwgcykpOyB9CkBAIC0xNTEsNyArMTUxLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVdpZGdldChXaWRnZXROb3RpZmljYXRpb24pIHsg
fQogCi0gICAgSW50UmVjdCBjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjb252ZXJ0VG9Sb290Vmlldyhjb25zdCBJbnRS
ZWN0JikgY29uc3Q7CiAgICAgSW50UmVjdCBjb252ZXJ0RnJvbVJvb3RWaWV3KGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKIAogICAgIEludFBvaW50IGNvbnZlcnRUb1Jvb3RWaWV3KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggMTZjM2E0NzlhNTIzZTFiYmM0ZmE3NzVlYTkw
OWRiMDhkMTBjMmM3Yi4uZGM2ZDM0MzI2NzMzNTJiYTQ3YzU2ZWNlZmEwNWI0M2M1N2I3MWI5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVy
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJv
bGxlclByb3h5LmNwcApAQCAtNTY1LDYgKzU2NSwxMSBAQCB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcihib29sJiBpc0hhbmRsZWQpCiAgICAgaXNIYW5k
bGVkID0gbV9wbHVnaW4tPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsKIH0KIAordm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKGJvb2wmIHJlcXVp
cmVkKQoreworICAgIHJlcXVpcmVkID0gbV9wbHVnaW4tPnJlcXVpcmVzVW5pZmllZFNjYWxlRmFj
dG9yKCk7Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdp
bigpCiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAppbmRleCAyZjYz
ODU2YWY2MTk5NzFkMGQxY2YwNWJlNTJiODk2NGRmMTIzMzU3Li4zNmJmMDczYjY1MDJmZDBhNThk
OTdmZGNkNzlhYjNmMDZhMzAzMDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Q
cm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgKQEAgLTE0NCw2ICsxNDQsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgYm9vbCYpOwogICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJiwgYm9vbCYpOwogICAgIHZvaWQgaGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcihib29sJik7
CisgICAgdm9pZCByZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3Rvcihib29sJik7CiAgICAgdm9pZCBw
YWludEVudGlyZVBsdWdpbigpOwogICAgIHZvaWQgc3VwcG9ydHNTbmFwc2hvdHRpbmcoYm9vbCYp
OwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJhY2tpbmdTdG9y
ZUhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nl
c3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGI1YTA2MzY4ZmM0YTVj
Mzc2MjBiY2VlZDc2ZmYwMDRmNTI1ZThiYmUuLjE4ZThjODBiNmZiN2EzODdiOTVmZmRiNzk4YTU2
YmJjZWRkNDdjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1
Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC04OSw2ICs4OSw5
IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xsZXJQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAg
ICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBwbHVnaW4gd2FudHMgdG8gaGFuZGxlIHBhZ2Ug
c2NhbGUgZmFjdG9yIGl0c2VsZi4KICAgICBIYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgLT4gKGJv
b2wgZW5hYmxlZCk7CiAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50
cyBwYWdlIHNjYWxlLCBwYWdlIHpvb20sIGFuZCB0ZXh0IHpvb20gYWxsIHRvIGFmZmVjdCBwYWdl
IHNjYWxlLgorICAgIFJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgLT4gKGJvb2wgcmVxdWly
ZWQpOworCiAgICAgIyBTZW50IHdoZW4gdGhlIHBsdWctaW4gZm9jdXMgY2hhbmdlcy4KICAgICBT
ZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9QREZLaXRJbXBvcnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktp
dEltcG9ydHMuaAppbmRleCBhMWExM2QzZDhhNzY3ZDY2MTM0YmMzODZmODg0N2Q0ODdjZmNhYjJm
Li41MDFmMzc1MWUzZWE0ZDFiMWUyNjg3NDViYzJlODYxODk0NjFhYjNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaApAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5k
ZWYgUERGS2l0SW1wb3J0c19oCiAjZGVmaW5lIFBERktpdEltcG9ydHNfaAogCisjaWYgX19oYXNf
aW5jbHVkZSg8UERGS2l0L1BERkxheWVyQ29udHJvbGxlclZlcnNpb25pbmdQcml2Lmg+KQorI2lt
cG9ydCA8UERGS2l0L1BERkxheWVyQ29udHJvbGxlclZlcnNpb25pbmdQcml2Lmg+CisjZW5kaWYK
KworI2RlZmluZSBVU0VfREVQUkVDQVRFRF9QREZfUExVR0lOICghZGVmaW5lZChQREZLSVRfSEFT
X1BERkxBWUVSQ09OVFJPTExFUl8yKSB8fCAhUERGS0lUX0hBU19QREZMQVlFUkNPTlRST0xMRVJf
MikKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5TU3RyaW5nICpwZGZLaXRGcmFtZXdvcmtQYXRo
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDU4ODJh
YTViYzBmMWJlODg1ZTAxMDk3MTM3OTAwYmI1YWE1YjAyOTEuLmYzMWQ0YzJhNWE5N2ZhODFlNWYw
ZGFlMzdmNzJlOWY2MWQ0ZmU3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCkBAIC0yMjUxLDcgKzIyNTEsNyBAQCBkb3VibGUgV2ViUGFnZVByb3h5OjpwYWdl
Wm9vbUZhY3RvcigpIGNvbnN0CiB7CiAgICAgLy8gWm9vbSBmYWN0b3IgZm9yIG5vbi1QREYgcGFn
ZXMgcGVyc2lzdHMgYWNyb3NzIHBhZ2UgbG9hZHMuIFdlIG1haW50YWluIGEgc2VwYXJhdGUgbWVt
YmVyIHZhcmlhYmxlIGZvciBQREYKICAgICAvLyB6b29tIHdoaWNoIGVuc3VyZXMgdGhhdCB3ZSBk
b24ndCB1c2UgdGhlIFBERiB6b29tIGZvciBhIG5vcm1hbCBwYWdlLgotICAgIGlmIChtX21haW5G
cmFtZSAmJiBtX21haW5GcmFtZS0+aXNEaXNwbGF5aW5nUERGRG9jdW1lbnQoKSkKKyAgICBpZiAo
bV9tYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSkKICAgICAgICAgcmV0dXJu
IG1fcGx1Z2luWm9vbUZhY3RvcjsKICAgICByZXR1cm4gbV9wYWdlWm9vbUZhY3RvcjsKIH0KQEAg
LTIyNjAsNyArMjI2MCw3IEBAIGRvdWJsZSBXZWJQYWdlUHJveHk6OnBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0CiB7CiAgICAgLy8gUERGIGRvY3VtZW50cyB1c2Ugem9vbSBhbmQgc2NhbGUgZmFjdG9y
cyB0byBzaXplIHRoZW1zZWx2ZXMgYXBwcm9wcmlhdGVseSBpbiB0aGUgd2luZG93LiBXZSBzdG9y
ZSB0aGVtCiAgICAgLy8gc2VwYXJhdGVseSBidXQgZGVjaWRlIHdoaWNoIHRvIHJldHVybiBiYXNl
ZCBvbiB0aGUgbWFpbiBmcmFtZS4KLSAgICBpZiAobV9tYWluRnJhbWUgJiYgbV9tYWluRnJhbWUt
PmlzRGlzcGxheWluZ1BERkRvY3VtZW50KCkpCisgICAgaWYgKG1fbWFpbkZyYW1lUGx1Z2luSGFu
ZGxlc1BhZ2VTY2FsZUdlc3R1cmUpCiAgICAgICAgIHJldHVybiBtX3BsdWdpblNjYWxlRmFjdG9y
OwogICAgIHJldHVybiBtX3BhZ2VTY2FsZUZhY3RvcjsKIH0KQEAgLTI5NTcsNyArMjk1Nyw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckxvYWREZXBlbmRlbnRDYWxsYmFja3MoKQogICAgIH0K
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBm
cmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90IG9wYXF1ZUZyYW1lTG9h
ZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBi
b29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGZyYW1l
SGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCBib29sIHBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0
dXJlLCB1aW50MzJfdCBvcGFxdWVGcmFtZUxvYWRUeXBlLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgYm9vbCBjb250YWluc1BsdWdpbkRvY3VtZW50LCBj
b25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CiAgICAgUGFnZUNsaWVudFByb3RlY3RvciBwcm90
ZWN0b3IobV9wYWdlQ2xpZW50KTsKIApAQCAtMzAxNiw5ICszMDE2LDEzIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
bmF2aWdhdGlvbklECiAgICAgLy8gV2ViUGFnZVByb3h5J3MgY2FjaGUgb2YgdGhlIHZhbHVlIGNh
biBnZXQgb3V0IG9mIHN5bmMgKGUuZy4gaW4gdGhlIGNhc2Ugd2hlcmUgYQogICAgIC8vIHBsdWdp
biBpcyBoYW5kbGluZyBwYWdlIHNjYWxpbmcgaXRzZWxmKSBzbyB3ZSBzaG91bGQgcmVzZXQgaXQg
dG8gdGhlIGRlZmF1bHQKICAgICAvLyBmb3Igc3RhbmRhcmQgbWFpbiBmcmFtZSBsb2Fkcy4KLSAg
ICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgc3RhdGljX2Nhc3Q8RnJhbWVMb2FkVHlwZT4o
b3BhcXVlRnJhbWVMb2FkVHlwZSkgPT0gRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQpIHsKLSAgICAg
ICAgbV9wYWdlU2NhbGVGYWN0b3IgPSAxOwotICAgICAgICBtX3BsdWdpblNjYWxlRmFjdG9yID0g
MTsKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgbV9tYWluRnJhbWVQ
bHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSA9IHBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0
dXJlOworCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxGcmFtZUxvYWRUeXBlPihvcGFxdWVGcmFt
ZUxvYWRUeXBlKSA9PSBGcmFtZUxvYWRUeXBlOjpTdGFuZGFyZCkgeworICAgICAgICAgICAgbV9w
YWdlU2NhbGVGYWN0b3IgPSAxOworICAgICAgICAgICAgbV9wbHVnaW5TY2FsZUZhY3RvciA9IDE7
CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuY29tbWl0Q2hhbmdlcygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDdhZTYyNmIzMGM2
NmIxNzI3Y2YzMWNhMzhiZWQwMWMyOGIwZWQ4YTMuLmI4NDk1MGY3NjczMGY5ODdmNzM3YWJlZDVh
Mjg3MmZmMjBiNGE5NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTExMjIsNyArMTEyMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAg
dm9pZCBkaWRDaGFuZ2VQcm92aXNpb25hbFVSTEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIHZvaWQgZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgdWludDY0X3QgbmF2aWdh
dGlvbklELCBjb25zdCBTdHJpbmcmIHByb3Zpc2lvbmFsVVJMLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEmKTsKLSAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90
IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29u
dGFpbnNQbHVnaW5Eb2N1bWVudCwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIGRpZENvbW1p
dExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIs
IGJvb2wgbWFpbkZyYW1lUGx1Z2luSGFuZGxlc1BhZ2VTY2FsZUdlc3R1cmUsIHVpbnQzMl90IGZy
YW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29udGFp
bnNQbHVnaW5Eb2N1bWVudCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25J
RCwgY29uc3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFVzZXJEYXRhJik7CiAg
ICAgdm9pZCBkaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5h
dmlnYXRpb25JRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IFVzZXJEYXRh
Jik7CkBAIC0xNzE5LDYgKzE3MTksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRSZWNv
cmROYXZpZ2F0aW9uU25hcHNob3RzOwogICAgIGJvb2wgbV9pc1Nob3dpbmdOYXZpZ2F0aW9uR2Vz
dHVyZVNuYXBzaG90OwogCisgICAgYm9vbCBtX21haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2Nh
bGVHZXN0dXJlIHsgZmFsc2UgfTsKKwogICAgIHVuc2lnbmVkIG1fcGFnZUNvdW50OwogCiAgICAg
V2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDM2MDYx
OWQyZDA3MmUxZDY5ZTM4OGQ5MWFiNWJkOTBkNjBmZDkzZTMuLmYzZGM3MjE3YTFhZWQzNTMwZGM4
MjFhYTdhMjA0ZjcwMTYxYWVjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTI2LDcgKzEyNiw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBT
dHJpbmcgdXJsLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogICAgIERpZENoYW5nZVByb3Zp
c2lvbmFsVVJMRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklE
LCBTdHJpbmcgdXJsKQogICAgIERpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRf
dCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIGZyYW1lU2VjdXJp
dHlPcmlnaW4sIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgU3RyaW5nIHByb3Zpc2lvbmFsVVJMLCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQot
ICAgIERpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZp
Z2F0aW9uSUQsIFN0cmluZyBtaW1lVHlwZSwgYm9vbCBoYXNDdXN0b21Db250ZW50UHJvdmlkZXIs
IHVpbnQzMl90IGxvYWRUeXBlLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJ
bmZvLCBib29sIGNvbnRhaW5zUGx1Z2luRG9jdW1lbnQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRh
dGEpCisgICAgRGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90
IG5hdmlnYXRpb25JRCwgU3RyaW5nIG1pbWVUeXBlLCBib29sIGhhc0N1c3RvbUNvbnRlbnRQcm92
aWRlciwgYm9vbCBwbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSwgdWludDMyX3QgbG9hZFR5
cGUsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgY29udGFp
bnNQbHVnaW5Eb2N1bWVudCwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKICAgICBEaWRGYWls
TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBlcnJvciwgV2ViS2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKICAg
ICBEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBuYXZpZ2F0aW9uSUQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEpCiAgICAgRGlkRmluaXNo
TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgV2Vi
S2l0OjpVc2VyRGF0YSB1c2VyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZGVjNDcwOWJkZGQ0YjM4MjZmNGE1NThmMDQx
NDZkNDhjMzJjYWExLi42Mjk4NDViODg3YTZjN2U3ODE5Y2U1ODUxNTU2MWNjMGM3YzFlNjI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC02MDcsNiArNjA3LDcgQEAKIAkJMkQyQURGMDkxNjM2MkRENTAwMTk3RTQ3IC8qIFBERlBs
dWdpblRleHRBbm5vdGF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQyQURGMDYxNjM2MkRDNzAwMTk3RTQ3IC8qIFBERlBsdWdpblRleHRBbm5v
dGF0aW9uLm1tICovOyB9OwogCQkyRDJBREYwQjE2MzYyRERCMDAxOTdFNDcgLyogUERGUGx1Z2lu
QW5ub3RhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMkFERjAzMTYzNjI0MzUwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tICov
OyB9OwogCQkyRDJBREYxMDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3Rh
dGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
MkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tICov
OyB9OworCQkyRDM0OTQ2NDFCQ0MyRUMzMDA2NEYwQkUgLyogRGVwcmVjYXRlZFBERlBsdWdpbi5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDAzNTIz
MUJDNzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERGUGx1Z2luLm1tICovOyB9OwogCQkyRDNB
NjVEQTFBN0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0E2NUQ4MUE3QzNBMUYw
MENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuY3BwICovOyB9OwogCQkyRDNBNjVEQjFB
N0MzQTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDNBNjVEOTFBN0MzQTFGMDBDQUM2Mzcg
LyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQzQTY1REUxQTdDM0E3RDAwQ0FDNjM3IC8qIFdLTmF2aWdh
dGlvblJlc3BvbnNlUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEM0E2NURDMUE3QzNBN0QwMENBQzYzNyAvKiBXS05hdmlnYXRpb25SZXNwb25z
ZVJlZi5jcHAgKi87IH07CkBAIC0yNzU4LDYgKzI3NTksOCBAQAogCQkyOUQ1NURFRTE2MUJGODc4
MDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGFnZUdy
b3VwUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDU1
REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDU1
REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDM1MjIxQkM3NDE0ODAwREE4NzE2IC8q
IERlcHJlY2F0ZWRQREZQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RGVwcmVjYXRlZFBERlBsdWdpbi5oOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQwMDM1MjMxQkM3NDE0ODAwREE4NzE2IC8q
IERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBEZXByZWNhdGVkUERGUGx1Z2luLm1tOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZQ
bHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVDMTg1N0VBMDUw
MDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1
RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjc3NSw5ICsyNzc4LDEwIEBACiAJCTJEMkFERjAzMTYzNjI0MzUwMDE5
N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gUERGUGx1Z2luQW5ub3RhdGlvbi5tbTsgcGF0aCA9IFBERi9QREZQbHVn
aW5Bbm5vdGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDJBREYwNTE2
MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luVGV4dEFubm90YXRpb24uaDsgcGF0aCA9IFBE
Ri9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDJBREYwNjE2MzYyREM3MDAxOTdFNDcgLyogUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5UZXh0QW5u
b3RhdGlvbi5tbTsgcGF0aCA9IFBERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIFBERkxh
eWVyQ29udHJvbGxlckRldGFpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJDb250cm9sbGVy
RGV0YWlscy5oOyBwYXRoID0gUERGL1BERkxheWVyQ29udHJvbGxlckRldGFpbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIERlcHJl
Y2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVwcmVjYXRlZFBE
RkxheWVyQ29udHJvbGxlclNQSS5oOyBwYXRoID0gUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRy
b2xsZXJTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyQURGMEQxNjM2NEQ4
MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5oOyBwYXRoID0gUERG
L1BERlBsdWdpbkNob2ljZUFubm90YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQyQURGMEUxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5DaG9p
Y2VBbm5vdGF0aW9uLm1tOyBwYXRoID0gUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEMzQ5NDYzMUJDQzIzQkYwMDY0RjBCRSAv
KiBQREZMYXllckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJDb250cm9s
bGVyU1BJLmg7IHBhdGggPSBQREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEM0E2NUQ4MUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRp
b25BY3Rpb25SZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tO
YXZpZ2F0aW9uQWN0aW9uUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQz
QTY1RDkxQTdDM0ExRjAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlvbkFjdGlvblJlZi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25BY3Rpb25SZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQzQTY1REMxQTdDM0E3RDAwQ0FDNjM3IC8qIFdLTmF2
aWdhdGlvblJlc3BvbnNlUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdLTmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTc0OTcsNyArNzUwMSwxMCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQkzNTc0QjM3RjE2NjU5MzJDMDA4NTlCQjcgLyogUERGQW5ub3RhdGlvblRleHRX
aWRnZXREZXRhaWxzLmggKi8sCi0JCQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIFBERkxh
eWVyQ29udHJvbGxlckRldGFpbHMuaCAqLywKKwkJCQkyRDJBREYwQzE2MzYzREVDMDAxOTdFNDcg
LyogRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxlclNQSS5oICovLAorCQkJCTJEMDAzNTIyMUJD
NzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERGUGx1Z2luLmggKi8sCisJCQkJMkQwMDM1MjMx
QkM3NDE0ODAwREE4NzE2IC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gKi8sCisJCQkJMkQzNDk0
NjMxQkNDMjNCRjAwNjRGMEJFIC8qIFBERkxheWVyQ29udHJvbGxlclNQSS5oICovLAogCQkJCTJE
ODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4uaCAqLywKIAkJCQkyRDg3MEQwRTE2
MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLm1tICovLAogCQkJCTJEMkFERjAyMTYzNjI0MzUw
MDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLmggKi8sCkBAIC0xMDE5MSw2ICsxMDE5OCw3
IEBACiAJCQkJQkNCQUFDRUMxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUExNTg0MTkxODkwNDRGNTAwMTc2MTZDIC8qIFdLUHJvY2Vzc1Bv
b2wubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGQjEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQ
cm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQzNDk0NjQxQkNDMkVDMzAw
NjRGMEJFIC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUQw
MUJDQzE5MDVENTQ5MDBDOUM0NUYgLyogV0tSZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTlFMzI5QTE4MjJFMUNDMDBGNUQwNEMgLyogV0tS
ZW1vdGVPYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTlFMzI5RTE4MjJGRUREMDBGNUQw
NEMgLyogV0tSZW1vdGVPYmplY3RDb2Rlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAKaW5kZXggMzNiOTEzYTlmYmQ5NjczOGZhNThjZjc1ZDUwYTE1MTI3NGQwYTUy
OC4uNWY3ODk2MzdlYTRiNjg0MGY0NGIyNTRmMjgwMjliMTIyYzljNDU4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uY3BwCkBAIC05OTcsNyArOTk3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbjo6
c2hvdWxkQWxsb3dOYXZpZ2F0aW9uRnJvbURyYWdzKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQorYm9vbCBOZXRz
Y2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAppbmRleCA5MzQ3Yjk3OTIxZGJmMDNhYmNj
MDYyYTBmYjFkZTZmYWU3MjdlYzY1Li40ZjkyZDhmODY1N2I2MTgyMGQwODcxNmU5ODQ0Yjk5NTBj
ODNiMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaApAQCAtMjI1LDcgKzIyNSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIG92ZXJyaWRl
OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgp
IG92ZXJyaWRlOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJT
UEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xODA0MmUyMTMyMWQyMDA5N2VkYWRhMWJiOGY4NjViMzgyNTQ2OTUw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKQEAgLTAsMCArMSwxNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUElf
aAorI2RlZmluZSBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKKworI2lmIEVOQUJM
RShQREZLSVRfUExVR0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW1wb3J0
IDxQREZLaXQvUERGS2l0Lmg+CisKK0BjbGFzcyBDUFJlYWRpbmdNb2RlbDsKK0BjbGFzcyBQREZW
aWV3TGF5b3V0OworCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2Jq
ZWN0PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9u
OworLSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5
cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQpcG9p
bnQ7CistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9p
ZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpb3Bl
bldpdGhOYXRpdmVBcHBsaWNhdGlvbjsKKy0gKHZvaWQpc2F2ZVRvUERGOworCistICh2b2lkKXBk
ZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVy
IGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOwor
LSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVy
Q29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsOworLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBk
aWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CistICh2b2lk
KXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpcGRmTGF5ZXJDb250
cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdl
U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CisKK0BlbmQKKworQGludGVyZmFj
ZSBQREZMYXllckNvbnRyb2xsZXIgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIFBERkxh
eWVyQ29udHJvbGxlciAoKQorCitAcHJvcGVydHkgKHJldGFpbikgQ0FMYXllciAqcGFyZW50TGF5
ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHByb3BlcnR5
IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAo
dm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXplOworCistIChQREZEaXNwbGF5TW9kZSlkaXNw
bGF5TW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheU1vZGU6KFBERkRpc3BsYXlNb2RlKW1vZGU7Cist
ICh2b2lkKXNldERpc3BsYXlzUGFnZUJyZWFrczooQk9PTClwYWdlQnJlYWtzOworCistIChDR0Zs
b2F0KWNvbnRlbnRTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFjdG9yOihD
R0Zsb2F0KXNjYWxlRmFjdG9yOworCistIChDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yOworLSAo
dm9pZClzZXREZXZpY2VTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKKworLSAoQ0dT
aXplKWNvbnRlbnRTaXplOworLSAoQ0dTaXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207CisK
Ky0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OworCistICh2
b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9p
bnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRpYXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7CisKKy0gKENH
UG9pbnQpc2Nyb2xsUG9zaXRpb247CistICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihDR1BvaW50
KW5ld1Bvc2l0aW9uOworLSAodm9pZClzY3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0YTsKKwor
LSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpcmlnaHRNb3VzZURv
d246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50
OworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVu
dDsKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNNZW51ICop
bWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CisKKy0gKE5TQXJyYXkgKilmaW5kU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBo
aWdobGlnaHRNYXRjaGVzOihCT09MKXNob3VsZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0gKFBERlNl
bGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lkKXNldEN1cnJlbnRTZWxlY3Rpb246
KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKFBERlNlbGVjdGlvbiAqKXNlYXJjaFNlbGVj
dGlvbjsKKy0gKHZvaWQpc2V0U2VhcmNoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rp
b247CistICh2b2lkKWdvdG9TZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0g
KFBERlNlbGVjdGlvbiAqKWdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50KXBvaW50
OworLSAoTlNBcnJheSAqKXJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERGU2VsZWN0
aW9uICopc2VsZWN0aW9uOworLSAoTlNBcnJheSAqKXJlY3RzRm9yQW5ub3RhdGlvbkluTGF5b3V0
U3BhY2U6KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOworLSAoUERGVmlld0xheW91dCAqKWxh
eW91dDsKKy0gKE5TUmVjdClmcmFtZTsKKworLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOworLSAo
TlNVSW50ZWdlcilsYXN0UGFnZUluZGV4OworLSAoTlNVSW50ZWdlciljdXJyZW50UGFnZUluZGV4
OworLSAodm9pZClnb3RvTmV4dFBhZ2U7CistICh2b2lkKWdvdG9QcmV2aW91c1BhZ2U7CisKKy0g
KHZvaWQpY29weVNlbGVjdGlvbjsKKy0gKHZvaWQpc2VsZWN0QWxsOworCistIChib29sKWtleURv
d246KE5TRXZlbnQgKilldmVudDsKKworLSAodm9pZClzZXRIVURFbmFibGVkOihCT09MKWVuYWJs
ZWQ7CistIChCT09MKWh1ZEVuYWJsZWQ7CisKKy0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0aW9u
OihQREZBbm5vdGF0aW9uICopYW5ub3RhdGlvbjsKKy0gKHZvaWQpYWN0aXZhdGVOZXh0QW5ub3Rh
dGlvbjooQk9PTClwcmV2aW91czsKKworLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dv
cmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7CisKKy0gKHZvaWQpc2VhcmNoSW5EaWN0aW9uYXJ5V2l0
aFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOworCisvLyBBY2Nlc3NpYmlsaXR5
CisKKy0gKENQUmVhZGluZ01vZGVsICopcmVhZGluZ01vZGVsOworLSAoaWQpYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnQ7CistIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcg
KilhdHRyaWJ1dGU7CistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9y
QXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzOworLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5Um9sZUF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlw
dGlvbkF0dHJpYnV0ZTsKKy0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRl
OworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNT
dHJpbmcgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0QXR0cmlidXRlOworLSAoQk9PTClhY2Nl
c3NpYmlsaXR5SXNTZWxlY3RlZFRleHRBdHRyaWJ1dGVTZXR0YWJsZTsKKy0gKE5TVmFsdWUgKilh
Y2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGU7CistIChOU051bWJlciAqKWFj
Y2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJhY3RlcnNBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2li
aWxpdHlJc051bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZVNldHRhYmxlOworLSAoTlNWYWx1ZSAq
KWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGU7CistIChCT09MKWFj
Y2Vzc2liaWxpdHlJc1Zpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxlOworLSAo
TlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVy
OihpZClwYXJhbWV0ZXI7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0
dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworLSAoTlNTdHJpbmcgKilhY2Nlc3Np
YmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsK
Ky0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJh
bWV0ZXI6KGlkKXBhcmFtZXRlcjsKKworQGVuZAorCisjZW5kaWYKKworI2VuZGlmIC8vIERlcHJl
Y2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUElfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jMTcyMDE4MGZmODU0YTc2OTA0YmExZWNhYWZlYzZjOWNmNmIzZGI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVk
UERGUGx1Z2luLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERlcHJlY2F0ZWRQREZQbHVnaW5faAorI2RlZmluZSBEZXByZWNhdGVkUERGUGx1Z2lu
X2gKKworI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKKworI2lmIEVOQUJMRShQREZLSVRfUExV
R0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1Z2luLmgi
CisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GaW5kT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpT
Q29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNP
YmplY3RSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVm
OworCitPQkpDX0NMQVNTIE5TQXJyYXk7CitPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsK
K09CSkNfQ0xBU1MgTlNEYXRhOworT0JKQ19DTEFTUyBOU1N0cmluZzsKK09CSkNfQ0xBU1MgUERG
QW5ub3RhdGlvbjsKK09CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVyOworT0JKQ19DTEFTUyBQ
REZTZWxlY3Rpb247CitPQkpDX0NMQVNTIFdLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdDsK
K09CSkNfQ0xBU1MgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZTsKKworbmFtZXNwYWNlIElQ
QyB7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBFbGVtZW50Oworc3RydWN0IFBsdWdpbkluZm87Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOworY2xhc3MgUERGUGx1Z2luUGFzc3dvcmRGaWVs
ZDsKK2NsYXNzIFBsdWdpblZpZXc7CitjbGFzcyBXZWJGcmFtZTsKKworY2xhc3MgUERGUGx1Z2lu
IGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQREZQbHVnaW4+IGNyZWF0ZShXZWJGcmFtZSopOwor
ICAgIH5QREZQbHVnaW4oKTsKKworICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBsdWdp
bkluZm8oKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorCisgICAgdm9pZCBkaWRNdXRhdGVQREZEb2N1bWVudCgpIHsgbV9wZGZEb2N1bWVu
dFdhc011dGF0ZWQgPSB0cnVlOyB9CisKKyAgICB2b2lkIHBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKKyAgICB2b2lkIHNldEFjdGl2ZUFubm90
YXRpb24oUERGQW5ub3RhdGlvbiAqKTsKKyAgICAKKyAgICB1c2luZyBTY3JvbGxhYmxlQXJlYTo6
bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkOworICAgIHZvaWQgbm90aWZ5Q29udGVudFNjYWxl
RmFjdG9yQ2hhbmdlZChDR0Zsb2F0IHNjYWxlRmFjdG9yKTsKKyAgICB2b2lkIG5vdGlmeURpc3Bs
YXlNb2RlQ2hhbmdlZChpbnQpOworCisgICAgdm9pZCBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBE
RlNlbGVjdGlvbiAqKTsKKworICAgIHZvaWQgY2xpY2tlZExpbmsoTlNVUkwgKik7CisgICAgdm9p
ZCBzYXZlVG9QREYoKTsKKyAgICB2b2lkIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKTsKKyAg
ICB2b2lkIHdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBO
U0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpOworICAgIHZvaWQgc2hvd0RlZmluaXRpb25G
b3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBDR1BvaW50KTsKKyAgICB2
b2lkIHBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKik7CisgICAgdm9pZCBwZXJmb3JtU3BvdGxp
Z2h0U2VhcmNoKE5TU3RyaW5nICopOworCisgICAgdm9pZCBmb2N1c05leHRBbm5vdGF0aW9uKCk7
CisgICAgdm9pZCBmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpOworCisgICAgdm9pZCBhdHRlbXB0
VG9VbmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CisKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgY29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOworCisgICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNE
aWN0aW9uYXJ5ICoqKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdEZvclNlbGVj
dGlvbkluUm9vdFZpZXcoUERGU2VsZWN0aW9uICopIGNvbnN0OworCisgICAgQ0dGbG9hdCBzY2Fs
ZUZhY3RvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFBERlBsdWdpbihXZWJG
cmFtZSopOworCisgICAgLy8gUGx1Z2luIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgaW5p
dGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29y
ZGluYXRlcykgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50
cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdCgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNUcmFuc3BhcmVudCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9h
dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCkg
b3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50
NjRfdCByZXF1ZXN0SUQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZhaWwo
dWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IFN0cmluZyYgcmVzdWx0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtV2lsbFNl
bmRSZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIGludCByZXNwb25zZVN0YXR1cykg
b3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1
aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6VVJMJiByZXNwb25zZVVSTCwgdWludDMy
X3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZU5hbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0
YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0
cmVhbUlEKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRf
dCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6VVJMJiByZXNw
b25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1l
LCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJz
LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hM
b2FkaW5nKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwo
Ym9vbCB3YXNDYW5jZWxsZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgTlBP
YmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpIG92ZXJyaWRlIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0K
KyAgICB2aXJ0dWFsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxl
eFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkgb3ZlcnJpZGUgeyB9CisgICAgdmly
dHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgb3ZlcnJpZGUg
eyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIo
KSBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHN0
b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlIHsgfQorICAg
IHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpIG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGxpdmVSZXNvdXJjZURhdGEo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9ub3Vz
bHlJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2
aXJ0dWFsIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KKyAgICB2aXJ0dWFsIE5TT2Jq
ZWN0ICphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6
OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgV2ViQ29yZTo6RmluZE9w
dGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpIG92ZXJyaWRlOworCisgICAgUERGU2VsZWN0
aW9uICpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEJPT0wgc2VhcmNo
Rm9yd2FyZCwgQk9PTCBjYXNlU2Vuc2l0aXZlLCBCT09MIHdyYXBTZWFyY2gsIFBERlNlbGVjdGlv
biAqaW5pdGlhbFNlbGVjdGlvbiwgQk9PTCBzdGFydEluU2VsZWN0aW9uKTsKKworICAgIGJvb2wg
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgU3RyaW5nIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGV4aXN0aW5nU2VsZWN0
aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25G
cm9tRHJhZ3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOyB9CisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFy
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3NpemU7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVw
IGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmlt
YXRlLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoV2ViQ29yZTo6U2Ny
b2xsYmFyU3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
V2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsYmFyUmVj
dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFBERlBsdWdpbiBmdW5jdGlvbnMuCisgICAg
dm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxi
YXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAg
dm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAg
ICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNl
KCk7CisgICAgdm9pZCBjb21wdXRlUGFnZUJveGVzKCk7CisgICAgdm9pZCBjYWxjdWxhdGVTaXpl
cygpOworICAgIHZvaWQgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKworICAgIE5TRXZlbnQg
Km5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZp
ZXdUb1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6
OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBjb25zdDsKKyAgICAKKyAgICBib29sIHN1cHBvcnRzRm9ybXMoKTsKKyAgICBib29s
IGlzRnVsbEZyYW1lUGx1Z2luKCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVBhZ2VBbmREZXZp
Y2VTY2FsZUZhY3RvcnMoKTsKKworICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsK
KworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX3BkZkRvY3VtZW50OyB9CisgICAgdm9pZCBzZXRQREZEb2N1bWVudChSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IGRvY3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1bWVudDsgfQorCisgICAg
V2ViQ29yZTo6SW50U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX3BkZkRv
Y3VtZW50U2l6ZTsgfQorICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXplKFdlYkNvcmU6OkludFNp
emUgc2l6ZSkgeyBtX3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KKworICAgIE5TRGF0YSAqbGl2
ZURhdGEoKSBjb25zdDsKKyAgICBOU0RhdGEgKnJhd0RhdGEoKSBjb25zdCB7IHJldHVybiAoTlNE
YXRhICopbV9kYXRhLmdldCgpOyB9CisKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBlbnVtIFVwZGF0ZUN1cnNvck1vZGUgeworICAgICAg
ICBVcGRhdGVJZk5lZWRlZCwKKyAgICAgICAgRm9yY2VVcGRhdGUKKyAgICB9OworCisgICAgZW51
bSBIaXRUZXN0UmVzdWx0IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgVGV4dAorICAgIH07CisK
KyAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiwgVXBkYXRlQ3Vyc29y
TW9kZSA9IFVwZGF0ZUlmTmVlZGVkKTsKKworICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhK
U0NvbnRleHRSZWYpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7CisKKyAgICB2b2lkIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVk
KCk7CisKKyAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcs
IGJ1dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIg
ZXZlbnQgaGFuZGxpbmcuCisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKKworICAgIFdlYkZyYW1lKiBtX2ZyYW1l
OworCisgICAgYm9vbCBtX2lzUG9zdFNjcmlwdDsKKyAgICBib29sIG1fcGRmRG9jdW1lbnRXYXNN
dXRhdGVkOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKworICAgIFJl
dGFpblB0cjxDQUxheWVyPiBtX2NvbnRhaW5lckxheWVyOworICAgIFJldGFpblB0cjxDQUxheWVy
PiBtX2NvbnRlbnRMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdmVydGljYWxTY3JvbGxiYXJM
YXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxDb3JuZXJMYXllcjsKKyAgICBS
ZXRhaW5QdHI8UERGTGF5ZXJDb250cm9sbGVyPiBtX3BkZkxheWVyQ29udHJvbGxlcjsKKyAgICBS
ZXRhaW5QdHI8V0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0PiBtX2FjY2Vzc2liaWxpdHlP
YmplY3Q7CisgICAgCisgICAgUmVmUHRyPFBERlBsdWdpbkFubm90YXRpb24+IG1fYWN0aXZlQW5u
b3RhdGlvbjsKKyAgICBSZWZQdHI8UERGUGx1Z2luUGFzc3dvcmRGaWVsZD4gbV9wYXNzd29yZEZp
ZWxkOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX2Fubm90YXRpb25Db250YWluZXI7
CisKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNm
b3JtOworICAgIFdlYk1vdXNlRXZlbnQgbV9sYXN0TW91c2VFdmVudDsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsKKworICAgIFN0
cmluZyBtX3RlbXBvcmFyeVBERlVVSUQ7CisKKyAgICBTdHJpbmcgbV9sYXN0Rm91bmRTdHJpbmc7
CisKKyAgICBIaXRUZXN0UmVzdWx0IG1fbGFzdEhpdFRlc3RSZXN1bHQ7CisgICAgCisgICAgUmV0
YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fcGRmTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGU7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKworICAgIFdlYkNvcmU6
OlVSTCBtX3NvdXJjZVVSTDsKKworICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOworICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGE7CisKKyAgICBSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1f
cGFnZUJveGVzOworICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFs
bCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFy
PiBtX2hvcml6b250YWxTY3JvbGxiYXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4g
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJTihQREZQbHVnaW4sIFBERlBsdWdpblR5cGUpCisKKyNl
bmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKKworI2VuZGlmIC8vIERlcHJlY2F0ZWRQREZQ
bHVnaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9EZXByZWNhdGVkUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhMjZlZjE3MmJiYmIy
NzBkMGMwNDRhYjc5YzJhMDQ1OTY4ODkwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4ubW0KQEAgLTAs
MCArMSwyMDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJEZXByZWNhdGVkUERGUGx1Z2luLmgiCisKKyNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikgJiYgVVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKKworI2ltcG9ydCAiQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIlBERkFu
bm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgorI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVy
U1BJLmgiCisjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9uLmgiCisjaW1wb3J0ICJQREZQbHVn
aW5QYXNzd29yZEZpZWxkLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLmgiCisjaW1wb3J0ICJXS1BhZ2VGaW5kTWF0Y2hl
c0NsaWVudC5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJX
ZWJFdmVudC5oIgorI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCisjaW1wb3J0ICJXZWJQ
YWdlLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFz
dGVib2FyZFByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3MuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNPYmplY3RSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxQREZLaXQv
UERGS2l0Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2lt
cG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1
cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9ybVN0YXRlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSFRNTEZvcm1FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVVJRC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaD4KKyNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBTZXQgb3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUg
YW5ub3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBzY3JvbGxlZCBvdXQgb2Yg
dmlldyBkb24ndCBzaG93CisvLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5LiBXZSBjYW4ndCBhZGQg
YW5ub3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ugb3ZlcmZsb3c6IGhpZGRl
biBvbiB0aGUgYm9keQorLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGluZy4KK3N0YXRpYyBjb25z
dCBjaGFyKiBhbm5vdGF0aW9uU3R5bGUgPQorIiNhbm5vdGF0aW9uQ29udGFpbmVyIHsiCisiICAg
IG92ZXJmbG93OiBoaWRkZW47ICIKKyIgICAgcG9zaXRpb246IGFic29sdXRlOyAiCisiICAgIHBv
aW50ZXItZXZlbnRzOiBub25lOyAiCisiICAgIHRvcDogMDsgIgorIiAgICBsZWZ0OiAwOyAiCisi
ICAgIHJpZ2h0OiAwOyAiCisiICAgIGJvdHRvbTogMDsgIgorIiAgICBkaXNwbGF5OiAtd2Via2l0
LWJveDsgIgorIiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOyAiCisiICAgIC13ZWJraXQt
Ym94LXBhY2s6IGNlbnRlcjsgIgorIn0gIgorIi5hbm5vdGF0aW9uIHsgIgorIiAgICBwb3NpdGlv
bjogYWJzb2x1dGU7ICIKKyIgICAgcG9pbnRlci1ldmVudHM6IGF1dG87ICIKKyJ9ICIKKyJ0ZXh0
YXJlYS5hbm5vdGF0aW9uIHsgIgorIiAgICByZXNpemU6IG5vbmU7ICIKKyJ9ICIKKyJpbnB1dC5h
bm5vdGF0aW9uW3R5cGU9J3Bhc3N3b3JkJ10geyAiCisiICAgIHBvc2l0aW9uOiBzdGF0aWM7ICIK
KyIgICAgd2lkdGg6IDIwMHB4OyAiCisiICAgIG1hcmdpbi10b3A6IDEwMHB4OyAiCisifSAiOwor
CisvLyBJbiBub24tY29udGludW91cyBtb2RlcywgYSBzaW5nbGUgc2Nyb2xsIGV2ZW50IHdpdGgg
YSBtYWduaXR1ZGUgb2YgPj0gMjBweAorLy8gd2lsbCBqdW1wIHRvIHRoZSBuZXh0IG9yIHByZXZp
b3VzIHBhZ2UsIHRvIG1hdGNoIFBERktpdCBiZWhhdmlvci4KK3N0YXRpYyBjb25zdCBpbnQgZGVm
YXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMjA7CisKK0BpbnRlcmZh
Y2UgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IDogTlNPYmplY3QgeworICAgIFBERkxh
eWVyQ29udHJvbGxlciAqX3BkZkxheWVyQ29udHJvbGxlcjsKKyAgICBOU09iamVjdCAqX3BhcmVu
dDsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30KKworQHByb3BlcnR5IChh
c3NpZ24pIFBERkxheWVyQ29udHJvbGxlciAqcGRmTGF5ZXJDb250cm9sbGVyOworQHByb3BlcnR5
IChhc3NpZ24pIE5TT2JqZWN0ICpwYXJlbnQ7CitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpQ
REZQbHVnaW4qIHBkZlBsdWdpbjsKKworLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46KFdlYktpdDo6
UERGUGx1Z2luICopcGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdp
bkFjY2Vzc2liaWxpdHlPYmplY3QKKworQHN5bnRoZXNpemUgcGRmTGF5ZXJDb250cm9sbGVyPV9w
ZGZMYXllckNvbnRyb2xsZXI7CitAc3ludGhlc2l6ZSBwYXJlbnQ9X3BhcmVudDsKK0BzeW50aGVz
aXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClpbml0V2l0aFBERlBsdWdpbjooV2Vi
S2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkCit7Cisg
ICAgcmV0dXJuIE5POworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5T
U3RyaW5nICopYXR0cmlidXRlCit7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBfcGFyZW50
OworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWYWx1
ZUF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3Np
YmlsaXR5VmFsdWVBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
W19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0ZV07
CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVj
dGVkVGV4dFJhbmdlQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9s
bGVyIGFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV07CisgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVy
c0F0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3Np
YmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmli
dXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlW
aXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0pCisg
ICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nl
c3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXSkKKyAgICAgICAg
cmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXTsK
KyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9sZURl
c2NyaXB0aW9uQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVy
IGFjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdKQorICAg
ICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNz
aWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV07CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TVmFs
dWUgdmFsdWVXaXRoU2l6ZTpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVlbigpLnNpemUoKV07Cisg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdOworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkKKyAg
ICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vz
c2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4g
W05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5sb2Nh
dGlvbigpXTsKKworICAgIHJldHVybiAwOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVy
Cit7CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJv
dW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgTlNSZWN0IGJv
dW5kc0luUERGVmlld0Nvb3JkaW5hdGVzID0gW1tfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2li
aWxpdHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdIHJlY3RW
YWx1ZV07CisgICAgICAgIE5TUmVjdCBib3VuZHNJblNjcmVlbkNvb3JkaW5hdGVzID0gX3BkZlBs
dWdpbi0+Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oYm91bmRzSW5QREZWaWV3Q29vcmRpbmF0
ZXMpOworICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpib3VuZHNJblNjcmVl
bkNvb3JkaW5hdGVzXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pCisg
ICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5TGluZUZvcklu
ZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07CisgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZVBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJp
bGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOworICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5n
ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQorICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRy
b2xsZXIgYWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlQXR0cmlidXRlRm9yUGFyYW1ldGVyOnBh
cmFtZXRlcl07CisKKyAgICByZXR1cm4gMDsKK30KKworLSAoQ1BSZWFkaW5nTW9kZWwgKilyZWFk
aW5nTW9kZWwKK3sKKyAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgcmVhZGluZ01vZGVs
XTsKK30KKworLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcworeworICAg
IHN0YXRpYyBOU0FycmF5ICphdHRyaWJ1dGVOYW1lcyA9IDA7CisKKyAgICBpZiAoIWF0dHJpYnV0
ZU5hbWVzKSB7CisgICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFtOU0FjY2Vzc2liaWxpdHlWYWx1
ZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJp
YnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmli
dXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmli
dXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0
cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLAorICAg
ICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNj
ZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVRv
cExldmVsVUlFbGVtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9s
ZURlc2NyaXB0aW9uQXR0cmlidXRlLAorICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6ZUF0
dHJpYnV0ZSwKKyAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGUsCisg
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAorICAgICAgICAgICAg
TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdOworICAgICAgICBbYXR0cmlidXRlTmFt
ZXMgcmV0YWluXTsKKyAgICB9CisKKyAgICByZXR1cm4gYXR0cmlidXRlTmFtZXM7Cit9CisKKy0g
KE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKK3sKKyAgICBzdGF0aWMgTlNBcnJh
eSAqYWN0aW9uTmFtZXMgPSAwOworICAgIAorICAgIGlmICghYWN0aW9uTmFtZXMpCisgICAgICAg
IGFjdGlvbk5hbWVzID0gW1tOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0FjY2Vzc2liaWxpdHlT
aG93TWVudUFjdGlvbl0gcmV0YWluXTsKKyAgICAKKyAgICByZXR1cm4gYWN0aW9uTmFtZXM7Cit9
CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246KE5TU3RyaW5nICopYWN0aW9u
Cit7CisgICAgaWYgKFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNob3dN
ZW51QWN0aW9uXSkKKyAgICAgICAgX3BkZlBsdWdpbi0+c2hvd0NvbnRleHRNZW51QXRQb2ludChJ
bnRSZWN0KEludFBvaW50KCksIF9wZGZQbHVnaW4tPnNpemUoKSkuY2VudGVyKCkpOworfQorCist
IChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmluZyAqKWF0dHJp
YnV0ZQoreworICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5SXNB
dHRyaWJ1dGVTZXR0YWJsZTphdHRyaWJ1dGVdOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQorewor
ICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6dmFs
dWUgZm9yQXR0cmlidXRlOmF0dHJpYnV0ZV07Cit9CisKKy0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCit7CisgICAgcmV0dXJuIFtfcGRmTGF5ZXJD
b250cm9sbGVyIGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdOworfQor
CistIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAoreworICAgIHJldHVybiBzZWxm
OworfQorCistIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKKworQGludGVyZmFjZSBXS1BERlBsdWdpblNjcm9s
bGJhckxheWVyIDogQ0FMYXllciB7CisgICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47
Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OlBERlBsdWdpbiogcGRmUGx1Z2luOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdpblNjcm9sbGJhckxheWVyCisKK0Bz
eW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOworCistIChpZClpbml0V2l0aFBERlBsdWdp
bjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRmUGx1Z2luID0gcGx1
Z2luOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistIChpZDxDQUFjdGlvbj4pYWN0aW9u
Rm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQp
ZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAoreworICAgIF9wZGZQbHVnaW4tPnBhaW50
Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Cit9CisKK0BlbmQKKworQGludGVy
ZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3Q8UERGTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30K
KworQHByb3BlcnR5IChhc3NpZ24pIFdlYktpdDo6UERGUGx1Z2luKiBwZGZQbHVnaW47CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUKKworQHN5
bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47CisKKy0gKGlkKWluaXRXaXRoUERGUGx1Z2lu
OihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9wZGZQbHVnaW4gPSBwbHVn
aW47CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdXBkYXRlU2Nyb2xsUG9z
aXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsKK30KKworLSAodm9pZCl3
cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVzOihOU0FycmF5
ICopdHlwZXMKK3sKKyAgICBfcGRmUGx1Z2luLT53cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TR2Vu
ZXJhbFBib2FyZCwgaXRlbXMsIHR5cGVzKTsKK30KKworLSAodm9pZClzaG93RGVmaW5pdGlvbkZv
ckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0cmluZyBhdFBvaW50OihD
R1BvaW50KXBvaW50Cit7CisgICAgX3BkZlBsdWdpbi0+c2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1
dGVkU3RyaW5nKHN0cmluZywgcG9pbnQpOworfQorCistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6
KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVdlYlNlYXJjaChz
dHJpbmcpOworfQorCistICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nICop
c3RyaW5nCit7CisgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVNwb3RsaWdodFNlYXJjaChzdHJpbmcp
OworfQorCistICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KK3sKKyAgICBfcGRmUGx1
Z2luLT5vcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7Cit9CisKKy0gKHZvaWQpc2F2ZVRvUERG
Cit7CisgICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJD
b250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgY2xpY2tl
ZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybAoreworICAgIF9wZGZQbHVnaW4tPmNsaWNrZWRMaW5r
KHVybCk7Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xs
ZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3RhdGlvbjooUERGQW5u
b3RhdGlvbiAqKWFubm90YXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5zZXRBY3RpdmVBbm5vdGF0
aW9uKGFubm90YXRpb24pOworfQorCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5
ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZh
Y3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcgoreworICAgIF9wZGZQbHVnaW4tPm5vdGlmeUNvbnRl
bnRTY2FsZUZhY3RvckNoYW5nZWQoc2NhbGVGYWN0b3IpOworfQorCistICh2b2lkKXBkZkxheWVy
Q29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENo
YW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZQoreworICAgIF9wZGZQbHVnaW4tPm5vdGlmeURpc3Bs
YXlNb2RlQ2hhbmdlZChtb2RlKTsKK30KKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBE
RkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246
KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIF9wZGZQbHVnaW4tPm5vdGlmeVNlbGVj
dGlvbkNoYW5nZWQoc2VsZWN0aW9uKTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFBERlZpZXdM
YXlvdXQKKy0gKE5TUG9pbnQpY29udmVydFBvaW50OihOU1BvaW50KXBvaW50IHRvUGFnZTooUERG
UGFnZSAqKXBhZ2UgZm9yU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CistIChOU1Jl
Y3QpY29udmVydFJlY3Q6KE5TUmVjdClyZWN0IGZyb21QYWdlOihQREZQYWdlICopIHBhZ2UgZm9y
U2NhbGVGYWN0b3I6KENHRmxvYXQpIHNjYWxlRmFjdG9yOworLSAoUERGUGFnZSAqKXBhZ2VOZWFy
ZXN0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgY3VycmVudFBhZ2U6KFBERlBhZ2UgKiljdXJyZW50UGFn
ZTsKK0BlbmQKKworc3RhdGljIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHRNSU1FVHlwZSA9ICJhcHBs
aWNhdGlvbi9wb3N0c2NyaXB0IjsKK2NvbnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVzdElE
ID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0cmVh
bXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCisKK3N0YXRpYyB2b2lkIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJlZSwg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENHUERGQXJyYXlSZWYgbmFt
ZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIsICZu
YW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChu
YW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsgKytp
KSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7CisgICAgICAgICAgICBDR1BE
RkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOworICAgICAgICAgICAg
dmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBDR1BERkFycmF5UmVmIGtpZHM7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRB
cnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6
ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYg
a2lkOworICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZraWQp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1
YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnZXRB
bGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8Q0dQ
REZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCit7CisgICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3Vi
dHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldEFsbFNj
cmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBkZkRvY3VtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgcGRmQ2F0YWxvZyA9
IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAgICBpZiAoIXBkZkNhdGFs
b2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGljdGlvbmFyeSBvZiBhbGwg
ZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgbmFtZXNE
aWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShwZGZDYXRh
bG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVlLgorICAgIENH
UERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFDR1BERkRpY3Rp
b25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQiLCAmamF2YVNj
cmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5hbWVzIGFyZSBh
cmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4KKyAgICBWZWN0
b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJl
ZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVfdCBvYmplY3RDb3VudCA9
IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RDb3Vu
dDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0QWN0aW9uOwor
ICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRfY2FzdDxDR1BERk9i
amVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9uYXJ5LCAmamF2YVNj
cmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBIEphdmFT
Y3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2YVNjcmlwdCIuCisg
ICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlmICghQ0dQREZEaWN0aW9u
YXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBlKSB8fCBzdHJjbXAo
YWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5kZXggbGVuZ3RoOworICAg
ICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERGU3RyaW5nUmVmIHN0cmlu
ZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAgICAgaWYgKENHUERG
RGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyZWFtKSkgewor
ICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIGRhdGEgPSBh
ZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0KSk7CisgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBieXRl
cyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAgICAgICAgICBsZW5ndGggPSBD
RkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoQ0dQREZEaWN0
aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJpbmcpKSB7CisgICAg
ICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJpbmcpOworICAgICAgICAg
ICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0ZTdHJp
bmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVzWzBdID09IDB4RkUgJiYg
Ynl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgOiBrQ0ZTdHJpbmdF
bmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0ID0gYWRv
cHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywg
bGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2NyaXB0KTsK
KyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitSZWY8UERGUGx1Z2luPiBQREZQbHVnaW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUERGUGx1Z2luKGZyYW1lKSk7Cit9CisKK1BE
RlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6IFBsdWdpbihQREZQbHVn
aW5UeXBlKQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1faXNQb3N0U2NyaXB0KGZhbHNl
KQorICAgICwgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQoZmFsc2UpCisgICAgLCBtX2NvbnRhaW5l
ckxheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX2NvbnRlbnRM
YXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9zY3JvbGxDb3Ju
ZXJMYXllcihhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdp
dGhQREZQbHVnaW46dGhpc10pKQorICAgICwgbV9wZGZMYXllckNvbnRyb2xsZXIoYWRvcHROUyhb
W3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fcGRmTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKK3sKKyAgICBtX3BkZkxheWVyQ29u
dHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0
KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRl
bnRMYXllci5nZXQoKTsKKworICAgIGlmIChzdXBwb3J0c0Zvcm1zKCkpIHsKKyAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7Cisg
ICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGRp
dlRhZywgZmFsc2UpOworICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXItPnNldEF0dHJpYnV0
ZShpZEF0dHIsICJhbm5vdGF0aW9uQ29udGFpbmVyIik7CisKKyAgICAgICAgUmVmPEVsZW1lbnQ+
IGFubm90YXRpb25TdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChzdHlsZVRh
ZywgZmFsc2UpOworICAgICAgICBhbm5vdGF0aW9uU3R5bGVFbGVtZW50LT5zZXRUZXh0Q29udGVu
dChhbm5vdGF0aW9uU3R5bGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworCisgICAgICAgIG1fYW5u
b3RhdGlvbkNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoV1RGOjptb3ZlKGFubm90YXRpb25TdHlsZUVs
ZW1lbnQpKTsKKyAgICAgICAgZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCktPmFwcGVuZENoaWxk
KCptX2Fubm90YXRpb25Db250YWluZXIpOworICAgIH0KKworICAgIG1fYWNjZXNzaWJpbGl0eU9i
amVjdCA9IGFkb3B0TlMoW1tXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgYWxsb2NdIGlu
aXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICBtX2FjY2Vzc2liaWxpdHlPYmplY3QuZ2V0KCku
cGRmTGF5ZXJDb250cm9sbGVyID0gbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgbV9h
Y2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpLnBhcmVudCA9IHdlYkZyYW1lKCktPnBhZ2UoKS0+YWNj
ZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpOworCisgICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3Vi
bGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOworICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1
YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOworfQorCitQREZQbHVnaW46On5QREZQ
bHVnaW4oKQoreworfQorCitQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1Z2luSW5mbygpCit7Cisg
ICAgUGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5OYW1l
KCk7CisgICAgaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luID0gdHJ1ZTsKKyAgICBpbmZvLmNsaWVu
dExvYWRQb2xpY3kgPSBQbHVnaW5Mb2FkQ2xpZW50UG9saWN5VW5kZWZpbmVkOworCisgICAgTWlt
ZUNsYXNzSW5mbyBwZGZNaW1lQ2xhc3NJbmZvOworICAgIHBkZk1pbWVDbGFzc0luZm8udHlwZSA9
ICJhcHBsaWNhdGlvbi9wZGYiOworICAgIHBkZk1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3Vt
ZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgcGRmTWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFw
cGVuZCgicGRmIik7CisgICAgaW5mby5taW1lcy5hcHBlbmQocGRmTWltZUNsYXNzSW5mbyk7CisK
KyAgICBNaW1lQ2xhc3NJbmZvIHRleHRQREZNaW1lQ2xhc3NJbmZvOworICAgIHRleHRQREZNaW1l
Q2xhc3NJbmZvLnR5cGUgPSAidGV4dC9wZGYiOworICAgIHRleHRQREZNaW1lQ2xhc3NJbmZvLmRl
c2MgPSBwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHRleHRQREZNaW1lQ2xhc3NJ
bmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKKyAgICBpbmZvLm1pbWVzLmFwcGVuZCh0ZXh0
UERGTWltZUNsYXNzSW5mbyk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIHBvc3RTY3JpcHRNaW1lQ2xh
c3NJbmZvOworICAgIHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvLnR5cGUgPSBwb3N0U2NyaXB0TUlN
RVR5cGU7CisgICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8uZGVzYyA9IHBvc3RTY3JpcHREb2N1
bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIHBvc3RTY3JpcHRNaW1lQ2xhc3NJbmZvLmV4dGVu
c2lvbnMuYXBwZW5kKCJwcyIpOworICAgIGluZm8ubWltZXMuYXBwZW5kKHBvc3RTY3JpcHRNaW1l
Q2xhc3NJbmZvKTsKKyAgICAKKyAgICByZXR1cm4gaW5mbzsKK30KKwordm9pZCBQREZQbHVnaW46
OnVwZGF0ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpv
bnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1
bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1l
bnRTaXplLndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNj
cm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyKSB7CisgICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKKyAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRTaXplLmhl
aWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0g
KG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAg
ICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJveGVzLmlz
RW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKKworICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVw
cyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53aWR0aCgpIC0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7CisgICAgICAgIElu
dFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygpLT55KCkg
KyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3Np
emUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFj
dChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0
ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5oZWlnaHQoKSAtIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3Np
emUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+
eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJl
Y3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9
CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3
KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFz
U2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFy
OworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgaWYg
KGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVh
KHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9s
bGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNjcm9sbGJh
cigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllciBzZXRO
ZWVkc0Rpc3BsYXldOworICAgIH0KKyAgICAKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUg
PSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBbbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYg
KG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXllci5nZXQo
KS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5
ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1BsdWdpblZpZXcqIFBERlBsdWdpbjo6
cGx1Z2luVmlldygpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihjb250
cm9sbGVyKCkpOworfQorCitjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBsdWdpblZpZXco
KSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29u
dHJvbGxlcigpKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBERlBsdWdpbjo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0
aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdp
dGhQREZQbHVnaW46dGhpc10pOworICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXll
cjptX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xs
YmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICAgICAgW21fY29u
dGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpXTsK
KyAgICB9CisgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKSkgeworICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdl
LT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJzKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdFRyaWdnZXIocGFnZS0+dGVzdFRyaWdnZXIoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENo
aWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0
aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAg
ICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRy
OworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAg
ICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KK30KKworSW50UmVjdCBQ
REZQbHVnaW46OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxi
YXItPmxvY2F0aW9uKCkgLSBwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJu
IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250
YWluaW5nVmlldyhwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcmVj
dCk7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVu
dFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXco
KS0+cGx1Z2luRWxlbWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1v
dmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKwor
ICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0g
c2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkgLSBw
bHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhwbHVnaW5W
aWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2lu
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAor
eworICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxl
bWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQubW92ZShwbHVnaW5W
aWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIAorICAgIHJl
dHVybiBwb2ludDsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBy
ZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFBERlBs
dWdpbjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hvcml6b250YWxT
Y3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIEludFJl
Y3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwg
cGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCks
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogUERGUGx1Z2luOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUg
YW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpzY3JvbGxhYmxlQXJl
YUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZVJl
Y3QoKTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIg
OiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNj
cm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30K
KworYm9vbCBQREZQbHVnaW46OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdl
ID0gY29yZUZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuaXNBY3RpdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUERGUGx1Z2luOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFt
ZS0+Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBh
Z2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Ny
b2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQu
d2lkdGgoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IFBERlBsdWdp
bjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9s
bE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Cit9CisKK0ludFBvaW50
IFBERlBsdWdpbjo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW50UG9pbnQoKTsKK30KKworSW50UG9pbnQgUERGUGx1Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSBjb25zdAoreworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9y
aXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpIDogMDsKKworICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVu
dFNpemUud2lkdGgoKSAtIG1fc2l6ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwg
bV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3NpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8o
KTsKKyAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKK30KKwordm9pZCBQREZQbHVnaW46OnNjcm9s
bGJhclN0eWxlQ2hhbmdlZChTY3JvbGxiYXJTdHlsZSBzdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkK
K3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0
aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9s
bGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3
aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdT
Y3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOwor
ICAgIAorICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoc3R5bGUsIGZv
cmNlVXBkYXRlKTsKKyAgICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywg
c2Nyb2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgorICAgIHVwZGF0
ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46OmFkZEFyY2hpdmVSZXNvdXJjZSgp
Cit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRv
IERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMg
Q2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRl
eHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgTlNEaWN0aW9u
YXJ5KiBoZWFkZXJzID0gQHsgQCJDb250ZW50LURpc3Bvc2l0aW9uIjogKE5TU3RyaW5nICopbV9z
dWdnZXN0ZWRGaWxlbmFtZSwgQCJDb250ZW50LVR5cGUiIDogQCJhcHBsaWNhdGlvbi9wZGYiIH07
CisgICAgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRU
UFVSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDptX3NvdXJjZVVSTCBzdGF0dXNDb2RlOjIw
MCBIVFRQVmVyc2lvbjooTlNTdHJpbmcqKWtDRkhUVFBWZXJzaW9uMV8xIGhlYWRlckZpZWxkczpo
ZWFkZXJzXSk7CisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlKHJlc3Bv
bnNlLmdldCgpKTsKKworICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJj
aGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YS5nZXQo
KSksIG1fc291cmNlVVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0cmluZygpLCBz
eW50aGVzaXplZFJlc3BvbnNlKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50
KCktPmxvYWRlcigpLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKK30K
Kworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQ
REZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRmVmlldy0+cmVm
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0
KQoreworICAgIFBERlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFBERlBsdWdpbio+KEpT
T2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitK
U1ZhbHVlUmVmIFBERlBsdWdpbjo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQREZQbHVnaW4qPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0g
cGRmVmlldy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29y
ZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOworCisgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7
CisKKyAgICBwYWdlLT5jaHJvbWUoKS5wcmludChjb3JlRnJhbWUpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK0pTT2JqZWN0UmVmIFBERlBsdWdpbjo6bWFr
ZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCit7CisgICAgc3RhdGljIEpTU3RhdGljRnVuY3Rp
b24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQiLCBqc1BE
RkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCB9LAorICAgIH07CisKKyAgICBz
dGF0aWMgSlNDbGFzc0RlZmluaXRpb24ganNQREZEb2NDbGFzc0RlZmluaXRpb24gPSB7CisgICAg
ICAgIDAsCisgICAgICAgIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwKKyAgICAgICAgIkRvYyIsCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICBqc1BERkRvY0luaXRpYWxpemUsIGpzUERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2ND
bGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9jQ2xhc3NEZWZpbml0aW9uKTsKKworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY3R4LCBqc1BERkRvY0NsYXNzLCB0aGlzKTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBjb252ZXJ0UG9zdFNjcmlwdERhdGFUb1BERihS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwb3N0U2NyaXB0RGF0YSkKK3sKKyAgICAvLyBDb252ZXJ0IFBv
c3RTY3JpcHQgdG8gUERGIHVzaW5nIHRoZSBRdWFydHogMkQgQVBJLgorICAgIC8vIGh0dHA6Ly9k
ZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vR3JhcGhpY3NJbWFnaW5nL0NvbmNlcHR1
YWwvZHJhd2luZ3dpdGhxdWFydHoyZC9kcV9wc19jb252ZXJ0L2NoYXB0ZXJfMTZfc2VjdGlvbl8x
Lmh0bWwKKworICAgIENHUFNDb252ZXJ0ZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwIH07CisgICAgUmV0YWluUHRyPENHUFNDb252ZXJ0ZXJSZWY+IGNvbnZl
cnRlciA9IGFkb3B0Q0YoQ0dQU0NvbnZlcnRlckNyZWF0ZSgwLCAmY2FsbGJhY2tzLCAwKSk7Cisg
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKHBvc3RTY3JpcHREYXRhLmdldCgpKSk7CisgICAgUmV0
YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IHBkZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11
dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIFJldGFpblB0cjxDR0RhdGFDb25z
dW1lclJlZj4gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlV2l0aENGRGF0
YShwZGZEYXRhLmdldCgpKSk7CisgICAgCisgICAgQ0dQU0NvbnZlcnRlckNvbnZlcnQoY29udmVy
dGVyLmdldCgpLCBwcm92aWRlci5nZXQoKSwgY29uc3VtZXIuZ2V0KCksIDApOworICAgIAorICAg
IHJldHVybiBwZGZEYXRhOworfQorCit2b2lkIFBERlBsdWdpbjo6Y29udmVydFBvc3RTY3JpcHRE
YXRhSWZOZWVkZWQoKQoreworICAgIGlmICghbV9pc1Bvc3RTY3JpcHQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBTdHJpbmcobV9zdWdnZXN0ZWRGaWxlbmFt
ZSArICIucGRmIik7CisgICAgbV9kYXRhID0gY29udmVydFBvc3RTY3JpcHREYXRhVG9QREYobV9k
YXRhKTsKK30KKwordm9pZCBQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAg
YWRkQXJjaGl2ZVJlc291cmNlKCk7CisgICAgCisgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBk
b2N1bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0
YTpyYXdEYXRhKCldKTsKKworICAgIHNldFBERkRvY3VtZW50KGRvY3VtZW50KTsKKworICAgIHVw
ZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKworICAgIFttX3BkZkxheWVyQ29udHJv
bGxlciBzZXRGcmFtZVNpemU6c2l6ZSgpXTsKKyAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQo
KS5kb2N1bWVudCA9IGRvY3VtZW50LmdldCgpOworCisgICAgaWYgKGhhbmRsZXNQYWdlU2NhbGVG
YWN0b3IoKSkKKyAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3IoW21fcGRm
TGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0sIEludFBvaW50KCkpOworCisgICAg
bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KFttX3BkZkxheWVyQ29udHJvbGxl
ciBzY3JvbGxQb3NpdGlvbl0pKTsKKworICAgIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdXBkYXRl
U2Nyb2xsYmFycygpOworCisgICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKKworICAgIGlm
IChbZG9jdW1lbnQgaXNMb2NrZWRdKQorICAgICAgICBjcmVhdGVQYXNzd29yZEVudHJ5Rm9ybSgp
OworfQorCit2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90
IHN0cmVhbUlELCBjb25zdCBVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRS
ZXF1ZXN0SUQpOworCisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
OworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCBwb3N0U2NyaXB0TUlNRVR5
cGUpKQorICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0
ZXMsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQg
PT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIG1f
ZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFB
cHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihi
eXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKHVpbnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0
cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIGNvbnZlcnRQb3N0U2NyaXB0
RGF0YUlmTmVlZGVkKCk7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxl
ZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVu
dFJlcXVlc3RJRCk7CisKKyAgICBtX2RhdGEuY2xlYXIoKTsKK30KKwordm9pZCBQREZQbHVnaW46
Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwmIHJlc3BvbnNlVVJMLCB1
aW50MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZp
bGVuYW1lOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCBwb3N0U2NyaXB0
TUlNRVR5cGUpKQorICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50
IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgbV9kYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0
YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsK
K30KKwordm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQorewor
ICAgIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7CisgICAgcGRmRG9jdW1lbnREaWRM
b2FkKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCit7
CisgICAgbV9kYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpydW5TY3JpcHRzSW5Q
REZEb2N1bWVudCgpCit7CisgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4+IHNjcmlw
dHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQgZG9jdW1l
bnRSZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6
ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmpl
Y3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKKyAgICAgICAg
SlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOworICAgICAg
ICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisgICAgCisgICAgSlNHbG9iYWxDb250
ZXh0UmVsZWFzZShjdHgpOworfQorCit2b2lkIFBERlBsdWdpbjo6Y3JlYXRlUGFzc3dvcmRFbnRy
eUZvcm0oKQoreworICAgIG1fcGFzc3dvcmRGaWVsZCA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQ6
OmNyZWF0ZShtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7CisgICAgbV9wYXNzd29y
ZEZpZWxkLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgpKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQorewor
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6cGFz
c3dvcmRdOworCisgICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKKyAgICAgICAg
bV9wYXNzd29yZEZpZWxkID0gbnVsbHB0cjsKKworICAgICAgICBjYWxjdWxhdGVTaXplcygpOwor
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgfQorfQorCit2b2lkIFBERlBsdWdpbjo6
dXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpCit7CisgICAgZG91YmxlIG5ld1NjYWxl
RmFjdG9yID0gY29udHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9yKCk7CisgICAgaWYgKCFo
YW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgIG5ld1NjYWxlRmFjdG9yICo9IHdlYkZy
YW1lKCktPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICBpZiAobmV3U2NhbGVGYWN0
b3IgIT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGRldmljZVNjYWxlRmFjdG9yXSkKKyAgICAgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHNldERldmljZVNjYWxlRmFjdG9yOm5ld1NjYWxlRmFjdG9y
XTsKK30KKwordm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0
KQoreworICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmNvbXB1dGVQYWdlQm94ZXMoKQoreworICAgIHNpemVfdCBwYWdlQ291bnQgPSBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0p
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAg
Q0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVu
dCBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOworCisgICAg
ICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BC
b3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAgICAgICAgYm94ID0g
Q0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7CisgICAgICAgIG1f
cGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KK30KKwordm9pZCBQREZQbHVn
aW46OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICBpZiAoW3BkZkRvY3VtZW50KCkgaXNMb2NrZWRd
KSB7CisgICAgICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKDAsIDApKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjb21lIHN0cmFpZ2h0
IGZyb20gUERGS2l0LgorICAgIGNvbXB1dGVQYWdlQm94ZXMoKTsKKworICAgIHNldFBERkRvY3Vt
ZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2l6ZVJlc3BlY3Rp
bmdab29tXSkpOworfQorCitib29sIFBERlBsdWdpbjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7Cisg
ICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVycy51
cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9jdW1lbnRS
ZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhUVFBI
ZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNlKTsKKworICAgIGNvbnRyb2xsZXIo
KS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBE
RlBsdWdpbjo6ZGVzdHJveSgpCit7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVs
ZWdhdGUgPSAwOworCisgICAgaWYgKHdlYkZyYW1lKCkpIHsKKyAgICAgICAgaWYgKEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXcoKSkKKyAgICAgICAg
ICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgfQorCisgICAg
bV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKKyAgICBtX2Fubm90YXRpb25Db250YWluZXIg
PSBudWxscHRyOworCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAKKyAgICBbbV9z
Y3JvbGxDb3JuZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExh
eWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKwordm9pZCBQREZQbHVnaW46OnVwZGF0ZUNv
bnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkKK3sKKyAgICBBU1NF
UlQoZ3JhcGhpY3NDb250ZXh0LnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpOworCisgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNj
cm9sbENvcm5lclJlY3QoKSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKKyAgICAKKyAgICBp
ZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3JuZXJMYXllcikgeworICAgICAgICBJbnRSZWN0IHNjcm9s
bENvcm5lclJlY3QgPSB0aGlzLT5zY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAgIGdyYXBoaWNz
Q29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lclJlY3QueCgpLCAtc2Nyb2xsQ29ybmVyUmVj
dC55KCkpOworICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5l
cihudWxscHRyLCBncmFwaGljc0NvbnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbnVsbHB0cjsK
KyAgICAKKyAgICBpZiAobGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQorICAgICAg
ICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGVsc2UgaWYgKGxheWVyID09
IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorICAgICAgICBzY3JvbGxiYXIgPSBob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbGJhci0+eCgpLCAtc2Ny
b2xsYmFyLT55KCkpOworICAgIHNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpKTsKK30KKworUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUERGUGx1
Z2luOjpzbmFwc2hvdCgpCit7CisgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgZmxvYXQgY29udGVudHNTY2FsZUZhY3RvciA9IGNvbnRyb2xs
ZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOworICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZSA9IHNpemUoKTsKKyAgICBiYWNraW5nU3RvcmVTaXplLnNjYWxlKGNvbnRlbnRzU2NhbGVGYWN0
b3IpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpT
dXBwb3J0c0FscGhhKTsKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpOworCisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGNvbnRlbnRzU2NhbGVG
YWN0b3IsIC1jb250ZW50c1NjYWxlRmFjdG9yKSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1t
X3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgKyBtX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc25hcHNo
b3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCldOworCisgICAgcmV0dXJuIGJp
dG1hcDsKK30KKworUGxhdGZvcm1MYXllciogUERGUGx1Z2luOjpwbHVnaW5MYXllcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7Cit9CisKK0ludFBvaW50IFBERlBsdWdp
bjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHBv
aW50LnkoKSk7Cit9CisKK0ludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlld1Rv
UGx1Z2luKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yb290
Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKK30KKworSW50UG9pbnQgUERG
UGx1Z2luOjpjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQu
eCgpLCBzaXplKCkuaGVpZ2h0KCkgLSBwb2ludC55KCkpOworICAgIHJldHVybiBtX3Jvb3RWaWV3
VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGlu
YXRlcyk7Cit9CisKK0Zsb2F0UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUERGVmlld1RvU2Ny
ZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1l
VmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRQb2ludCBvcmln
aW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCBzaXplKCkuaGVpZ2h0KCkgLSByZWN0Lnko
KSAtIHJlY3QuaGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0
UmVjdChvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzLCByZWN0LnNpemUoKSkpOworCisgICAgcmV0
dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30KKworSW50UmVjdCBQREZQbHVnaW46OmJvdW5kc09uU2Ny
ZWVuKCkgY29uc3QKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNv
cmVGcmFtZSgpLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBzaXplKCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0g
bV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KGJvdW5kcyk7Cisg
ICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihlbmNsb3NpbmdJbnRSZWN0KHJl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKK30KKwordm9pZCBQREZQbHVnaW46Omdlb21ldHJ5
RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCit7CisgICAgaWYg
KHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkg
PT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9yb290Vmlld1RvUGx1Z2lu
VHJhbnNmb3JtID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTpwbHVnaW5TaXplXTsKKworICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOworICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2Fs
ZSgxLCAtMSwgMSk7CisgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFu
c2Zvcm0sIDAsIC1wbHVnaW5TaXplLmhlaWdodCgpLCAwKTsKKyAgICAKKyAgICBpZiAoaGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpKSB7CisgICAgICAgIENHRmxvYXQgbWFnbmlmaWNhdGlvbiA9IHBs
dWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29u
dGVudFNjYWxlRmFjdG9yXTsKKworICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBtX2xhc3RN
b3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcywgd2Ugc2hvdWxkIHVzZSB0aGUgem9vbSBv
cmlnaW4gZnJvbSBQbHVnaW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgIGlmICht
YWduaWZpY2F0aW9uKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1hZ25pZnlX
aXRoTWFnbmlmaWNhdGlvbjptYWduaWZpY2F0aW9uIGF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5U
b1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpIGltbWVkaWF0
ZWx5Ok5PXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYW5kbGUgcGFn
ZSBzY2FsZSBvdXJzZWx2ZXMsIHdlIG5lZWQgdG8gcmVzcGVjdCBvdXIgcGFyZW50IHBhZ2Uncwor
ICAgICAgICAvLyBzY2FsZSwgd2hpY2ggbWF5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgdXBkYXRl
UGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOworICAgIH0gCisKKyAgICBjYWxjdWxhdGVTaXpl
cygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGlmIChtX2FjdGl2ZUFubm90YXRp
b24pCisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKKworICAg
IFttX2NvbnRlbnRMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0cmFuc2Zvcm1dOworICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpmcmFtZURpZEZpbmlz
aExvYWRpbmcodWludDY0X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgUERGUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QsIGJvb2wpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkaWRFdmFsdWF0ZUphdmFTY3Jp
cHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworICAgIAorc3RhdGljIE5TVUludGVnZXIgbW9kaWZpZXJGbGFnc0Zyb21XZWJF
dmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJuIChldmVudC5zaGlmdEtl
eSgpID8gTlNTaGlmdEtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5jb250cm9sS2V5KCkg
PyBOU0NvbnRyb2xLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQuYWx0S2V5KCkgPyBOU0Fs
dGVybmF0ZUtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5tZXRhS2V5KCkgPyBOU0NvbW1h
bmRLZXlNYXNrIDogMCk7Cit9CisgICAgCitzdGF0aWMgYm9vbCBnZXRFdmVudFR5cGVGcm9tV2Vi
RXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYgZXZlbnRUeXBlKQorewor
ICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoK
KyAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlEb3duOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpLZXlVcDoKKyAgICAgICAgZXZlbnRUeXBlID0gTlNLZXlVcDsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgorICAgICAg
ICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9u
KCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAg
ICAgZXZlbnRUeXBlID0gTlNMZWZ0TW91c2VEb3duOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICBl
dmVudFR5cGUgPSBOU1JpZ2h0TW91c2VEb3duOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNMZWZ0TW91
c2VVcDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZl
bnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgZXZlbnRUeXBlID0gTlNSaWdodE1vdXNlVXA7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToK
KyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQp
LmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAg
ICAgICAgICAgIGV2ZW50VHlwZSA9IE5TTGVmdE1vdXNlRHJhZ2dlZDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAg
ICAgICAgICAgZXZlbnRUeXBlID0gTlNSaWdodE1vdXNlRHJhZ2dlZDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAg
ICAgICAgZXZlbnRUeXBlID0gTlNNb3VzZU1vdmVkOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorICAgIAorTlNF
dmVudCAqUERGUGx1Z2luOjpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JiBldmVudCkKK3sKKyAgICBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRl
cyA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5wb3NpdGlvbigpKTsKKworICAg
IEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMoY29udmVydEZyb21QbHVnaW5U
b1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKTsKKworICAg
IE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKKworICAgIGlmICghZ2V0RXZlbnRUeXBlRnJvbVdlYkV2
ZW50KGV2ZW50LCBldmVudFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5TVUludGVn
ZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZlbnQpOworCisg
ICAgcmV0dXJuIFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246
cG9zaXRpb25JblBERlZpZXdDb29yZGluYXRlcyBtb2RpZmllckZsYWdzOm1vZGlmaWVyRmxhZ3Mg
dGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4dDpuaWwgZXZlbnROdW1iZXI6MCBjbGlj
a0NvdW50OmV2ZW50LmNsaWNrQ291bnQoKSBwcmVzc3VyZTowXTsKK30KKwordm9pZCBQREZQbHVn
aW46OnVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCwgVXBkYXRlQ3Vyc29y
TW9kZSBtb2RlKQoreworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IE5vbmU7CisK
KyAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvblVuZGVyTW91c2UgPSBbbV9wZGZMYXllckNvbnRy
b2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5Ub1BERlZp
ZXcoZXZlbnQucG9zaXRpb24oKSldOworICAgIGlmIChzZWxlY3Rpb25VbmRlck1vdXNlICYmIFtb
c2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmddIGxlbmd0aF0pCisgICAgICAgIGhpdFRlc3RSZXN1
bHQgPSBUZXh0OworCisgICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9sYXN0SGl0VGVzdFJlc3Vs
dCAmJiBtb2RlID09IFVwZGF0ZUlmTmVlZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJG
cmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q3Vyc29yKGhp
dFRlc3RSZXN1bHQgPT0gVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiBwb2ludGVyQ3Vyc29yKCkpKTsK
KyAgICBtX2xhc3RIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKK30KKworYm9vbCBQREZQ
bHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7Cisg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7Cisg
ICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbiA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihl
dmVudC5wb3NpdGlvbigpKTsKKworICAgIG1fbGFzdE1vdXNlRXZlbnQgPSBldmVudDsKKworICAg
IFJlZlB0cjxTY3JvbGxiYXI+IHRhcmdldFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbjsKKworICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhckZy
YW1lKG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7CisgICAgICAgIGlmICh2
ZXJ0aWNhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgICAgICAg
ICAgdGFyZ2V0U2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgaWYgKHZl
cnRpY2FsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2lu
Q29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9z
aXRpb24gPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIH0KKworICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXJG
cmFtZShtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7CisgICAgICAgIGlm
IChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAg
ICAgICAgICB0YXJnZXRTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAg
IGlmIChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlv
bkluUGx1Z2luQ29vcmRpbmF0ZXMpKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFz
dE1vdXNlUG9zaXRpb24gPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgaWYg
KG1fc2Nyb2xsQ29ybmVyTGF5ZXIgJiYgSW50UmVjdChtX3Njcm9sbENvcm5lckxheWVyLmdldCgp
LmZyYW1lKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gUmlnaHQtY2xpY2tzIGFuZCBDb250cm9sLWNsaWNrcyBhbHdheXMgY2FsbCBo
YW5kbGVDb250ZXh0TWVudUV2ZW50IGFzIHdlbGwuCisgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09
IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uIHx8IChldmVudC5idXR0b24oKSA9PSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uICYmIGV2ZW50LmNvbnRyb2xLZXkoKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgTlNFdmVudCAqbnNFdmVudCA9IG5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50
KGV2ZW50KTsKKworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VNb3ZlOgorICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAg
ICB1cGRhdGVDdXJzb3IoZXZlbnQpOworCisgICAgICAgIGlmICh0YXJnZXRTY3JvbGxiYXIpIHsK
KyAgICAgICAgICAgIGlmICghdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb24pIHsK
KyAgICAgICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRW50ZXJlZCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRhcmdldFNjcm9sbGJhci0+bW91c2VNb3ZlZChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGFyZ2V0U2Nyb2xsYmFyICYmIHRhcmdldFNjcm9sbGJhckZvckxhc3RN
b3VzZVBvc2l0aW9uKQorICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFzdE1vdXNlUG9z
aXRpb24tPm1vdXNlRXhpdGVkKCk7CisKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkg
eworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VEcmFnZ2VkOm5zRXZlbnRdOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246Cisg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAg
ICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlTW92ZWQ6bnNFdmVudF07CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93
bjoKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1v
dXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRG93bihwbGF0Zm9y
bUV2ZW50KTsKKworICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpu
c0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHJp
Z2h0TW91c2VEb3duOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok5vQnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24o
KSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAg
ICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3Jv
bGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisKKyAgICAgICAgICAgIFttX3BkZkxheWVy
Q29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgIGNhc2UgV2Vi
TW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5v
QnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFBERlBsdWdpbjo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
ZW50KQoreworICAgIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgdXBkYXRlQ3Vyc29y
KGV2ZW50LCBGb3JjZVVwZGF0ZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBERlBs
dWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAg
IG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCiti
b29sIFBERlBsdWdpbjo6c2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUo
KS0+dmlldygpOworICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBmcmFtZVZpZXctPmNvbnRl
bnRzVG9Sb290Vmlldyhwb2ludCk7CisgICAgV2ViTW91c2VFdmVudCBldmVudChXZWJFdmVudDo6
TW91c2VEb3duLCBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbiwgY29udGVudHNQb2ludCwgY29u
dGVudHNQb2ludCwgMCwgMCwgMCwgMSwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4o
MCksIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCBXZWJDb3JlOjpGb3JjZUF0Q2xpY2sp
OworICAgIHJldHVybiBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKK30KKworYm9vbCBQ
REZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZl
bnQpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUo
KS0+dmlldygpOworICAgIEludFBvaW50IHBvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvU2Ny
ZWVuKEludFJlY3QoZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvc2l0aW9uKCkp
LCBJbnRTaXplKCkpKS5sb2NhdGlvbigpOworICAgIAorICAgIGlmIChOU01lbnUgKm5zTWVudSA9
IFttX3BkZkxheWVyQ29udHJvbGxlciBtZW51Rm9yRXZlbnQ6bnNFdmVudEZvcldlYk1vdXNlRXZl
bnQoZXZlbnQpXSkgeworICAgICAgICBXS1BvcHVwQ29udGV4dE1lbnUobnNNZW51LCBwb2ludCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGV2ZW50KQoreworICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKKworICAgIGlmICgh
Z2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdz
RnJvbVdlYkV2ZW50KGV2ZW50KTsKKyAgICAKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBrZXlFdmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2NhdGlvbjpOU1plcm9Qb2ludCBtb2Rp
ZmllckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4
dDowIGNoYXJhY3RlcnM6ZXZlbnQudGV4dCgpIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpl
dmVudC51bm1vZGlmaWVkVGV4dCgpIGlzQVJlcGVhdDpldmVudC5pc0F1dG9SZXBlYXQoKSBrZXlD
b2RlOmV2ZW50Lm5hdGl2ZVZpcnR1YWxLZXlDb2RlKCldOworICAgIAorICAgIHN3aXRjaCAoZXZl
bnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKKyAgICAgICAgcmV0dXJu
IFttX3BkZkxheWVyQ29udHJvbGxlciBrZXlEb3duOmZha2VFdmVudF07CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitib29sIFBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBpZiAoY29tbWFu
ZE5hbWUgPT0gImNvcHkiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29weVNlbGVj
dGlvbl07CisgICAgZWxzZSBpZiAoY29tbWFuZE5hbWUgPT0gInNlbGVjdEFsbCIpCisgICAgICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBzZWxlY3RBbGxdOworICAgIGVsc2UgaWYgKGNvbW1hbmRO
YW1lID09ICJ0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24iKSB7CisgICAgICAgIE5TU3RyaW5n
ICpzdHJpbmcgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl0uc3RyaW5n
OworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCkKKyAgICAgICAgICAgIHdyaXRlSXRlbXNUb1Bh
c3RlYm9hcmQoTlNGaW5kUGJvYXJkLCBAWyBbc3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXSBdLCBAWyBOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nIF0pOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBERlBsdWdpbjo6aXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICBpZiAoY29tbWFuZE5h
bWUgPT0gImNvcHkiIHx8IGNvbW1hbmROYW1lID09ICJ0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rp
b24iKQorICAgICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRTZWxlY3Rp
b25dOworCisgICAgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwiKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQREZQbHVnaW46OnNldFNj
cm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsT2Zmc2V0
ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKworICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2Nyb2xsUG9zaXRpb246b2Zm
c2V0XTsKKworICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCisgICAgICAgIG1fYWN0aXZlQW5u
b3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoc2Nyb2xsYmFyID09
IGhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNE
aXNwbGF5XTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgc2V0TmVl
ZHNEaXNwbGF5XTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzRnVsbEZyYW1lUGx1Z2luKCkgY29u
c3QKK3sKKyAgICAvLyA8b2JqZWN0PiBvciA8ZW1iZWQ+IHBsdWdpbnMgd2lsbCBhcHBlYXIgdG8g
YmUgaW4gdGhlaXIgcGFyZW50IGZyYW1lLCBzbyB3ZSBoYXZlIHRvCisgICAgLy8gY2hlY2sgd2hl
dGhlciBvdXIgZnJhbWUncyB3aWRnZXQgaXMgZXhhY3RseSBvdXIgUGx1Z2luVmlldy4KKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxQ
bHVnaW5Eb2N1bWVudCo+KGRvY3VtZW50KS0+cGx1Z2luV2lkZ2V0KCkgPT0gcGx1Z2luVmlldygp
OworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHdlYkZyYW1lKCktPmlzTWFpbkZyYW1lKCkgJiYgaXNGdWxsRnJhbWVQbHVn
aW4oKTsKK30KKwordm9pZCBQREZQbHVnaW46OmNsaWNrZWRMaW5rKE5TVVJMICp1cmwpCit7Cisg
ICAgVVJMIGNvcmVVUkwgPSB1cmw7CisgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGNvcmVV
UkwpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5j
b3JlRnJhbWUoKTsKKworICAgIFJlZlB0cjxFdmVudD4gY29yZUV2ZW50OworICAgIGlmIChtX2xh
c3RNb3VzZUV2ZW50LnR5cGUoKSAhPSBXZWJFdmVudDo6Tm9UeXBlKQorICAgICAgICBjb3JlRXZl
bnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGZyYW1lLT5k
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybShtX2xhc3RNb3VzZUV2ZW50KSwgMCwg
MCk7CisKKyAgICBmcmFtZS0+bG9hZGVyKCkudXJsU2VsZWN0ZWQoY29yZVVSTCwgZW1wdHlTdHJp
bmcoKSwgY29yZUV2ZW50LmdldCgpLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExp
c3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6
U2hvdWxkQWxsb3cpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2V0QWN0aXZlQW5ub3RhdGlvbihQ
REZBbm5vdGF0aW9uICphbm5vdGF0aW9uKQoreworICAgIGlmICghc3VwcG9ydHNGb3JtcygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAgICBt
X2FjdGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworCisgICAgaWYgKGFubm90YXRpb24pIHsKKyAg
ICAgICAgaWYgKFthbm5vdGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvblRleHRXaWRn
ZXRDbGFzcygpXSAmJiBzdGF0aWNfY2FzdDxQREZBbm5vdGF0aW9uVGV4dFdpZGdldCAqPihhbm5v
dGF0aW9uKS5pc1JlYWRPbmx5KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hY3Rp
dmVBbm5vdGF0aW9uID0gUERGUGx1Z2luQW5ub3RhdGlvbjo6Y3JlYXRlKGFubm90YXRpb24sIG1f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsKKyAgICAgICAgbV9hY3RpdmVBbm5vdGF0
aW9uLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVyLmdldCgpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKK30KKworYm9vbCBQREZQbHVnaW46
OnN1cHBvcnRzRm9ybXMoKQoreworICAgIC8vIEZJWE1FOiBXZSBzdXBwb3J0IGZvcm1zIGZvciBm
dWxsLW1haW4tZnJhbWUgYW5kIDxpZnJhbWU+IFBERnMsIGJ1dCBub3QgPGVtYmVkPiBvciA8b2Jq
ZWN0PiwgYmVjYXVzZSB0aG9zZSBjYXNlcyBkbyBub3QgaGF2ZSB0aGVpciBvd24gRG9jdW1lbnQg
aW50byB3aGljaCB0byBpbmplY3QgZm9ybSBlbGVtZW50cy4KKyAgICByZXR1cm4gaXNGdWxsRnJh
bWVQbHVnaW4oKTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlmeUNvbnRlbnRTY2FsZUZhY3Rv
ckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZhY3RvcikKK3sKKyAgICBpZiAoaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpKQorICAgICAgICBwbHVnaW5WaWV3KCktPnNldFBhZ2VTY2FsZUZhY3RvcihzY2Fs
ZUZhY3RvciwgSW50UG9pbnQoKSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0
ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlmeURpc3BsYXlNb2RlQ2hh
bmdlZChpbnQpCit7CisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJz
KCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBERlBsdWdpbjo6bGl2ZVJlc291cmNlRGF0
YSgpIGNvbnN0Cit7CisgICAgTlNEYXRhICpwZGZEYXRhID0gbGl2ZURhdGEoKTsKKworICAgIGlm
ICghcGRmRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjp3cmFwTlNEYXRhKHBkZkRhdGEpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2F2ZVRv
UERGKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlmeSB0aGUgdXNl
ciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZpbmlzaGVkIGxv
YWRpbmcuCisgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRo
YXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgIGlmICghcGRmRG9jdW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsKKyAgICB3ZWJGcmFtZSgp
LT5wYWdlKCktPnNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihtX3N1Z2dlc3RlZEZpbGVu
YW1lLCB3ZWJGcmFtZSgpLT51cmwoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAq
PihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsKK30KKwordm9pZCBQREZQbHVnaW46Om9w
ZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKQoreworICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlE
KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgbm90aWZ5IHRoZSB1c2Vy
IHRoYXQgdGhleSBjYW4ndCBzYXZlIGJlZm9yZSB0aGUgZG9jdW1lbnQgaXMgZmluaXNoZWQgbG9h
ZGluZy4KKyAgICAgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0
IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50LgorICAgICAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsK
KworICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBXZWJDb3JlOjpjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCk7CisgICAgICAgIEFTU0VSVChtX3RlbXBvcmFyeVBERlVVSUQpOworCisgICAg
ICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvbihtX3N1Z2dlc3RlZEZpbGVuYW1lLCB3ZWJGcmFtZSgpLT51cmwo
KSwgc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihbZGF0YSBieXRlc10pLCBbZGF0
YSBsZW5ndGhdLCBtX3RlbXBvcmFyeVBERlVVSUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok9w
ZW5QREZGcm9tVGVtcG9yYXJ5Rm9sZGVyV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKG1fdGVtcG9yYXJ5
UERGVVVJRCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChO
U1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLCBOU0FycmF5ICp0eXBlcykK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXM7CisKKyAgICBmb3IgKE5TU3Ry
aW5nICp0eXBlIGluIHR5cGVzKQorICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUp
OworCisgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7CisgICAgYXV0byYgd2ViUHJvY2VzcyA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFz
dGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAorICAgICAgICBN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5l
d0NoYW5nZUNvdW50KSwgMCk7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0g
aXRlbXMuY291bnQ7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TU3RyaW5nICp0eXBlID0g
W3R5cGVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtpdGVtcyBv
YmplY3RBdEluZGV4OmldOworCisgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgZGF0YSBm
b3IgYW55IGl0ZW1zIHRvIGJlIGVtcHR5LCBidXQgYXJlbid0IGNvbXBsZXRlbHkgc3VyZS4KKyAg
ICAgICAgLy8gQXZvaWQgY3Jhc2hpbmcgaW4gdGhlIFNoYXJlZE1lbW9yeSBjb25zdHJ1Y3RvciBp
biByZWxlYXNlIGJ1aWxkcyBpZiB3ZSdyZSB3cm9uZy4KKyAgICAgICAgQVNTRVJUKGRhdGEubGVu
Z3RoKTsKKyAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSB8
fCBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKKyAgICAg
ICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nID0gYWRvcHROUyhbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ10pOworICAgICAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3Ry
aW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6
OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEo
ZGF0YSk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgICAg
ICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFs
bG9jYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShzaGFyZWRNZW1vcnkt
PmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgIHNo
YXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSk7CisgICAgICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9h
cmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+c2l6
ZSgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZv
clR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgUERGUGx1Z2luOjpzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIENHUG9pbnQgcG9pbnQpCit7CisgICAgRGljdGlvbmFyeVBv
cHVwSW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3Jp
Z2luID0gY29udmVydEZyb21QREZWaWV3VG9Sb290VmlldyhJbnRQb2ludChwb2ludCkpOworICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHN0cmluZzsKKworICAgIHdl
YkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cChkaWN0aW9uYXJ5UG9wdXBJbmZvKSk7Cit9CisKK3Vuc2lnbmVkIFBE
RlBsdWdpbjo6Y291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgV2ViQ29yZTo6
RmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBpZiAo
IXRhcmdldC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgbnNPcHRpb25z
ID0gKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkgPyBOU0Nhc2VJbnNlbnNp
dGl2ZVNlYXJjaCA6IDA7CisKKyAgICByZXR1cm4gW1twZGZEb2N1bWVudCgpIGZpbmRTdHJpbmc6
dGFyZ2V0IHdpdGhPcHRpb25zOm5zT3B0aW9uc10gY291bnRdOworfQorCitQREZTZWxlY3Rpb24g
KlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBCT09M
IHNlYXJjaEZvcndhcmQsIEJPT0wgY2FzZVNlbnNpdGl2ZSwgQk9PTCB3cmFwU2VhcmNoLCBQREZT
ZWxlY3Rpb24gKmluaXRpYWxTZWxlY3Rpb24sIEJPT0wgc3RhcnRJblNlbGVjdGlvbikKK3sKKyAg
ICBpZiAoIXRhcmdldC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TU3Ry
aW5nQ29tcGFyZU9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgaWYgKCFzZWFyY2hGb3J3YXJkKQor
ICAgICAgICBvcHRpb25zIHw9IE5TQmFja3dhcmRzU2VhcmNoOworCisgICAgaWYgKCFjYXNlU2Vu
c2l0aXZlKQorICAgICAgICBvcHRpb25zIHw9IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoOworCisg
ICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0gcGRmRG9jdW1lbnQoKS5nZXQoKTsKKworICAgIFBE
RlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCA9IFtpbml0aWFsU2VsZWN0aW9u
IGNvcHldOworICAgIGlmIChzdGFydEluU2VsZWN0aW9uKSB7CisgICAgICAgIC8vIEluaXRpYWxs
eSB3ZSB3YW50IHRvIGluY2x1ZGUgdGhlIHNlbGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaC4gU28g
d2UgbXVzdCBtb2RpZnkgdGhlIHN0YXJ0aW5nIHNlYXJjaAorICAgICAgICAvLyBzZWxlY3Rpb24g
dG8gZml0IFBERkRvY3VtZW50J3Mgc2VhcmNoIHJlcXVpcmVtZW50czogc2VsZWN0aW9uIG11c3Qg
aGF2ZSBhIGxlbmd0aCA+PSAxLCBiZWdpbiBiZWZvcmUKKyAgICAgICAgLy8gdGhlIGN1cnJlbnQg
c2VsZWN0aW9uIChpZiBzZWFyY2hpbmcgZm9yd2FyZHMpIG9yIGFmdGVyIChpZiBzZWFyY2hpbmcg
YmFja3dhcmRzKS4KKyAgICAgICAgaW50IGluaXRpYWxTZWxlY3Rpb25MZW5ndGggPSBbW2luaXRp
YWxTZWxlY3Rpb24gc3RyaW5nXSBsZW5ndGhdOworICAgICAgICBpZiAoc2VhcmNoRm9yd2FyZCkg
eworICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9u
QXRTdGFydDoxXTsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVu
ZFNlbGVjdGlvbkF0RW5kOi1pbml0aWFsU2VsZWN0aW9uTGVuZ3RoXTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlv
bkF0RW5kOjFdOworICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5k
U2VsZWN0aW9uQXRTdGFydDotaW5pdGlhbFNlbGVjdGlvbkxlbmd0aF07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRT
dHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCB3aXRo
T3B0aW9uczpvcHRpb25zXTsKKyAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCByZWxlYXNl
XTsKKworICAgIC8vIElmIHdlIGZpcnN0IHNlYXJjaGVkIGluIHRoZSBzZWxlY3Rpb24sIGFuZCB3
ZSBmb3VuZCB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggYWdhaW4gZnJvbSBqdXN0IHBhc3QgdGhlIHNl
bGVjdGlvbi4KKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBbZm91bmRTZWxlY3Rpb24gaXNF
cXVhbDppbml0aWFsU2VsZWN0aW9uXSkKKyAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1l
bnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjppbml0aWFsU2VsZWN0aW9uIHdpdGhP
cHRpb25zOm9wdGlvbnNdOworCisgICAgaWYgKCFmb3VuZFNlbGVjdGlvbiAmJiB3cmFwU2VhcmNo
KQorICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBm
cm9tU2VsZWN0aW9uOm5pbCB3aXRoT3B0aW9uczpvcHRpb25zXTsKKworICAgIHJldHVybiBmb3Vu
ZFNlbGVjdGlvbjsKK30KKworYm9vbCBQREZQbHVnaW46OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNo
Q291bnQpCit7CisgICAgQk9PTCBzZWFyY2hGb3J3YXJkID0gIShvcHRpb25zICYgRmluZE9wdGlv
bnNCYWNrd2FyZHMpOworICAgIEJPT0wgY2FzZVNlbnNpdGl2ZSA9ICEob3B0aW9ucyAmIEZpbmRP
cHRpb25zQ2FzZUluc2Vuc2l0aXZlKTsKKyAgICBCT09MIHdyYXBTZWFyY2ggPSBvcHRpb25zICYg
RmluZE9wdGlvbnNXcmFwQXJvdW5kOworCisgICAgdW5zaWduZWQgbWF0Y2hDb3VudDsKKyAgICBp
ZiAoIW1heE1hdGNoQ291bnQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1heCB3YXMgemVybywgYW55
IHJlc3VsdCBtZWFucyB3ZSBleGNlZWRlZCB0aGUgbWF4LiBXZSBjYW4gc2tpcCBjb21wdXRpbmcg
dGhlIGFjdHVhbCBjb3VudC4KKyAgICAgICAgbWF0Y2hDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihrV0tNb3JlVGhhbk1heGltdW1NYXRjaENvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtYXRjaENvdW50ID0gY291bnRGaW5kTWF0Y2hlcyh0YXJnZXQsIG9wdGlvbnMsIG1heE1hdGNo
Q291bnQpOworICAgICAgICBpZiAobWF0Y2hDb3VudCA+IG1heE1hdGNoQ291bnQpCisgICAgICAg
ICAgICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11
bU1hdGNoQ291bnQpOworICAgIH0KKworICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKSB7CisgICAg
ICAgIFBERlNlbGVjdGlvbiogc2VhcmNoU2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IHNlYXJjaFNlbGVjdGlvbl07CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBmaW5kU3Ry
aW5nOnRhcmdldCBjYXNlU2Vuc2l0aXZlOmNhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hlczpZ
RVNdOworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2VhcmNoU2VsZWN0aW9uOnNl
YXJjaFNlbGVjdGlvbl07CisgICAgICAgIG1fbGFzdEZvdW5kU3RyaW5nID0gZW1wdHlTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX2xhc3RGb3VuZFN0
cmluZyA9PSB0YXJnZXQpIHsKKyAgICAgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBuZXh0
TWF0Y2hGb3JTdHJpbmcodGFyZ2V0LCBzZWFyY2hGb3J3YXJkLCBjYXNlU2Vuc2l0aXZlLCB3cmFw
U2VhcmNoLCBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2VhcmNoU2VsZWN0aW9uXSwgTk8pOworICAg
ICAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0U2VhcmNoU2VsZWN0aW9uOnNlbGVjdGlvbl07Cisg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvU2VsZWN0aW9uOnNlbGVjdGlvbl07Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGZpbmRTdHJpbmc6dGFy
Z2V0IGNhc2VTZW5zaXRpdmU6Y2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOllFU107Cisg
ICAgICAgIG1fbGFzdEZvdW5kU3RyaW5nID0gdGFyZ2V0OworICAgIH0KKworICAgIHJldHVybiBt
YXRjaENvdW50ID4gMDsKK30KKworYm9vbCBQREZQbHVnaW46OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBJ
bnRQb2ludCBsb2NhbFBvaW50ID0gY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5kZWRJ
bnRQb2ludChwb2ludCkpOworICAgIFBERlNlbGVjdGlvbiogbG9va3VwU2VsZWN0aW9uID0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OmNvbnZlcnRGcm9t
UGx1Z2luVG9QREZWaWV3KGxvY2FsUG9pbnQpXTsKKworICAgIGlmIChbW2xvb2t1cFNlbGVjdGlv
biBzdHJpbmddIGxlbmd0aF0pCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZWFyY2hJ
bkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOmxvb2t1cFNlbGVjdGlvbl07CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQREZQbHVnaW46OmZvY3VzTmV4dEFubm90YXRpb24oKQoreworICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOmZhbHNlXTsKK30K
Kwordm9pZCBQREZQbHVnaW46OmZvY3VzUHJldmlvdXNBbm5vdGF0aW9uKCkKK3sKKyAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjp0cnVlXTsKK30KKwordm9p
ZCBQREZQbHVnaW46Om5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICopCit7Cisg
ICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5kaWRDaGFuZ2VTZWxlY3Rpb24oKTsKK30KKworU3RyaW5n
IFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW1tt
X3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXSBzdHJpbmddOworfQorCitTdHJp
bmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludEluVmlldyA9IGNv
bnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihyb3Vu
ZGVkSW50UG9pbnQocG9pbnQpKSk7CisgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25Gb3JXb3Jk
ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OnBvaW50
SW5WaWV3XTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudFNlbGVjdGlvbjpz
ZWxlY3Rpb25Gb3JXb3JkXTsKKyAgICAKKyAgICByZXR1cm4gW3NlbGVjdGlvbkZvcldvcmQgc3Ry
aW5nXTsKK30KKworYm9vbCBQREZQbHVnaW46OmV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2lu
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzKSBj
b25zdAoreworICAgIFBERlNlbGVjdGlvbiAqY3VycmVudFNlbGVjdGlvbiA9IFttX3BkZkxheWVy
Q29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKKyAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBJbnRQb2ludCBwb2ludEluUERGVmll
dyA9IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdp
bihyb3VuZGVkSW50UG9pbnQobG9jYXRpb25JblZpZXdDb29yZGluYXRlcykpKTsKKyAgICBQREZT
ZWxlY3Rpb24gKnNlbGVjdGlvbkZvcldvcmQgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2Vs
ZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9pbnRJblBERlZpZXddOworCisgICAgTlNVSW50ZWdlciBj
dXJyZW50UGFnZUluZGV4ID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRQYWdlSW5kZXhd
OworICAgIAorICAgIE5TQXJyYXkgKnNlbGVjdGlvblJlY3RzID0gW21fcGRmTGF5ZXJDb250cm9s
bGVyIHJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTpjdXJyZW50U2VsZWN0aW9uXTsKKyAg
ICBpZiAoIXNlbGVjdGlvblJlY3RzIHx8ICFzZWxlY3Rpb25SZWN0cy5jb3VudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChjdXJyZW50UGFnZUluZGV4ID49IHNlbGVjdGlv
blJlY3RzLmNvdW50KQorICAgICAgICBjdXJyZW50UGFnZUluZGV4ID0gc2VsZWN0aW9uUmVjdHMu
Y291bnQgLSAxOworCisgICAgTlNBcnJheSAqd29yZFNlbGVjdGlvblJlY3RzID0gW21fcGRmTGF5
ZXJDb250cm9sbGVyIHJlY3RzRm9yU2VsZWN0aW9uSW5MYXlvdXRTcGFjZTpzZWxlY3Rpb25Gb3JX
b3JkXTsKKyAgICBpZiAoIXdvcmRTZWxlY3Rpb25SZWN0cyB8fCAhd29yZFNlbGVjdGlvblJlY3Rz
LmNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1ZhbHVlICpzZWxlY3Rpb25C
b3VuZHMgPSBbc2VsZWN0aW9uUmVjdHMgb2JqZWN0QXRJbmRleDpjdXJyZW50UGFnZUluZGV4XTsK
KyAgICBOU1ZhbHVlICp3b3JkU2VsZWN0aW9uQm91bmRzID0gW3dvcmRTZWxlY3Rpb25SZWN0cyBv
YmplY3RBdEluZGV4OjBdOworCisgICAgTlNSZWN0IHNlbGVjdGlvbkJvdW5kc1JlY3QgPSBzZWxl
Y3Rpb25Cb3VuZHMucmVjdFZhbHVlOworICAgIE5TUmVjdCB3b3JkU2VsZWN0aW9uQm91bmRzUmVj
dCA9IHdvcmRTZWxlY3Rpb25Cb3VuZHMucmVjdFZhbHVlOworICAgIHJldHVybiBOU0ludGVyc2Vj
dHNSZWN0KHdvcmRTZWxlY3Rpb25Cb3VuZHNSZWN0LCBzZWxlY3Rpb25Cb3VuZHNSZWN0KTsKK30K
Kworc3RhdGljIE5TUG9pbnQgcG9pbnRJbkxheW91dFNwYWNlRm9yUG9pbnRJbldpbmRvd1NwYWNl
KFBERkxheWVyQ29udHJvbGxlciogcGRmTGF5ZXJDb250cm9sbGVyLCBOU1BvaW50IHBvaW50SW5W
aWV3KQoreworICAgIENHUG9pbnQgcG9pbnQgPSBOU1BvaW50VG9DR1BvaW50KHBvaW50SW5WaWV3
KTsKKyAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IFtwZGZMYXllckNvbnRyb2xsZXIgc2Nyb2xs
UG9zaXRpb25dOworICAgIENHRmxvYXQgc2NhbGVGYWN0b3IgPSBbcGRmTGF5ZXJDb250cm9sbGVy
IGNvbnRlbnRTY2FsZUZhY3Rvcl07CisKKyAgICBzY3JvbGxPZmZzZXQueSA9IFtwZGZMYXllckNv
bnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0uaGVpZ2h0IC0gTlNSZWN0VG9DR1Jl
Y3QoW3BkZkxheWVyQ29udHJvbGxlciBmcmFtZV0pLnNpemUuaGVpZ2h0IC0gc2Nyb2xsT2Zmc2V0
Lnk7CisgICAgCisgICAgQ0dQb2ludCBuZXdQb2ludCA9IENHUG9pbnRNYWtlKHNjcm9sbE9mZnNl
dC54ICsgcG9pbnQueCwgc2Nyb2xsT2Zmc2V0LnkgKyBwb2ludC55KTsKKyAgICBuZXdQb2ludC54
IC89IHNjYWxlRmFjdG9yOworICAgIG5ld1BvaW50LnkgLz0gc2NhbGVGYWN0b3I7CisgICAgcmV0
dXJuIE5TUG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7Cit9CisKK1N0cmluZyBQREZQbHVnaW46
Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9u
SW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBQREZTZWxlY3Rp
b24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0Cit7CisgICAg
UERGU2VsZWN0aW9uKiYgc2VsZWN0aW9uID0gKnNlbGVjdGlvblB0cjsKKworICAgIHNlbGVjdGlv
biA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKKyAgICBpZiAoZXhp
c3RpbmdTZWxlY3Rpb25Db250YWluc1BvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKQor
ICAgICAgICByZXR1cm4gc2VsZWN0aW9uLnN0cmluZzsKKyAgICAgICAgCisgICAgSW50UG9pbnQg
cG9pbnRJblBERlZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJv
b3RWaWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMp
KSk7CisgICAgc2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZv
cldvcmRBdFBvaW50OnBvaW50SW5QREZWaWV3XTsKKyAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAg
ICAgcmV0dXJuICIiOworCisgICAgTlNQb2ludCBwb2ludEluTGF5b3V0U3BhY2UgPSBwb2ludElu
TGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UobV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCksIHBvaW50SW5QREZWaWV3KTsKKworICAgIFBERlBhZ2UgKmN1cnJlbnRQYWdlID0gW1ttX3Bk
ZkxheWVyQ29udHJvbGxlciBsYXlvdXRdIHBhZ2VOZWFyZXN0UG9pbnQ6cG9pbnRJbkxheW91dFNw
YWNlIGN1cnJlbnRQYWdlOlttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZV1dOworICAg
IAorICAgIE5TUG9pbnQgcG9pbnRJblBhZ2VTcGFjZSA9IFtbbV9wZGZMYXllckNvbnRyb2xsZXIg
bGF5b3V0XSBjb252ZXJ0UG9pbnQ6cG9pbnRJbkxheW91dFNwYWNlIHRvUGFnZTpjdXJyZW50UGFn
ZSBmb3JTY2FsZUZhY3RvcjoxLjBdOworICAgIAorICAgIGZvciAoUERGQW5ub3RhdGlvbiAqYW5u
b3RhdGlvbiBpbiBjdXJyZW50UGFnZS5hbm5vdGF0aW9ucykgeworICAgICAgICBpZiAoIVthbm5v
dGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpXSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBOU1JlY3QgYm91bmRzID0gYW5ub3RhdGlvbi5i
b3VuZHM7CisgICAgICAgIGlmICghTlNQb2ludEluUmVjdChwb2ludEluUGFnZVNwYWNlLCBib3Vu
ZHMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBQREZBbm5vdGF0
aW9uTGluayAqbGlua0Fubm90YXRpb24gPSAoUERGQW5ub3RhdGlvbkxpbmsgKilhbm5vdGF0aW9u
OworICAgICAgICBOU1VSTCAqdXJsID0gbGlua0Fubm90YXRpb24uVVJMOworICAgICAgICBpZiAo
IXVybCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZGF0YS5hYnNv
bHV0ZUxpbmtVUkwgPSB1cmwuYWJzb2x1dGVTdHJpbmc7CisgICAgICAgIGRhdGEubGlua0xhYmVs
ID0gc2VsZWN0aW9uLnN0cmluZzsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5zdHJpbmc7Cisg
ICAgfQorICAgIAorICAgIE5TU3RyaW5nICpsb29rdXBUZXh0ID0gRGljdGlvbmFyeUxvb2t1cDo6
c3RyaW5nRm9yUERGU2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CisgICAgaWYgKCFsb29r
dXBUZXh0IHx8ICFsb29rdXBUZXh0Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRTZWxlY3Rpb246c2VsZWN0aW9uXTsKKyAg
ICByZXR1cm4gbG9va3VwVGV4dDsKK30KKworc3RhdGljIE5TUmVjdCByZWN0SW5WaWV3U3BhY2VG
b3JSZWN0SW5MYXlvdXRTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxl
ciwgTlNSZWN0IGxheW91dFNwYWNlUmVjdCkKK3sKKyAgICBDR1JlY3QgbmV3UmVjdCA9IE5TUmVj
dFRvQ0dSZWN0KGxheW91dFNwYWNlUmVjdCk7CisgICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9IHBk
ZkxheWVyQ29udHJvbGxlci5jb250ZW50U2NhbGVGYWN0b3I7CisgICAgQ0dQb2ludCBzY3JvbGxP
ZmZzZXQgPSBwZGZMYXllckNvbnRyb2xsZXIuc2Nyb2xsUG9zaXRpb247CisKKyAgICBzY3JvbGxP
ZmZzZXQueSA9IHBkZkxheWVyQ29udHJvbGxlci5jb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tLmhl
aWdodCAtIE5TUmVjdFRvQ0dSZWN0KHBkZkxheWVyQ29udHJvbGxlci5mcmFtZSkuc2l6ZS5oZWln
aHQgLSBzY3JvbGxPZmZzZXQueTsKKworICAgIG5ld1JlY3Qub3JpZ2luLnggKj0gc2NhbGVGYWN0
b3I7CisgICAgbmV3UmVjdC5vcmlnaW4ueSAqPSBzY2FsZUZhY3RvcjsKKyAgICBuZXdSZWN0LnNp
emUud2lkdGggKj0gc2NhbGVGYWN0b3I7CisgICAgbmV3UmVjdC5zaXplLmhlaWdodCAqPSBzY2Fs
ZUZhY3RvcjsKKworICAgIG5ld1JlY3Qub3JpZ2luLnggLT0gc2Nyb2xsT2Zmc2V0Lng7CisgICAg
bmV3UmVjdC5vcmlnaW4ueSAtPSBzY3JvbGxPZmZzZXQueTsKKworICAgIHJldHVybiBOU1JlY3RG
cm9tQ0dSZWN0KG5ld1JlY3QpOworfQorCitXZWJDb3JlOjpGbG9hdFJlY3QgUERGUGx1Z2luOjpy
ZWN0Rm9yU2VsZWN0aW9uSW5Sb290VmlldyhQREZTZWxlY3Rpb24gKnNlbGVjdGlvbikgY29uc3QK
K3sKKyAgICBQREZQYWdlICpjdXJyZW50UGFnZSA9IG5pbDsKKyAgICBOU0FycmF5KiBwYWdlcyA9
IHNlbGVjdGlvbi5wYWdlczsKKyAgICBpZiAocGFnZXMuY291bnQpCisgICAgICAgIGN1cnJlbnRQ
YWdlID0gKFBERlBhZ2UgKilbcGFnZXMgb2JqZWN0QXRJbmRleDowXTsKKworICAgIGlmICghY3Vy
cmVudFBhZ2UpCisgICAgICAgIGN1cnJlbnRQYWdlID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGN1
cnJlbnRQYWdlXTsKKyAgICAKKyAgICBOU1JlY3QgcmVjdEluUGFnZVNwYWNlID0gW3NlbGVjdGlv
biBib3VuZHNGb3JQYWdlOmN1cnJlbnRQYWdlXTsKKyAgICBOU1JlY3QgcmVjdEluTGF5b3V0U3Bh
Y2UgPSBbW21fcGRmTGF5ZXJDb250cm9sbGVyIGxheW91dF0gY29udmVydFJlY3Q6cmVjdEluUGFn
ZVNwYWNlIGZyb21QYWdlOmN1cnJlbnRQYWdlIGZvclNjYWxlRmFjdG9yOjEuMF07CisgICAgTlNS
ZWN0IHJlY3RJblZpZXcgPSByZWN0SW5WaWV3U3BhY2VGb3JSZWN0SW5MYXlvdXRTcGFjZShtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSwgcmVjdEluTGF5b3V0U3BhY2UpOworCisgICAgcmVjdElu
Vmlldy5vcmlnaW4gPSBjb252ZXJ0RnJvbVBERlZpZXdUb1Jvb3RWaWV3KEludFBvaW50KHJlY3RJ
blZpZXcub3JpZ2luKSk7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHJlY3RJblZp
ZXcpOworfQorCitDR0Zsb2F0IFBERlBsdWdpbjo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAg
IHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsKK30KKwor
dm9pZCBQREZQbHVnaW46OnBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKnN0cmluZykKK3sKKyAg
ICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VhcmNo
VGhlV2ViKHN0cmluZykpOworfQorCit2b2lkIFBERlBsdWdpbjo6cGVyZm9ybVNwb3RsaWdodFNl
YXJjaChOU1N0cmluZyAqc3RyaW5nKQoreworICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWFyY2hXaXRoU3BvdGxpZ2h0KHN0cmluZykpOworfQor
Citib29sIFBERlBsdWdpbjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBl
dmVudCkKK3sKKyAgICBQREZEaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IFttX3BkZkxheWVyQ29u
dHJvbGxlciBkaXNwbGF5TW9kZV07CisKKyAgICBpZiAoZGlzcGxheU1vZGUgPT0ga1BERkRpc3Bs
YXlTaW5nbGVQYWdlQ29udGludW91cyB8fCBkaXNwbGF5TW9kZSA9PSBrUERGRGlzcGxheVR3b1Vw
Q29udGludW91cykKKyAgICAgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2
ZW50KHBsYXRmb3JtKGV2ZW50KSk7CisKKyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRQYWdlSW5kZXgg
PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFBhZ2VJbmRleF07CisgICAgYm9vbCBpbkZp
cnN0UGFnZSA9ICFjdXJyZW50UGFnZUluZGV4OworICAgIGJvb2wgaW5MYXN0UGFnZSA9IFttX3Bk
ZkxheWVyQ29udHJvbGxlciBsYXN0UGFnZUluZGV4XSA9PSBjdXJyZW50UGFnZUluZGV4OworCisg
ICAgYm9vbCBhdFNjcm9sbFRvcCA9ICFzY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICBib29sIGF0
U2Nyb2xsQm90dG9tID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgPT0gbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkueSgpOworCisgICAgYm9vbCBpbk1vbWVudHVtU2Nyb2xsID0gZXZlbnQubW9tZW50dW1Q
aGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNlTm9uZTsKKworICAgIGludCBzY3JvbGxNYWdu
aXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IGRlZmF1bHRTY3JvbGxNYWduaXR1ZGVUaHJlc2hv
bGRGb3JQYWdlRmxpcDsKKworICAgIC8vIEltcHJlY2lzZSBpbnB1dCBkZXZpY2VzIHNob3VsZCBo
YXZlIGEgbG93ZXIgdGhyZXNob2xkIHNvIHRoYXQgImNsaWNreSIgc2Nyb2xsIHdoZWVscyBjYW4g
ZmxpcCBwYWdlcy4KKyAgICBpZiAoIWV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoKSkK
KyAgICAgICAgc2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAwOworCisgICAg
aWYgKGF0U2Nyb2xsQm90dG9tICYmICFpbkxhc3RQYWdlICYmIGV2ZW50LmRlbHRhKCkuaGVpZ2h0
KCkgPCAwKSB7CisgICAgICAgIGlmIChldmVudC5kZWx0YSgpLmhlaWdodCgpIDw9IC1zY3JvbGxN
YWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCAmJiAhaW5Nb21lbnR1bVNjcm9sbCkKKyAgICAg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvTmV4dFBhZ2VdOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXRTY3JvbGxUb3AgJiYgIWluRmlyc3RQYWdlICYm
IGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPiAwKSB7CisgICAgICAgIGlmIChldmVudC5kZWx0YSgp
LmhlaWdodCgpID49IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1v
bWVudHVtU2Nyb2xsKSB7CisgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAg
ICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ290b1ByZXZpb3VzUGFnZV07CisgICAgICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkpOworICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKK30KKworTlNEYXRhICpQREZQbHVnaW46
OmxpdmVEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAg
ICBtX2FjdGl2ZUFubm90YXRpb24tPmNvbW1pdCgpOworCisgICAgLy8gU2F2ZSBkYXRhIHN0cmFp
Z2h0IGZyb20gdGhlIHJlc291cmNlIGluc3RlYWQgb2YgUERGS2l0IGlmIHRoZSBkb2N1bWVudCBp
cworICAgIC8vIHVudG91Y2hlZCBieSB0aGUgdXNlciwgc28gdGhhdCBQREZzIHdoaWNoIFBERktp
dCBjYW4ndCBkaXNwbGF5IHdpbGwgc3RpbGwgYmUgZG93bmxvYWRhYmxlLgorICAgIGlmIChtX3Bk
ZkRvY3VtZW50V2FzTXV0YXRlZCkKKyAgICAgICAgcmV0dXJuIFttX3BkZkRvY3VtZW50IGRhdGFS
ZXByZXNlbnRhdGlvbl07CisgICAgCisgICAgcmV0dXJuIHJhd0RhdGEoKTsKK30KKworTlNPYmpl
Y3QgKlBERlBsdWdpbjo6YWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyRGV0YWlscy5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJEZXRhaWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzUwMjJiOTM1ZTI1
ZGIwNWFhZWVkMDBlOTVmNTA1YTcwMWZjYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJEZXRhaWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLQotQGNsYXNz
IENQUmVhZGluZ01vZGVsOwotQGNsYXNzIFBERlZpZXdMYXlvdXQ7Ci0KLUBwcm90b2NvbCBQREZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0KLS0gKHZvaWQpdXBkYXRlU2Nyb2xs
UG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247Ci0tICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3Rl
Ym9hcmQ6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsKLS0gKHZv
aWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKLS0gKHZvaWQpcGVyZm9ybVdlYlNlYXJj
aDooTlNTdHJpbmcgKilzdHJpbmc7Ci0tICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5T
U3RyaW5nICopc3RyaW5nOwotLSAodm9pZClvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uOwotLSAo
dm9pZClzYXZlVG9QREY7Ci0KLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNv
bnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3RhdGlvbjoo
UERGQW5ub3RhdGlvbiAqKWFubm90YXRpb247Ci0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjoo
UERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVS
TDooTlNVUkwgKil1cmw7Ci0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3Rvcjoo
Q0dGbG9hdClzY2FsZUZhY3RvcjsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXll
ckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGlu
dCltb2RlOwotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNl
bGVjdGlvbjsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6IE5TT2Jq
ZWN0Ci1AZW5kCi0KLUBpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyIChEZXRhaWxzKQotCi1A
cHJvcGVydHkocmV0YWluKSBDQUxheWVyICpwYXJlbnRMYXllcjsKLUBwcm9wZXJ0eShyZXRhaW4p
IFBERkRvY3VtZW50ICpkb2N1bWVudDsKLUBwcm9wZXJ0eShyZXRhaW4pIGlkPFBERkxheWVyQ29u
dHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKLQotLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6
ZSlzaXplOwotCi0tIChQREZEaXNwbGF5TW9kZSlkaXNwbGF5TW9kZTsKLS0gKHZvaWQpc2V0RGlz
cGxheU1vZGU6KFBERkRpc3BsYXlNb2RlKW1vZGU7Ci0tICh2b2lkKXNldERpc3BsYXlzUGFnZUJy
ZWFrczooQk9PTClwYWdlQnJlYWtzOwotCi0tIChDR0Zsb2F0KWNvbnRlbnRTY2FsZUZhY3RvcjsK
LS0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yOwotCi0t
IChDR0Zsb2F0KWRldmljZVNjYWxlRmFjdG9yOwotLSAodm9pZClzZXREZXZpY2VTY2FsZUZhY3Rv
cjooQ0dGbG9hdClzY2FsZUZhY3RvcjsKLQotLSAoQ0dTaXplKWNvbnRlbnRTaXplOwotLSAoQ0dT
aXplKWNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb207Ci0KLS0gKHZvaWQpc25hcHNob3RJbkNvbnRl
eHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwotCi0tICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNh
dGlvbjooQ0dGbG9hdCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRp
YXRlbHk6KEJPT0wpaW1tZWRpYXRlbHk7Ci0KLS0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247Ci0t
ICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uOwotLSAodm9pZClz
Y3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0YTsKLQotLSAodm9pZCltb3VzZURvd246KE5TRXZl
bnQgKilldmVudDsKLS0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKLS0g
KHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZCltb3VzZVVwOihOU0V2
ZW50ICopZXZlbnQ7Ci0tICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50OwotLSAo
dm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudDsKLS0gKHZvaWQpbW91c2VFeGl0ZWQ6
KE5TRXZlbnQgKilldmVudDsKLQotLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICop
ZXZlbnQ7Ci0KLS0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNl
U2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNo
b3VsZEhpZ2hsaWdodE1hdGNoZXM7Ci0KLS0gKFBERlNlbGVjdGlvbiAqKWN1cnJlbnRTZWxlY3Rp
b247Ci0tICh2b2lkKXNldEN1cnJlbnRTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlv
bjsKLS0gKFBERlNlbGVjdGlvbiAqKXNlYXJjaFNlbGVjdGlvbjsKLS0gKHZvaWQpc2V0U2VhcmNo
U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0tICh2b2lkKWdvdG9TZWxlY3Rp
b246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKLS0gKFBERlNlbGVjdGlvbiAqKWdldFNlbGVj
dGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50KXBvaW50OwotLSAoTlNBcnJheSAqKXJlY3RzRm9y
U2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwotLSAoTlNB
cnJheSAqKXJlY3RzRm9yQW5ub3RhdGlvbkluTGF5b3V0U3BhY2U6KFBERkFubm90YXRpb24gKilh
bm5vdGF0aW9uOwotLSAoUERGVmlld0xheW91dCAqKWxheW91dDsKLS0gKE5TUmVjdClmcmFtZTsK
LQotLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOwotLSAoTlNVSW50ZWdlcilsYXN0UGFnZUluZGV4
OwotLSAoTlNVSW50ZWdlciljdXJyZW50UGFnZUluZGV4OwotLSAodm9pZClnb3RvTmV4dFBhZ2U7
Ci0tICh2b2lkKWdvdG9QcmV2aW91c1BhZ2U7Ci0KLS0gKHZvaWQpY29weVNlbGVjdGlvbjsKLS0g
KHZvaWQpc2VsZWN0QWxsOwotCi0tIChib29sKWtleURvd246KE5TRXZlbnQgKilldmVudDsKLQot
LSAodm9pZClzZXRIVURFbmFibGVkOihCT09MKWVuYWJsZWQ7Ci0tIChCT09MKWh1ZEVuYWJsZWQ7
Ci0KLS0gKENHUmVjdClib3VuZHNGb3JBbm5vdGF0aW9uOihQREZBbm5vdGF0aW9uICopYW5ub3Rh
dGlvbjsKLS0gKHZvaWQpYWN0aXZhdGVOZXh0QW5ub3RhdGlvbjooQk9PTClwcmV2aW91czsKLQot
LSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7
Ci0KLS0gKHZvaWQpc2VhcmNoSW5EaWN0aW9uYXJ5V2l0aFNlbGVjdGlvbjooUERGU2VsZWN0aW9u
ICopc2VsZWN0aW9uOwotCi0vLyBBY2Nlc3NpYmlsaXR5Ci0KLS0gKENQUmVhZGluZ01vZGVsICop
cmVhZGluZ01vZGVsOwotLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQ7Ci0tIChO
U0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzOwotLSAoQk9PTClhY2Nlc3NpYmls
aXR5SXNBdHRyaWJ1dGVTZXR0YWJsZTooTlNTdHJpbmcgKilhdHRyaWJ1dGU7Ci0tICh2b2lkKWFj
Y2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0
dHJpYnV0ZTsKLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0
ZU5hbWVzOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZTsKLS0gKE5T
U3RyaW5nICopYWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkF0dHJpYnV0ZTsKLS0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVZhbHVlQXR0cmlidXRlOwotLSAoQk9PTClhY2Nlc3NpYmlsaXR5
SXNWYWx1ZUF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0QXR0cmlidXRlOwotLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNTZWxlY3RlZFRleHRB
dHRyaWJ1dGVTZXR0YWJsZTsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0
UmFuZ2VBdHRyaWJ1dGU7Ci0tIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlOdW1iZXJPZkNoYXJh
Y3RlcnNBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc051bWJlck9mQ2hhcmFjdGVy
c0F0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlWaXNpYmxlQ2hh
cmFjdGVyUmFuZ2VBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc1Zpc2libGVDaGFy
YWN0ZXJSYW5nZUF0dHJpYnV0ZVNldHRhYmxlOwotLSAoTlNOdW1iZXIgKilhY2Nlc3NpYmlsaXR5
TGluZUZvckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7Ci0tIChOU1Zh
bHVlICopYWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQp
cGFyYW1ldGVyOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VBdHRy
aWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmls
aXR5Qm91bmRzRm9yUmFuZ2VBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKLQot
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZMYXllckNvbnRyb2xsZXJTUEkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4ZjVmMTBjODVmNDVl
OTVlNWQ4MmIzYjA3NzBkYWVmYWI1NjJjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmgKQEAgLTAs
MCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBERkxheWVyQ29udHJvbGxl
clNQSV9oCisjZGVmaW5lIFBERkxheWVyQ29udHJvbGxlclNQSV9oCisKKyNpbmNsdWRlICJQREZL
aXRJbXBvcnRzLmgiCisKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKyNpZiBVU0UoREVQUkVD
QVRFRF9QREZfUExVR0lOKQorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxl
clNQSS5oIgorCisjZWxzZSAvLyBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorCisjaW1wb3J0
IDxQREZLaXQvUERGS2l0Lmg+CisKK0BjbGFzcyBDUFJlYWRpbmdNb2RlbDsKK0BjbGFzcyBQREZW
aWV3TGF5b3V0OworCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2Jq
ZWN0PgorCitAb3B0aW9uYWwKKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVy
Q29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBzY3JvbGxUb1BvaW50OihDR1BvaW50KW5l
d1Bvc2l0aW9uOworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxl
ciAqKXBkZkxheWVyQ29udHJvbGxlciBpbnZhbGlkYXRlUmVjdDooQ0dSZWN0KXJlY3Q7CistICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlckludmFsaWRhdGVIVUQ6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlcjsKKworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJab29tSW46
KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKy0gKHZvaWQpcGRmTGF5
ZXJDb250cm9sbGVyWm9vbU91dDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyOworCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICop
cGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBERkFubm90YXRp
b24gKilhbm5vdGF0aW9uOworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDbGlja0xpbmtXaXRoVVJMOihOU1VSTCAq
KXVybDsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilw
ZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGludCltb2RlOworLSAodm9p
ZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJv
bGxlciBkaWRDaGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKworLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29u
dHJvbGxlciBjb3B5SXRlbXM6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0
eXBlczsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilw
ZGZMYXllckNvbnRyb2xsZXIgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0
dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKKy0gKHZvaWQp
cGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xs
ZXIgcGVyZm9ybVdlYlNlYXJjaEZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lk
KXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyIHBlcmZvcm1TcG90bGlnaHRTZWFyY2hGb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwor
LSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJTYXZlVG9QREY6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlcjsKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyT3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvbjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVy
OworCistIChOU0NvbG9yU3BhY2UqKXBkZkxheWVyQ29udHJvbGxlckNvbG9yU3BhY2U6KFBERkxh
eWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKworQGVuZAorCitAaW50ZXJmYWNl
IFBERkxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgUERGTGF5
ZXJDb250cm9sbGVyICgpCisKK0Bwcm9wZXJ0eSAocmV0YWluKSBQREZEb2N1bWVudCAqZG9jdW1l
bnQ7CitAcHJvcGVydHkgKGFzc2lnbikgaWQ8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IGRl
bGVnYXRlOworQHByb3BlcnR5IChyZXRhaW4pIE5TQXJyYXkgKnNlYXJjaE1hdGNoZXM7CisKKy0g
KHZvaWQpc2V0RnJhbWVTaXplOihDR1NpemUpc2l6ZTsKKworLSAodm9pZClzZXREaXNwbGF5TW9k
ZTooaW50KW1vZGU7CistIChpbnQpZGlzcGxheU1vZGU7CistIChpbnQpcmVhbERpc3BsYXlNb2Rl
OworCistIChDR1NpemUpY29udGVudFNpemU7CistIChDR1NpemUpY29udGVudFNpemVSZXNwZWN0
aW5nWm9vbTsKKworLSAoQ0dGbG9hdCljb250ZW50U2NhbGVGYWN0b3I7CistICh2b2lkKXNldENv
bnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdCljb250ZW50U2NhbGVGYWN0b3I7CisKKy0gKFBERlZp
ZXdMYXlvdXQgKilsYXlvdXQ7CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVm
KWNvbnRleHQ7CistICh2b2lkKWRyYXdIVURJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0
OworCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZVVw
OihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
OworCistIChCT09MKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5kczoo
Q0dSZWN0KWJvdW5kczsKKy0gKEJPT0wpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0
aEJvdW5kczooQ0dSZWN0KWJvdW5kczsKKy0gKEJPT0wpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICop
ZXZlbnQgaW5IVURXaXRoQm91bmRzOihDR1JlY3QpYm91bmRzOworCistIChOU01lbnUgKiltZW51
Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNBcnJheSAqKXBhZ2VSZWN0czsKKwor
LSAodm9pZClzZXRWaXNpYmxlUmVjdDooQ0dSZWN0KXZpc2libGVSZWN0OworCistICh2b2lkKWdv
dG9TZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKHZvaWQpZ290b0Rlc3Rp
bmF0aW9uOihQREZEZXN0aW5hdGlvbiAqKWRlc3RpbmF0aW9uOworLSAodm9pZClnb3RvUmVjdDoo
Q0dSZWN0KXJlY3Qgb25QYWdlOihQREZQYWdlICopcGFnZTsKKworLSAoUERGU2VsZWN0aW9uICop
Y3VycmVudFNlbGVjdGlvbjsKKy0gKHZvaWQpc2V0Q3VycmVudFNlbGVjdGlvbjooUERGU2VsZWN0
aW9uICopc2VsZWN0aW9uOworCistICh2b2lkKXNlYXJjaEluRGljdGlvbmFyeVdpdGhTZWxlY3Rp
b246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKFBERlNlbGVjdGlvbiAqKWdldFNlbGVj
dGlvbkZvcldvcmRBdFBvaW50OihDR1BvaW50KXBvaW50OworLSAoTlNBcnJheSAqKXJlY3RzRm9y
U2VsZWN0aW9uSW5MYXlvdXRTcGFjZTooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOworCistIChO
U0FycmF5ICopaGlnaGxpZ2h0czsKKy0gKHZvaWQpc2V0SGlnaGxpZ2h0czooTlNBcnJheSopaGln
aGxpZ2h0czsKKworLSAoUERGU2VsZWN0aW9uICopc2VhcmNoU2VsZWN0aW9uOworLSAoTlNBcnJh
eSAqKXNlYXJjaE1hdGNoZXM7CistICh2b2lkKXNldFNlYXJjaFNlbGVjdGlvbjooUERGU2VsZWN0
aW9uKilzZWxlY3Rpb247CistIChOU0FycmF5ICopZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcgY2FzZVNlbnNpdGl2ZTooQk9PTClpc0Nhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hlczoo
Qk9PTClzaG91bGRIaWdobGlnaHRNYXRjaGVzOworCistICh2b2lkKWNvcHlTZWxlY3Rpb247Cist
ICh2b2lkKXNlbGVjdEFsbDsKKworLSAoUERGUGFnZSAqKWN1cnJlbnRQYWdlOworLSAoTlNVSW50
ZWdlciljdXJyZW50UGFnZUluZGV4OworCistIChCT09MKWRvY3VtZW50SXNMb2NrZWQ7CistICh2
b2lkKWF0dGVtcHRUb1VubG9ja1dpdGhQYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZDsKKwor
LSAoQ0dSZWN0KWJvdW5kc0ZvckFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9u
OworLSAodm9pZClhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOihCT09MKXByZXZpb3VzOworCistIChO
U1JlY3QpZnJhbWU7CisKKy8vIEFjY2Vzc2liaWxpdHkKKworLSAoQ1BSZWFkaW5nTW9kZWwgKily
ZWFkaW5nTW9kZWw7CistIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudDsKKy0gKE5T
QXJyYXkgKilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXM7CistIChCT09MKWFjY2Vzc2liaWxp
dHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKKy0gKHZvaWQpYWNj
ZXNzaWJpbGl0eVNldFZhbHVlOihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0
cmlidXRlOworLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRl
TmFtZXM7CistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlOworLSAoTlNT
dHJpbmcgKilhY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlOworLSAoTlNTdHJp
bmcgKilhY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2liaWxpdHlJ
c1ZhbHVlQXR0cmlidXRlU2V0dGFibGU7CistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTZWxl
Y3RlZFRleHRBdHRyaWJ1dGU7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc1NlbGVjdGVkVGV4dEF0
dHJpYnV0ZVNldHRhYmxlOworLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRS
YW5nZUF0dHJpYnV0ZTsKKy0gKE5TTnVtYmVyICopYWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFj
dGVyc0F0dHJpYnV0ZTsKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzTnVtYmVyT2ZDaGFyYWN0ZXJz
QXR0cmlidXRlU2V0dGFibGU7CistIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVZpc2libGVDaGFy
YWN0ZXJSYW5nZUF0dHJpYnV0ZTsKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzVmlzaWJsZUNoYXJh
Y3RlclJhbmdlQXR0cmlidXRlU2V0dGFibGU7CistIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlM
aW5lRm9ySW5kZXhBdHRyaWJ1dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKKy0gKE5TVmFs
dWUgKilhY2Nlc3NpYmlsaXR5UmFuZ2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClw
YXJhbWV0ZXI7CistIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJp
YnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxp
dHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOworCitA
ZW5kCisKKyNlbmRpZiAvLyBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQorI2VuZGlmIC8vIEVO
QUJMRShQREZQTFVHSU4pCisKKyNlbmRpZiAvLyBQREZMYXllckNvbnRyb2xsZXJTUElfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5k
ZXggMjE4ZGVmM2FkZWNiYjVhNmZhYzE0NWNlMzY4OWQxZDlkZjViYTIwZi4uN2Y2ZjRmZWU5YTJi
Mjg5NjY2YWM4NjE5MTdiZDBkOGQ3MDcyZDgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0yNiwxMyArMjYsMjEgQEAKICNp
Zm5kZWYgUERGUGx1Z2luX2gKICNkZWZpbmUgUERGUGx1Z2luX2gKIAorI2luY2x1ZGUgIlBERktp
dEltcG9ydHMuaCIKKwogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2lmIFVTRShERVBSRUNB
VEVEX1BERl9QTFVHSU4pCisKKyNpbmNsdWRlICJEZXByZWNhdGVkUERGUGx1Z2luLmgiCisKKyNl
bHNlIC8vIFVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4pCiAKICNpbmNsdWRlICJQbHVnaW4uaCIK
ICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAKQEAgLTY2LDcgKzc0LDcgQEAgY2xhc3MgUERGUGx1Z2luUGFzc3dvcmRGaWVsZDsKIGNsYXNz
IFBsdWdpblZpZXc7CiBjbGFzcyBXZWJGcmFtZTsKIAotY2xhc3MgUERGUGx1Z2luIGZpbmFsIDog
cHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBQ
REZQbHVnaW4gZmluYWwgOiBwdWJsaWMgUGx1Z2luIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7CiAgICAgflBERlBsdWdpbigpOwpAQCAtNzQs
MTQgKzgyLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVn
aW5JbmZvKCk7CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRN
dXRhdGVQREZEb2N1bWVudCgpIHsgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQgPSB0cnVlOyB9CiAK
LSAgICB2b2lkIHBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKiwgQ0dDb250
ZXh0UmVmKTsKICAgICB2b2lkIHNldEFjdGl2ZUFubm90YXRpb24oUERGQW5ub3RhdGlvbiAqKTsK
LSAgICAKLSAgICB1c2luZyBTY3JvbGxhYmxlQXJlYTo6bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFu
Z2VkOwotICAgIHZvaWQgbm90aWZ5Q29udGVudFNjYWxlRmFjdG9yQ2hhbmdlZChDR0Zsb2F0IHNj
YWxlRmFjdG9yKTsKKwogICAgIHZvaWQgbm90aWZ5RGlzcGxheU1vZGVDaGFuZ2VkKGludCk7CiAK
ICAgICB2b2lkIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoUERGU2VsZWN0aW9uICopOwpAQCAtOTMs
MjEgKzk5LDM2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRl
ZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQb2ludCk7CiAgICAgdm9pZCBwZXJmb3Jt
V2ViU2VhcmNoKE5TU3RyaW5nICopOwogICAgIHZvaWQgcGVyZm9ybVNwb3RsaWdodFNlYXJjaChO
U1N0cmluZyAqKTsKKyAgICB2b2lkIGludmFsaWRhdGVQREZSZWN0KFdlYkNvcmU6OkludFJlY3Qp
OworICAgIHZvaWQgaW52YWxpZGF0ZUhVRCgpOworICAgIHZvaWQgc2Nyb2xsVG9Qb2ludChXZWJD
b3JlOjpJbnRQb2ludCk7CisKKyAgICB2b2lkIHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgp
OwogCiAgICAgdm9pZCBmb2N1c05leHRBbm5vdGF0aW9uKCk7CiAgICAgdm9pZCBmb2N1c1ByZXZp
b3VzQW5ub3RhdGlvbigpOwogCiAgICAgdm9pZCBhdHRlbXB0VG9VbmxvY2tQREYoY29uc3QgU3Ry
aW5nJiBwYXNzd29yZCk7CiAKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdp
blRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6
OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1Rv
Um9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKworICAgIFdlYkNvcmU6
OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERGVmlld1Rv
U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OworCiAgICAgV2ViQ29yZTo6
SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0OwogICAgIAogICAgIGJvb2wgc2hvd0NvbnRl
eHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogCiAgICAgU3RyaW5nIGxv
b2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBXZWJIaXRUZXN0
UmVzdWx0RGF0YSYsIFBERlNlbGVjdGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoqKSBjb25zdDsKLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlld1JlY3RGb3JTZWxlY3Rpb24oUERGU2VsZWN0aW9uICop
IGNvbnN0OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0Rm9yU2VsZWN0aW9uSW5Sb290Vmll
dyhQREZTZWxlY3Rpb24gKikgY29uc3Q7CisKKyAgICBQREZMYXllckNvbnRyb2xsZXIgKnBkZkxh
eWVyQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgp
OyB9CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQog
Ci0gICAgQ0dGbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0OworICAgIGJvb2wgaXNMb2NrZWQoKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJhbWUqKTsKQEAg
LTExNSwxNSArMTM2LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gUGx1Z2luIGZ1bmN0aW9ucy4KICAg
ICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcykgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdEluV2luZG93Q29vcmRp
bmF0ZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9sVGludHMoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Jikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzU25hcHNob3R0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CiAgICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQoKSBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFu
Z2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2Nh
bGVGYWN0b3JDaGFuZ2VkKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXND
YW5jZWxsZWQpIG92ZXJyaWRlOwpAQCAtMTM4LDMwICsxNTksMzIgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0
TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRF
dmVudCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGhhbmRs
ZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5h
YmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1Bh
Z2VTY2FsZUZhY3RvcigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29s
KSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QoKSBvdmVycmlkZSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBOUE9iamVjdCogcGx1
Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQogICAg
IHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykgb3ZlcnJpZGUgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlIHsgfQogICAg
IHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHNlbmRDb21wbGV4VGV4
dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKSBvdmVycmlkZSB7IH0K
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VCbG9j
a2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwg
Ym9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpIG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Ny
b2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzVW5p
ZmllZFNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAg
dmlydHVhbCBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3Vt
ZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9w
ZGZEb2N1bWVudDsgfQpAQCAtMTgwLDU2ICsyMDMsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKSBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsd2F5c0F1dG9TdGFy
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIFNjcm9sbGFibGVB
cmVhIGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsQ29ybmVy
UmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbGFzdEtub3duTW91
c2VQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGFzdE1vdXNlUG9zaXRpb25J
blBsdWdpbkNvb3JkaW5hdGVzOyB9Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3Jl
OjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NpemU7IH0K
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVydGlj
YWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfSAvLyBJZiB3ZSBy
ZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVwIGN5Y2xpbmcgYSB0aW1lciBm
b3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmltYXRlLgotICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyU3R5bGUsIGJvb2wg
Zm9yY2VVcGRhdGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFy
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIHVwZGF0ZXNTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBmb3JjZVVwZGF0ZVNj
cm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQ3JlYXRlVHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBQREZQbHVnaW4gZnVu
Y3Rpb25zLgotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwotICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50
YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbik7CiAgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKICAgICB2b2lkIGFkZEFy
Y2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQgY29tcHV0ZVBhZ2VCb3hlcygpOwogICAgIHZvaWQg
Y2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB2b2lkIGRpZENhbGN1bGF0ZVNpemVzKCk7CiAgICAgdm9p
ZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCiAgICAgTlNFdmVudCAqbnNFdmVudEZvcldl
Yk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIFdlYkNvcmU6OkludFBvaW50
IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29u
c3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29u
dmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
OwotICAgIAotICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOwotICAgIGJvb2wgaXNGdWxsRnJhbWVQ
bHVnaW4oKTsKIAotICAgIHZvaWQgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwor
ICAgIGJvb2wgc3VwcG9ydHNGb3JtcygpOworICAgIGJvb2wgaXNGdWxsRnJhbWVQbHVnaW4oKSBj
b25zdDsKIAogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKIApAQCAtMjQyLDQ5
ICsyMjksNjcgQEAgcHJpdmF0ZToKICAgICBOU0RhdGEgKmxpdmVEYXRhKCkgY29uc3Q7CiAgICAg
TlNEYXRhICpyYXdEYXRhKCkgY29uc3QgeyByZXR1cm4gKE5TRGF0YSAqKW1fZGF0YS5nZXQoKTsg
fQogCi0gICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQot
Ci0gICAgZW51bSBVcGRhdGVDdXJzb3JNb2RlIHsKLSAgICAgICAgVXBkYXRlSWZOZWVkZWQsCi0g
ICAgICAgIEZvcmNlVXBkYXRlCisgICAgZW51bSBjbGFzcyBVcGRhdGVDdXJzb3IgeworICAgICAg
ICBJZk5lZWRlZCwKKyAgICAgICAgRm9yY2UKICAgICB9OwogCi0gICAgZW51bSBIaXRUZXN0UmVz
dWx0IHsKKyAgICBlbnVtIGNsYXNzIEhpdFRlc3RSZXN1bHQgewogICAgICAgICBOb25lLAotICAg
ICAgICBUZXh0CisgICAgICAgIFRleHQsCisgICAgICAgIEhVRAogICAgIH07CiAKLSAgICB2b2lk
IHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiwgVXBkYXRlQ3Vyc29yTW9kZSA9IFVw
ZGF0ZUlmTmVlZGVkKTsKKyAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50
JiwgVXBkYXRlQ3Vyc29yID0gVXBkYXRlQ3Vyc29yOjpJZk5lZWRlZCk7CiAKICAgICBKU09iamVj
dFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBq
c1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiAgICAgdm9pZCBjb252ZXJ0UG9z
dFNjcmlwdERhdGFJZk5lZWRlZCgpOwogCi0gICAgLy8gUmVndWxhciBwbHVnLWlucyBkb24ndCBu
ZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5nIEZy
YW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgogICAgIFBsdWdpblZpZXcqIHBsdWdp
blZpZXcoKTsKICAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkgY29uc3Q7CiAKLSAg
ICBXZWJGcmFtZSogbV9mcmFtZTsKKyAgICBjbGFzcyBIVUQgOiBwdWJsaWMgV2ViQ29yZTo6UGFn
ZU92ZXJsYXk6OkNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBIVUQoUERG
UGx1Z2luJiBwbHVnaW4pOworICAgICAgICB2aXJ0dWFsIH5IVUQoKTsKKworICAgICAgICB2b2lk
IGludmFsaWRhdGUoKTsKKyAgICAgICAgYm9vbCBjb250YWluc1BvaW50SW5Sb290VmlldyhXZWJD
b3JlOjpJbnRQb2ludCk7CiAKLSAgICBib29sIG1faXNQb3N0U2NyaXB0OwotICAgIGJvb2wgbV9w
ZGZEb2N1bWVudFdhc011dGF0ZWQ7CisgICAgICAgIGVudW0gY2xhc3MgQW5pbWF0ZVZpc2liaWxp
dHlUcmFuc2l0aW9uIHsgTm8sIFllcyB9OworICAgICAgICB2b2lkIHNldFZpc2libGUoYm9vbCwg
QW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uKTsKIAotICAgIFdlYkNvcmU6OkludFNpemUgbV9z
Y3JvbGxPZmZzZXQ7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVy
bGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGU7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5Jiwg
Y29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICAgICAg
V2ViQ29yZTo6SW50UmVjdCBmcmFtZUluUm9vdFZpZXcoKSBjb25zdDsKKworICAgICAgICBib29s
IG1fdmlzaWJsZSB7IGZhbHNlIH07CisgICAgICAgIFJlZjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4g
bV9vdmVybGF5OworICAgICAgICBQREZQbHVnaW4mIG1fcGx1Z2luOworICAgIH07CisKKyAgICBX
ZWJGcmFtZSogbV9mcmFtZTsKKworICAgIGJvb2wgbV9pc1Bvc3RTY3JpcHQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV91
c2luZ0NvbnRpbnVvdXNNb2RlIHsgdHJ1ZSB9OwogCi0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1f
Y29udGFpbmVyTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fY29udGVudExheWVyOwot
ICAgIFJldGFpblB0cjxDQUxheWVyPiBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcjsKLSAgICBS
ZXRhaW5QdHI8Q0FMYXllcj4gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyOwotICAgIFJldGFpblB0
cjxDQUxheWVyPiBtX3Njcm9sbENvcm5lckxheWVyOwogICAgIFJldGFpblB0cjxQREZMYXllckNv
bnRyb2xsZXI+IG1fcGRmTGF5ZXJDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxXS1BERlBsdWdp
bkFjY2Vzc2liaWxpdHlPYmplY3Q+IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKLSAgICAKKwogICAg
IFJlZlB0cjxQREZQbHVnaW5Bbm5vdGF0aW9uPiBtX2FjdGl2ZUFubm90YXRpb247CiAgICAgUmVm
UHRyPFBERlBsdWdpblBhc3N3b3JkRmllbGQ+IG1fcGFzc3dvcmRGaWVsZDsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6RWxlbWVudD4gbV9hbm5vdGF0aW9uQ29udGFpbmVyOworICAgIFJlZlB0cjxXZWJD
b3JlOjpFbGVtZW50PiBtX3Bhc3N3b3JkQ29udGFpbmVyOwogCiAgICAgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybTsKKyAgICBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtOwogICAgIFdlYk1vdXNlRXZl
bnQgbV9sYXN0TW91c2VFdmVudDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RNb3VzZVBv
c2l0aW9uSW5QbHVnaW5Db29yZGluYXRlczsKIApAQCAtMzA0LDE3ICszMDksMTYgQEAgcHJpdmF0
ZToKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhOwogCiAgICAgUmV0YWlu
UHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OwotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRS
ZWN0PiBtX3BhZ2VCb3hlczsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXpl
OyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpTY3Jv
bGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgSFVEIG1fSFVEOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUExVR0lOKFBERlBsdWdp
biwgUERGUGx1Z2luVHlwZSkKIAorI2VuZGlmIC8vIFVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4p
CiAjZW5kaWYgLy8gRU5BQkxFKFBERktJVF9QTFVHSU4pCiAKICNlbmRpZiAvLyBQREZQbHVnaW5f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQppbmRleCAzZjBkMWZmNjdlYTFjYzkwNGQ2OWMxOTc5MzhjM2VjM2E5Nzg4NjAyLi43NjFj
ZGQxOWZhMzdlYTYwMTVhOWU1ZmY5OGU5MzBjMTI1YzQzZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMjYsMTMgKzI2
LDEyIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgogCi0jaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFVU0Uo
REVQUkVDQVRFRF9QREZfUExVR0lOKQogCiAjaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgogI2lt
cG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXRE
ZXRhaWxzLmgiCi0jaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCi0jaW1wb3J0ICJQREZMYXllckNv
bnRyb2xsZXJEZXRhaWxzLmgiCisjaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJTUEkuaCIKICNp
bXBvcnQgIlBERlBsdWdpbkFubm90YXRpb24uaCIKICNpbXBvcnQgIlBERlBsdWdpblBhc3N3b3Jk
RmllbGQuaCIKICNpbXBvcnQgIlBsdWdpblZpZXcuaCIKQEAgLTYyLDYgKzYxLDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQ0EuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVn
SW5FbGVtZW50Lmg+CkBAIC02OSwzNSArNjksMzIgQEAKICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZy
YW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2EuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgotI2ltcG9ydCA8
V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9VVUlELmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1doZWVsRXZlbnRUZXN0
VHJpZ2dlci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3
dGYvQ3VycmVudFRpbWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLS8vIFNldCBv
dmVyZmxvdzogaGlkZGVuIG9uIHRoZSBhbm5vdGF0aW9uIGNvbnRhaW5lciBzbyA8aW5wdXQ+IGVs
ZW1lbnRzIHNjcm9sbGVkIG91dCBvZiB2aWV3IGRvbid0IHNob3cKLS8vIHNjcm9sbGJhcnMgb24g
dGhlIGJvZHkuIFdlIGNhbid0IGFkZCBhbm5vdGF0aW9ucyBkaXJlY3RseSB0byB0aGUgYm9keSwg
YmVjYXVzZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBib2R5Ci0vLyB3aWxsIGJyZWFrIHJ1YmJl
ci1iYW5kaW5nLgogc3RhdGljIGNvbnN0IGNoYXIqIGFubm90YXRpb25TdHlsZSA9Ci0iI2Fubm90
YXRpb25Db250YWluZXIgeyIKLSIgICAgb3ZlcmZsb3c6IGhpZGRlbjsgIgotIiAgICBwb3NpdGlv
bjogYWJzb2x1dGU7ICIKLSIgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7ICIKKyJib2R5IHsgIgor
IiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTQ2LCAxNDYsIDE0NikgIWltcG9ydGFudDsiCisi
fSAiCisiI3Bhc3N3b3JkQ29udGFpbmVyIHsiCisiICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OyAi
CisiICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7ICIKKyIgICAgLXdlYmtpdC1ib3gtcGFj
azogY2VudGVyOyAiCisiICAgIHBvc2l0aW9uOiBmaXhlZDsgIgogIiAgICB0b3A6IDA7ICIKICIg
ICAgbGVmdDogMDsgIgogIiAgICByaWdodDogMDsgIgogIiAgICBib3R0b206IDA7ICIKLSIgICAg
ZGlzcGxheTogLXdlYmtpdC1ib3g7ICIKLSIgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsg
IgotIiAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7ICIKICJ9ICIKICIuYW5ub3RhdGlvbiB7
ICIKICIgICAgcG9zaXRpb246IGFic29sdXRlOyAiCkBAIC0xMTIsOSArMTA5LDcgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGFubm90YXRpb25TdHlsZSA9CiAiICAgIG1hcmdpbi10b3A6IDEwMHB4OyAi
CiAifSAiOwogCi0vLyBJbiBub24tY29udGludW91cyBtb2RlcywgYSBzaW5nbGUgc2Nyb2xsIGV2
ZW50IHdpdGggYSBtYWduaXR1ZGUgb2YgPj0gMjBweAotLy8gd2lsbCBqdW1wIHRvIHRoZSBuZXh0
IG9yIHByZXZpb3VzIHBhZ2UsIHRvIG1hdGNoIFBERktpdCBiZWhhdmlvci4KLXN0YXRpYyBjb25z
dCBpbnQgZGVmYXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMjA7Citj
b25zdCBkb3VibGUgem9vbUJ1dHRvblNjYWxlTXVsdGlwbGllciA9IDEuMTg5MjA7CiAKIEBpbnRl
cmZhY2UgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IDogTlNPYmplY3QgewogICAgIFBE
RkxheWVyQ29udHJvbGxlciAqX3BkZkxheWVyQ29udHJvbGxlcjsKQEAgLTI3Niw0MSArMjcxLDYg
QEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFn
ZUZsaXAgPSAyMDsKIAogQGVuZAogCi0KLUBpbnRlcmZhY2UgV0tQREZQbHVnaW5TY3JvbGxiYXJM
YXllciA6IENBTGF5ZXIgewotICAgIFdlYktpdDo6UERGUGx1Z2luKiBfcGRmUGx1Z2luOwotfQot
Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpQREZQbHVnaW4qIHBkZlBsdWdpbjsKLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllcgotCi1Ac3ludGhl
c2l6ZSBwZGZQbHVnaW49X3BkZlBsdWdpbjsKLQotLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46KFdl
YktpdDo6UERGUGx1Z2luICopcGx1Z2luCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX3BkZlBsdWdpbiA9IHBsdWdpbjsK
LSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktl
eTooTlNTdHJpbmcgKilrZXkKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKWRyYXdJ
bkNvbnRleHQ6KENHQ29udGV4dFJlZiljdHgKLXsKLSAgICBfcGRmUGx1Z2luLT5wYWludENvbnRy
b2xGb3JMYXllckluQ29udGV4dChzZWxmLCBjdHgpOwotfQotCi1AZW5kCi0KIEBpbnRlcmZhY2Ug
V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0PFBERkxheWVyQ29udHJvbGxl
ckRlbGVnYXRlPiB7CiAgICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47CiB9CkBAIC0z
MzMsNDIgKzI5Myw0MiBAQCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRTY3JvbGxNYWduaXR1ZGVU
aHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIwOwogICAgIHJldHVybiBzZWxmOwogfQogCi0tICh2b2lk
KXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uCistICh2b2lkKXBkZkxh
eWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHNj
cm9sbFRvUG9pbnQ6KENHUG9pbnQpbmV3UG9zaXRpb24KIHsKLSAgICBfcGRmUGx1Z2luLT5ub3Rp
ZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsKKyAgICBfcGRm
UGx1Z2luLT5zY3JvbGxUb1BvaW50KEludFBvaW50KG5ld1Bvc2l0aW9uKSk7CiB9CiAKLS0gKHZv
aWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNB
cnJheSAqKXR5cGVzCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9s
bGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNvcHlJdGVtczooTlNBcnJheSAqKWl0ZW1zIHdpdGhU
eXBlczooTlNBcnJheSAqKXR5cGVzCiB7CiAgICAgX3BkZlBsdWdpbi0+d3JpdGVJdGVtc1RvUGFz
dGVib2FyZChOU0dlbmVyYWxQYm9hcmQsIGl0ZW1zLCB0eXBlcyk7CiB9CiAKLS0gKHZvaWQpc2hv
d0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJp
bmcgYXRQb2ludDooQ0dQb2ludClwb2ludAorLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBE
RkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBzaG93RGVmaW5pdGlvbkZvckF0
dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0cmluZyBhdFBvaW50OihDR1Bv
aW50KXBvaW50CiB7CiAgICAgX3BkZlBsdWdpbi0+c2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVk
U3RyaW5nKHN0cmluZywgcG9pbnQpOwogfQogCi0tICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5T
U3RyaW5nICopc3RyaW5nCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250
cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHBlcmZvcm1XZWJTZWFyY2hGb3JTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nCiB7CiAgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVdlYlNlYXJjaChzdHJp
bmcpOwogfQogCi0tICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6KE5TU3RyaW5nICopc3Ry
aW5nCistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIHBlcmZvcm1TcG90bGlnaHRTZWFyY2hGb3JTdHJpbmc6KE5TU3RyaW5n
ICopc3RyaW5nCiB7CiAgICAgX3BkZlBsdWdpbi0+cGVyZm9ybVNwb3RsaWdodFNlYXJjaChzdHJp
bmcpOwogfQogCi0tICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KKy0gKHZvaWQpcGRm
TGF5ZXJDb250cm9sbGVyT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbjooUERGTGF5ZXJDb250cm9s
bGVyICopcGRmTGF5ZXJDb250cm9sbGVyCiB7CiAgICAgX3BkZlBsdWdpbi0+b3BlbldpdGhOYXRp
dmVBcHBsaWNhdGlvbigpOwogfQogCi0tICh2b2lkKXNhdmVUb1BERgorLSAodm9pZClwZGZMYXll
ckNvbnRyb2xsZXJTYXZlVG9QREY6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJv
bGxlcgogewogICAgIF9wZGZQbHVnaW4tPnNhdmVUb1BERigpOwogfQogCi0tICh2b2lkKXBkZkxh
eWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNs
aWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1cmwKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
OihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2xpY2tMaW5rV2l0
aFVSTDooTlNVUkwgKil1cmwKIHsKICAgICBfcGRmUGx1Z2luLT5jbGlja2VkTGluayh1cmwpOwog
fQpAQCAtMzc4LDExICszMzgsNiBAQCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRTY3JvbGxNYWdu
aXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIwOwogICAgIF9wZGZQbHVnaW4tPnNldEFjdGl2
ZUFubm90YXRpb24oYW5ub3RhdGlvbik7CiB9CiAKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
OihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQ29udGVu
dFNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFjdG9yCi17Ci0gICAgX3BkZlBsdWdpbi0+bm90
aWZ5Q29udGVudFNjYWxlRmFjdG9yQ2hhbmdlZChzY2FsZUZhY3Rvcik7Ci19Ci0KIC0gKHZvaWQp
cGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xs
ZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGludCltb2RlCiB7CiAgICAgX3BkZlBsdWdpbi0+bm90
aWZ5RGlzcGxheU1vZGVDaGFuZ2VkKG1vZGUpOwpAQCAtMzkzLDYgKzM0OCw1MCBAQCBzdGF0aWMg
Y29uc3QgaW50IGRlZmF1bHRTY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDIw
OwogICAgIF9wZGZQbHVnaW4tPm5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uKTsKIH0K
IAorLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxh
eWVyQ29udHJvbGxlciBpbnZhbGlkYXRlUmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAgICBfcGRmUGx1
Z2luLT5pbnZhbGlkYXRlUERGUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKK30KKworLSAo
dm9pZClwZGZMYXllckNvbnRyb2xsZXJJbnZhbGlkYXRlSFVEOihQREZMYXllckNvbnRyb2xsZXIg
KilwZGZMYXllckNvbnRyb2xsZXIKK3sKKyAgICBfcGRmUGx1Z2luLT5pbnZhbGlkYXRlSFVEKCk7
Cit9CisKKy0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyWm9vbUluOihQREZMYXllckNvbnRyb2xs
ZXIgKilwZGZMYXllckNvbnRyb2xsZXIKK3sKKyAgICBfcGRmUGx1Z2luLT56b29tSW4oKTsKK30K
KworLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJab29tT3V0OihQREZMYXllckNvbnRyb2xsZXIg
KilwZGZMYXllckNvbnRyb2xsZXIKK3sKKyAgICBfcGRmUGx1Z2luLT56b29tT3V0KCk7Cit9CisK
K0BlbmQKKworQGludGVyZmFjZSBXS1BERkhVREFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3Qg
eworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChib29sKT4gX2NvbXBsZXRpb25IYW5kbGVyOworfQor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tQREZIVURBbmltYXRpb25EZWxlZ2F0ZQorCistIChp
ZClpbml0V2l0aEFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOihzdGQ6OmZ1bmN0aW9uPHZvaWQo
Ym9vbCk+KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfY29tcGxldGlvbkhhbmRsZXIgPSBXVEY6
Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpYW5pbWF0aW9uRGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmltYXRpb24gZmluaXNoZWQ6KEJP
T0wpZmxhZworeworICAgIF9jb21wbGV0aW9uSGFuZGxlcihmbGFnKTsKK30KKwogQGVuZAogCiBA
aW50ZXJmYWNlIFBERlZpZXdMYXlvdXQKQEAgLTUwOSwzNSArNTA4LDI0IEBAIFJlZjxQREZQbHVn
aW4+IFBERlBsdWdpbjo6Y3JlYXRlKFdlYkZyYW1lKiBmcmFtZSkKIFBERlBsdWdpbjo6UERGUGx1
Z2luKFdlYkZyYW1lKiBmcmFtZSkKICAgICA6IFBsdWdpbihQREZQbHVnaW5UeXBlKQogICAgICwg
bV9mcmFtZShmcmFtZSkKLSAgICAsIG1faXNQb3N0U2NyaXB0KGZhbHNlKQotICAgICwgbV9wZGZE
b2N1bWVudFdhc011dGF0ZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKGFkb3B0TlMo
W1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX2NvbnRlbnRMYXllcihhZG9wdE5TKFtb
Q0FMYXllciBhbGxvY10gaW5pdF0pKQotICAgICwgbV9zY3JvbGxDb3JuZXJMYXllcihhZG9wdE5T
KFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhp
c10pKQogICAgICwgbV9wZGZMYXllckNvbnRyb2xsZXIoYWRvcHROUyhbW3BkZkxheWVyQ29udHJv
bGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKICAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVs
ZWdhdGUoYWRvcHROUyhbW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRX
aXRoUERGUGx1Z2luOnRoaXNdKSkKKyAgICAsIG1fSFVEKCp0aGlzKQogewotICAgIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZS5nZXQoKTsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5wYXJlbnRMYXllciA9IG1f
Y29udGVudExheWVyLmdldCgpOworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREZWxlZ2F0
ZTptX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpXTsKIAogICAgIGlmIChzdXBwb3J0
c0Zvcm1zKCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29y
ZUZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IGRv
Y3VtZW50LT5jcmVhdGVFbGVtZW50KGRpdlRhZywgZmFsc2UpOwotICAgICAgICBtX2Fubm90YXRp
b25Db250YWluZXItPnNldEF0dHJpYnV0ZShpZEF0dHIsICJhbm5vdGF0aW9uQ29udGFpbmVyIik7
CiAKICAgICAgICAgUmVmPEVsZW1lbnQ+IGFubm90YXRpb25TdHlsZUVsZW1lbnQgPSBkb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudChzdHlsZVRhZywgZmFsc2UpOwogICAgICAgICBhbm5vdGF0aW9uU3R5
bGVFbGVtZW50LT5zZXRUZXh0Q29udGVudChhbm5vdGF0aW9uU3R5bGUsIEFTU0VSVF9OT19FWENF
UFRJT04pOwogCi0gICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoV1RG
Ojptb3ZlKGFubm90YXRpb25TdHlsZUVsZW1lbnQpKTsKLSAgICAgICAgZG9jdW1lbnQtPmJvZHlP
ckZyYW1lc2V0KCktPmFwcGVuZENoaWxkKCptX2Fubm90YXRpb25Db250YWluZXIpOworICAgICAg
ICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+YXBwZW5kQ2hpbGQoYW5ub3RhdGlvblN0eWxl
RWxlbWVudC5nZXQoKSk7CiAgICAgfQogCiAgICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0ID0gYWRv
cHROUyhbW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhbGxvY10gaW5pdFdpdGhQREZQ
bHVnaW46dGhpc10pOwotICAgIG1fYWNjZXNzaWJpbGl0eU9iamVjdC5nZXQoKS5wZGZMYXllckNv
bnRyb2xsZXIgPSBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKTsKLSAgICBtX2FjY2Vzc2liaWxp
dHlPYmplY3QuZ2V0KCkucGFyZW50ID0gd2ViRnJhbWUoKS0+cGFnZSgpLT5hY2Nlc3NpYmlsaXR5
UmVtb3RlT2JqZWN0KCk7Ci0KLSAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjptX2Nv
bnRlbnRMYXllci5nZXQoKV07Ci0gICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9z
Y3JvbGxDb3JuZXJMYXllci5nZXQoKV07CisgICAgW21fYWNjZXNzaWJpbGl0eU9iamVjdCBzZXRQ
ZGZMYXllckNvbnRyb2xsZXI6bV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCldOworICAgIFttX2Fj
Y2Vzc2liaWxpdHlPYmplY3Qgc2V0UGFyZW50OndlYkZyYW1lKCktPnBhZ2UoKS0+YWNjZXNzaWJp
bGl0eVJlbW90ZU9iamVjdCgpXTsKIH0KIAogUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKQEAgLTU3
Miw3NCArNTYwLDYgQEAgUGx1Z2luSW5mbyBQREZQbHVnaW46OnBsdWdpbkluZm8oKQogICAgIHJl
dHVybiBpbmZvOwogfQogCi12b2lkIFBERlBsdWdpbjo6dXBkYXRlU2Nyb2xsYmFycygpCi17Ci0g
ICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGlj
YWxTY3JvbGxiYXI7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAg
IGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQotICAgICAg
ICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9IGVsc2Ug
aWYgKG1fc2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKLSAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxi
YXIpOwotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKG1fc2l6
ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgIGRl
c3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0gZWxzZSBpZiAobV9zaXpl
LmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAg
aW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYm
ICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOwotCi0g
ICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8gMCA6IG1fcGFnZUJveGVz
WzBdLmhlaWdodCgpOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFBy
b3BvcnRpb24obV9zaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRv
Y3VtZW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdp
blZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1fc2l6ZS5oZWlnaHQoKSAtIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fc2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0g
ICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIDApOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChz
Y3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFBy
b3BvcnRpb24obV9zaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9w
ZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3Qo
SW50UmVjdChwbHVnaW5WaWV3KCktPngoKSArIG1fc2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNj
cm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLQotICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgaWYgKGhhZFNjcm9sbGJhcnMg
IT0gaGFzU2Nyb2xsYmFycykgewotICAgICAgICBpZiAoaGFzU2Nyb2xsYmFycykKLSAgICAgICAg
ICAgIGZyYW1lVmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSAgICAg
ICAgZnJhbWVWaWV3LT5zZXROZWVkc0xheW91dCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbGJhckxheWVyKSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXll
ci5nZXQoKS5mcmFtZSA9IHZlcnRpY2FsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOwotICAgICAg
ICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHNldE5lZWRzRGlzcGxheV07Ci0gICAgfQotICAg
IAotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcikgewotICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSA9IGhvcml6b250YWxTY3JvbGxiYXIoKS0+
ZnJhbWVSZWN0KCk7Ci0gICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllciBzZXROZWVk
c0Rpc3BsYXldOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxDb3JuZXJMYXllcikgewot
ICAgICAgICBtX3Njcm9sbENvcm5lckxheWVyLmdldCgpLmZyYW1lID0gc2Nyb2xsQ29ybmVyUmVj
dCgpOwotICAgICAgICBbbV9zY3JvbGxDb3JuZXJMYXllciBzZXROZWVkc0Rpc3BsYXldOwotICAg
IH0KLX0KLQogUGx1Z2luVmlldyogUERGUGx1Z2luOjpwbHVnaW5WaWV3KCkKIHsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7CkBAIC02NTAsMTc1ICs1
NzAsNiBAQCBjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBsdWdpblZpZXcoKSBjb25zdAog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsK
IH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+
IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSBhZG9w
dE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46
dGhpc10pOwotICAgICAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjptX2hvcml6b250
YWxTY3JvbGxiYXJMYXllci5nZXQoKV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxs
b2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKLSAgICAgICAgW21fY29udGFpbmVyTGF5ZXIg
YWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpXTsKLSAgICB9Ci0gICAg
ZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgIGlmIChGcmFt
ZSogZnJhbWUgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKSkgewotICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgICAgIGlmIChwYWdlLT5leHBlY3RzV2hl
ZWxFdmVudFRyaWdnZXJzKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRX
aGVlbEV2ZW50VGVzdFRyaWdnZXIocGFnZS0+dGVzdFRyaWdnZXIoKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5n
ZXQoKSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2lu
OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewot
ICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJh
cjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2lsbFJlbW92
ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICBzY3JvbGxiYXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotCi0gICAgaWYg
KG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFttX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOwotICAgIH0KLX0KLQotSW50UmVjdCBQREZQbHVnaW46OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXItPmxvY2F0aW9u
KCkgLSBwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOwotCi0gICAgcmV0dXJuIHBsdWdpblZpZXco
KS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhw
bHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUlu
dFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0
Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxl
bWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKLSAgICByZWN0Lm1vdmUocGx1Z2luVmll
dygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKLQotICAgIHJldHVybiBy
ZWN0OwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNj
cm9sbGJhclBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9p
bnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkgLSBwbHVnaW5WaWV3KCkt
PmxvY2F0aW9uKCkpOwotCi0gICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygp
LT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhwbHVnaW5WaWV3KCktPnBsdWdp
bkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBv
aW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxlbWVudCgpLT5yZW5k
ZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92ZShwbHVnaW5WaWV3KCktPmxvY2F0
aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwotICAgIAotICAgIHJldHVybiBwb2ludDsK
LX0KLQotYm9vbCBQREZQbHVnaW46OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKLXsKLSAgICByZXR1cm4gc2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotfQotCi1JbnRSZWN0IFBERlBsdWdpbjo6c2Nyb2xs
Q29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwg
IW1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmll
dygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygp
LT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotfQot
Ci1TY3JvbGxhYmxlQXJlYSogUERGUGx1Z2luOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9y
IGEgc2Nyb2xsYWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLUludFJlY3QgUERGUGx1Z2luOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKTsKLX0KLQot
aW50IFBERlBsdWdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3QKLXsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKS5nZXQoKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90
YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKLX0KLQotYm9vbCBQREZQ
bHVnaW46OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1f
ZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1l
LT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaXNB
Y3RpdmUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUERGUGx1Z2lu
Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmco
KSBjb25zdAotewotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1l
KCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFp
blRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpIGNvbnN0Ci17Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAg
ICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFBvaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9z
aXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0
aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci19Ci0KLUludFBvaW50IFBERlBsdWdpbjo6
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoKTsK
LX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAot
ewotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9s
bGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDog
MDsKLQotICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgo
KSAtIG1fc2l6ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkgLSBtX3NpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KTsKLSAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLSAgICByZXR1
cm4gbWF4aW11bU9mZnNldDsKLX0KLQotdm9pZCBQREZQbHVnaW46OnNjcm9sbGJhclN0eWxlQ2hh
bmdlZChTY3JvbGxiYXJTdHlsZSBzdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkKLXsKLSAgICBpZiAo
IWZvcmNlVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgUERGIHdhcyBz
Y3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdl
IHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5n
bGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KLSAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQg
PSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkpOwotICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgIAotICAgIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoc3R5bGUsIGZvcmNlVXBkYXRlKTsK
LSAgICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBt
YXkgbmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgotICAgIHVwZGF0ZVNjcm9sbGJhcnMo
KTsKLX0KLQogdm9pZCBQREZQbHVnaW46OmFkZEFyY2hpdmVSZXNvdXJjZSgpCiB7CiAgICAgLy8g
RklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9h
ZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3Vy
Y2VzLgpAQCAtOTIwLDIzICs2NzEsMjIgQEAgdm9pZCBQREZQbHVnaW46OnBkZkRvY3VtZW50RGlk
TG9hZCgpCiAKICAgICBzZXRQREZEb2N1bWVudChkb2N1bWVudCk7CiAKLSAgICB1cGRhdGVQYWdl
QW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7Ci0KLSAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0
RnJhbWVTaXplOnNpemUoKV07Ci0gICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZG9jdW1l
bnQgPSBkb2N1bWVudC5nZXQoKTsKLQotICAgIGlmIChoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkp
Ci0gICAgICAgIHBsdWdpblZpZXcoKS0+c2V0UGFnZVNjYWxlRmFjdG9yKFttX3BkZkxheWVyQ29u
dHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdLCBJbnRQb2ludCgpKTsKLQotICAgIG5vdGlmeVNj
cm9sbFBvc2l0aW9uQ2hhbmdlZChJbnRQb2ludChbbV9wZGZMYXllckNvbnRyb2xsZXIgc2Nyb2xs
UG9zaXRpb25dKSk7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTp3ZWJG
cmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCld
OyAvLy8gPz8/CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldERvY3VtZW50OmRvY3VtZW50
LmdldCgpXTsKIAogICAgIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygp
OwogCiAgICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKIAotICAgIGlmIChbZG9jdW1lbnQg
aXNMb2NrZWRdKQorICAgIGlmIChpc0xvY2tlZCgpKQogICAgICAgICBjcmVhdGVQYXNzd29yZEVu
dHJ5Rm9ybSgpOworCisgICAgbV9IVUQuc2V0VmlzaWJsZSghaXNMb2NrZWQoKSwgSFVEOjpBbmlt
YXRlVmlzaWJpbGl0eVRyYW5zaXRpb246Ok5vKTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzTG9j
a2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRdOwogfQog
CiB2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVh
bUlELCBjb25zdCBVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCkBAIC0x
MDIyLDY0ICs3NzIsOTEgQEAgdm9pZCBQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50
KCkKICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7CiB9CiAKK3ZvaWQgUERGUGx1Z2lu
OjppbnZhbGlkYXRlUERGUmVjdChJbnRSZWN0IHJlY3QpCit7CisgICAgV2lkZ2V0KiB3aWRnZXQg
PSBwbHVnaW5WaWV3KCk7CisKKyAgICAvLyBGSVhNRTogT25lIG9mIHRoZSBjb252ZXJzaW9uIGZ1
bmN0aW9ucyBzaG91bGQgZG8gdGhpcyAod2l0aCB0aGUgZmxpcHBpbmcpLgorICAgIEludFJlY3Qg
aW52YWxpZFJlY3QgPSByZWN0OworICAgIGludmFsaWRSZWN0LnNldFkobV9wZGZEb2N1bWVudFNp
emUuaGVpZ2h0KCkgLSBpbnZhbGlkUmVjdC55KCkgLSBpbnZhbGlkUmVjdC5oZWlnaHQoKSk7CisK
KyAgICB3aWRnZXQtPmludmFsaWRhdGVSZWN0KGludmFsaWRSZWN0KTsKK30KKwordm9pZCBQREZQ
bHVnaW46OmludmFsaWRhdGVIVUQoKQoreworICAgIG1fSFVELmludmFsaWRhdGUoKTsKK30KKwog
dm9pZCBQREZQbHVnaW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCkKIHsKKyAgICBpZiAoIXN1
cHBvcnRzRm9ybXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgbV9wYXNzd29yZENv
bnRhaW5lciA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KGRpdlRhZywgZmFsc2UpOworICAgIG1f
cGFzc3dvcmRDb250YWluZXItPnNldEF0dHJpYnV0ZShpZEF0dHIsICJwYXNzd29yZENvbnRhaW5l
ciIpOworCiAgICAgbV9wYXNzd29yZEZpZWxkID0gUERGUGx1Z2luUGFzc3dvcmRGaWVsZDo6Y3Jl
YXRlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsKLSAgICBtX3Bhc3N3b3JkRmll
bGQtPmF0dGFjaChtX2Fubm90YXRpb25Db250YWluZXIuZ2V0KCkpOworICAgIG1fcGFzc3dvcmRG
aWVsZC0+YXR0YWNoKG1fcGFzc3dvcmRDb250YWluZXIuZ2V0KCkpOworICAgIGRvY3VtZW50LT5i
b2R5T3JGcmFtZXNldCgpLT5hcHBlbmRDaGlsZCgqbV9wYXNzd29yZENvbnRhaW5lcik7CiB9CiAK
IHZvaWQgUERGUGx1Z2luOjphdHRlbXB0VG9VbmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCkKIHsKICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgYXR0ZW1wdFRvVW5sb2NrV2l0aFBhc3N3
b3JkOnBhc3N3b3JkXTsKIAotICAgIGlmICghW3BkZkRvY3VtZW50KCkgaXNMb2NrZWRdKSB7Cisg
ICAgaWYgKCFpc0xvY2tlZCgpKSB7CisgICAgICAgIG1fcGFzc3dvcmRDb250YWluZXIgPSBudWxs
cHRyOwogICAgICAgICBtX3Bhc3N3b3JkRmllbGQgPSBudWxscHRyOwogCiAgICAgICAgIGNhbGN1
bGF0ZVNpemVzKCk7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgICAgICBtX0hV
RC5zZXRWaXNpYmxlKHRydWUsIEhVRDo6QW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9uOjpZZXMp
OwogICAgIH0KIH0KIAotdm9pZCBQREZQbHVnaW46OnVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZh
Y3RvcnMoKQordm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKIHsKLSAgICBkb3VibGUg
bmV3U2NhbGVGYWN0b3IgPSBjb250cm9sbGVyKCktPmNvbnRlbnRzU2NhbGVGYWN0b3IoKTsKLSAg
ICBpZiAoIWhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkKLSAgICAgICAgbmV3U2NhbGVGYWN0b3Ig
Kj0gd2ViRnJhbWUoKS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKLQotICAgIGlmIChuZXdT
Y2FsZUZhY3RvciAhPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZGV2aWNlU2NhbGVGYWN0b3JdKQot
ICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGV2aWNlU2NhbGVGYWN0b3I6bmV3U2Nh
bGVGYWN0b3JdOwotfQorICAgIHNldFBERkRvY3VtZW50U2l6ZShpc0xvY2tlZCgpID8gSW50U2l6
ZSgpIDogSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5n
Wm9vbV0pKTsKIAotdm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZs
b2F0KQotewotICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKyAgICAvLyBX
ZSBoYXZlIHRvIGFzeW5jaHJvbm91c2x5IHVwZGF0ZSBzdHlsZXMgYmVjYXVzZSB3ZSBjb3VsZCBi
ZSBpbnNpZGUgbGF5b3V0LgorICAgIFJlZlB0cjxQREZQbHVnaW4+IHJlZmZlZFRoaXMgPSB0aGlz
OworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtyZWZmZWRU
aGlzXSB7CisgICAgICAgIHJlZmZlZFRoaXMtPmRpZENhbGN1bGF0ZVNpemVzKCk7CisgICAgfSk7
CiB9CiAKLXZvaWQgUERGUGx1Z2luOjpjb21wdXRlUGFnZUJveGVzKCkKK3ZvaWQgUERGUGx1Z2lu
OjpkaWRDYWxjdWxhdGVTaXplcygpCiB7Ci0gICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9j
dW1lbnRHZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERlBh
Z2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50IGRvY3Vt
ZW50UmVmXSwgaSArIDEpOwotICAgICAgICBBU1NFUlQocGRmUGFnZSk7CisgICAgSFRNTFBsdWdJ
bkVsZW1lbnQqIHBsdWdpbkVsZW1lbnQgPSBkb3duY2FzdDxQbHVnaW5Eb2N1bWVudD4oKndlYkZy
YW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpKS5wbHVnaW5FbGVtZW50KCk7CiAKLSAgICAg
ICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJv
eCk7Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCi0gICAgICAgICAgICBib3ggPSBD
R1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKLSAgICAgICAgbV9w
YWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7CisgICAgaWYgKGlzTG9ja2VkKCkpIHsKKyAg
ICAgICAgcGx1Z2luRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdp
ZHRoLCAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIHBs
dWdpbkVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIDEw
MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KLX0KIAotdm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKLXsKLSAgICBpZiAo
W3BkZkRvY3VtZW50KCkgaXNMb2NrZWRdKSB7Ci0gICAgICAgIHNldFBERkRvY3VtZW50U2l6ZShJ
bnRTaXplKDAsIDApKTsKKyAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5V2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpOworICAgIHBsdWdpbkVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKworICAgIC8vIEZJWE1FOiBDYW4ndCBkbyB0aGlzIGluIHRo
ZSBvdmVyZmxvdy9zdWJmcmFtZSBjYXNlLiBXaGVyZSBkb2VzIHNjcm9sbC1zbmFwLXR5cGUgZ28/
CisgICAgaWYgKG1fdXNpbmdDb250aW51b3VzTW9kZSB8fCAhbV9mcmFtZS0+aXNNYWluRnJhbWUo
KSB8fCAhaXNGdWxsRnJhbWVQbHVnaW4oKSkKICAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWlu
UHRyPE5TQXJyYXk+IHBhZ2VSZWN0cyA9IFttX3BkZkxheWVyQ29udHJvbGxlciBwYWdlUmVjdHNd
OworCisgICAgU3RyaW5nQnVpbGRlciBjb29yZGluYXRlczsKKyAgICBmb3IgKE5TVmFsdWUgKnJl
Y3QgaW4gcGFnZVJlY3RzLmdldCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXaHkgND8KKyAgICAg
ICAgY29vcmRpbmF0ZXMuYXBwZW5kTnVtYmVyKChsb25nKVtyZWN0IHJlY3RWYWx1ZV0ub3JpZ2lu
LnkgLyA0KTsKKyAgICAgICAgY29vcmRpbmF0ZXMuYXBwZW5kTGl0ZXJhbCgicHggIik7CiAgICAg
fQogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgc3RyYWlnaHQgZnJvbSBQREZLaXQu
Ci0gICAgY29tcHV0ZVBhZ2VCb3hlcygpOworICAgIHBsdWdpbkVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwQ29vcmRpbmF0ZSwgY29vcmRp
bmF0ZXMudG9TdHJpbmcoKSk7CiAKLSAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZShbbV9w
ZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pKTsKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAg
ICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBUeXBlLCAibWFuZGF0b3J5Iik7CiB9CiAKIGJvb2wgUERG
UGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0xMDk0
LDkwICs4NzEsMjcgQEAgYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKIAogdm9pZCBQREZQbHVnaW46OmRlc3Ryb3koKQogewotICAgIG1fcGRm
TGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gMDsKLQotICAgIGlmICh3ZWJGcmFtZSgp
KSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVG
cmFtZSgpLT52aWV3KCkpCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOwotICAgIH0KKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6
bmlsXTsKIAogICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9hbm5vdGF0
aW9uQ29udGFpbmVyID0gbnVsbHB0cjsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0g
ICAgCi0gICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAg
IFttX2NvbnRlbnRMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CiB9CiAKLXZvaWQgUERGUGx1
Z2luOjp1cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQp
Cit2b2lkIFBERlBsdWdpbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKQogewotICAgIEFTU0VSVChncmFw
aGljc0NvbnRleHQudXBkYXRpbmdDb250cm9sVGludHMoKSk7Ci0KLSAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUo
KTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoc2Nyb2xsQ29y
bmVyUmVjdCgpKTsKLX0KLQotdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgIAotICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwotICAgIAotICAgIGlmIChsYXll
ciA9PSBtX3Njcm9sbENvcm5lckxheWVyKSB7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVy
UmVjdCA9IHRoaXMtPnNjcm9sbENvcm5lclJlY3QoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LnRyYW5zbGF0ZSgtc2Nyb2xsQ29ybmVyUmVjdC54KCksIC1zY3JvbGxDb3JuZXJSZWN0LnkoKSk7
Ci0gICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKG51bGxw
dHIsIGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsQ29ybmVyUmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBudWxscHRyOwotICAgIAot
ICAgIGlmIChsYXllciA9PSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCi0gICAgICAgIHNjcm9s
bGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgZWxzZSBpZiAobGF5ZXIgPT0gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIpCi0gICAgICAgIHNjcm9sbGJhciA9IGhvcml6b250YWxTY3Jv
bGxiYXIoKTsKLQotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsYmFyLT54KCksIC1zY3JvbGxiYXIt
PnkoKSk7Ci0gICAgc2Nyb2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhci0+
ZnJhbWVSZWN0KCkpOworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisvLyAg
ICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9zaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0LnRy
YW5zbGF0ZSgwLCAtbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOworICAgIFttX3BkZkxheWVy
Q29udHJvbGxlciBkcmF3SW5Db250ZXh0OmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCldOwogfQog
CiBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBQREZQbHVnaW46OnNuYXBzaG90KCkKIHsKLSAgICBp
ZiAoc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmbG9h
dCBjb250ZW50c1NjYWxlRmFjdG9yID0gY29udHJvbGxlcigpLT5jb250ZW50c1NjYWxlRmFjdG9y
KCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gc2l6ZSgpOwotICAgIGJhY2tpbmdT
dG9yZVNpemUuc2NhbGUoY29udGVudHNTY2FsZUZhY3Rvcik7Ci0KLSAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNr
aW5nU3RvcmVTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAgIGF1dG8g
Y29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0KLSAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoY29udGVudHNTY2FsZUZhY3RvciwgLWNvbnRlbnRzU2NhbGVGYWN0
b3IpKTsKLSAgICBjb250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1t
X3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSArIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQot
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzbmFwc2hvdEluQ29udGV4dDpjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKV07Ci0KLSAgICByZXR1cm4gYml0bWFwOwotfQotCi1QbGF0Zm9ybUxheWVy
KiBQREZQbHVnaW46OnBsdWdpbkxheWVyKCkKLXsKLSAgICByZXR1cm4gbV9jb250YWluZXJMYXll
ci5nZXQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogSW50UG9pbnQgUERGUGx1Z2luOjpj
b252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQu
eSgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLCBtX3NpemUuaGVpZ2h0KCkgLSBw
b2ludC55KCkpOwogfQogCiBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZlcnRGcm9tUm9vdFZpZXdU
b1BsdWdpbihjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0xMTg3LDggKzkwMSw4IEBA
IEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKIAogSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBE
RlZpZXdUb1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBJbnRQ
b2ludCBwb2ludEluUGx1Z2luQ29vcmRpbmF0ZXMocG9pbnQueCgpLCBzaXplKCkuaGVpZ2h0KCkg
LSBwb2ludC55KCkpOwotICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52
ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CisgICAgSW50UG9pbnQg
cG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBvaW50LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcG9p
bnQueSgpKTsKKyAgICByZXR1cm4gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFBvaW50
KHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyk7CiB9CiAKIEZsb2F0UmVjdCBQREZQbHVnaW46OmNv
bnZlcnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKQEAg
LTExOTgsOCArOTEyLDggQEAgRmxvYXRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3
VG9TY3JlZW4oY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogICAgIGlmICghZnJhbWVWaWV3
KQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBGbG9hdFBvaW50IG9yaWdpbklu
UGx1Z2luQ29vcmRpbmF0ZXMocmVjdC54KCksIHNpemUoKS5oZWlnaHQoKSAtIHJlY3QueSgpIC0g
cmVjdC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMg
PSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0
KG9yaWdpbkluUGx1Z2luQ29vcmRpbmF0ZXMsIHJlY3Quc2l6ZSgpKSk7CisgICAgRmxvYXRQb2lu
dCBvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCBtX3NpemUuaGVpZ2h0KCkgLSBy
ZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzID0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0
KG9yaWdpbkluUGx1Z2luQ29vcmRpbmF0ZXMsIHJlY3Quc2l6ZSgpKSk7CiAKICAgICByZXR1cm4g
ZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKGVuY2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcykpOwogfQpAQCAtMTIxMiw0NCArOTI2LDI1IEBAIEludFJlY3QgUERGUGx1
Z2luOjpib3VuZHNPblNjcmVlbigpIGNvbnN0CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAK
ICAgICBGbG9hdFJlY3QgYm91bmRzID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKTsK
LSAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fcm9vdFZpZXdUb1Bs
dWdpblRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChib3VuZHMpOworICAgIEZsb2F0UmVjdCBy
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1h
cFJlY3QoYm91bmRzKTsKICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKGVu
Y2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQogCiB2b2lkIFBE
RlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5z
Zm9ybSkKIHsKLSAgICBpZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1Z2luVmlldygpLT5w
YWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFj
dG9yXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gcGx1Z2luU2l6ZTsKKyAgICBt
X3BsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtOwog
ICAgIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybSA9IHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zv
cm0uaW52ZXJzZSgpOwotICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6cGx1
Z2luU2l6ZV07CisgICAgbV9zaXplID0gcGx1Z2luU2l6ZTsKIAotICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAg
IENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwg
MSk7Ci0gICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIDAs
IC1wbHVnaW5TaXplLmhlaWdodCgpLCAwKTsKLSAgICAKLSAgICBpZiAoaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpKSB7Ci0gICAgICAgIENHRmxvYXQgbWFnbmlmaWNhdGlvbiA9IHBsdWdpblZpZXco
KS0+cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxl
RmFjdG9yXTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFt
ZSgpLT52aWV3KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgbV9sYXN0TW91c2VQ
b3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMsIHdlIHNob3VsZCB1c2UgdGhlIHpvb20gb3JpZ2lu
IGZyb20gUGx1Z2luVmlldzo6c2V0UGFnZVNjYWxlRmFjdG9yLgotICAgICAgICBpZiAobWFnbmlm
aWNhdGlvbikKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtYWduaWZ5V2l0aE1h
Z25pZmljYXRpb246bWFnbmlmaWNhdGlvbiBhdFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZW
aWV3KG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSBpbW1lZGlhdGVseTpO
T107Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGFuZGxlIHBhZ2Ugc2Nh
bGUgb3Vyc2VsdmVzLCB3ZSBuZWVkIHRvIHJlc3BlY3Qgb3VyIHBhcmVudCBwYWdlJ3MKLSAgICAg
ICAgLy8gc2NhbGUsIHdoaWNoIG1heSBoYXZlIGNoYW5nZWQuCi0gICAgICAgIHVwZGF0ZVBhZ2VB
bmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKLSAgICB9IAorICAgIFttX3BkZkxheWVyQ29udHJvbGxl
ciBzZXRGcmFtZVNpemU6ZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS5zaXplKCldOworICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBzZXRWaXNpYmxlUmVjdDpmcmFtZVZpZXctPnZpc2libGVDb250ZW50
UmVjdCgpXTsKIAogICAgIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygp
OwogCiAgICAgaWYgKG1fYWN0aXZlQW5ub3RhdGlvbikKICAgICAgICAgbV9hY3RpdmVBbm5vdGF0
aW9uLT51cGRhdGVHZW9tZXRyeSgpOwotCi0gICAgW21fY29udGVudExheWVyIHNldFN1YmxheWVy
VHJhbnNmb3JtOnRyYW5zZm9ybV07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KIAog
dm9pZCBQREZQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKQEAgLTEyNjcs
NyArOTYyLDYgQEAgdm9pZCBQREZQbHVnaW46OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRf
dCwgY29uc3QgV1RGOjpTdHJpbmcmKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi0g
ICAgCiBzdGF0aWMgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGNvbnN0IFdl
YkV2ZW50JiBldmVudCkKIHsKICAgICByZXR1cm4gKGV2ZW50LnNoaWZ0S2V5KCkgPyBOU1NoaWZ0
S2V5TWFzayA6IDApCkBAIC0xMjc5LDEyICs5NzMsNiBAQCBzdGF0aWMgTlNVSW50ZWdlciBtb2Rp
ZmllckZsYWdzRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCkKIHN0YXRpYyBib29s
IGdldEV2ZW50VHlwZUZyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQsIE5TRXZlbnRU
eXBlJiBldmVudFR5cGUpCiB7CiAgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNl
IFdlYkV2ZW50OjpLZXlEb3duOgotICAgICAgICBldmVudFR5cGUgPSBOU0tleURvd247Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgotICAgICAgICBldmVu
dFR5cGUgPSBOU0tleVVwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFdlYkV2ZW50
OjpNb3VzZURvd246CiAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VF
dmVudCY+KGV2ZW50KS5idXR0b24oKSkgewogICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Okxl
ZnRCdXR0b246CkBAIC0xMzI5LDEyNyArMTAxNyw4MCBAQCBzdGF0aWMgYm9vbCBnZXRFdmVudFR5
cGVGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50LCBOU0V2ZW50VHlwZSYgZXZlbnRU
eQogTlNFdmVudCAqUERGUGx1Z2luOjpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29y
ZGluYXRlcyA9IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihldmVudC5wb3NpdGlvbigpKTsK
LQogICAgIEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXMoY29udmVydEZyb21Q
bHVnaW5Ub1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKTsK
IAogICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZTsKIAogICAgIGlmICghZ2V0RXZlbnRUeXBlRnJv
bVdlYkV2ZW50KGV2ZW50LCBldmVudFR5cGUpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmll
ckZsYWdzRnJvbVdlYkV2ZW50KGV2ZW50KTsKIAogICAgIHJldHVybiBbTlNFdmVudCBtb3VzZUV2
ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0
ZXMgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjow
IGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDpldmVudC5jbGlja0NvdW50KCkg
cHJlc3N1cmU6MF07CiB9CiAKLXZvaWQgUERGUGx1Z2luOjp1cGRhdGVDdXJzb3IoY29uc3QgV2Vi
TW91c2VFdmVudCYgZXZlbnQsIFVwZGF0ZUN1cnNvck1vZGUgbW9kZSkKK3ZvaWQgUERGUGx1Z2lu
Ojp1cGRhdGVDdXJzb3IoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQsIFVwZGF0ZUN1cnNvciBt
b2RlKQogewotICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IE5vbmU7CisgICAgLy8g
RklYTUU6IFNob3VsZCBoYXZlIGEgaGFuZCBmb3IgbGlua3MsIGFuZCBzb21ldGhpbmcgc3BlY2lh
bCBmb3IgYW5ub3RhdGlvbnMuCiAKLSAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvblVuZGVyTW91
c2UgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29u
dmVydEZyb21QbHVnaW5Ub1BERlZpZXcoZXZlbnQucG9zaXRpb24oKSldOwotICAgIGlmIChzZWxl
Y3Rpb25VbmRlck1vdXNlICYmIFtbc2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmddIGxlbmd0aF0p
Ci0gICAgICAgIGhpdFRlc3RSZXN1bHQgPSBUZXh0OworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVz
dFJlc3VsdCA9IEhpdFRlc3RSZXN1bHQ6Ok5vbmU7CiAKLSAgICBpZiAoaGl0VGVzdFJlc3VsdCA9
PSBtX2xhc3RIaXRUZXN0UmVzdWx0ICYmIG1vZGUgPT0gVXBkYXRlSWZOZWVkZWQpCisgICAgSW50
UG9pbnQgcG9zaXRpb25JblBERlZpZXdDb29yZGluYXRlcyhjb252ZXJ0RnJvbVBsdWdpblRvUERG
VmlldyhtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcykpOworICAgIGlmICht
X0hVRC5jb250YWluc1BvaW50SW5Sb290VmlldyhldmVudC5wb3NpdGlvbigpKSkKKyAgICAgICAg
aGl0VGVzdFJlc3VsdCA9IEhpdFRlc3RSZXN1bHQ6OkhVRDsKKyAgICBlbHNlIHsKKyAgICAgICAg
UERGU2VsZWN0aW9uICpzZWxlY3Rpb25VbmRlck1vdXNlID0gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OnBvc2l0aW9uSW5QREZWaWV3Q29vcmRpbmF0ZXNd
OworICAgICAgICBpZiAoc2VsZWN0aW9uVW5kZXJNb3VzZSAmJiBbW3NlbGVjdGlvblVuZGVyTW91
c2Ugc3RyaW5nXSBsZW5ndGhdKQorICAgICAgICAgICAgaGl0VGVzdFJlc3VsdCA9IEhpdFRlc3RS
ZXN1bHQ6OlRleHQ7CisgICAgfQorCisgICAgaWYgKGhpdFRlc3RSZXN1bHQgPT0gbV9sYXN0SGl0
VGVzdFJlc3VsdCAmJiBtb2RlID09IFVwZGF0ZUN1cnNvcjo6SWZOZWVkZWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTZXRDdXJzb3IoaGl0VGVzdFJlc3VsdCA9PSBUZXh0ID8gaUJlYW1DdXJzb3IoKSA6IHBv
aW50ZXJDdXJzb3IoKSkpOworICAgIGNvbnN0IEN1cnNvciYgY3Vyc29yID0gW2hpdFRlc3RSZXN1
bHRdIHsKKyAgICAgICAgc3dpdGNoIChoaXRUZXN0UmVzdWx0KSB7CisgICAgICAgIGNhc2UgSGl0
VGVzdFJlc3VsdDo6Tm9uZToKKyAgICAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Cisg
ICAgICAgIGNhc2UgSGl0VGVzdFJlc3VsdDo6VGV4dDoKKyAgICAgICAgICAgIHJldHVybiBpQmVh
bUN1cnNvcigpOworICAgICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6OkhVRDoKKyAgICAgICAgICAg
IHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CisgICAgICAgIH07CisgICAgfSgpOworCisgICAgd2Vi
RnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvcihj
dXJzb3IpKTsKICAgICBtX2xhc3RIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKIH0KIAog
Ym9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZl
bnQpCiB7CiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShl
dmVudCk7Ci0gICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbiA9IGNvbnZlcnRGcm9tUm9vdFZpZXdU
b1BsdWdpbihldmVudC5wb3NpdGlvbigpKTsKIAogICAgIG1fbGFzdE1vdXNlRXZlbnQgPSBldmVu
dDsKIAotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHRhcmdldFNjcm9sbGJhcjsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbjsKLQotICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpIHsKLSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNj
cm9sbGJhckZyYW1lKG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7Ci0gICAg
ICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQot
ICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAg
ICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91c2VQb3NpdGlv
bkluUGx1Z2luQ29vcmRpbmF0ZXMpKQotICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyRm9yTGFz
dE1vdXNlUG9zaXRpb24gPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIH0KLQotICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxiYXJMYXllcikgewotICAgICAgICBJbnRSZWN0IGhvcml6b250YWxT
Y3JvbGxiYXJGcmFtZShtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSk7Ci0g
ICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobW91c2VQb3NpdGlv
bikpCi0gICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7
Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUuY29udGFpbnMobV9sYXN0TW91
c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpKQotICAgICAgICAgICAgdGFyZ2V0U2Nyb2xs
YmFyRm9yTGFzdE1vdXNlUG9zaXRpb24gPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgfQot
Ci0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIgJiYgSW50UmVjdChtX3Njcm9sbENvcm5lckxh
eWVyLmdldCgpLmZyYW1lKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkKKyAgICBpZiAoaXNM
b2NrZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmlnaHQtY2xpY2tzIGFu
ZCBDb250cm9sLWNsaWNrcyBhbHdheXMgY2FsbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50IGFzIHdl
bGwuCiAgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9u
IHx8IChldmVudC5idXR0b24oKSA9PSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uICYmIGV2ZW50
LmNvbnRyb2xLZXkoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgaWYgKGV2ZW50LmJ1
dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChldmVu
dCk7CiAKICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewogICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlTW92ZToKLSAgICAgICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKICAgICAgICAgdXBk
YXRlQ3Vyc29yKGV2ZW50KTsKLQotICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKSB7Ci0gICAg
ICAgICAgICBpZiAoIXRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFyLT5tb3VzZUVudGVyZWQoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0YXJn
ZXRTY3JvbGxiYXItPm1vdXNlTW92ZWQocGxhdGZvcm1FdmVudCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXRhcmdldFNjcm9sbGJhciAmJiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQ
b3NpdGlvbikKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9u
LT5tb3VzZUV4aXRlZCgpOwotCi0gICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAg
ICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAgICAgICAgW21fcGRm
TGF5ZXJDb250cm9sbGVyIG1vdXNlRHJhZ2dlZDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAg
ICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKLSAgICAgICAgICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZU1vdmVkOm5zRXZlbnRdOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1v
dXNlRHJhZ2dlZDpuc0V2ZW50XTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBXZWJF
dmVudDo6TW91c2VEb3duOgotICAgICAgICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbigpKSB7Ci0gICAg
ICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIGlmICh0YXJn
ZXRTY3JvbGxiYXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFNjcm9sbGJhci0+bW91
c2VEb3duKHBsYXRmb3JtRXZlbnQpOwotCi0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xs
ZXIgbW91c2VEb3duOm5zRXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246Ci0gICAgICAgICAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIgcmlnaHRNb3VzZURvd246bnNFdmVudF07Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b246Ci0gICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6Tm9CdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpuc0V2
ZW50XTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoK
LSAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgewotICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OkxlZnRCdXR0b246Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVu
dCk7Ci0KLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRd
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6
UmlnaHRCdXR0b246Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgot
ICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVw
Om5zRXZlbnRdOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xNDU5LDE0ICsxMTAwLDEyIEBAIGJvb2wgUERGUGx1Z2luOjpoYW5k
bGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogCiBib29sIFBERlBsdWdp
bjo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogewot
ICAgIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7Ci0gICAgdXBkYXRlQ3Vyc29yKGV2ZW50LCBG
b3JjZVVwZGF0ZSk7CisgICAgdXBkYXRlQ3Vyc29yKGV2ZW50LCBVcGRhdGVDdXJzb3I6OkZvcmNl
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUxl
YXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCiB7Ci0gICAgbW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKQEAgLTE0NzQsNyArMTExMyw3IEBA
IGJvb2wgUERGUGx1Z2luOjpzaG93Q29udGV4dE1lbnVBdFBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCkKIHsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFt
ZSgpLT52aWV3KCk7CiAgICAgSW50UG9pbnQgY29udGVudHNQb2ludCA9IGZyYW1lVmlldy0+Y29u
dGVudHNUb1Jvb3RWaWV3KHBvaW50KTsKLSAgICBXZWJNb3VzZUV2ZW50IGV2ZW50KFdlYkV2ZW50
OjpNb3VzZURvd24sIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uLCBjb250ZW50c1BvaW50LCBj
b250ZW50c1BvaW50LCAwLCAwLCAwLCAxLCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJz
PigwKSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCksIFdlYkNvcmU6OkZvcmNlQXRDbGlj
ayk7CisgICAgV2ViTW91c2VFdmVudCBldmVudChXZWJFdmVudDo6TW91c2VEb3duLCBXZWJNb3Vz
ZUV2ZW50OjpSaWdodEJ1dHRvbiwgY29udGVudHNQb2ludCwgY29udGVudHNQb2ludCwgMCwgMCwg
MCwgMSwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4oMCksIG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpLCBGb3JjZUF0Q2xpY2spOwogICAgIHJldHVybiBoYW5kbGVDb250ZXh0
TWVudUV2ZW50KGV2ZW50KTsKIH0KIApAQCAtMTQ5MCwyNyArMTEyOSw2IEBAIGJvb2wgUERGUGx1
Z2luOjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQog
ICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KLQotYm9vbCBQREZQbHVnaW46OmhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCi17Ci0gICAgTlNFdmVudFR5
cGUgZXZlbnRUeXBlOwotCi0gICAgaWYgKCFnZXRFdmVudFR5cGVGcm9tV2ViRXZlbnQoZXZlbnQs
IGV2ZW50VHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE5TVUludGVnZXIgbW9k
aWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZlbnQpOwotICAgIAotICAg
IE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGtleUV2ZW50V2l0aFR5cGU6ZXZlbnRUeXBl
IGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6bW9kaWZpZXJGbGFncyB0aW1lc3Rh
bXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0OjAgY2hhcmFjdGVyczpldmVudC50ZXh0KCkgY2hh
cmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOmV2ZW50LnVubW9kaWZpZWRUZXh0KCkgaXNBUmVwZWF0
OmV2ZW50LmlzQXV0b1JlcGVhdCgpIGtleUNvZGU6ZXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUo
KV07Ci0gICAgCi0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50
OjpLZXlEb3duOgotICAgICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVyIGtleURvd246
ZmFrZUV2ZW50XTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KICAgICAKIGJvb2wgUERGUGx1Z2luOjpoYW5kbGVF
ZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFy
Z3VtZW50KQogewpAQCAtMTUzOCwzMyArMTE1Niw3IEBAIGJvb2wgUERGUGx1Z2luOjppc0VkaXRp
bmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBQREZQbHVnaW46OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2lu
dCYgb2Zmc2V0KQotewotICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBv
ZmZzZXQueSgpKTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIgc2V0U2Nyb2xsUG9zaXRpb246b2Zmc2V0XTsKLQotICAgIGlmIChtX2FjdGl2
ZUFubm90YXRpb24pCi0gICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnko
KTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBpZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIHNldE5lZWRzRGlzcGxheV07Ci0g
ICAgZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLX0KLQotdm9pZCBQREZQ
bHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLX0KLQotYm9vbCBQ
REZQbHVnaW46OmlzRnVsbEZyYW1lUGx1Z2luKCkKK2Jvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFt
ZVBsdWdpbigpIGNvbnN0CiB7CiAgICAgLy8gPG9iamVjdD4gb3IgPGVtYmVkPiBwbHVnaW5zIHdp
bGwgYXBwZWFyIHRvIGJlIGluIHRoZWlyIHBhcmVudCBmcmFtZSwgc28gd2UgaGF2ZSB0bwogICAg
IC8vIGNoZWNrIHdoZXRoZXIgb3VyIGZyYW1lJ3Mgd2lkZ2V0IGlzIGV4YWN0bHkgb3VyIFBsdWdp
blZpZXcuCkBAIC0xNTcyLDExICsxMTY0LDYgQEAgYm9vbCBQREZQbHVnaW46OmlzRnVsbEZyYW1l
UGx1Z2luKCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiBzdGF0
aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KGRvY3VtZW50KS0+cGx1Z2luV2lkZ2V0KCkgPT0gcGx1
Z2luVmlldygpOwogfQogCi1ib29sIFBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcigp
Ci17Ci0gICAgcmV0dXJuIHdlYkZyYW1lKCktPmlzTWFpbkZyYW1lKCkgJiYgaXNGdWxsRnJhbWVQ
bHVnaW4oKTsKLX0KLQogdm9pZCBQREZQbHVnaW46OmNsaWNrZWRMaW5rKE5TVVJMICp1cmwpCiB7
CiAgICAgVVJMIGNvcmVVUkwgPSB1cmw7CkBAIC0xNjA3LDcgKzExOTQsOCBAQCB2b2lkIFBERlBs
dWdpbjo6c2V0QWN0aXZlQW5ub3RhdGlvbihQREZBbm5vdGF0aW9uICphbm5vdGF0aW9uKQogICAg
ICAgICB9CiAKICAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gUERGUGx1Z2luQW5ub3RhdGlv
bjo6Y3JlYXRlKGFubm90YXRpb24sIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0aGlzKTsK
LSAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uLT5hdHRhY2gobV9hbm5vdGF0aW9uQ29udGFpbmVy
LmdldCgpKTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZy
YW1lKCktPmRvY3VtZW50KCk7CisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+YXR0YWNoKGRv
Y3VtZW50LT5ib2R5T3JGcmFtZXNldCgpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9hY3RpdmVB
bm5vdGF0aW9uID0gbnVsbHB0cjsKIH0KQEAgLTE2MTgsMTkgKzEyMDYsMTAgQEAgYm9vbCBQREZQ
bHVnaW46OnN1cHBvcnRzRm9ybXMoKQogICAgIHJldHVybiBpc0Z1bGxGcmFtZVBsdWdpbigpOwog
fQogCi12b2lkIFBERlBsdWdpbjo6bm90aWZ5Q29udGVudFNjYWxlRmFjdG9yQ2hhbmdlZChDR0Zs
b2F0IHNjYWxlRmFjdG9yKQotewotICAgIGlmIChoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCi0g
ICAgICAgIHBsdWdpblZpZXcoKS0+c2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yLCBJbnRQ
b2ludCgpKTsKLQotICAgIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygp
OwotfQotCi12b2lkIFBERlBsdWdpbjo6bm90aWZ5RGlzcGxheU1vZGVDaGFuZ2VkKGludCkKK3Zv
aWQgUERGUGx1Z2luOjpub3RpZnlEaXNwbGF5TW9kZUNoYW5nZWQoaW50IG1vZGUpCiB7CisgICAg
bV91c2luZ0NvbnRpbnVvdXNNb2RlID0gKG1vZGUgPT0ga1BERkRpc3BsYXlTaW5nbGVQYWdlQ29u
dGludW91cyB8fCBtb2RlID09IGtQREZEaXNwbGF5VHdvVXBDb250aW51b3VzKTsKICAgICBjYWxj
dWxhdGVTaXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIH0KIAogUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gUERGUGx1Z2luOjpsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3QKQEAgLTE2NjQsNyAr
MTI0Myw3IEBAIHZvaWQgUERGUGx1Z2luOjpvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCkKIAog
ICAgICAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOwogCi0gICAgICAgIG1fdGVtcG9yYXJ5
UERGVVVJRCA9IFdlYkNvcmU6OmNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICAgICAg
bV90ZW1wb3JhcnlQREZVVUlEID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwogICAgICAg
ICBBU1NFUlQobV90ZW1wb3JhcnlQREZVVUlEKTsKIAogICAgICAgICB3ZWJGcmFtZSgpLT5wYWdl
KCktPnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24o
bV9zdWdnZXN0ZWRGaWxlbmFtZSwgd2ViRnJhbWUoKS0+dXJsKCksIHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIgKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSwgbV90ZW1wb3Jh
cnlQREZVVUlEKTsKQEAgLTE4MTQsNyArMTM5Myw3IEBAIGJvb2wgUERGUGx1Z2luOjpmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zLCB1
CiAgICAgcmV0dXJuIG1hdGNoQ291bnQgPiAwOwogfQogCi1ib29sIFBERlBsdWdpbjo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBv
aW50KQorYm9vbCBQREZQbHVnaW46OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gY29u
dmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5kZWRJbnRQb2ludChwb2ludCkpOwogICAgIFBE
RlNlbGVjdGlvbiogbG9va3VwU2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNl
bGVjdGlvbkZvcldvcmRBdFBvaW50OmNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGxvY2FsUG9p
bnQpXTsKQEAgLTE4MzUsNyArMTQxNCw3IEBAIHZvaWQgUERGUGx1Z2luOjpmb2N1c1ByZXZpb3Vz
QW5ub3RhdGlvbigpCiAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGFjdGl2YXRlTmV4dEFubm90
YXRpb246dHJ1ZV07CiB9CiAKLXZvaWQgUERGUGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2Vk
KFBERlNlbGVjdGlvbiAqKQordm9pZCBQREZQbHVnaW46Om5vdGlmeVNlbGVjdGlvbkNoYW5nZWQo
UERGU2VsZWN0aW9uICpzZWxlY3Rpb24pCiB7CiAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5kaWRD
aGFuZ2VTZWxlY3Rpb24oKTsKIH0KQEAgLTE4NDUsNyArMTQyNCw3IEBAIFN0cmluZyBQREZQbHVn
aW46OmdldFNlbGVjdGlvblN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIFtbbV9wZGZMYXllckNv
bnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl0gc3RyaW5nXTsKIH0KIAotU3RyaW5nIFBERlBsdWdp
bjo6Z2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0CitTdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBwb2ludElu
VmlldyA9IGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KGNvbnZlcnRGcm9tUm9vdFZpZXdUb1Bs
dWdpbihyb3VuZGVkSW50UG9pbnQocG9pbnQpKSk7CiAgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rp
b25Gb3JXb3JkID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBv
aW50OnBvaW50SW5WaWV3XTsKQEAgLTE4NTQsNyArMTQzMyw3IEBAIFN0cmluZyBQREZQbHVnaW46
OmdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBv
aW50KSBjCiAgICAgcmV0dXJuIFtzZWxlY3Rpb25Gb3JXb3JkIHN0cmluZ107CiB9CiAKLWJvb2wg
UERGUGx1Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcykgY29uc3QKK2Jvb2wgUERGUGx1
Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbG9j
YXRpb25JblZpZXdDb29yZGluYXRlcykgY29uc3QKIHsKICAgICBQREZTZWxlY3Rpb24gKmN1cnJl
bnRTZWxlY3Rpb24gPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl07CiAg
ICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uKQpAQCAtMTg4Nyw3ICsxNDY2LDggQEAgYm9vbCBQREZQ
bHVnaW46OmV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2ludChjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBsb2NhdGkKIHN0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50
SW5XaW5kb3dTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxlciwgTlNQ
b2ludCBwb2ludEluVmlldykKIHsKICAgICBDR1BvaW50IHBvaW50ID0gTlNQb2ludFRvQ0dQb2lu
dChwb2ludEluVmlldyk7Ci0gICAgQ0dQb2ludCBzY3JvbGxPZmZzZXQgPSBbcGRmTGF5ZXJDb250
cm9sbGVyIHNjcm9sbFBvc2l0aW9uXTsKKworICAgIENHUG9pbnQgc2Nyb2xsT2Zmc2V0ID0gQ0dQ
b2ludFplcm87CiAgICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9IFtwZGZMYXllckNvbnRyb2xsZXIg
Y29udGVudFNjYWxlRmFjdG9yXTsKIAogICAgIHNjcm9sbE9mZnNldC55ID0gW3BkZkxheWVyQ29u
dHJvbGxlciBjb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tXS5oZWlnaHQgLSBOU1JlY3RUb0NHUmVj
dChbcGRmTGF5ZXJDb250cm9sbGVyIGZyYW1lXSkuc2l6ZS5oZWlnaHQgLSBzY3JvbGxPZmZzZXQu
eTsKQEAgLTE4OTgsNyArMTQ3OCw3IEBAIHN0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFj
ZUZvclBvaW50SW5XaW5kb3dTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxhCiAgICAgcmV0
dXJuIE5TUG9pbnRGcm9tQ0dQb2ludChuZXdQb2ludCk7CiB9CiAKLVN0cmluZyBQREZQbHVnaW46
Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9u
SW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBQREZTZWxlY3Rp
b24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpIGNvbnN0CitTdHJpbmcg
UERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlv
bkluVmlld0Nvb3JkaW5hdGVzLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgZGF0YSwgUERGU2VsZWN0
aW9uICoqc2VsZWN0aW9uUHRyLCBOU0RpY3Rpb25hcnkgKipvcHRpb25zKSBjb25zdAogewogICAg
IFBERlNlbGVjdGlvbiomIHNlbGVjdGlvbiA9ICpzZWxlY3Rpb25QdHI7CiAKQEAgLTE5MDksNyAr
MTQ4OSw3IEBAIFN0cmluZyBQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3CiAgICAgSW50UG9pbnQgcG9pbnRJblBE
RlZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJvb3RWaWV3VG9Q
bHVnaW4ocm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKSk7CiAgICAg
c2VsZWN0aW9uID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBv
aW50OnBvaW50SW5QREZWaWV3XTsKICAgICBpZiAoIXNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJu
IEAiIjsKKyAgICAgICAgcmV0dXJuICIiOwogCiAgICAgTlNQb2ludCBwb2ludEluTGF5b3V0U3Bh
Y2UgPSBwb2ludEluTGF5b3V0U3BhY2VGb3JQb2ludEluV2luZG93U3BhY2UobV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCksIHBvaW50SW5QREZWaWV3KTsKIApAQCAtMTkzNyw3ICsxNTE3LDcgQEAg
U3RyaW5nIFBERlBsdWdpbjo6bG9va3VwVGV4dEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgbG9jYXRpb25JblZpZXcKICAgICAKICAgICBOU1N0cmluZyAqbG9va3VwVGV4dCA9
IERpY3Rpb25hcnlMb29rdXA6OnN0cmluZ0ZvclBERlNlbGVjdGlvbihzZWxlY3Rpb24sIG9wdGlv
bnMpOwogICAgIGlmICghbG9va3VwVGV4dCB8fCAhbG9va3VwVGV4dC5sZW5ndGgpCi0gICAgICAg
IHJldHVybiBAIiI7CisgICAgICAgIHJldHVybiAiIjsKIAogICAgIFttX3BkZkxheWVyQ29udHJv
bGxlciBzZXRDdXJyZW50U2VsZWN0aW9uOnNlbGVjdGlvbl07CiAgICAgcmV0dXJuIGxvb2t1cFRl
eHQ7CkBAIC0xOTQ3LDcgKzE1MjcsNyBAQCBzdGF0aWMgTlNSZWN0IHJlY3RJblZpZXdTcGFjZUZv
clJlY3RJbkxheW91dFNwYWNlKFBERkxheWVyQ29udHJvbGxlciogcGRmTGF5ZXJDbwogewogICAg
IENHUmVjdCBuZXdSZWN0ID0gTlNSZWN0VG9DR1JlY3QobGF5b3V0U3BhY2VSZWN0KTsKICAgICBD
R0Zsb2F0IHNjYWxlRmFjdG9yID0gcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTY2FsZUZhY3Rv
cjsKLSAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IHBkZkxheWVyQ29udHJvbGxlci5zY3JvbGxQ
b3NpdGlvbjsKKyAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9IENHUG9pbnRaZXJvOwogCiAgICAg
c2Nyb2xsT2Zmc2V0LnkgPSBwZGZMYXllckNvbnRyb2xsZXIuY29udGVudFNpemVSZXNwZWN0aW5n
Wm9vbS5oZWlnaHQgLSBOU1JlY3RUb0NHUmVjdChwZGZMYXllckNvbnRyb2xsZXIuZnJhbWUpLnNp
emUuaGVpZ2h0IC0gc2Nyb2xsT2Zmc2V0Lnk7CiAKQEAgLTE5NjIsNyArMTU0Miw3IEBAIHN0YXRp
YyBOU1JlY3QgcmVjdEluVmlld1NwYWNlRm9yUmVjdEluTGF5b3V0U3BhY2UoUERGTGF5ZXJDb250
cm9sbGVyKiBwZGZMYXllckNvCiAgICAgcmV0dXJuIE5TUmVjdEZyb21DR1JlY3QobmV3UmVjdCk7
CiB9CiAKLVdlYkNvcmU6OkZsb2F0UmVjdCBQREZQbHVnaW46OnZpZXdSZWN0Rm9yU2VsZWN0aW9u
KFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zdAorRmxvYXRSZWN0IFBERlBsdWdpbjo6cmVj
dEZvclNlbGVjdGlvbkluUm9vdFZpZXcoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pIGNvbnN0CiB7
CiAgICAgUERGUGFnZSAqY3VycmVudFBhZ2UgPSBuaWw7CiAgICAgTlNBcnJheSogcGFnZXMgPSBz
ZWxlY3Rpb24ucGFnZXM7CkBAIC0xOTc4LDEyICsxNTU4LDcgQEAgV2ViQ29yZTo6RmxvYXRSZWN0
IFBERlBsdWdpbjo6dmlld1JlY3RGb3JTZWxlY3Rpb24oUERGU2VsZWN0aW9uICpzZWxlY3Rpb24p
IGNvbnMKIAogICAgIHJlY3RJblZpZXcub3JpZ2luID0gY29udmVydEZyb21QREZWaWV3VG9Sb290
VmlldyhJbnRQb2ludChyZWN0SW5WaWV3Lm9yaWdpbikpOwogCi0gICAgcmV0dXJuIFdlYkNvcmU6
OkZsb2F0UmVjdChyZWN0SW5WaWV3KTsKLX0KLQotQ0dGbG9hdCBQREZQbHVnaW46OnNjYWxlRmFj
dG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRT
Y2FsZUZhY3Rvcl07CisgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0SW5WaWV3KTsKIH0KIAogdm9p
ZCBQREZQbHVnaW46OnBlcmZvcm1XZWJTZWFyY2goTlNTdHJpbmcgKnN0cmluZykKQEAgLTE5OTYs
NjMgKzE1NzEsMjA2IEBAIHZvaWQgUERGUGx1Z2luOjpwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoKE5T
U3RyaW5nICpzdHJpbmcpCiAgICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNlYXJjaFdpdGhTcG90bGlnaHQoc3RyaW5nKSk7CiB9CiAKLWJvb2wgUERG
UGx1Z2luOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQorTlNE
YXRhICpQREZQbHVnaW46OmxpdmVEYXRhKCkgY29uc3QKIHsKLSAgICBQREZEaXNwbGF5TW9kZSBk
aXNwbGF5TW9kZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBkaXNwbGF5TW9kZV07Ci0KLSAgICBp
ZiAoZGlzcGxheU1vZGUgPT0ga1BERkRpc3BsYXlTaW5nbGVQYWdlQ29udGludW91cyB8fCBkaXNw
bGF5TW9kZSA9PSBrUERGRGlzcGxheVR3b1VwQ29udGludW91cykKLSAgICAgICAgcmV0dXJuIFNj
cm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtKGV2ZW50KSk7Ci0KLSAgICBO
U1VJbnRlZ2VyIGN1cnJlbnRQYWdlSW5kZXggPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVu
dFBhZ2VJbmRleF07Ci0gICAgYm9vbCBpbkZpcnN0UGFnZSA9ICFjdXJyZW50UGFnZUluZGV4Owot
ICAgIGJvb2wgaW5MYXN0UGFnZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBsYXN0UGFnZUluZGV4
XSA9PSBjdXJyZW50UGFnZUluZGV4OworICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCisgICAg
ICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+Y29tbWl0KCk7CiAKLSAgICBib29sIGF0U2Nyb2xsVG9w
ID0gIXNjcm9sbFBvc2l0aW9uKCkueSgpOwotICAgIGJvb2wgYXRTY3JvbGxCb3R0b20gPSBzY3Jv
bGxQb3NpdGlvbigpLnkoKSA9PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7CisgICAgLy8g
U2F2ZSBkYXRhIHN0cmFpZ2h0IGZyb20gdGhlIHJlc291cmNlIGluc3RlYWQgb2YgUERGS2l0IGlm
IHRoZSBkb2N1bWVudCBpcworICAgIC8vIHVudG91Y2hlZCBieSB0aGUgdXNlciwgc28gdGhhdCBQ
REZzIHdoaWNoIFBERktpdCBjYW4ndCBkaXNwbGF5IHdpbGwgc3RpbGwgYmUgZG93bmxvYWRhYmxl
LgorICAgIGlmIChtX3BkZkRvY3VtZW50V2FzTXV0YXRlZCkKKyAgICAgICAgcmV0dXJuIFttX3Bk
ZkRvY3VtZW50IGRhdGFSZXByZXNlbnRhdGlvbl07CisgICAgCisgICAgcmV0dXJuIHJhd0RhdGEo
KTsKK30KIAotICAgIGJvb2wgaW5Nb21lbnR1bVNjcm9sbCA9IGV2ZW50Lm1vbWVudHVtUGhhc2Uo
KSAhPSBXZWJXaGVlbEV2ZW50OjpQaGFzZU5vbmU7CitOU09iamVjdCAqUERGUGx1Z2luOjphY2Nl
c3NpYmlsaXR5T2JqZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmdldCgpOworfQogCi0gICAgaW50IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VG
bGlwID0gZGVmYXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwOwordm9pZCBQ
REZQbHVnaW46OnNjcm9sbFRvUG9pbnQoSW50UG9pbnQgc2Nyb2xsUG9pbnQpCit7CisgICAgRnJh
bWUqIGZyYW1lID0gcGx1Z2luVmlldygpLT5mcmFtZSgpOworICAgIGZsb2F0IHNjYWxlID0gZnJh
bWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgc2Nyb2xsUG9pbnQuc2NhbGUoc2Nh
bGUsIHNjYWxlKTsKKyAgICBmcmFtZS0+dmlldygpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oc2Nyb2xsUG9pbnQpOworfQogCi0gICAgLy8gSW1wcmVjaXNlIGlucHV0IGRldmljZXMg
c2hvdWxkIGhhdmUgYSBsb3dlciB0aHJlc2hvbGQgc28gdGhhdCAiY2xpY2t5IiBzY3JvbGwgd2hl
ZWxzIGNhbiBmbGlwIHBhZ2VzLgotICAgIGlmICghZXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcygpKQotICAgICAgICBzY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDA7
CitmbG9hdCBQREZQbHVnaW46OnNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJh
bWUgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCk7CisgICAgcmV0dXJuIGZyYW1lLT5wYWdlKCktPnBh
Z2VTY2FsZUZhY3RvcigpOworfQogCi0gICAgaWYgKGF0U2Nyb2xsQm90dG9tICYmICFpbkxhc3RQ
YWdlICYmIGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPCAwKSB7Ci0gICAgICAgIGlmIChldmVudC5k
ZWx0YSgpLmhlaWdodCgpIDw9IC1zY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCAm
JiAhaW5Nb21lbnR1bVNjcm9sbCkKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBn
b3RvTmV4dFBhZ2VdOwotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgUERGUGx1Z2luOjp6b29t
SW4oKQoreworICAgIGlmICh3ZWJGcmFtZSgpLT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1l
UGx1Z2luKCkpIHsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lKCktPnBhZ2UoKTsK
KyAgICAgICAgcGFnZS0+c2NhbGVQYWdlKHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpICogem9vbUJ1
dHRvblNjYWxlTXVsdGlwbGllciwgSW50UG9pbnQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIHNldENvbnRlbnRTY2FsZUZhY3RvcjpbbV9wZGZMYXllckNv
bnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXSAqIHpvb21CdXR0b25TY2FsZU11bHRpcGxpZXJd
OworICAgICAgICBjYWxjdWxhdGVTaXplcygpOwogICAgIH0KK30KIAotICAgIGlmIChhdFNjcm9s
bFRvcCAmJiAhaW5GaXJzdFBhZ2UgJiYgZXZlbnQuZGVsdGEoKS5oZWlnaHQoKSA+IDApIHsKLSAg
ICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPj0gc2Nyb2xsTWFnbml0dWRlVGhyZXNo
b2xkRm9yUGFnZUZsaXAgJiYgIWluTW9tZW50dW1TY3JvbGwpIHsKLSAgICAgICAgICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3Rv
UHJldmlvdXNQYWdlXTsKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwordm9pZCBQREZQbHVnaW46
Onpvb21PdXQoKQoreworICAgIGlmICh3ZWJGcmFtZSgpLT5pc01haW5GcmFtZSgpICYmIGlzRnVs
bEZyYW1lUGx1Z2luKCkpIHsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lKCktPnBh
Z2UoKTsKKyAgICAgICAgcGFnZS0+c2NhbGVQYWdlKHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpIC8g
em9vbUJ1dHRvblNjYWxlTXVsdGlwbGllciwgSW50UG9pbnQoKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldENvbnRlbnRTY2FsZUZhY3RvcjpbbV9wZGZM
YXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXSAvIHpvb21CdXR0b25TY2FsZU11bHRp
cGxpZXJdOworICAgICAgICBjYWxjdWxhdGVTaXplcygpOwogICAgIH0KK30KKworUERGUGx1Z2lu
OjpIVUQ6OkhVRChQREZQbHVnaW4mIHBsdWdpbikKKyAgICA6IG1fb3ZlcmxheShQYWdlT3Zlcmxh
eTo6Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fcGx1Z2luKHBsdWdpbikKK3sKKyAgICBXZWJGcmFt
ZSogd2ViRnJhbWUgPSBwbHVnaW4ud2ViRnJhbWUoKTsKKworICAgIC8vIEluIG9yZGVyIHRvIGF2
b2lkIHRoZSBvdmVybGF5IGxhZ2dpbmcgYmVoaW5kIG1haW4tZnJhbWUgc2Nyb2xsaW5nLCB3ZSBu
ZWVkCisgICAgLy8gdG8gZm9yY2Ugc3luY2hyb25vdXMgc2Nyb2xsaW5nIGZvciB0aGUgd2hvbGUg
cGFnZSBpZiB3ZSBoYXZlIGEgSFVEIGluIGEgc3ViZnJhbWUgUERGLgorICAgIG1fb3ZlcmxheS0+
c2V0TmVlZHNTeW5jaHJvbm91c1Njcm9sbGluZyghd2ViRnJhbWUtPmlzTWFpbkZyYW1lKCkpOwor
CisgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUgPSB3ZWJGcmFtZS0+Y29yZUZyYW1lKCktPm1haW5G
cmFtZSgpOworICAgIG1haW5GcmFtZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFn
ZU92ZXJsYXkobV9vdmVybGF5LnB0cigpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFk
ZSk7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKIAotICAgIHJldHVybiBTY3Jv
bGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybShldmVudCkpOworICAgIFJlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IHBsYXRmb3JtQ0FMYXllciA9IGRvd25jYXN0PEdyYXBoaWNzTGF5
ZXJDQT4obV9vdmVybGF5LT5sYXllcigpKS5wbGF0Zm9ybUNBTGF5ZXIoKTsKKyAgICBwbGF0Zm9y
bUNBTGF5ZXItPnNldE9wYWNpdHkoMCk7CiB9CiAKLU5TRGF0YSAqUERGUGx1Z2luOjpsaXZlRGF0
YSgpIGNvbnN0CitQREZQbHVnaW46OkhVRDo6fkhVRCgpCiB7Ci0gICAgaWYgKG1fYWN0aXZlQW5u
b3RhdGlvbikKLSAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uLT5jb21taXQoKTsKKyAgICBNYWlu
RnJhbWUmIG1haW5GcmFtZSA9IG1fcGx1Z2luLndlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5tYWlu
RnJhbWUoKTsKKyAgICBtYWluRnJhbWUucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxs
UGFnZU92ZXJsYXkobV9vdmVybGF5LnB0cigpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90
RmFkZSk7Cit9CiAKLSAgICAvLyBTYXZlIGRhdGEgc3RyYWlnaHQgZnJvbSB0aGUgcmVzb3VyY2Ug
aW5zdGVhZCBvZiBQREZLaXQgaWYgdGhlIGRvY3VtZW50IGlzCi0gICAgLy8gdW50b3VjaGVkIGJ5
IHRoZSB1c2VyLCBzbyB0aGF0IFBERnMgd2hpY2ggUERGS2l0IGNhbid0IGRpc3BsYXkgd2lsbCBz
dGlsbCBiZSBkb3dubG9hZGFibGUuCi0gICAgaWYgKG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKQot
ICAgICAgICByZXR1cm4gW21fcGRmRG9jdW1lbnQgZGF0YVJlcHJlc2VudGF0aW9uXTsKLSAgICAK
LSAgICByZXR1cm4gcmF3RGF0YSgpOwordm9pZCBQREZQbHVnaW46OkhVRDo6cGFnZU92ZXJsYXlE
ZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQorewogfQogCi1OU09iamVjdCAqUERGUGx1Z2luOjphY2Nl
c3NpYmlsaXR5T2JqZWN0KCkgY29uc3QKK3ZvaWQgUERGUGx1Z2luOjpIVUQ6OndpbGxNb3ZlVG9Q
YWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICByZXR1cm4gbV9hY2Nlc3NpYmls
aXR5T2JqZWN0LmdldCgpOworfQorCit2b2lkIFBERlBsdWdpbjo6SFVEOjpkaWRNb3ZlVG9QYWdl
KFBhZ2VPdmVybGF5JiwgUGFnZSopCit7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpIVUQ6OmZy
YW1lSW5Sb290VmlldygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBjb21l
IGZyb20gUERGS2l0LgorICAgIGNvbnN0IGludCBIVURXaWR0aCA9IDIzNjsKKyAgICBjb25zdCBp
bnQgSFVESGVpZ2h0ID0gNzI7CisgICAgY29uc3QgaW50IEhVRFlPZmZzZXQgPSA1MDsKKworICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wbHVnaW4ud2ViRnJhbWUoKS0+Y29yZUZyYW1lKCkt
PnZpZXcoKTsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdEluUm9vdFZpZXcgPSBmcmFtZVZpZXctPmNv
bnZlcnRUb1Jvb3RWaWV3KGZyYW1lVmlldy0+Ym91bmRzUmVjdCgpKTsKKyAgICBGbG9hdFJlY3Qg
SFVEUmVjdChmcmFtZVJlY3RJblJvb3RWaWV3LngoKSArIChmcmFtZVJlY3RJblJvb3RWaWV3Lndp
ZHRoKCkgLyAyIC0gKEhVRFdpZHRoIC8gMikpLCBmcmFtZVJlY3RJblJvb3RWaWV3LnkoKSArIChm
cmFtZVJlY3RJblJvb3RWaWV3LmhlaWdodCgpIC0gSFVEWU9mZnNldCAtIEhVREhlaWdodCksIEhV
RFdpZHRoLCBIVURIZWlnaHQpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEhVRFJlY3Qp
OworfQorCitib29sIFBERlBsdWdpbjo6SFVEOjpjb250YWluc1BvaW50SW5Sb290VmlldyhJbnRQ
b2ludCBwb2ludCkKK3sKKyAgICBpZiAobV9wbHVnaW4uaXNMb2NrZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lSW5Sb290VmlldygpLmNvbnRhaW5zKHBvaW50
KTsKK30KKwordm9pZCBQREZQbHVnaW46OkhVRDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJ
bnRSZWN0IGZyYW1lSW5Sb290VmlldyA9IHRoaXMtPmZyYW1lSW5Sb290VmlldygpOworCisgICAg
Y29udGV4dC50cmFuc2xhdGUoSW50U2l6ZShmcmFtZUluUm9vdFZpZXcueCgpLCBmcmFtZUluUm9v
dFZpZXcueSgpICsgZnJhbWVJblJvb3RWaWV3LmhlaWdodCgpKSk7CisgICAgY29udGV4dC5zY2Fs
ZShGbG9hdFNpemUoMSwgLTEpKTsKKworICAgIEludFJlY3QgbG9jYWxSZWN0KEludFBvaW50KCks
IGZyYW1lSW5Sb290Vmlldy5zaXplKCkpOworICAgIGNvbnRleHQuY2xpcChsb2NhbFJlY3QpOwor
CisgICAgW21fcGx1Z2luLnBkZkxheWVyQ29udHJvbGxlcigpIGRyYXdIVURJbkNvbnRleHQ6Y29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKV07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpIVUQ6OmludmFs
aWRhdGUoKQoreworICAgIG1fb3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjpIVUQ6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlLCBBbmltYXRlVmlzaWJpbGl0
eVRyYW5zaXRpb24gYW5pbWF0ZVRyYW5zaXRpb24pCit7CisgICAgaWYgKHZpc2libGUgPT0gbV92
aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworCisg
ICAgZmxvYXQgdG9WYWx1ZSA9IG1fdmlzaWJsZSA/IDAuNzUgOiAwOworICAgIFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IHBsYXRmb3JtQ0FMYXllciA9IGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJDQT4o
bV9vdmVybGF5LT5sYXllcigpKS5wbGF0Zm9ybUNBTGF5ZXIoKTsKKworICAgIGlmIChhbmltYXRl
VHJhbnNpdGlvbiA9PSBBbmltYXRlVmlzaWJpbGl0eVRyYW5zaXRpb246Ok5vKSB7CisgICAgICAg
IHBsYXRmb3JtQ0FMYXllci0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KCJIVURGYWRlIik7CisgICAg
ICAgIHBsYXRmb3JtQ0FMYXllci0+c2V0T3BhY2l0eSh0b1ZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZsb2F0IGR1cmF0aW9uID0gbV92aXNpYmxlID8gMC4yNSA6IDAuNTsK
KworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlQW5pbWF0aW9uID0gW0NBQmFz
aWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJvcGFjaXR5Il07CisgICAgW2ZhZGVB
bmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIFtmYWRlQW5pbWF0aW9uIHNldFRp
bWluZ0Z1bmN0aW9uOltDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FN
ZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF1dOworICAgIFtmYWRlQW5pbWF0aW9uIHNl
dERlbGVnYXRlOltbW1dLUERGSFVEQW5pbWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQW5p
bWF0aW9uQ29tcGxldGlvbkhhbmRsZXI6W3BsYXRmb3JtQ0FMYXllciwgdG9WYWx1ZV0gKGJvb2wg
Y29tcGxldGVkKSB7CisgICAgICAgIGlmIChjb21wbGV0ZWQpCisgICAgICAgICAgICBwbGF0Zm9y
bUNBTGF5ZXItPnNldE9wYWNpdHkodG9WYWx1ZSk7CisKKyAgICB9XSBhdXRvcmVsZWFzZV1dOwor
ICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpAKCgoQ0FMYXllciAqKXBsYXRmb3JtQ0FM
YXllci0+cGxhdGZvcm1MYXllcigpLnByZXNlbnRhdGlvbkxheWVyKS5vcGFjaXR5KV07CisgICAg
W2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTpAKHRvVmFsdWUpXTsKKworICAgIFJlZlB0cjxQbGF0
Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb24gPSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNy
ZWF0ZShmYWRlQW5pbWF0aW9uLmdldCgpKTsKKyAgICBwbGF0Zm9ybUNBTGF5ZXItPnJlbW92ZUFu
aW1hdGlvbkZvcktleSgiSFVERmFkZSIpOworICAgIHBsYXRmb3JtQ0FMYXllci0+YWRkQW5pbWF0
aW9uRm9yS2V5KCJIVURGYWRlIiwgKmFuaW1hdGlvbik7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpI
VUQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2
ZW50KQoreworICAgIGlmIChtX3BsdWdpbi5pc0xvY2tlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBIVUQgdG8gYXBwZWFyIHdoZW4gZHJhZ2dp
bmcgcGFzdCBpdCwgb3IgZGlzYXBwZWFyIHdoZW4gZHJhZ2dpbmcgZnJvbSBhIGJ1dHRvbiwKKyAg
ICAvLyBzbyBkb24ndCB1cGRhdGUgdmlzaWJpbGl0eSB3aGlsZSBhbnkgbW91c2UgYnV0dG9ucyBh
cmUgcHJlc3NlZC4KKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0
dG9uKQorICAgICAgICBzZXRWaXNpYmxlKGNvbnRhaW5zUG9pbnRJblJvb3RWaWV3KGV2ZW50LnBv
c2l0aW9uKCkpLCBBbmltYXRlVmlzaWJpbGl0eVRyYW5zaXRpb246Olllcyk7CisKKyAgICBpZiAo
IW1fdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGV2ZW50LmJ1dHRv
bigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0QnV0dG9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBJbnRQb2ludCBwb3NpdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcyhldmVudC5wb3NpdGlv
bigpKTsKKyAgICBJbnRSZWN0IEhVRFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZUlu
Um9vdFZpZXcoKTsKKworICAgIGF1dG8gZXZlbnRXaXRoVHlwZSA9IFsmXShOU0V2ZW50VHlwZSBl
dmVudFR5cGUpIC0+IE5TRXZlbnQgKiB7CisgICAgICAgIHJldHVybiBbTlNFdmVudCBtb3VzZUV2
ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9uSW5Sb290Vmlld0Nvb3JkaW5h
dGVzIG1vZGlmaWVyRmxhZ3M6MCB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0Om5p
bCBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6ZXZlbnQuY2xpY2tDb3VudCgpIHByZXNzdXJlOjBd
OworICAgIH07CisKKyAgICBhdXRvIHBkZkxheWVyQ29udHJvbGxlciA9IG1fcGx1Z2luLnBkZkxh
eWVyQ29udHJvbGxlcigpOworCisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNl
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ6CisgICAgICAgIHJldHVybiBbcGRmTGF5ZXJDb250
cm9sbGVyIG1vdXNlRHJhZ2dlZDpldmVudFdpdGhUeXBlKE5TTGVmdE1vdXNlRHJhZ2dlZCkgaW5I
VURXaXRoQm91bmRzOkhVRFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXNdOworICAgIGNhc2UgUGxh
dGZvcm1FdmVudDo6TW91c2VQcmVzc2VkOgorICAgICAgICByZXR1cm4gW3BkZkxheWVyQ29udHJv
bGxlciBtb3VzZURvd246ZXZlbnRXaXRoVHlwZShOU0xlZnRNb3VzZURvd24pIGluSFVEV2l0aEJv
dW5kczpIVURSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzXTsKKyAgICBjYXNlIFBsYXRmb3JtRXZl
bnQ6Ok1vdXNlUmVsZWFzZWQ6CisgICAgICAgIHJldHVybiBbcGRmTGF5ZXJDb250cm9sbGVyIG1v
dXNlVXA6ZXZlbnRXaXRoVHlwZShOU0xlZnRNb3VzZVVwKSBpbkhVRFdpdGhCb3VuZHM6SFVEUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlc107CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2lu
QW5ub3RhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luQW5ub3RhdGlvbi5tbQppbmRleCBhMDI5ZDI1ZjkxZTgyZTZkYjFiMmYwZmE1YTJiZTM4
ZDZjMWM3MmJkLi5kZTM5NGE5Yjg2MDQ1NzU0YmYxMGU2NzU1ODIxOTQxYjJkYjZlMzYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkFu
bm90YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5Bbm5vdGF0aW9uLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBERktJ
VF9QTFVHSU4pCiAKICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKLSNpbXBvcnQgIlBERkxheWVy
Q29udHJvbGxlckRldGFpbHMuaCIKKyNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5oIgog
I2ltcG9ydCAiUERGUGx1Z2luLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9u
LmgiCiAjaW1wb3J0ICJQREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5oIgpAQCAtOTgsMTQgKzk4LDE5
IEBAIFBERlBsdWdpbkFubm90YXRpb246On5QREZQbHVnaW5Bbm5vdGF0aW9uKCkKIHZvaWQgUERG
UGx1Z2luQW5ub3RhdGlvbjo6dXBkYXRlR2VvbWV0cnkoKQogewogICAgIEludFNpemUgZG9jdW1l
bnRTaXplKG1fcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb20pOwot
ICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKG1fcGRmTGF5ZXJDb250cm9sbGVyLnNjcm9sbFBv
c2l0aW9uKTsKICAgICBOU1JlY3QgYW5ub3RhdGlvblJlY3QgPSBOU1JlY3RGcm9tQ0dSZWN0KFtt
X3BkZkxheWVyQ29udHJvbGxlciBib3VuZHNGb3JBbm5vdGF0aW9uOm1fYW5ub3RhdGlvbi5nZXQo
KV0pOwogCiAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnQqPihlbGVtZW50KCkpOwogICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgYW5ub3RhdGlvblJlY3Quc2l6ZS53aWR0aCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgYW5ub3RhdGlvblJlY3Quc2l6ZS5oZWln
aHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworI2lmICFVU0UoREVQUkVDQVRFRF9QREZf
UExVR0lOKQorICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlMZWZ0LCBhbm5vdGF0aW9uUmVjdC5vcmlnaW4ueCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7CisgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRvcCwgZG9jdW1lbnRTaXplLmhlaWdodCgpIC0gYW5ub3RhdGlvblJlY3Qub3JpZ2luLnkg
LSBhbm5vdGF0aW9uUmVjdC5zaXplLmhlaWdodCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7
CisjZWxzZQorICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKG1fcGRmTGF5ZXJDb250cm9sbGVy
LnNjcm9sbFBvc2l0aW9uKTsKICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5TGVmdCwgYW5ub3RhdGlvblJlY3Qub3JpZ2luLnggLSBzY3JvbGxQb3Np
dGlvbi54KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIGRvY3VtZW50U2l6ZS5oZWln
aHQoKSAtIGFubm90YXRpb25SZWN0Lm9yaWdpbi55IC0gYW5ub3RhdGlvblJlY3Quc2l6ZS5oZWln
aHQgLSBzY3JvbGxQb3NpdGlvbi55KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworI2Vu
ZGlmCiB9CiAKIGJvb2wgUERGUGx1Z2luQW5ub3RhdGlvbjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2
ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCmluZGV4IDYyMWRjMDExZGI4
NzRmZGYzZGYyMzA1YWU0MDczNjc5ZjM2ZjBmMzkuLjcxMTE1NjFjNGRiM2M2NzgzZWMyMmNkZDdi
ZDEyYjM1M2QwMzU4MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KQEAg
LTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIlBERlBsdWdpbkNob2ljZUFubm90YXRpb24uaCIKIAog
I2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgotI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyRGV0
YWlscy5oIgorI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0IDxQREZL
aXQvUERGS2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU1ByaW1pdGl2ZVZhbHVlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0NTU1Byb3BlcnR5TmFtZXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luUGFzc3dvcmRGaWVs
ZC5tbQppbmRleCA3Mzk4YjUzNjA5NzU3ZjZjYzdiOGE0ZmEzMWExNGE3ODJhYTE1ZDYwLi5iMmEz
YzdmMGZlZmE1YmIwZjU3ZjEzNWQzYjM2YWM3MDIxN2VkZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5QYXNz
d29yZEZpZWxkLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4p
CiAKICNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKLSNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxl
ckRldGFpbHMuaCIKKyNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAi
UERGUGx1Z2luLmgiCiAjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0V2ZW50Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbQppbmRleCBhNGI0OWExNDBk
ZjJkMTE4ZGQxNDQ1MjZmODk5MGM0MmIwODZmZmY1Li4wYjNhZTAxZjYwY2RhODBkZmU4YWE0YTMw
NTI1YjEzZjQ1ODJlMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW0KQEAgLTMw
LDcgKzMwLDcgQEAKIAogI2ltcG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgi
CiAjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCi0jaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJE
ZXRhaWxzLmgiCisjaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJTUEkuaCIKICNpbXBvcnQgIlBE
RlBsdWdpbi5oIgogI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
U1NQcmltaXRpdmVWYWx1ZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpbi5oCmluZGV4IGVlOTU5MDk4YzUwNjBmNjdjNTI1MjhkMjNhZWNlMGE1NWQzM2VkOGEuLjMz
ZGJlZTViYmJhNjE2ZmFiMzQwOTAzMmIxOWYyZjZjZWE2OGNiZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHB1Ymxp
YzoKIAogICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVyIGl0IHdhbnRzIFVSTHMgYW5kIGZp
bGVzIGRyYWdnZWQgb250byBpdCB0byBjYXVzZSBuYXZpZ2F0aW9uLgogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJhZ3MoKSA9IDA7Ci0gICAgCisKICAgICAvLyBB
c2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3YW50cyB0byBvdmVycmlkZSBmdWxsLXBhZ2Ugem9v
bS4KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpID0gMDsKLSAgICAK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0ID0gMDsKKwog
ICAgIC8vIFRlbGxzIHRoZSBwbHVnLWluIGFib3V0IGZvY3VzIGNoYW5nZXMuCiAgICAgdmlydHVh
bCB2b2lkIHNldEZvY3VzKGJvb2wpID0gMDsKIApAQCAtMjk3LDYgKzI5NywxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgbXV0ZWRTdGF0ZUNoYW5nZWQoYm9vbCkgeyB9CiAKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuQ3JlYXRlVHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1VuaWZpZWRTY2FsZUZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKIHByb3RlY3RlZDoKICAgICBQbHVnaW4o
UGx1Z2luVHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJveHkuY3BwCmluZGV4IDZkN2I0NmQyYzY4ZmJiY2M0YjU5YmE2NDJjYzcxZDAzYzgw
ZWNjNzcuLjNiNThlMjBhMWZlMGUyMzA5NWQwYzEzZWIxYzZjOTMxZWI2YzNkOTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcApAQCAt
NDU4LDcgKzQ1OCw3IEBAIGJvb2wgUGx1Z2luUHJveHk6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVk
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAgICAgcmV0dXJuIGVuYWJsZWQ7CiB9CiAgICAg
Ci1ib29sIFBsdWdpblByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkKK2Jvb2wgUGx1Z2lu
UHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3dhaXRp
bmdPbkFzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC00NzAsNiArNDcwLDE4IEBAIGJvb2wgUGx1Z2luUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0
b3IoKQogICAgIHJldHVybiBoYW5kbGVkOwogfQogCitib29sIFBsdWdpblByb3h5OjpyZXF1aXJl
c1VuaWZpZWRTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fd2FpdGluZ09uQXN5bmNo
cm9ub3VzSW5pdGlhbGl6YXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wg
cmVxdWlyZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpSZXF1aXJlc1VuaWZpZWRT
Y2FsZUZhY3RvcigpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpSZXF1aXJlc1Vu
aWZpZWRTY2FsZUZhY3Rvcjo6UmVwbHkocmVxdWlyZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHJlcXVpcmVkOworfQorCiBO
UE9iamVjdCogUGx1Z2luUHJveHk6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCiB7CiAgICAg
Ly8gU2VuZGluZyB0aGUgc3luY2hyb25vdXMgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94
eTo6R2V0UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNhdXNlIHVzIHRvIGRp
c3BhdGNoIGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm94eS5oCmluZGV4IDE1NzBhODIxZjQzMjQzOGQ2MjkxZmNkOTJkNWFlYjBjMDBmNzRjYmEuLmVi
NWVkMTgzNmM5MmU4ZDg5MDU5MzBlMTFmNDRlYjAwZTA1NjRiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCkBAIC0xMTEsNyArMTExLDgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZEFsbG93TmF2aWdh
dGlvbkZyb21EcmFncygpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCi0gICAgdmly
dHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwogICAg
IAogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpIG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKaW5kZXggYzM5NmU4NDg2ZTliNWUxZjVmMjA4Njk5MGNjYWM5M2MxZTMzMmE0ZS4uYjQ4
OThmMjc4N2RlYmEwMDhiYWZmZDI2MDBhNjk2MzdkMWM3YWNkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtNTIxLDYgKzUyMSwx
NCBAQCBib29sIFBsdWdpblZpZXc6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdAogICAg
IHJldHVybiBtX3BsdWdpbi0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOwogfQogCitib29sIFBs
dWdpblZpZXc6OnJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcGx1Z2luIHx8ICFtX2lzSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBtX3BsdWdpbi0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKTsKK30KKwog
dm9pZCBQbHVnaW5WaWV3Ojp3ZWJQYWdlRGVzdHJveWVkKCkKIHsKICAgICBtX3dlYlBhZ2UgPSAw
OwpAQCAtMTg2Myw2ICsxODcxLDkgQEAgYm9vbCBQbHVnaW5WaWV3OjpzaG91bGRDcmVhdGVUcmFu
c2llbnRQYWludGluZ1NuYXBzaG90KCkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAorICAgIGlm
ICghbV9wbHVnaW4tPmNhbkNyZWF0ZVRyYW5zaWVudFBhaW50aW5nU25hcHNob3QoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IGVjNmM3ZWVlMGJmZDg4
OTNlMDM3ZGQ0ZDA3MTU4M2FjN2E3MTdjYTYuLjBkMjEzMGFkMmZmY2NkNTI5YzVhNWZiOWI5MGVi
YjQzODliMTEwZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaApAQCAtOTUsNiArOTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQYWdlU2Nh
bGVGYWN0b3IoZG91YmxlIHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpJbnRQb2ludCBvcmlnaW4pOwog
ICAgIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICBib29sIGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxlRmFjdG9y
KCkgY29uc3Q7CiAKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwogICAgIHZv
aWQgdG9wQ29udGVudEluc2V0RGlkQ2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwCmluZGV4IGM3MzEwZTk0ZjU3NWZmYjQ4ZmY3ZWZjNzUyNTJiMWZlY2MwYmMwOWYuLjlm
ODc1ZmQxODI5NjRlNmQ4ZTMxOTQ5YmY0MTU0OGE4ZGRlNWQzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQ
cm9jZXNzLgogCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRD
b21taXRMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZp
Z2F0aW9uSUQoKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5taW1lVHlwZSgpLCBtX2ZyYW1l
SGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9mcmFtZS0+
Y29yZUZyYW1lKCktPmxvYWRlcigpLmxvYWRUeXBlKCkpLCBkb2N1bWVudExvYWRlci5yZXNwb25z
ZSgpLmNlcnRpZmljYXRlSW5mbygpLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+
aXNQbHVnaW5Eb2N1bWVudCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1pdExvYWRGb3JGcmFtZSht
X2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBkb2N1bWVu
dExvYWRlci5yZXNwb25zZSgpLm1pbWVUeXBlKCksIG1fZnJhbWVIYXNDdXN0b21Db250ZW50UHJv
dmlkZXIsIG1fZnJhbWUtPmhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKCksIHN0YXRpY19jYXN0PHVp
bnQzMl90PihtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkubG9hZFR5cGUoKSksIGRvY3Vt
ZW50TG9hZGVyLnJlc3BvbnNlKCkuY2VydGlmaWNhdGVJbmZvKCksIG1fZnJhbWUtPmNvcmVGcmFt
ZSgpLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOwogICAgIHdlYlBhZ2UtPmRpZENvbW1pdExvYWQobV9mcmFtZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IGY5YzI2
MDY4MWVhZDg2NjdjNjBmOTNkNzhiODQzNTdmNmM0NmM3ZGIuLjI1MGI0MmI5ZGM3ZWVkZjRhNDgw
ZDAwZDMzNGJjMzE5OTE0Y2VmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtNTE0LDYgKzUxNCwxNiBAQCBib29sIFdlYkZyYW1lOjpo
YW5kbGVzUGFnZVNjYWxlR2VzdHVyZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBsdWdpblZpZXcgJiYg
cGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOwogfQogCitib29sIFdlYkZyYW1l
OjpyZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0PFBsdWdp
bkRvY3VtZW50Kj4obV9jb3JlRnJhbWUtPmRvY3VtZW50KCkpOworICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luRG9jdW1lbnQtPnBsdWdp
bldpZGdldCgpKTsKKyAgICByZXR1cm4gcGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5yZXF1aXJl
c1VuaWZpZWRTY2FsZUZhY3RvcigpOworfQorCiB2b2lkIFdlYkZyYW1lOjpzZXRBY2Nlc3NpYmxl
TmFtZShjb25zdCBTdHJpbmcmIGFjY2Vzc2libGVOYW1lKQogewogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmgKaW5kZXggYWI0MjFmYmM3MTZmY2JiYWMwNWYwMjNiOGYyN2Mx
ZjhmZGM0M2UzZC4uMGY1NjE4MTQwYmUzNGZiODk1OGM0NTJlOTI2MThjODlmNTc3MTYzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgKQEAgLTExMyw2
ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc0FueUZvcm1Db250cm9scygpIGNv
bnN0OwogICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKICAgICBib29sIGhhbmRsZXNQYWdlU2NhbGVH
ZXN0dXJlKCkgY29uc3Q7CisgICAgYm9vbCByZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpIGNv
bnN0OwogICAgIHZvaWQgc2V0QWNjZXNzaWJsZU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICBz
dGF0aWMgV2ViRnJhbWUqIGZyYW1lRm9yQ29udGV4dChKU0NvbnRleHRSZWYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDEwNzI0NGQzNzAx
ZTgyY2Q4NDFiYmY2MzQ1ZDg4ZGM0MzFmYmM4YTYuLjA1NTYwOThhYTAyMGU0MTlkNDhkNmM2Mjk2
NzJmMWIwZDhkMTQwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTEzNDEsNiArMTM0MSwxMyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0
KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQog
CiBkb3VibGUgV2ViUGFnZTo6dGV4dFpvb21GYWN0b3IoKSBjb25zdAogeworICAgIFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoJm1fcGFnZS0+bWFpbkZyYW1lKCkp
OworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmllZFNjYWxl
RmFjdG9yKCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2NhbGVGYWN0
b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5wYWdlU2NhbGVGYWN0b3IoKTsK
KyAgICAgICAgcmV0dXJuIHBhZ2VTY2FsZUZhY3RvcigpOworICAgIH0KKwogICAgIEZyYW1lKiBm
cmFtZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gMTsKQEAgLTEzNTAsOCArMTM1NywxMyBAQCBkb3VibGUgV2ViUGFnZTo6dGV4dFpv
b21GYWN0b3IoKSBjb25zdAogdm9pZCBXZWJQYWdlOjpzZXRUZXh0Wm9vbUZhY3Rvcihkb3VibGUg
em9vbUZhY3RvcikKIHsKICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0Zv
ckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKTsKLSAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVn
aW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgaWYgKHBsdWdpblZpZXcgJiYg
cGx1Z2luVmlldy0+cmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSkgeworICAgICAgICBpZiAo
cGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICAgICAgcGx1Z2lu
Vmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKHpvb21GYWN0b3IsIEludFBvaW50KCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzY2FsZVBhZ2Uoem9vbUZhY3RvciwgSW50UG9pbnQoKSk7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS0+
Y29yZUZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTEzNjIsOCArMTM3NCwxMSBAQCB2b2lk
IFdlYlBhZ2U6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogZG91YmxlIFdl
YlBhZ2U6OnBhZ2Vab29tRmFjdG9yKCkgY29uc3QKIHsKICAgICBQbHVnaW5WaWV3KiBwbHVnaW5W
aWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKTsKLSAgICBpZiAo
cGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCi0gICAg
ICAgIHJldHVybiBwbHVnaW5WaWV3LT5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBpZiAocGx1Z2lu
VmlldyAmJiBwbHVnaW5WaWV3LT5yZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpKSB7CisgICAg
ICAgIGlmIChwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgICAg
ICByZXR1cm4gcGx1Z2luVmlldy0+cGFnZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVybiBw
YWdlU2NhbGVGYWN0b3IoKTsKKyAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBtX21haW5GcmFt
ZS0+Y29yZUZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTEzNzQsOCArMTM4OSwxMSBAQCBk
b3VibGUgV2ViUGFnZTo6cGFnZVpvb21GYWN0b3IoKSBjb25zdAogdm9pZCBXZWJQYWdlOjpzZXRQ
YWdlWm9vbUZhY3Rvcihkb3VibGUgem9vbUZhY3RvcikKIHsKICAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFtZSgpKTsKLSAgICBp
ZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpIHsK
LSAgICAgICAgcGx1Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKHpvb21GYWN0b3IsIEludFBv
aW50KCkpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPnJlcXVpcmVzVW5pZmll
ZFNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgaWYgKHBsdWdpblZpZXctPmhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSkKKyAgICAgICAgICAgIHBsdWdpblZpZXctPnNldFBhZ2VTY2FsZUZhY3Rvcih6
b29tRmFjdG9yLCBJbnRQb2ludCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NhbGVQ
YWdlKHpvb21GYWN0b3IsIEludFBvaW50KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xMzg4LDggKzE0MDYsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRQYWdlWm9vbUZhY3Rvcihkb3Vi
bGUgem9vbUZhY3RvcikKIHZvaWQgV2ViUGFnZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhk
b3VibGUgcGFnZVpvb21GYWN0b3IsIGRvdWJsZSB0ZXh0Wm9vbUZhY3RvcikKIHsKICAgICBQbHVn
aW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKCZtX3BhZ2UtPm1haW5GcmFt
ZSgpKTsKLSAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxl
RmFjdG9yKCkpIHsKLSAgICAgICAgcGx1Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFjdG9yKHBhZ2Va
b29tRmFjdG9yLCBJbnRQb2ludCgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3
LT5yZXF1aXJlc1VuaWZpZWRTY2FsZUZhY3RvcigpKSB7CisgICAgICAgIGlmIChwbHVnaW5WaWV3
LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgICAgICBwbHVnaW5WaWV3LT5zZXRQ
YWdlU2NhbGVGYWN0b3IocGFnZVpvb21GYWN0b3IsIEludFBvaW50KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY2FsZVBhZ2UocGFnZVpvb21GYWN0b3IsIEludFBvaW50KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMTYyNmUyODAyOTFhYTE3MDg5NjVlYjkx
MmY1YTg5YzkyMDY3NmIxOS4uMDU0MmY5MWNjMjc2YTVjM2E3YzVlOGYxMTFmYjg5ZDNlMWNlMjdj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQpAQCAtNTg4LDcgKzU4OCw3IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclNlbGVjdGlvbkluUERGUGx1Z2luKFBERlNlbGVjCiAg
ICAgaWYgKCFzZWxlY3Rpb24uc3RyaW5nLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGRpY3Rpb25h
cnlQb3B1cEluZm87CiAKLSAgICBOU1JlY3QgcmFuZ2VSZWN0ID0gcGRmUGx1Z2luLnZpZXdSZWN0
Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgTlNSZWN0IHJhbmdlUmVjdCA9IHBkZlBsdWdp
bi5yZWN0Rm9yU2VsZWN0aW9uSW5Sb290VmlldyhzZWxlY3Rpb24pOwogCiAgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBzZWxlY3Rpb24uYXR0cmlidXRlZFN0cmlu
ZzsKICAgICAK
</data>
<flag name="review"
          id="289729"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>