<?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>56210</bug_id>
          
          <creation_ts>2011-03-11 11:30:05 -0800</creation_ts>
          <short_desc>WebKit2: Implement a full screen window controller</short_desc>
          <delta_ts>2011-03-11 21:39:31 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>55993</dependson>
          <blocked>56218</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>andersca</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>366161</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-11 11:30:05 -0800</bug_when>
    <thetext>WebKit2 needs a full screen window controller, like WebKit/WebFullScreenController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366258</commentid>
    <comment_count>1</comment_count>
      <attachid>85515</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-11 13:06:32 -0800</bug_when>
    <thetext>Created attachment 85515
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366260</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-11 13:07:17 -0800</bug_when>
    <thetext>Note this patch contains changes to WebFullScreenController.{h,cpp}.  (Copyright year changes only.)  This is because of the dumb way git does rename detection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366267</commentid>
    <comment_count>3</comment_count>
      <attachid>85518</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-11 13:16:34 -0800</bug_when>
    <thetext>Created attachment 85518
Patch

Updated the ChangeLog with more information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366429</commentid>
    <comment_count>4</comment_count>
      <attachid>85518</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-03-11 16:59:11 -0800</bug_when>
    <thetext>Comment on attachment 85518
Patch

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

&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:361
&gt; +- (void)getFullScreenRect:(WebCore::IntRect*)rect

This can just return an IntRect object.

&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:368
&gt; +    rect-&gt;setX(roundl(NSMinX(windowFrame)));
&gt; +    rect-&gt;setY(roundl(NSMinY(windowFrame)));
&gt; +    rect-&gt;setWidth(roundl(NSWidth(windowFrame)));
&gt; +    rect-&gt;setHeight(roundl(NSHeight(windowFrame)));

Instead of doing this, you can just use enclosingIntRect([[self window] frame]);

&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:477
&gt; +        return NULL;

This should be return 0;

&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:507
&gt; +    return (WKFullScreenWindow *)[self window];

Please add a

ASSERT([[self window] isKindOfClass:[WKFullScreenWindow class]])

before casting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366448</commentid>
    <comment_count>5</comment_count>
      <attachid>85518</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-11 17:27:13 -0800</bug_when>
    <thetext>Comment on attachment 85518
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:361
&gt;&gt; +- (void)getFullScreenRect:(WebCore::IntRect*)rect
&gt; 
&gt; This can just return an IntRect object.

Great idea. :)

&gt;&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:368
&gt;&gt; +    rect-&gt;setHeight(roundl(NSHeight(windowFrame)));
&gt; 
&gt; Instead of doing this, you can just use enclosingIntRect([[self window] frame]);

You learn something every day.  Used.

&gt;&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:477
&gt;&gt; +        return NULL;
&gt; 
&gt; This should be return 0;

Right.  I got my C and C++ style guide rules backwards.  Changed.

&gt;&gt; Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm:507
&gt;&gt; +    return (WKFullScreenWindow *)[self window];
&gt; 
&gt; Please add a
&gt; 
&gt; ASSERT([[self window] isKindOfClass:[WKFullScreenWindow class]])
&gt; 
&gt; before casting.

Added.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366515</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-11 21:39:31 -0800</bug_when>
    <thetext>Committed r80923: &lt;http://trac.webkit.org/changeset/80923&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85515</attachid>
            <date>2011-03-11 13:06:32 -0800</date>
            <delta_ts>2011-03-11 13:16:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Add-the-WKFullScreenWindowController-mostly-cribbed-.patch</filename>
            <type>text/plain</type>
            <size>56800</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSA1NTc3ZDFhZmZiYWQ2OWRmODRlMjYzNjU3NzAyZjJhZTY1YjBlNGQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IEZyaSwgMTEgTWFyIDIwMTEgMDk6MjE6MDUgLTA4MDAKU3ViamVjdDogW1BBVENIXSBBZGQgdGhl
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIsIG1vc3RseSBjcmliYmVkIGZyb20gV2ViS2l0
J3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
CltXZWJLaXQyXSBJbXBsZW1lbnQgYSBmdWxsIHNjcmVlbiB3aW5kb3cgY29udHJvbGxlcgpodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMTAKCiogVUlQcm9jZXNzL21h
Yy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmg6IEFkZGVkLgoqIFVJUHJvY2Vzcy9tYWMv
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbTogQWRkZWQuCigtW1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgaW5pdF0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGRl
YWxsb2NdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3aW5kb3dEaWRMb2FkXSk6
CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld10pOgooLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIHNldFdlYlZpZXc6XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgd2luZG93RGlkRXhpdEZ1bGxTY3JlZW46XSk6CigtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgd2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOl0pOgooLVtXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIGFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOl0pOgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVy
czpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW46XSk6
CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5FbnRlckZ1bGxTY3JlZW5Bbmlt
YXRpb25dKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBmaW5pc2hlZEVudGVyRnVs
bFNjcmVlbkFuaW1hdGlvbjpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBleGl0
RnVsbFNjcmVlbl0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGJlZ2FuRXhpdEZ1
bGxTY3JlZW5BbmltYXRpb25dKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBmaW5p
c2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uOl0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6V2ViS2l0OjpdKToKKC1bV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVd
KToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBnZXRGdWxsU2NyZWVuUmVjdDpXZWJD
b3JlOjpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfdXBkYXRlTWVudUFuZERv
Y2tGb3JGdWxsU2NyZWVuXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2Rpc2Fi
bGVJZGxlRGlzcGxheVNsZWVwXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2Vu
YWJsZUlkbGVEaXNwbGF5U2xlZXBdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
ZGlzYWJsZUlkbGVTeXN0ZW1TbGVlcF0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IF9lbmFibGVJZGxlU3lzdGVtU2xlZXBdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ciBfZW5hYmxlVGlja2xlVGltZXJdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
ZGlzYWJsZVRpY2tsZVRpbWVyXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3Rp
Y2tsZVRpbWVyRmlyZWRdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfdXBkYXRl
UG93ZXJBc3NlcnRpb25zXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX21hbmFn
ZXJdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfcmVxdWVzdEV4aXRdKToKKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfcmVxdWVzdEV4aXRGdWxsU2NyZWVuV2l0aEFu
aW1hdGlvbjpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfbGF5ZXJIb3N0aW5n
Vmlld10pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9zd2FwVmlldzp3aXRoOl0p
OgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9mdWxsU2NyZWVuV2luZG93XSk6Cigt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2FuaW1hdGlvbkR1cmF0aW9uXSk6CigtW1dL
RnVsbFNjcmVlbldpbmRvdyBpbml0V2l0aENvbnRlbnRSZWN0OnN0eWxlTWFzazpiYWNraW5nOmRl
ZmVyOl0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3cgZGVhbGxvY10pOgooLVtXS0Z1bGxTY3JlZW5X
aW5kb3cgY2FuQmVjb21lS2V5V2luZG93XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvdyBrZXlEb3du
Ol0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3cgY2FuY2VsT3BlcmF0aW9uOl0pOgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3cgYmFja2dyb3VuZExheWVyXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvdyBhbmlt
YXRpb25WaWV3XSk6Ci0tLQogLi4uL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29u
dHJvbGxlci5oICAgfCAgICAyICstCiAuLi4vV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLm1tICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICA1MyArKwogLi4uL1VJUHJvY2Vzcy9tYWMvV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5ofSAgfCAgIDY0ICstCiAuLi4vVUlQcm9jZXNzL21hYy9X
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tfSB8ICA3NTMgKysrKysrLS0tLS0tLS0tLS0t
LS0KIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIHwg
ICAxMiArCiA2IGZpbGVzIGNoYW5nZWQsIDMxNiBpbnNlcnRpb25zKCspLCA1NzAgZGVsZXRpb25z
KC0pCiBjb3B5IFNvdXJjZS97V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLmggPT4gV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIuaH0gKDU4JSkKIGNvcHkgU291cmNlL3tXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIubW0gPT4gV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIubW19ICgzNSUpCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oCmluZGV4IGY4NjdkYzIuLjBmNTViZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVy
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLm1tCmluZGV4IDViOGI0OTYuLjNjYzgzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IGJmZmE3YjYuLmY0YmRlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTIsNiArMiw1OSBAQAogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIEFkZCB0aGUgV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciwgbW9zdGx5IGNyaWJiZWQgZnJvbSBXZWJLaXQncyBX
ZWJGdWxsU2NyZWVuQ29udHJvbGxlci4KKworICAgICAgICBbV2ViS2l0Ml0gSW1wbGVtZW50IGEg
ZnVsbCBzY3JlZW4gd2luZG93IGNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjEwCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbml0XSk6CisgICAgICAgICgtW1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIHdpbmRvd0RpZExvYWRdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciB3ZWJWaWV3XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgc2V0V2ViVmlldzpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciB3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjpdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciB3aW5kb3dEaWRFbnRlckZ1bGxTY3JlZW46XSk6CisgICAg
ICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYXBwbGljYXRpb25EaWRSZXNpZ25B
Y3RpdmU6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYXBwbGlj
YXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbjpdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBiZWdhbkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGZpbmlzaGVkRW50ZXJGdWxs
U2NyZWVuQW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIGV4aXRGdWxsU2NyZWVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIgYmVnYW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbl0pOgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIGZpbmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246XSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZTpXZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGdldEZ1bGxTY3JlZW5SZWN0OldlYkNvcmU6
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF91cGRhdGVNZW51
QW5kRG9ja0ZvckZ1bGxTY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfZGlzYWJsZUlkbGVEaXNwbGF5U2xlZXBdKToKKyAgICAgICAgKC1bV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlciBfZW5hYmxlSWRsZURpc3BsYXlTbGVlcF0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9kaXNhYmxlSWRsZVN5c3RlbVNsZWVwXSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2VuYWJsZUlkbGVTeXN0
ZW1TbGVlcF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9lbmFi
bGVUaWNrbGVUaW1lcl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IF9kaXNhYmxlVGlja2xlVGltZXJdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfdGlja2xlVGltZXJGaXJlZF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyIF91cGRhdGVQb3dlckFzc2VydGlvbnNdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBfbWFuYWdlcl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9yZXF1ZXN0RXhpdF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9yZXF1ZXN0RXhpdEZ1bGxTY3JlZW5XaXRoQW5pbWF0aW9uOl0p
OgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9sYXllckhvc3RpbmdW
aWV3XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3N3YXBWaWV3
OndpdGg6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2Z1bGxT
Y3JlZW5XaW5kb3ddKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
YW5pbWF0aW9uRHVyYXRpb25dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93IGluaXRX
aXRoQ29udGVudFJlY3Q6c3R5bGVNYXNrOmJhY2tpbmc6ZGVmZXI6XSk6CisgICAgICAgICgtW1dL
RnVsbFNjcmVlbldpbmRvdyBkZWFsbG9jXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
dyBjYW5CZWNvbWVLZXlXaW5kb3ddKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93IGtl
eURvd246XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvdyBjYW5jZWxPcGVyYXRpb246
XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvdyBiYWNrZ3JvdW5kTGF5ZXJdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93IGFuaW1hdGlvblZpZXddKToKKworMjAxMS0wMy0x
MSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBDcmVhdGUgbmV3IGludGVyZmFjZSBzdHVicyB0
byBzdXBwb3J0IGZ1bGwgc2NyZWVuIG1vZGUgaW4gV2ViS2l0Mi4KIAogICAgICAgICBXZWJLaXQy
OiBQbHVtYiBuZXcgZnVsbCBzY3JlZW4gYW5pbWF0aW9uIEFQSXMgdGhyb3VnaCBXZWJLaXQyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyLmgKc2ltaWxhcml0eSBpbmRleCA1OCUKY29weSBmcm9tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaApjb3B5IHRvIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oCmluZGV4IGY4
NjdkYzIuLmY1NmE1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTQgKzI1LDUwIEBACiAKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCiAKLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgPENvY29h
L0NvY29hLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eyAKK2NsYXNzIExheWVyVHJlZUNvbnRleHQ7Cit9CiAKLUBjbGFzcyBXZWJXaW5kb3dGYWRlQW5p
bWF0aW9uOwotQGNsYXNzIFdlYlZpZXc7CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3Mg
RWxlbWVudDsKLSAgICBjbGFzcyBSZW5kZXJCb3g7Ci0gICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
K2NsYXNzIEludFJlY3Q7CiB9CiAKLUBpbnRlcmZhY2UgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIg
OiBOU1dpbmRvd0NvbnRyb2xsZXIgewotQHByaXZhdGUKLSAgICBSZWZQdHI8V2ViQ29yZTo6RWxl
bWVudD4gX2VsZW1lbnQ7Ci0gICAgV2ViQ29yZTo6UmVuZGVyQm94KiBfcmVuZGVyZXI7IC8vIChz
ZXQpCi0gICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IF9yZXBsYWNlbWVudEVsZW1lbnQ7IAot
ICAgIE5TV2luZG93ICpfYmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3c7IC8vIChyZXRhaW4pCi0g
ICAgV2ViV2luZG93RmFkZUFuaW1hdGlvbiAqX2ZhZGVBbmltYXRpb247IC8vIChyZXRhaW4pCi0g
ICAgV2ViVmlldyAqX3dlYlZpZXc7Ci0gICAgTlNWaWV3KiBfcGxhY2Vob2xkZXJWaWV3OwotICAg
IENBTGF5ZXIqIF9yZW5kZXJlckxheWVyOwotICAgIENBTGF5ZXIqIF9iYWNrZ3JvdW5kTGF5ZXI7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50TGlzdGVuZXI+IF9tZWRpYUV2ZW50TGlzdGVuZXI7
IAorQGNsYXNzIFdLVmlldzsKIAorQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKK0Bwcml2YXRlCisgICAgV0tWaWV3ICpfd2ViVmll
dzsKKyAgICBSZXRhaW5QdHI8TlNWaWV3PiBfd2ViVmlld1BsYWNlaG9sZGVyOworICAgIFJldGFp
blB0cjxOU1ZpZXc+IF9sYXllclZpZXdQbGFjZWhvbGRlcjsKKyAgICBSZXRhaW5QdHI8TlNWaWV3
PiBfbGF5ZXJIb3N0aW5nVmlldzsKKyAgICAKICAgICBCT09MIF9pc0FuaW1hdGluZzsKLSAgICBC
T09MIF9pc0Z1bGxzY3JlZW47CisgICAgQk9PTCBfaXNGdWxsU2NyZWVuOwogICAgIEJPT0wgX2lz
V2luZG93TG9hZGVkOwogICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKICAgICBCT09M
IF9pc1BsYXlpbmc7CisgICAgQ0dSZWN0IF9pbml0aWFsRnJhbWU7ICAgIAogICAgIHVpbnQzMl90
IF9pZGxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uOwogICAgIHVpbnQzMl90IF9pZGxlU3lzdGVtU2xl
ZXBBc3NlcnRpb247CiAgICAgTlNUaW1lciAqX3RpY2tsZVRpbWVyOwotICAgIFN5c3RlbVVJTW9k
ZSBfc2F2ZWRVSU1vZGU7Ci0gICAgU3lzdGVtVUlPcHRpb25zIF9zYXZlZFVJT3B0aW9uczsKLSAg
ICBDR1JlY3QgX2luaXRpYWxGcmFtZTsKIH0KIAotLSAoV2ViVmlldyopd2ViVmlldzsKLS0gKHZv
aWQpc2V0V2ViVmlldzooV2ViVmlldyopd2ViVmlldzsKLQotLSAodm9pZClzZXRFbGVtZW50OihQ
YXNzUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+KWVsZW1lbnQ7Ci0tIChXZWJDb3JlOjpFbGVtZW50
KillbGVtZW50OwotCi0tICh2b2lkKXNldFJlbmRlcmVyOihXZWJDb3JlOjpSZW5kZXJCb3gqKXJl
bmRlcmVyOwotLSAoV2ViQ29yZTo6UmVuZGVyQm94KilyZW5kZXJlcjsKKy0gKFdLVmlldyopd2Vi
VmlldzsKKy0gKHZvaWQpc2V0V2ViVmlldzooV0tWaWV3Kil3ZWJWaWV3OwogCi0tICh2b2lkKWVu
dGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47Ci0tICh2b2lkKWV4aXRGdWxsc2NyZWVu
OworLSAodm9pZCllbnRlckZ1bGxTY3JlZW46KE5TU2NyZWVuICopc2NyZWVuOworLSAodm9pZCll
eGl0RnVsbFNjcmVlbjsKKy0gKHZvaWQpYmVnYW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb247Cist
ICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5BbmltYXRpb247CistICh2b2lkKWZpbmlzaGVkRW50
ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZDsKKy0gKHZvaWQpZmluaXNoZWRF
eGl0RnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQ7CistICh2b2lkKWVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYp
Y29udGV4dDsKKy0gKHZvaWQpZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOworLSAodm9p
ZClnZXRGdWxsU2NyZWVuUmVjdDooV2ViQ29yZTo6SW50UmVjdCopcmVjdDsKIAogQGVuZAogCi0j
ZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCnNp
bWlsYXJpdHkgaW5kZXggMzUlCmNvcHkgZnJvbSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCmNvcHkgdG8gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCmluZGV4IDViOGI0OTYuLmRkZWY0
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLm1tCkBAIC0yMyw0MCArMjMsMjcgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0ICJjb25maWcuaCIKKwogI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKIAotI2ltcG9ydCAiV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
aCIKLQotI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJXaW5k
b3dBbmltYXRpb24uaCIKLSNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8SU9L
aXQvcHdyX21ndC9JT1BNTGliLmg+Ci0jaW1wb3J0IDxPU1NlcnZpY2VzL1Bvd2VyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0FuaW1hdGlvbkxpc3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJvcGVy
dHlOYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9E
b2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9ET01Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9ET01Eb2N1bWVudEludGVybmFsLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTUhUTUxFbGVt
ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTVdpbmRvdy5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
dmVudExpc3RlbmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgIldLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
LmgiCisjaW1wb3J0ICJXS0FQSUNhc3QuaCIKKyNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCisj
aW1wb3J0IDxJT0tpdC9wd3JfbWd0L0lPUE1MaWIuaD4gLy8gRm9yIElPUE1Bc3NlcnRpb25DcmVh
dGUoKQorI2ltcG9ydCA8SElUb29sYm94L01hY0FwcGxpY2F0aW9uLmg+IC8vIEZvciBTZXRTeXN0
ZW1VSU1vZGUoKQorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ludFJlY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm9kZUxpc3QuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU29mdExpbmtpbmcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQmxvY2suaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
TGF5ZXJCYWNraW5nLmg+Ci0jaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgotI2ltcG9ydCA8
d3RmL1VudXNlZFBhcmFtLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2ltcG9y
dCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHN0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZh
bCB0aWNrbGVUaW1lckludGVydmFsID0gMS4wOwotc3RhdGljIE5TU3RyaW5nKiBjb25zdCBpc0Vu
dGVyaW5nRnVsbHNjcmVlbktleSA9IEAiaXNFbnRlcmluZ0Z1bGxzY3JlZW4iOwogCit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNpZiBkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCkBAIC03OSw3MSArNjYsNTAgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKICNlbmRpZgogCi1AaW50ZXJmYWNlIFdlYkZ1bGxzY3JlZW5XaW5kb3cgOiBO
U1dpbmRvdwotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKQotPE5TQW5pbWF0aW9uRGVsZWdhdGU+Ci0jZW5kaWYKK0BpbnRlcmZh
Y2UgV0tGdWxsU2NyZWVuV2luZG93IDogTlNXaW5kb3cKIHsKICAgICBOU1ZpZXcqIF9hbmltYXRp
b25WaWV3OwotICAgIAotICAgIENBTGF5ZXIqIF9yZW5kZXJlckxheWVyOwogICAgIENBTGF5ZXIq
IF9iYWNrZ3JvdW5kTGF5ZXI7CiB9Ci0tIChDQUxheWVyKilyZW5kZXJlckxheWVyOwotLSAodm9p
ZClzZXRSZW5kZXJlckxheWVyOihDQUxheWVyKilyZW5kZXJlckxheWVyOwogLSAoQ0FMYXllciop
YmFja2dyb3VuZExheWVyOwogLSAoTlNWaWV3KilhbmltYXRpb25WaWV3OwogQGVuZAogCi1jbGFz
cyBNZWRpYUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFFdmVudExpc3RlbmVyPiBjcmVhdGUoV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIqIGRlbGVnYXRlKTsKLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBFdmVudExpc3RlbmVyJik7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOwotCi1wcml2YXRlOgotICAgIE1lZGlhRXZlbnRM
aXN0ZW5lcihXZWJGdWxsU2NyZWVuQ29udHJvbGxlciogZGVsZWdhdGUpOyAKLSAgICBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlciogZGVsZWdhdGU7Ci19OwotCi1AaW50ZXJmYWNlIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyKFByaXZhdGUpCi0tICh2b2lkKV9yZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRo
QW5pbWF0aW9uOihCT09MKWFuaW1hdGlvbjsKLS0gKHZvaWQpX3VwZGF0ZU1lbnVBbmREb2NrRm9y
RnVsbHNjcmVlbjsKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcihQcml2
YXRlKQorLSAodm9pZClfcmVxdWVzdEV4aXRGdWxsU2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClh
bmltYXRpb247CistICh2b2lkKV91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW47CiAtICh2
b2lkKV91cGRhdGVQb3dlckFzc2VydGlvbnM7Ci0tIChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1
bGxzY3JlZW5XaW5kb3c7Ci0tIChEb2N1bWVudCopX2RvY3VtZW50OworLSAoV0tGdWxsU2NyZWVu
V2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3c7CiAtIChDRlRpbWVJbnRlcnZhbClfYW5pbWF0aW9u
RHVyYXRpb247Ci0tIChCT09MKV9pc0FueU1vdmllUGxheWluZzsKKy0gKHZvaWQpX3N3YXBWaWV3
OihOU1ZpZXcqKXZpZXcgd2l0aDooTlNWaWV3KilvdGhlclZpZXc7CistIChXZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5KilfbWFuYWdlcjsKIEBlbmQKIAogQGludGVyZmFjZSBOU1dpbmRvdyhJc09u
QWN0aXZlU3BhY2VBZGRpdGlvbkZvclRpZ2VyQW5kTGVvcGFyZCkKIC0gKEJPT0wpaXNPbkFjdGl2
ZVNwYWNlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIK
K0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCiAKICNwcmFnbWEg
bWFyayAtCiAjcHJhZ21hIG1hcmsgSW5pdGlhbGl6YXRpb24KIC0gKGlkKWluaXQKIHsKLSAgICAv
LyBEbyBub3QgZGVmZXIgd2luZG93IGNyZWF0aW9uLCB0byBtYWtlIHN1cmUgLXdpbmRvd051bWJl
ciBpcyBjcmVhdGVkIChuZWVkZWQgYnkgV2ViV2luZG93U2NhbGVBbmltYXRpb24pLgotICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbW1dlYkZ1bGxzY3JlZW5XaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29u
dGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNr
aW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIE5TV2luZG93ICp3aW5k
b3cgPSBbW1dLRnVsbFNjcmVlbldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1pl
cm9SZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5n
U3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aFdpbmRv
dzp3aW5kb3ddOwogICAgIFt3aW5kb3cgcmVsZWFzZV07CiAgICAgaWYgKCFzZWxmKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIFtzZWxmIHdpbmRvd0RpZExvYWRdOwotICAgIF9tZWRpYUV2ZW50
TGlzdGVuZXIgPSBNZWRpYUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShzZWxmKTsKLSAgICByZXR1cm4g
c2VsZjsKICAgICAKKyAgICByZXR1cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0g
ICAgQVNTRVJUKCFfdGlja2xlVGltZXIpOwotICAgIAogICAgIFtzZWxmIHNldFdlYlZpZXc6bmls
XTsKLSAgICBbX3BsYWNlaG9sZGVyVmlldyByZWxlYXNlXTsKKyAgICAKKyAgICBbTlNPYmplY3Qg
Y2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOwogICAgIAogICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2Vs
Zl07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwpAQCAtMTUxLDIwMSArMTE3LDUyIEBAIHByaXZhdGU6
CiAKIC0gKHZvaWQpd2luZG93RGlkTG9hZAogewotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0g
ICAgLy8gV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBUaWdlcjoK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbHNlCi0gICAgCisgICAgW3N1cGVyIHdpbmRv
d0RpZExvYWRdOworCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZFJlc2lnbkFj
dGl2ZTopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZU5vdGlmaWNhdGlvbiBvYmpl
Y3Q6TlNBcHBdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYXBwbGljYXRpb25EaWRDaGFuZ2VTY3Jl
ZW5QYXJhbWV0ZXJzOikgbmFtZTpOU0FwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVy
c05vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOwotI2VuZGlmCiB9CiAKICNwcmFnbWEgbWFyayAt
CiAjcHJhZ21hIG1hcmsgQWNjZXNzb3JzCiAKLS0gKFdlYlZpZXcqKXdlYlZpZXcKKy0gKFdLVmll
dyopd2ViVmlldwogewogICAgIHJldHVybiBfd2ViVmlldzsKIH0KIAotLSAodm9pZClzZXRXZWJW
aWV3OihXZWJWaWV3ICopd2ViVmlldworLSAodm9pZClzZXRXZWJWaWV3OihXS1ZpZXcgKil3ZWJW
aWV3CiB7CiAgICAgW3dlYlZpZXcgcmV0YWluXTsKICAgICBbX3dlYlZpZXcgcmVsZWFzZV07CiAg
ICAgX3dlYlZpZXcgPSB3ZWJWaWV3OwogfQogCi0tIChFbGVtZW50KillbGVtZW50Ci17Ci0gICAg
cmV0dXJuIF9lbGVtZW50LmdldCgpOwotfQotCi0tICh2b2lkKXNldEVsZW1lbnQ6KFBhc3NSZWZQ
dHI8RWxlbWVudD4pZWxlbWVudAotewotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgLy8g
V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBUaWdlcjoKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbHNlCi0gICAgLy8gV2hlbiBhIG5ldyBFbGVtZW50IGlz
IHNldCBhcyB0aGUgY3VycmVudCBmdWxsIHNjcmVlbiBlbGVtZW50LCByZWdpc3RlciBldmVudAot
ICAgIC8vIGxpc3RlbmVycyBvbiB0aGF0IEVsZW1lbnQncyB3aW5kb3csIGxpc3RlbmluZyBmb3Ig
Y2hhbmdlcyBpbiBtZWRpYSBwbGF5IHN0YXRlcy4KLSAgICAvLyBXZSB3aWxsIHVzZSB0aGVzZSBl
dmVudHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgc2NyZWVuc2F2ZXIgYW5k
IAotICAgIC8vIGRpc3BsYXkgc2xlZXAgdGltZXJzIHdoZW4gcGxheWluZyB2aWRlbyBpbiBmdWxs
IHNjcmVlbi4gTWFrZSBzdXJlIHRvIHVucmVnaXN0ZXIKLSAgICAvLyB0aGUgZXZlbnRzIG9uIHRo
ZSBvbGQgZWxlbWVudCdzIHdpbmRvdywgaWYgbmVjZXNzYXJ5LCBhcyB3ZWxsLgotICAgIAotICAg
IEV2ZW50TmFtZXMmIGV2ZW50TmFtZXMgPSBXZWJDb3JlOjpldmVudE5hbWVzKCk7Ci0gICAgCi0g
ICAgaWYgKF9lbGVtZW50KSB7Ci0gICAgICAgIERPTVdpbmRvdyogd2luZG93ID0gX2VsZW1lbnQt
PmRvY3VtZW50KCktPmRvbVdpbmRvdygpOwotICAgICAgICBpZiAod2luZG93KSB7Ci0gICAgICAg
ICAgICB3aW5kb3ctPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wbGF5RXZlbnQsICBf
bWVkaWFFdmVudExpc3RlbmVyLmdldCgpLCB0cnVlKTsKLSAgICAgICAgICAgIHdpbmRvdy0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVu
ZXIuZ2V0KCksIHRydWUpOwotICAgICAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMuZW5kZWRFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1ZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIF9lbGVtZW50ID0gZWxlbWVudDsKLSAg
ICAKLSAgICBpZiAoX2VsZW1lbnQpIHsKLSAgICAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBfZWxl
bWVudC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7Ci0gICAgICAgIGlmICh3aW5kb3cpIHsKLSAg
ICAgICAgICAgIHdpbmRvdy0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBsYXlFdmVudCwg
IF9tZWRpYUV2ZW50TGlzdGVuZXIsIHRydWUpOwotICAgICAgICAgICAgd2luZG93LT5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMucGF1c2VFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lciwgdHJ1
ZSk7Ci0gICAgICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5lbmRl
ZEV2ZW50LCBfbWVkaWFFdmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLSNl
bmRpZgotfQotCi0tIChSZW5kZXJCb3gqKXJlbmRlcmVyIAotewotICAgIHJldHVybiBfcmVuZGVy
ZXI7Ci19Ci0KLS0gKHZvaWQpc2V0UmVuZGVyZXI6KFJlbmRlckJveCopcmVuZGVyZXIKLXsKLSNp
ZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGlz
IG5vdCBzdXBwb3J0ZWQgb24gVGlnZXI6Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxz
ZQotICAgIF9yZW5kZXJlciA9IHJlbmRlcmVyOwotI2VuZGlmCi19Ci0KICNwcmFnbWEgbWFyayAt
CiAjcHJhZ21hIG1hcmsgTm90aWZpY2F0aW9ucwogCi0tICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxs
c2NyZWVuOihCT09MKWZpbmlzaGVkCi17Ci0gICAgaWYgKCFfaXNBbmltYXRpbmcpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAoX2lzRnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKLSAgICBBU1NFUlQoX2VsZW1lbnQp
OwotICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEZ1bGxTY3JlZW5SZW5kZXJlckJhY2tncm91bmRD
b2xvcihDb2xvcjo6YmxhY2spOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdERpZEV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Ci0gICAgW3NlbGYgc2V0RWxlbWVu
dDpuaWxdOwotCi0gICAgaWYgKGZpbmlzaGVkKSB7Ci0gICAgICAgIFtzZWxmIF91cGRhdGVNZW51
QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOyAgIAotICAgICAgICBbc2VsZiBfdXBkYXRlUG93ZXJBc3Nl
cnRpb25zXTsKLSAgICAgICAgCi0gICAgICAgIFtbX3dlYlZpZXcgd2luZG93XSBkaXNwbGF5XTsK
LSAgICAgICAgW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBzZXRSZW5kZXJlckxheWVyOm5pbF07
Ci0gICAgICAgIFtbc2VsZiB3aW5kb3ddIGNsb3NlXTsKLSAgICB9Ci0KLSAgICBOU0VuYWJsZVNj
cmVlblVwZGF0ZXMoKTsKLQotICAgIF9pc0FuaW1hdGluZyA9IE5POwotICAgIFtzZWxmIGF1dG9y
ZWxlYXNlXTsgLy8gQXNzb2NpYXRlZCAtcmV0YWluIGlzIGluIC1leGl0RnVsbHNjcmVlbi4KLX0K
LQotLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW46KEJPT0wpZmluaXNoZWQKLXsKLSAg
ICBpZiAoIV9pc0FuaW1hdGluZykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghX2lz
RnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TRGlzYWJsZVNjcmVlblVw
ZGF0ZXMoKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxs
U2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICAKLSAgICBp
ZiAoZmluaXNoZWQpIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNj
cmVlbl07Ci0gICAgICAgIFtzZWxmIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOwotICAgICAgICBb
TlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1vdmVzOllFU107Ci0gICAgCi0gICAgICAgIC8v
IE1vdmUgdGhlIHdlYlZpZXcgaW50byBvdXIgZnVsbHNjcmVlbiBXaW5kb3cKLSAgICAgICAgaWYg
KCFfcGxhY2Vob2xkZXJWaWV3KQotICAgICAgICAgICAgX3BsYWNlaG9sZGVyVmlldyA9IFtbTlNW
aWV3IGFsbG9jXSBpbml0XTsKLQotICAgICAgICAvLyBEbyBub3Qgc3dhcCB0aGUgcGxhY2Vob2xk
ZXIgaW50byBwbGFjZSBpZiBhbHJlYWR5IGlzIGluIGEgd2luZG93LAotICAgICAgICAvLyBhc3N1
bWluZyB0aGUgcGxhY2Vob2xkZXIncyB3aW5kb3cgd2lsbCBhbHdheXMgYmUgdGhlIHdlYlZpZXcn
cyAKLSAgICAgICAgLy8gb3JpZ2luYWwgd2luZG93LgotICAgICAgICBpZiAoIVtfcGxhY2Vob2xk
ZXJWaWV3IHdpbmRvd10pIHsKLSAgICAgICAgICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBbc2VsZiB3
ZWJWaWV3XTsKLSAgICAgICAgICAgIFtfcGxhY2Vob2xkZXJWaWV3IHNldEZyYW1lOlt3ZWJWaWV3
IGZyYW1lXV07ICAgICAgICAKLSAgICAgICAgICAgIFtfcGxhY2Vob2xkZXJWaWV3IHNldEF1dG9y
ZXNpemluZ01hc2s6W3dlYlZpZXcgYXV0b3Jlc2l6aW5nTWFza11dOwotICAgICAgICAgICAgW19w
bGFjZWhvbGRlclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgICAgICBbW3dlYlZp
ZXcgc3VwZXJ2aWV3XSByZXBsYWNlU3Vidmlldzp3ZWJWaWV3IHdpdGg6X3BsYWNlaG9sZGVyVmll
d107Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFtbW3NlbGYgd2luZG93XSBjb250ZW50Vmll
d10gYWRkU3Vidmlldzp3ZWJWaWV3XTsKLSAgICAgICAgICAgIFt3ZWJWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlfE5TVmlld0hlaWdodFNpemFibGVdOwotICAgICAg
ICAgICAgW3dlYlZpZXcgc2V0RnJhbWU6W1tbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBib3Vu
ZHNdXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgV2ViRnVsbHNjcmVlbldpbmRvdyog
d2luZG93ID0gW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddOwotICAgICAgICBbd2luZG93IHNldEJh
Y2tncm91bmRDb2xvcjpbTlNDb2xvciBibGFja0NvbG9yXV07Ci0gICAgICAgIFt3aW5kb3cgc2V0
T3BhcXVlOllFU107Ci0KLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgICAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgICAgICBbW1t3aW5kb3cg
YW5pbWF0aW9uVmlld10gbGF5ZXJdIHNldE9wYWNpdHk6MF07Ci0gICAgICAgIFtDQVRyYW5zYWN0
aW9uIGNvbW1pdF07Ci0gICAgfQotICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygpOwotCi0gICAg
X2lzQW5pbWF0aW5nID0gTk87Ci19Ci0KLS0gKHZvaWQpYW5pbWF0aW9uRGlkU3RvcDooQ0FBbmlt
YXRpb24gKilhbmltIGZpbmlzaGVkOihCT09MKWZpbmlzaGVkCi17Ci0gICAgQk9PTCBpc0VudGVy
aW5nRnVsbHNjcmVlbkFuaW1hdGlvbiA9IFtbYW5pbSB2YWx1ZUZvcktleTppc0VudGVyaW5nRnVs
bHNjcmVlbktleV0gYm9vbFZhbHVlXTsKLSAgICAKLSAgICBpZiAoIWlzRW50ZXJpbmdGdWxsc2Ny
ZWVuQW5pbWF0aW9uKQotICAgICAgICBbc2VsZiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjpmaW5p
c2hlZF07Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiB3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW46
ZmluaXNoZWRdOwotfQotCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05v
dGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCiB7ICAgCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRo
ZSBmdWxsc2NyZWVuV2luZG93IGlzIG9uIHRoZSBhY3RpdmUgc3BhY2U7IHRoaXMgZnVuY3Rpb24g
aXMgYXZhaWxhYmxlCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmdWxsU2NyZWVuV2luZG93
IGlzIG9uIHRoZSBhY3RpdmUgc3BhY2U7IHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlCiAgICAg
Ly8gb24gMTAuNiBhbmQgbGF0ZXIsIHNvIGRlZmF1bHQgdG8gWUVTIGlmIHRoZSBmdW5jdGlvbiBp
cyBub3QgYXZhaWxhYmxlOgotICAgIE5TV2luZG93KiBmdWxsc2NyZWVuV2luZG93ID0gW3NlbGYg
X2Z1bGxzY3JlZW5XaW5kb3ddOwotICAgIEJPT0wgaXNPbkFjdGl2ZVNwYWNlID0gKFtmdWxsc2Ny
ZWVuV2luZG93IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaXNPbkFjdGl2ZVNwYWNlKV0g
PyBbZnVsbHNjcmVlbldpbmRvdyBpc09uQWN0aXZlU3BhY2VdIDogWUVTKTsKLQorICAgIE5TV2lu
ZG93KiBmdWxsU2NyZWVuV2luZG93ID0gW3NlbGYgX2Z1bGxTY3JlZW5XaW5kb3ddOworICAgIEJP
T0wgaXNPbkFjdGl2ZVNwYWNlID0gKFtmdWxsU2NyZWVuV2luZG93IHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoaXNPbkFjdGl2ZVNwYWNlKV0gPyBbZnVsbFNjcmVlbldpbmRvdyBpc09uQWN0
aXZlU3BhY2VdIDogWUVTKTsKKyAgICAKICAgICAvLyBSZXBsaWNhdGUgdGhlIFF1aWNrVGltZSBQ
bGF5ZXIgKFgpIGJlaGF2aW9yIHdoZW4gbG9zaW5nIGFjdGl2ZSBhcHBsaWNhdGlvbiBzdGF0dXM6
Ci0gICAgLy8gSXMgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuIHRoZSBtYWluIHNjcmVlbj8gKE5vdGU6
IHRoaXMgY292ZXJzIHRoZSBjYXNlIHdoZXJlIG9ubHkgYSAKLSAgICAvLyBzaW5nbGUgc2NyZWVu
IGlzIGF2YWlsYWJsZS4pICBJcyB0aGUgZnVsbHNjcmVlbiBzY3JlZW4gb24gdGhlIGN1cnJlbnQg
c3BhY2U/IElGRiBzbywgCi0gICAgLy8gdGhlbiBleGl0IGZ1bGxzY3JlZW4gbW9kZS4gCi0gICAg
aWYgKFtmdWxsc2NyZWVuV2luZG93IHNjcmVlbl0gPT0gW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmpl
Y3RBdEluZGV4OjBdICYmIGlzT25BY3RpdmVTcGFjZSkKLSAgICAgICAgIFtzZWxmIF9yZXF1ZXN0
RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOk5PXTsKKyAgICAvLyBJcyB0aGUgZnVsbFNjcmVl
biBzY3JlZW4gdGhlIG1haW4gc2NyZWVuPyAoTm90ZTogdGhpcyBjb3ZlcnMgdGhlIGNhc2Ugd2hl
cmUgb25seSBhIAorICAgIC8vIHNpbmdsZSBzY3JlZW4gaXMgYXZhaWxhYmxlLikgIElzIHRoZSBm
dWxsU2NyZWVuIHNjcmVlbiBvbiB0aGUgY3VycmVudCBzcGFjZT8gSUZGIHNvLCAKKyAgICAvLyB0
aGVuIGV4aXQgZnVsbFNjcmVlbiBtb2RlLiAKKyAgICBpZiAoW2Z1bGxTY3JlZW5XaW5kb3cgc2Ny
ZWVuXSA9PSBbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gJiYgaXNPbkFjdGl2
ZVNwYWNlKQorICAgICAgICBbc2VsZiBfcmVxdWVzdEV4aXRGdWxsU2NyZWVuV2l0aEFuaW1hdGlv
bjpOT107CiB9CiAKIC0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJz
OihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCiB7CiAgICAgLy8gVGhlIHVzZXIgbWF5IGhh
dmUgY2hhbmdlZCB0aGUgbWFpbiBzY3JlZW4gYnkgbW92aW5nIHRoZSBtZW51IGJhciwgb3IgdGhl
eSBtYXkgaGF2ZSBjaGFuZ2VkCi0gICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBv
ciB0aGV5IG1heSBoYXZlIGNoYW5nZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9u
cy4gCisgICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5IG1heSBoYXZl
IGNoYW5nZWQgdGhlIGZ1bGxTY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gCiAgICAgLy8gVXBk
YXRlIG91ciBwcmVzZW50YXRpb24gcGFyYW1ldGVycywgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdWxs
IHNjcmVlbiB3aW5kb3cgb2NjdXBpZXMgdGhlIAogICAgIC8vIGVudGlyZSBzY3JlZW46Ci0gICAg
W3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07CisgICAgW3NlbGYgX3VwZGF0
ZU1lbnVBbmREb2NrRm9yRnVsbFNjcmVlbl07CiAgICAgTlNXaW5kb3cqIHdpbmRvdyA9IFtzZWxm
IHdpbmRvd107CiAgICAgW3dpbmRvdyBzZXRGcmFtZTpbW3dpbmRvdyBzY3JlZW5dIGZyYW1lXSBk
aXNwbGF5OllFU107CiB9CkBAIC0zNTMsMTcwICsxNzAsMTE0IEBAIHByaXZhdGU6CiAjcHJhZ21h
IG1hcmsgLQogI3ByYWdtYSBtYXJrIEV4cG9zZWQgSW50ZXJmYWNlCiAKLS0gKHZvaWQpZW50ZXJG
dWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgorLSAodm9pZCllbnRlckZ1bGxTY3JlZW46KE5T
U2NyZWVuICopc2NyZWVuCiB7Ci0gICAgLy8gRGlzYWJsZSBhbmltYXRpb24gaWYgd2UgYXJlIGFs
cmVhZHkgaW4gZnVsbC1zY3JlZW4gbW9kZS4KLSAgICBCT09MIHNob3VsZEFuaW1hdGUgPSAhX2lz
RnVsbHNjcmVlbjsKKyAgICBpZiAoX2lzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGlmIChfaXNBbmltYXRpbmcpIHsKLSAgICAgICAgLy8gVGhlIENBQW5pbWF0aW9uIGRl
bGVnYXRlIGZ1bmN0aW9ucyB3aWxsIG9ubHkgYmUgY2FsbGVkIHRoZQotICAgICAgICAvLyBuZXh0
IHRyaXAgdGhyb3VnaCB0aGUgcnVuLWxvb3AsIHNvIG1hbnVhbGx5IGNhbGwgdGhlIGRlbGVnYXRl
Ci0gICAgICAgIC8vIGZ1bmN0aW9uIGhlcmUsIGxldHRpbmcgaXQga25vdyB0aGUgYW5pbWF0aW9u
IGRpZCBub3QgY29tcGxldGU6Ci0gICAgICAgIFtzZWxmIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVu
Ok5PXTsKLSAgICAgICAgQVNTRVJUKCFfaXNBbmltYXRpbmcpOwotICAgIH0KLSAgICBfaXNGdWxs
c2NyZWVuID0gWUVTOworICAgIF9pc0Z1bGxTY3JlZW4gPSBZRVM7CiAgICAgX2lzQW5pbWF0aW5n
ID0gWUVTOwogICAgIAotICAgIC8vIHNldEVsZW1lbnQ6IG11c3QgYmUgY2FsbGVkIHdpdGggYSBu
b24tbmlsIHZhbHVlIGJlZm9yZSBjYWxsaW5nIGVudGVyRnVsbHNjcmVlbjouCi0gICAgQVNTRVJU
KF9lbGVtZW50KTsKLSAgICAKICAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAgICAgCiAg
ICAgaWYgKCFzY3JlZW4pCiAgICAgICAgIHNjcmVlbiA9IFtOU1NjcmVlbiBtYWluU2NyZWVuXTsK
ICAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKICAgICAKLSAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gW3NlbGYgd2ViVmlld107Ci0gICAgTlNSZWN0IHdlYlZpZXdGcmFtZSA9
IFt3ZWJWaWV3IGNvbnZlcnRSZWN0VG9CYXNlOlt3ZWJWaWV3IGZyYW1lXV07Ci0gICAgd2ViVmll
d0ZyYW1lLm9yaWdpbiA9IFtbd2ViVmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2Vi
Vmlld0ZyYW1lLm9yaWdpbl07Ci0gICAgCi0gICAgTlNSZWN0IGVsZW1lbnRGcmFtZSA9IF9lbGVt
ZW50LT5zY3JlZW5SZWN0KCk7Ci0gICAgCisgICAgTlNSZWN0IHdlYlZpZXdGcmFtZSA9IFtfd2Vi
VmlldyBjb252ZXJ0UmVjdFRvQmFzZTpbX3dlYlZpZXcgZnJhbWVdXTsKKyAgICB3ZWJWaWV3RnJh
bWUub3JpZ2luID0gW1tfd2ViVmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2ViVmll
d0ZyYW1lLm9yaWdpbl07CisgICAgICAgIAogICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbXVsdGkt
bW9uaXRvciBzZXR1cCB3aGVyZSB0aGUgd2ViVmlldyBzdHJhZGRsZXMgdHdvCiAgICAgLy8gbW9u
aXRvcnMsIHdlIG11c3QgY3JlYXRlIGEgd2luZG93IGxhcmdlIGVub3VnaCB0byBjb250YWluIHRo
ZSBkZXN0aW5hdGlvbgogICAgIC8vIGZyYW1lIGFuZCB0aGUgaW5pdGlhbCBmcmFtZS4KLSAgICBO
U1JlY3Qgd2luZG93RnJhbWUgPSBOU1VuaW9uUmVjdChzY3JlZW5GcmFtZSwgZWxlbWVudEZyYW1l
KTsKKyAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSBOU1VuaW9uUmVjdChzY3JlZW5GcmFtZSwgd2Vi
Vmlld0ZyYW1lKTsKICAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTp3aW5kb3dGcmFtZSBkaXNw
bGF5OllFU107CiAgICAgCi0gICAgLy8gSW4gYSBwcmV2aW91cyBpbmNhcm5hdGlvbiwgdGhlIE5T
V2luZG93IGF0dGFjaGVkIHRvIHRoaXMgY29udHJvbGxlciBtYXkgaGF2ZQotICAgIC8vIGJlZW4g
b24gYSBkaWZmZXJlbnQgc2NyZWVuLiBUZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGNvbGxlY3Rpb25C
ZWhhdmlvciBvZiB0aGUgd2luZG93OgotICAgIE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yIGJl
aGF2aW9yID0gW1tzZWxmIHdpbmRvd10gY29sbGVjdGlvbkJlaGF2aW9yXTsKLSAgICBbW3NlbGYg
d2luZG93XSBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6TlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JD
YW5Kb2luQWxsU3BhY2VzXTsKLSAgICBbW3NlbGYgd2luZG93XSBtYWtlS2V5QW5kT3JkZXJGcm9u
dDpzZWxmXTsKLSAgICBbW3NlbGYgd2luZG93XSBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6YmVoYXZp
b3JdOwotICAgIAotICAgIE5TVmlldyogYW5pbWF0aW9uVmlldyA9IFtbc2VsZiBfZnVsbHNjcmVl
bldpbmRvd10gYW5pbWF0aW9uVmlld107Ci0gICAgCi0gICAgTlNSZWN0IGJhY2tncm91bmRCb3Vu
ZHMgPSB7W1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzY3JlZW5GcmFtZS5vcmln
aW5dLCBzY3JlZW5GcmFtZS5zaXplfTsKLSAgICBiYWNrZ3JvdW5kQm91bmRzID0gW2FuaW1hdGlv
blZpZXcgY29udmVydFJlY3RGcm9tQmFzZTpiYWNrZ3JvdW5kQm91bmRzXTsKLSAgICAvLyBGbGlw
IHRoZSBiYWNrZ3JvdW5kIGxheWVyJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgYmFja2dyb3Vu
ZEJvdW5kcy5vcmlnaW4ueSA9IHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0IC0gTlNNYXhZKGJhY2tn
cm91bmRCb3VuZHMpOwotICAgIAotICAgIC8vIFNldCBvdXIgZnVsbHNjcmVlbiBlbGVtZW50J3Mg
aW5pdGlhbCBmcmFtZSwgYW5kIGZsaXAgdGhlIGNvb3JkaW5hdGUgc3lzdGVtcyBmcm9tCi0gICAg
Ly8gc2NyZWVuIGNvb3JkaW5hdGVzIChib3R0b20vbGVmdCkgdG8gbGF5ZXIgY29vcmRpbmF0ZXMg
KHRvcC9sZWZ0KToKLSAgICBfaW5pdGlhbEZyYW1lID0gTlNSZWN0VG9DR1JlY3QoTlNJbnRlcnNl
Y3Rpb25SZWN0KGVsZW1lbnRGcmFtZSwgd2ViVmlld0ZyYW1lKSk7Ci0gICAgX2luaXRpYWxGcmFt
ZS5vcmlnaW4ueSA9IHNjcmVlbkZyYW1lLnNpemUuaGVpZ2h0IC0gQ0dSZWN0R2V0TWF4WShfaW5p
dGlhbEZyYW1lKTsKLSAgICAKLSAgICAvLyBJbmZvcm0gdGhlIGRvY3VtZW50IHRoYXQgd2Ugd2ls
bCBiZWdpbiBlbnRlcmluZyBmdWxsIHNjcmVlbi4gVGhpcyB3aWxsIGNoYW5nZQotICAgIC8vIHBz
ZXVkby1jbGFzc2VzIG9uIHRoZSBmdWxsc2NyZWVuIGVsZW1lbnQgYW5kIHRoZSBkb2N1bWVudCBl
bGVtZW50LgotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFtzZWxmIF9kb2N1bWVudF07Ci0gICAg
ZG9jdW1lbnQtPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50Lmdl
dCgpKTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGZ1bGxzY3JlZW4gcmVuZGVy
ZXIgaXMgY29tcG9zaXRlZC4gSWYgbm90LCBhY2NlbGVyYXRlZCBncmFwaGljcyAKLSAgICAvLyBt
YXkgYmUgZGlzYWJsZWQuIEluIHRoaXMgY2FzZSwgZG8gbm90IGF0dGVtcHQgdG8gYW5pbWF0ZSB0
aGUgY29udGVudHMgaW50byBwbGFjZTsgCi0gICAgLy8gbWVyZWx5IHNuYXAgdG8gdGhlIGZpbmFs
IHBvc2l0aW9uOgotICAgIGlmICghc2hvdWxkQW5pbWF0ZSB8fCAhX3JlbmRlcmVyIHx8ICFfcmVu
ZGVyZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIFtzZWxmIHdpbmRvd0Rp
ZEVudGVyRnVsbHNjcmVlbjpZRVNdOwotICAgICAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0gICAgCi0gICAgCi0gICAgLy8gU2V0IHVwIHRoZSBmaW5h
bCBzdHlsZSBvZiB0aGUgRnVsbFNjcmVlbiByZW5kZXIgYmxvY2suIFNldCBhbiBhYnNvbHV0ZQot
ICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIHNjcmVlbiwg
YW5kIGFuY2hvciB0aGUgbGF5ZXIKLSAgICAvLyBhdCB0aGUgdG9wLCBsZWZ0IGF0ICgwLDApLiBU
aGUgUmVuZGVyRnVsbFNjcmVlbiBzdHlsZSBpcyBhbHJlYWR5IHNldCAKLSAgICAvLyB0byBwb3Np
dGlvbjpmaXhlZC4KLSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJT
aXplKEludFNpemUoc2NyZWVuRnJhbWUuc2l6ZSkpOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPnNl
dEZ1bGxTY3JlZW5SZW5kZXJlckJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwot
ICAgIAotICAgIC8vIENhdXNlIHRoZSBkb2N1bWVudCB0byBsYXlvdXQsIHRodXMgY2FsY3VsYXRp
bmcgYSBuZXcgZnVsbHNjcmVlbiBlbGVtZW50IHNpemU6Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+
dXBkYXRlTGF5b3V0KCk7CisgICAgQ0FMYXllciogYmFja2dyb3VuZExheWVyID0gW1tzZWxmIF9m
dWxsU2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5ZXJdOworICAgIE5TUmVjdCBiYWNrZ3JvdW5k
RnJhbWUgPSB7W1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpzY3JlZW5GcmFtZS5v
cmlnaW5dLCBzY3JlZW5GcmFtZS5zaXplfTsKKyAgICBiYWNrZ3JvdW5kRnJhbWUgPSBbW1tzZWxm
IHdpbmRvd10gY29udGVudFZpZXddIGNvbnZlcnRSZWN0RnJvbUJhc2U6YmFja2dyb3VuZEZyYW1l
XTsKICAgICAKLSAgICAvLyBGSVhNRTogdHJ5IHRvIHVzZSB0aGUgZnVsbHNjcmVlbiBlbGVtZW50
J3MgY2FsY3VsYXRlZCB4LCB5LCB3aWR0aCwgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIHRoZQotICAg
IC8vIHJlbmRlckJveCBmdW5jdGlvbnM6Ci0gICAgUmVuZGVyQm94KiBjaGlsZFJlbmRlcmVyID0g
X3JlbmRlcmVyLT5maXJzdENoaWxkQm94KCk7Ci0gICAgQ0dSZWN0IGRlc3RpbmF0aW9uRnJhbWUg
PSBDR1JlY3RNYWtlKGNoaWxkUmVuZGVyZXItPngoKSwgY2hpbGRSZW5kZXJlci0+eSgpLCBjaGls
ZFJlbmRlcmVyLT53aWR0aCgpLCBjaGlsZFJlbmRlcmVyLT5oZWlnaHQoKSk7ICAgIAotICAgIAot
ICAgIC8vIFNvbWUgcHJvcGVydGllcyBoYXZlbid0IHByb3BvZ2F0ZWQgZnJvbSB0aGUgR3JhcGhp
Y3NMYXllciB0byB0aGUgQ0FMYXllciB5ZXQuIFNvCi0gICAgLy8gdGVsbCB0aGUgcmVuZGVyZXIn
cyBsYXllciB0byBzeW5jIGl0J3MgY29tcG9zaXRpbmcgc3RhdGU6Ci0gICAgR3JhcGhpY3NMYXll
ciogcmVuZGVyZXJHcmFwaGljcyA9IF9yZW5kZXJlci0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFw
aGljc0xheWVyKCk7Ci0gICAgcmVuZGVyZXJHcmFwaGljcy0+c3luY0NvbXBvc2l0aW5nU3RhdGUo
KTsgICAgCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNl
dERpc2FibGVBY3Rpb25zOllFU107CisgICAgW2JhY2tncm91bmRMYXllciBzZXRGcmFtZTpiYWNr
Z3JvdW5kRnJhbWVdOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAgICBDQUxheWVy
KiByZW5kZXJlckxheWVyID0gcmVuZGVyZXJHcmFwaGljcy0+cGxhdGZvcm1MYXllcigpOwotICAg
IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gc2V0UmVuZGVyZXJMYXllcjpyZW5kZXJlckxheWVy
XTsgICAgCi0gICAgCiAgICAgQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0
aW9uRHVyYXRpb25dOworICAgIFtzZWxmIF9tYW5hZ2VyXS0+d2lsbEVudGVyRnVsbFNjcmVlbigp
OworICAgIFtzZWxmIF9tYW5hZ2VyXS0+YmVnaW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb24oZHVy
YXRpb24pOworfQogCi0gICAgLy8gQ3JlYXRlIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRoYXQg
d2lsbCB0cmFuc2Zvcm0gdGhlIHJlbmRlcmVyIGxheWVyIHN1Y2ggdGhhdCAKLSAgICAvLyB0aGUg
ZnVsbHNjcmVlbiBlbGVtZW50IGFwcGVhcnMgdG8gbW92ZSBmcm9tIGl0cyBzdGFydGluZyBwb3Np
dGlvbiBhbmQgc2l6ZSB0byBpdHMKLSAgICAvLyBmaW5hbCBvbmUuIFBlcmZvcm0gdGhlIHRyYW5z
Zm9ybWF0aW9uIGluIHR3byBzdGVwcywgdXNpbmcgdGhlIENBTGF5ZXIncyBtYXRyaXggCi0gICAg
Ly8gbWF0aCB0byBjYWxjdWxhdGUgdGhlIGVmZmVjdHMgb2YgZWFjaCBzdGVwOgotICAgIC8vIDEu
IEFwcGx5IGEgc2NhbGUgdHJhbmZvcm0gdG8gc2hyaW5rIHRoZSBhcHBhcmVudCBzaXplIG9mIHRo
ZSBsYXllciB0byB0aGUgb3JpZ2luYWwKLSAgICAvLyAgICBlbGVtZW50IHNjcmVlbiBzaXplLgot
ICAgIC8vIDIuIEFwcGx5IGEgdHJhbnNsYXRpb24gdHJhbnNmb3JtIHRvIG1vdmUgdGhlIHNocnVu
ayBsYXllciBpbnRvIHRoZSBzYW1lIHNjcmVlbiBwb3NpdGlvbgotICAgIC8vICAgIGFzIHRoZSBv
cmlnaW5hbCBlbGVtZW50LgotICAgIENBVHJhbnNmb3JtM0Qgc2hyaW5rVHJhbnNmb3JtID0gQ0FU
cmFuc2Zvcm0zRE1ha2VTY2FsZShfaW5pdGlhbEZyYW1lLnNpemUud2lkdGggLyBkZXN0aW5hdGlv
bkZyYW1lLnNpemUud2lkdGgsIF9pbml0aWFsRnJhbWUuc2l6ZS5oZWlnaHQgLyBkZXN0aW5hdGlv
bkZyYW1lLnNpemUuaGVpZ2h0LCAxKTsKLSAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06
c2hyaW5rVHJhbnNmb3JtXTsKLSAgICBDR1JlY3Qgc2hydW5rRGVzdGluYXRpb25GcmFtZSA9IFty
ZW5kZXJlckxheWVyIGNvbnZlcnRSZWN0OmRlc3RpbmF0aW9uRnJhbWUgdG9MYXllcjpbYW5pbWF0
aW9uVmlldyBsYXllcl1dOwotICAgIENBVHJhbnNmb3JtM0QgbW92ZVRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RNYWtlVHJhbnNsYXRpb24oX2luaXRpYWxGcmFtZS5vcmlnaW4ueCAtIHNocnVua0Rl
c3RpbmF0aW9uRnJhbWUub3JpZ2luLngsIF9pbml0aWFsRnJhbWUub3JpZ2luLnkgLSBzaHJ1bmtE
ZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi55LCAwKTsKLSAgICBDQVRyYW5zZm9ybTNEIGZpbmFsVHJh
bnNmb3JtID0gQ0FUcmFuc2Zvcm0zRENvbmNhdChzaHJpbmtUcmFuc2Zvcm0sIG1vdmVUcmFuc2Zv
cm0pOwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpmaW5hbFRyYW5zZm9ybV07Ci0K
LSAgICBDQUxheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3dd
IGJhY2tncm91bmRMYXllcl07CistICh2b2lkKWJlZ2FuRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9u
Cit7ICAgIAorICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW5dOyAgIAor
ICAgIFtzZWxmIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOworICAgIAorICAgIC8vIEluIGEgcHJl
dmlvdXMgaW5jYXJuYXRpb24sIHRoZSBOU1dpbmRvdyBhdHRhY2hlZCB0byB0aGlzIGNvbnRyb2xs
ZXIgbWF5IGhhdmUKKyAgICAvLyBiZWVuIG9uIGEgZGlmZmVyZW50IHNjcmVlbi4gVGVtcG9yYXJp
bHkgY2hhbmdlIHRoZSBjb2xsZWN0aW9uQmVoYXZpb3Igb2YgdGhlIHdpbmRvdzoKKyAgICBOU1dp
bmRvdyogZnVsbFNjcmVlbldpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgTlNXaW5kb3dDb2xs
ZWN0aW9uQmVoYXZpb3IgYmVoYXZpb3IgPSBbZnVsbFNjcmVlbldpbmRvdyBjb2xsZWN0aW9uQmVo
YXZpb3JdOworICAgIFtmdWxsU2NyZWVuV2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjpOU1dp
bmRvd0NvbGxlY3Rpb25CZWhhdmlvckNhbkpvaW5BbGxTcGFjZXNdOworICAgIFtmdWxsU2NyZWVu
V2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOworICAgIFtmdWxsU2NyZWVuV2luZG93
IHNldENvbGxlY3Rpb25CZWhhdmlvcjpiZWhhdmlvcl07CiAKICAgICAvLyBTdGFydCB0aGUgb3Bh
Y2l0eSBhbmltYXRpb24uIFdlIGNhbiB1c2UgaW1wbGljaXQgYW5pbWF0aW9ucyBoZXJlIGJlY2F1
c2Ugd2UgZG9uJ3QgY2FyZSB3aGVuCiAgICAgLy8gdGhlIGFuaW1hdGlvbiBmaW5pc2hlcy4KICAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9u
RHVyYXRpb246ZHVyYXRpb25dOwotICAgIFtiYWNrZ3JvdW5kTGF5ZXIgc2V0T3BhY2l0eToxXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjpbc2VsZiBfYW5pbWF0aW9u
RHVyYXRpb25dXTsKKyAgICBbW1tzZWxmIF9mdWxsU2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5
ZXJdIHNldE9wYWNpdHk6MV07CiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLSAgICAKLSAg
ICAvLyBVc2UgYSBDQUJhc2ljQW5pbWF0aW9uIGhlcmUgZm9yIHRoZSB6b29tIGVmZmVjdC4gV2Ug
d2FudCB0byBiZSBub3RpZmllZCB0aGF0IHRoZSBhbmltYXRpb24gaGFzIAotICAgIC8vIGNvbXBs
ZXRlZCBieSB3YXkgb2YgdGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlLgotICAgIENBQmFzaWNBbmlt
YXRpb24qIHpvb21BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5
UGF0aDpAInRyYW5zZm9ybSJdOwotICAgIFt6b29tQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpbTlNW
YWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOmZpbmFsVHJhbnNmb3JtXV07Ci0gICAgW3pvb21B
bmltYXRpb24gc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJh
bnNmb3JtM0RJZGVudGl0eV1dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZd
OwotICAgIFt6b29tQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBbem9vbUFu
aW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbjpbQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uIGZ1bmN0aW9u
V2l0aE5hbWU6a0NBTWVkaWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VPdXRdXTsKLSAgICBbem9v
bUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUZvcndhcmRzXTsKLSAgICBbem9vbUFu
aW1hdGlvbiBzZXRWYWx1ZTooaWQpa0NGQm9vbGVhblRydWUgZm9yS2V5OmlzRW50ZXJpbmdGdWxs
c2NyZWVuS2V5XTsKLSAgICAKLSAgICAvLyBEaXNhYmxlIGltcGxpY2l0IGFuaW1hdGlvbnMgYW5k
IHNldCB0aGUgbGF5ZXIncyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gaXRzIGZpbmFsIHN0YXRl
LgotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNh
YmxlQWN0aW9uczpZRVNdOwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5z
Zm9ybTNESWRlbnRpdHldOwotICAgIFtyZW5kZXJlckxheWVyIGFkZEFuaW1hdGlvbjp6b29tQW5p
bWF0aW9uIGZvcktleTpAInpvb20iXTsKLSAgICBbYmFja2dyb3VuZExheWVyIHNldEZyYW1lOk5T
UmVjdFRvQ0dSZWN0KGJhY2tncm91bmRCb3VuZHMpXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21t
aXRdOwotICAgIAorCiAgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgX2lzQW5pbWF0
aW5nID0gWUVTOwogfQogCi0tICh2b2lkKWV4aXRGdWxsc2NyZWVuCistICh2b2lkKWZpbmlzaGVk
RW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogewotICAgIGlmICghX2lz
RnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOyAgICAKLSAgICAgIAotICAgIENBVHJhbnNmb3Jt
M0Qgc3RhcnRUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNESWRlbnRpdHk7Ci0gICAgaWYgKF9pc0Fu
aW1hdGluZykgewotICAgICAgICBpZiAoX3JlbmRlcmVyICYmIF9yZW5kZXJlci0+bGF5ZXIoKS0+
aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIENBTGF5ZXIqIHJlbmRlcmVyTGF5ZXIgPSBf
cmVuZGVyZXItPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpLT5wbGF0Zm9ybUxh
eWVyKCk7Ci0gICAgICAgICAgICBzdGFydFRyYW5zZm9ybSA9IFtbcmVuZGVyZXJMYXllciBwcmVz
ZW50YXRpb25MYXllcl0gdHJhbnNmb3JtXTsKLSAgICAgICAgfQorICAgIE5TRGlzYWJsZVNjcmVl
blVwZGF0ZXMoKTsKKyAgICAKKyAgICBpZiAoY29tcGxldGVkKSB7ICAgICAgICAgICAgICAgIAor
ICAgICAgICAvLyBTd2FwIHRoZSB3ZWJWaWV3IHBsYWNlaG9sZGVyIGludG8gcGxhY2UuCisgICAg
ICAgIGlmICghX3dlYlZpZXdQbGFjZWhvbGRlcikKKyAgICAgICAgICAgIF93ZWJWaWV3UGxhY2Vo
b2xkZXIuYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5pdF0pOyAgICAgICAgCisgICAgICAgIFtz
ZWxmIF9zd2FwVmlldzpfd2ViVmlldyB3aXRoOl93ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCldOwor
ICAgICAgICAKKyAgICAgICAgLy8gVGhlbiBpbnNlcnQgdGhlIFdlYlZpZXcgaW50byB0aGUgZnVs
bCBzY3JlZW4gd2luZG93CisgICAgICAgIE5TVmlldyogYW5pbWF0aW9uVmlldyA9IFtbc2VsZiBf
ZnVsbFNjcmVlbldpbmRvd10gYW5pbWF0aW9uVmlld107CisgICAgICAgIFthbmltYXRpb25WaWV3
IGFkZFN1YnZpZXc6X3dlYlZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86
X2xheWVySG9zdGluZ1ZpZXcuZ2V0KCldOworICAgICAgICBbX3dlYlZpZXcgc2V0RnJhbWU6W2Fu
aW1hdGlvblZpZXcgYm91bmRzXV07CiAgICAgICAgIAotICAgICAgICAvLyBUaGUgQ0FBbmltYXRp
b24gZGVsZWdhdGUgZnVuY3Rpb25zIHdpbGwgb25seSBiZSBjYWxsZWQgdGhlCi0gICAgICAgIC8v
IG5leHQgdHJpcCB0aHJvdWdoIHRoZSBydW4tbG9vcCwgc28gbWFudWFsbHkgY2FsbCB0aGUgZGVs
ZWdhdGUKLSAgICAgICAgLy8gZnVuY3Rpb24gaGVyZSwgbGV0dGluZyBpdCBrbm93IHRoZSBhbmlt
YXRpb24gZGlkIG5vdCBjb21wbGV0ZToKLSAgICAgICAgW3NlbGYgd2luZG93RGlkRW50ZXJGdWxs
c2NyZWVuOk5PXTsKLSAgICAgICAgQVNTRVJUKCFfaXNBbmltYXRpbmcpOworICAgICAgICAvLyBG
SVhNRTogSW4gQmFyb2xvLCBvcmRlckluIHdpbGwgYW5pbWF0ZSwgd2hpY2ggaXMgbm90IHdoYXQg
d2Ugd2FudC4gIEZpbmQgYSB3YXkKKyAgICAgICAgLy8gdG8gd29yayBhcm91bmQgdGhpcyBiZWhh
dmlvci4KKyAgICAgICAgLy9bW193ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCkgd2luZG93XSBvcmRl
ck91dDpzZWxmXTsKKyAgICAgICAgW1tzZWxmIHdpbmRvd10gbWFrZUtleUFuZE9yZGVyRnJvbnQ6
c2VsZl07CiAgICAgfQotICAgIF9pc0Z1bGxzY3JlZW4gPSBOTzsKKyAgICAKKyAgICBbc2VsZiBf
bWFuYWdlcl0tPmRpZEVudGVyRnVsbFNjcmVlbigpOworICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRl
cygpOworICAgIAorICAgIF9pc0FuaW1hdGluZyA9IE5POworfQorCistICh2b2lkKWV4aXRGdWxs
U2NyZWVuCit7CisgICAgaWYgKCFfaXNGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgX2lzRnVsbFNjcmVlbiA9IE5POwogICAgIF9pc0FuaW1hdGluZyA9IFlFUzsKICAgICAK
ICAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAgICAgCi0gICAgLy8gVGhlIHVzZXIgbWF5
IGhhdmUgbW92ZWQgdGhlIGZ1bGxzY3JlZW4gd2luZG93IGluIFNwYWNlcywgc28gdGVtcG9yYXJp
bHkgY2hhbmdlIAorICAgIFtzZWxmIF9tYW5hZ2VyXS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Cisg
ICAgW3NlbGYgX21hbmFnZXJdLT5iZWdpbkV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uKFtzZWxmIF9h
bmltYXRpb25EdXJhdGlvbl0pOworfQorCistICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5Bbmlt
YXRpb24KK3sgICAKKyAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsU2NyZWVuXTsg
ICAKKyAgICBbc2VsZiBfdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKKyAgICAKKyAgICAvLyBUaGUg
dXNlciBtYXkgaGF2ZSBtb3ZlZCB0aGUgZnVsbFNjcmVlbiB3aW5kb3cgaW4gU3BhY2VzLCBzbyB0
ZW1wb3JhcmlseSBjaGFuZ2UgCiAgICAgLy8gdGhlIGNvbGxlY3Rpb25CZWhhdmlvciBvZiB0aGUg
d2ViVmlldydzIHdpbmRvdzoKICAgICBOU1dpbmRvdyogd2ViV2luZG93ID0gW1tzZWxmIHdlYlZp
ZXddIHdpbmRvd107CiAgICAgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3IgYmVoYXZpb3IgPSBb
d2ViV2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl07CkBAIC01MjQsMTI0ICsyODUsMTA5IEBAIHBy
aXZhdGU6CiAgICAgW3dlYldpbmRvdyBvcmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJlbGF0aXZl
VG86W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXV07CiAgICAgW3dlYldpbmRvdyBzZXRDb2xs
ZWN0aW9uQmVoYXZpb3I6YmVoYXZpb3JdOwogICAgIAotICAgIC8vIFRoZSBmdWxsc2NyZWVuIGFu
aW1hdGlvbiBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCBiZWZvcmUgdGhlIAotICAgIC8vIHdlYlZp
ZXcgd2FzIG1vdmVkIHRvIHRoZSBmdWxsc2NyZWVuIHdpbmRvdy4gQ2hlY2sgdG8gc2VlCi0gICAg
Ly8gaWYgdGhlIF9wbGFjZWhvbGRlclZpZXcgZXhpc3RzIGFuZCBpcyBpbiBhIHdpbmRvdyBiZWZv
cmUKLSAgICAvLyBhdHRlbXB0aW5nIHRvIHN3YXAgdGhlIHdlYlZpZXcgYmFjayB0byBpdCdzIG9y
aWdpbmFsIHRyZWU6Ci0gICAgaWYgKF9wbGFjZWhvbGRlclZpZXcgJiYgW19wbGFjZWhvbGRlclZp
ZXcgd2luZG93XSkgewotICAgICAgICAvLyBNb3ZlIHRoZSB3ZWJWaWV3IGJhY2sgdG8gaXRzIG93
biBuYXRpdmUgd2luZG93OgotICAgICAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gW3NlbGYgd2ViVmll
d107Ci0gICAgICAgIFt3ZWJWaWV3IHNldEZyYW1lOltfcGxhY2Vob2xkZXJWaWV3IGZyYW1lXV07
Ci0gICAgICAgIFt3ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6W19wbGFjZWhvbGRlclZpZXcg
YXV0b3Jlc2l6aW5nTWFza11dOwotICAgICAgICBbd2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKLSAgICAgICAgW1tfcGxhY2Vob2xkZXJWaWV3IHN1cGVydmlld10gcmVwbGFjZVN1YnZpZXc6
X3BsYWNlaG9sZGVyVmlldyB3aXRoOndlYlZpZXddOwotICAgICAgICAKLSAgICAgICAgLy8gQmVj
YXVzZSB0aGUgYW5pbWF0aW9uIHZpZXcgaXMgbGF5ZXItaG9zdGVkLCBtYWtlIHN1cmUgdG8gCi0g
ICAgICAgIC8vIGRpc2FibGUgYW5pbWF0aW9ucyB3aGVuIGNoYW5naW5nIHRoZSBsYXllcidzIG9w
YWNpdHkuIE90aGVyLQotICAgICAgICAvLyB3aXNlLCB0aGUgY29udGVudCB3aWxsIGFwcGVhciB0
byBmYWRlIGludG8gdmlldy4KLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgICAgICBXZWJGdWxs
c2NyZWVuV2luZG93KiB3aW5kb3cgPSBbc2VsZiBfZnVsbHNjcmVlbldpbmRvd107Ci0gICAgICAg
IFtbW3dpbmRvdyBhbmltYXRpb25WaWV3XSBsYXllcl0gc2V0T3BhY2l0eToxXTsKLSAgICAgICAg
W3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOwotICAgICAg
ICBbd2luZG93IHNldE9wYXF1ZTpOT107Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
Ci0gICAgfQotCi0gICAgTlNWaWV3KiBhbmltYXRpb25WaWV3ID0gW1tzZWxmIF9mdWxsc2NyZWVu
V2luZG93XSBhbmltYXRpb25WaWV3XTsKLSAgICBDR1JlY3QgbGF5ZXJFbmRGcmFtZSA9IE5TUmVj
dFRvQ0dSZWN0KFthbmltYXRpb25WaWV3IGNvbnZlcnRSZWN0Ok5TUmVjdEZyb21DR1JlY3QoX2lu
aXRpYWxGcmFtZSkgZnJvbVZpZXc6bmlsXSk7Ci0KLSAgICAvLyBUaGUgX3JlbmRlcmVyIG1pZ2h0
IGJlIE5VTEwgZHVlIHRvIGl0cyBhbmNlc3RvciBiZWluZyByZW1vdmVkOgotICAgIENHUmVjdCBs
YXllclN0YXJ0RnJhbWUgPSBDR1JlY3RaZXJvOwotICAgIGlmIChfcmVuZGVyZXIpIHsKLSAgICAg
ICAgUmVuZGVyQm94KiBjaGlsZFJlbmRlcmVyID0gX3JlbmRlcmVyLT5maXJzdENoaWxkQm94KCk7
Ci0gICAgICAgIGxheWVyU3RhcnRGcmFtZSA9IENHUmVjdE1ha2UoY2hpbGRSZW5kZXJlci0+eCgp
LCBjaGlsZFJlbmRlcmVyLT55KCksIGNoaWxkUmVuZGVyZXItPndpZHRoKCksIGNoaWxkUmVuZGVy
ZXItPmhlaWdodCgpKTsKLSAgICB9CisgICAgLy8gU3dhcCB0aGUgd2ViVmlldyBiYWNrIGludG8g
aXRzIG9yaWdpbmFsIHBvc2l0aW9uOgorICAgIFtzZWxmIF9zd2FwVmlldzpfd2ViVmlld1BsYWNl
aG9sZGVyLmdldCgpIHdpdGg6X3dlYlZpZXddOwogICAgIAotICAgIFtzZWxmIF9kb2N1bWVudF0t
PndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOwotICAg
IFtzZWxmIF9kb2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOworICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlvbjpbc2VsZiBfYW5p
bWF0aW9uRHVyYXRpb25dXTsKKyAgICBbW1tzZWxmIF9mdWxsU2NyZWVuV2luZG93XSBiYWNrZ3Jv
dW5kTGF5ZXJdIHNldE9wYWNpdHk6MF07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKICAg
ICAKLSAgICAvLyBXZSBoYXZlIHRvIHJldGFpbiBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRv
IGJlIGFsaXZlIGZvciB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uCi0gICAgLy8gSWYgb3VyIG93
bmVyIHJlbGVhc2VzIHVzIHdlIGNvdWxkIGNyYXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgot
ICAgIC8vIEJhbGFuY2VkIGluIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuCi0gICAgW3NlbGYgcmV0
YWluXTsKKyAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsKKyAgICBfaXNBbmltYXRpbmcgPSBZ
RVM7Cit9CisKKy0gKHZvaWQpZmluaXNoZWRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbClj
b21wbGV0ZWQKK3sKKyAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAgICAgCi0gICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoZSBmdWxsc2NyZWVuIHJlbmRlcmVyIGlzIGNvbXBvc2l0ZWQuIElm
IG5vdCwgYWNjZWxlcmF0ZWQgZ3JhcGhpY3MgCi0gICAgLy8gbWF5IGJlIGRpc2FibGVkLiBJbiB0
aGlzIGNhc2UsIGRvIG5vdCBhdHRlbXB0IHRvIGFuaW1hdGUgdGhlIGNvbnRlbnRzIGludG8gcGxh
Y2U7IAotICAgIC8vIG1lcmVseSBzbmFwIHRvIHRoZSBmaW5hbCBwb3NpdGlvbjoKLSAgICBpZiAo
IV9yZW5kZXJlciB8fCAhX3JlbmRlcmVyLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkgewotICAg
ICAgICBbc2VsZiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjpZRVNdOwotICAgICAgICBOU0VuYWJs
ZVNjcmVlblVwZGF0ZXMoKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChjb21wbGV0ZWQpIHsK
KyAgICAgICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbFNjcmVlbl07CisgICAgICAg
IFtzZWxmIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOworICAgICAgICBbTlNDdXJzb3Igc2V0SGlk
ZGVuVW50aWxNb3VzZU1vdmVzOllFU107CisgICAgICAgICAgICAgICAgCisgICAgICAgIFtbc2Vs
ZiB3aW5kb3ddIG9yZGVyT3V0OnNlbGZdOworICAgICAgICBbW193ZWJWaWV3IHdpbmRvd10gbWFr
ZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07CiAgICAgfQotICAgICAgICAKLSAgICBHcmFwaGljc0xh
eWVyKiByZW5kZXJlckdyYXBoaWNzID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5nKCktPmdy
YXBoaWNzTGF5ZXIoKTsKLSAgICAKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVu
UmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLQotICAgIHJlbmRl
cmVyR3JhcGhpY3MtPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7ICAgIAotCi0gICAgQ0FMYXllciog
cmVuZGVyZXJMYXllciA9IHJlbmRlcmVyR3JhcGhpY3MtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBb
W3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIHNldFJlbmRlcmVyTGF5ZXI6cmVuZGVyZXJMYXllcl07
ICAgIAotICAgIAotICAgIC8vIENyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0IHdp
bGwgdHJhbnNmb3JtIHRoZSByZW5kZXJlciBsYXllciBzdWNoIHRoYXQgCi0gICAgLy8gdGhlIGZ1
bGxzY3JlZW4gZWxlbWVudCBhcHBlYXJzIHRvIG1vdmUgZnJvbSB0aGUgZnVsbCBzY3JlZW4gdG8g
aXRzIG9yaWdpbmFsIHBvc2l0aW9uIAotICAgIC8vIGFuZCBzaXplLiBQZXJmb3JtIHRoZSB0cmFu
c2Zvcm1hdGlvbiBpbiB0d28gc3RlcHMsIHVzaW5nIHRoZSBDQUxheWVyJ3MgbWF0cml4IAotICAg
IC8vIG1hdGggdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3RzIG9mIGVhY2ggc3RlcDoKLSAgICAvLyAx
LiBBcHBseSBhIHNjYWxlIHRyYW5mb3JtIHRvIHNocmluayB0aGUgYXBwYXJlbnQgc2l6ZSBvZiB0
aGUgbGF5ZXIgdG8gdGhlIG9yaWdpbmFsCi0gICAgLy8gICAgZWxlbWVudCBzY3JlZW4gc2l6ZS4K
LSAgICAvLyAyLiBBcHBseSBhIHRyYW5zbGF0aW9uIHRyYW5zZm9ybSB0byBtb3ZlIHRoZSBzaHJ1
bmsgbGF5ZXIgaW50byB0aGUgc2FtZSBzY3JlZW4gcG9zaXRpb24KLSAgICAvLyAgICBhcyB0aGUg
b3JpZ2luYWwgZWxlbWVudC4KLSAgICBDQVRyYW5zZm9ybTNEIHNocmlua1RyYW5zZm9ybSA9IENB
VHJhbnNmb3JtM0RNYWtlU2NhbGUobGF5ZXJFbmRGcmFtZS5zaXplLndpZHRoIC8gbGF5ZXJTdGFy
dEZyYW1lLnNpemUud2lkdGgsIGxheWVyRW5kRnJhbWUuc2l6ZS5oZWlnaHQgLyBsYXllclN0YXJ0
RnJhbWUuc2l6ZS5oZWlnaHQsIDEpOwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpz
aHJpbmtUcmFuc2Zvcm1dOwotICAgIENHUmVjdCBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lID0gW3Jl
bmRlcmVyTGF5ZXIgY29udmVydFJlY3Q6bGF5ZXJTdGFydEZyYW1lIHRvTGF5ZXI6W2FuaW1hdGlv
blZpZXcgbGF5ZXJdXTsKLSAgICBDQVRyYW5zZm9ybTNEIG1vdmVUcmFuc2Zvcm0gPSBDQVRyYW5z
Zm9ybTNETWFrZVRyYW5zbGF0aW9uKGxheWVyRW5kRnJhbWUub3JpZ2luLnggLSBzaHJ1bmtEZXN0
aW5hdGlvbkZyYW1lLm9yaWdpbi54LCBsYXllckVuZEZyYW1lLm9yaWdpbi55IC0gc2hydW5rRGVz
dGluYXRpb25GcmFtZS5vcmlnaW4ueSwgMCk7Ci0gICAgQ0FUcmFuc2Zvcm0zRCBmaW5hbFRyYW5z
Zm9ybSA9IENBVHJhbnNmb3JtM0RDb25jYXQoc2hyaW5rVHJhbnNmb3JtLCBtb3ZlVHJhbnNmb3Jt
KTsKLSAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06ZmluYWxUcmFuc2Zvcm1dOworICAg
IAorICAgIFtzZWxmIF9tYW5hZ2VyXS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICBOU0VuYWJs
ZVNjcmVlblVwZGF0ZXMoKTsKKyAgICAKKyAgICBfaXNBbmltYXRpbmcgPSBOTzsKK30KIAotICAg
IENGVGltZUludGVydmFsIGR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXTsKKy0g
KHZvaWQpZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZTooY29uc3QgV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0JilsYXllclRyZWVDb250ZXh0Cit7CisgICAgaWYgKF9sYXllckhvc3RpbmdW
aWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICBDQUxheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBb
W3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIGJhY2tncm91bmRMYXllcl07CisgICAgQVNTRVJUKCFs
YXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gQ3JlYXRlIGFuIE5TVmll
dyB0aGF0IHdpbGwgaG9zdCBvdXIgbGF5ZXIgdHJlZS4KKyAgICBfbGF5ZXJIb3N0aW5nVmlldy5h
ZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltbc2VsZiB3aW5kb3ddIGZyYW1l
XV0pOworICAgIFtfbGF5ZXJIb3N0aW5nVmlldy5nZXQoKSBzZXRBdXRvcmVzaXppbmdNYXNrOk5T
Vmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOworICAgIAogICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlv
bjpkdXJhdGlvbl07Ci0gICAgW2JhY2tncm91bmRMYXllciBzZXRPcGFjaXR5OjBdOwotICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlv
bnM6WUVTXTsKKyAgICBbW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGFkZFN1YnZpZXc6X2xh
eWVySG9zdGluZ1ZpZXcuZ2V0KCldOwogICAgIAotICAgIENBQmFzaWNBbmltYXRpb24qIHpvb21B
bmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInRyYW5z
Zm9ybSJdOwotICAgIFt6b29tQW5pbWF0aW9uIHNldEZyb21WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdp
dGhDQVRyYW5zZm9ybTNEOnN0YXJ0VHJhbnNmb3JtXV07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0
VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOmZpbmFsVHJhbnNmb3JtXV07
Ci0gICAgW3pvb21BbmltYXRpb24gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW3pvb21BbmltYXRp
b24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldFRpbWluZ0Z1
bmN0aW9uOltDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FNZWRpYVRp
bWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF1dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldEZpbGxN
b2RlOmtDQUZpbGxNb2RlQm90aF07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29t
cGxldGlvbjpOT107Ci0gICAgW3pvb21BbmltYXRpb24gc2V0VmFsdWU6KGlkKWtDRkJvb2xlYW5G
YWxzZSBmb3JLZXk6aXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXldOworICAgIC8vIENyZWF0ZSBhIHJv
b3QgbGF5ZXIgdGhhdCB3aWxsIGJhY2sgdGhlIE5TVmlldy4KKyAgICBSZXRhaW5QdHI8Q0FMYXll
cj4gcm9vdExheWVyKEFkb3B0TlMsIFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworI2lmbmRlZiBO
REVCVUcKKyAgICBbcm9vdExheWVyLmdldCgpIHNldE5hbWU6QCJIb3N0aW5nIHJvb3QgbGF5ZXIi
XTsKKyNlbmRpZgogICAgIAotICAgIFtyZW5kZXJlckxheWVyIGFkZEFuaW1hdGlvbjp6b29tQW5p
bWF0aW9uIGZvcktleTpAInpvb20iXTsKKyAgICBDQUxheWVyICpyZW5kZXJMYXllciA9IFdLTWFr
ZVJlbmRlckxheWVyKGxheWVyVHJlZUNvbnRleHQuY29udGV4dElEKTsKKyAgICBbcm9vdExheWVy
LmdldCgpIGFkZFN1YmxheWVyOnJlbmRlckxheWVyXTsKICAgICAKLSAgICBOU0VuYWJsZVNjcmVl
blVwZGF0ZXMoKTsKKyAgICBbX2xheWVySG9zdGluZ1ZpZXcuZ2V0KCkgc2V0TGF5ZXI6cm9vdExh
eWVyLmdldCgpXTsKKyAgICBbX2xheWVySG9zdGluZ1ZpZXcuZ2V0KCkgc2V0V2FudHNMYXllcjpZ
RVNdOworICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKKy0gKHZvaWQpZXhp
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlCit7CisgICAgaWYgKCFfbGF5ZXJIb3N0aW5nVmll
dykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFtfbGF5ZXJIb3N0aW5nVmlldy5nZXQoKSBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbX2xheWVySG9zdGluZ1ZpZXcuZ2V0KCkgc2V0TGF5
ZXI6bmlsXTsKKyAgICBbX2xheWVySG9zdGluZ1ZpZXcuZ2V0KCkgc2V0V2FudHNMYXllcjpOT107
CisgICAgCisgICAgX2xheWVySG9zdGluZ1ZpZXcgPSAwOworfQorCistICh2b2lkKWdldEZ1bGxT
Y3JlZW5SZWN0OihXZWJDb3JlOjpJbnRSZWN0KilyZWN0Cit7CisgICAgQVNTRVJUKHJlY3QpOwor
ICAgIE5TUmVjdCB3aW5kb3dGcmFtZSA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKyAgICByZWN0
LT5zZXRYKHJvdW5kbChOU01pblgod2luZG93RnJhbWUpKSk7CisgICAgcmVjdC0+c2V0WShyb3Vu
ZGwoTlNNaW5ZKHdpbmRvd0ZyYW1lKSkpOworICAgIHJlY3QtPnNldFdpZHRoKHJvdW5kbChOU1dp
ZHRoKHdpbmRvd0ZyYW1lKSkpOworICAgIHJlY3QtPnNldEhlaWdodChyb3VuZGwoTlNIZWlnaHQo
d2luZG93RnJhbWUpKSk7CiB9CiAKICNwcmFnbWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgSW50ZXJu
YWwgSW50ZXJmYWNlCiAKLS0gKHZvaWQpX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgor
LSAodm9pZClfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsU2NyZWVuCiB7CiAgICAgLy8gTlNBcHBs
aWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgaXMgYXZhaWxhYmxlIG9uID4gMTAuNiBvbmx5Ogog
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQogICAgIE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25PcHRpb25zIG9wdGlvbnMgPSBO
U0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uRGVmYXVsdDsKLSAgICBOU1NjcmVlbiogZnVsbHNjcmVl
blNjcmVlbiA9IFtbc2VsZiB3aW5kb3ddIHNjcmVlbl07CisgICAgTlNTY3JlZW4qIGZ1bGxTY3Jl
ZW5TY3JlZW4gPSBbW3NlbGYgd2luZG93XSBzY3JlZW5dOwogICAgIAotICAgIGlmIChfaXNGdWxs
c2NyZWVuKSB7Ci0gICAgICAgIC8vIEF1dG8taGlkZSB0aGUgbWVudSBiYXIgaWYgdGhlIGZ1bGxz
Y3JlZW5TY3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyOgotICAgICAgICAvLyBOT1RFOiBpZiB0
aGUgZnVsbHNjcmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVudSBiYXIgYnV0IG5vdCB0aGUgZG9j
aywgd2UgbXVzdCBzdGlsbCAKKyAgICBpZiAoX2lzRnVsbFNjcmVlbikgeworICAgICAgICAvLyBB
dXRvLWhpZGUgdGhlIG1lbnUgYmFyIGlmIHRoZSBmdWxsU2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRo
ZSBtZW51IGJhcjoKKyAgICAgICAgLy8gTk9URTogaWYgdGhlIGZ1bGxTY3JlZW5TY3JlZW4gY29u
dGFpbnMgdGhlIG1lbnUgYmFyIGJ1dCBub3QgdGhlIGRvY2ssIHdlIG11c3Qgc3RpbGwgCiAgICAg
ICAgIC8vIGF1dG8taGlkZSB0aGUgZG9jaywgb3IgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3du
LgotICAgICAgICBpZiAoW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdID09IGZ1
bGxzY3JlZW5TY3JlZW4pCisgICAgICAgIGlmIChbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0
SW5kZXg6MF0gPT0gZnVsbFNjcmVlblNjcmVlbikKICAgICAgICAgICAgIG9wdGlvbnMgfD0gKE5T
QXBwbGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZU1lbnVCYXIgfCBOU0FwcGxpY2F0aW9uUHJl
c2VudGF0aW9uQXV0b0hpZGVEb2NrKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQg
c2NyZWVuIGNvbnRhaW5zIHRoZSBkb2NrIGJ5IGNvbXBhcmluZyB0aGUgc2NyZWVuJ3MgZnJhbWUg
dG8gaXRzCiAgICAgICAgIC8vIHZpc2libGVGcmFtZTsgaWYgYSBkb2NrIGlzIHByZXNlbnQsIHRo
ZSB2aXNpYmxlRnJhbWUgd2lsbCBkaWZmZXIuIElmIHRoZSBjdXJyZW50IHNjcmVlbgogICAgICAg
ICAvLyBjb250YWlucyB0aGUgZG9jaywgaGlkZSBpdC4KLSAgICAgICAgZWxzZSBpZiAoIU5TRXF1
YWxSZWN0cyhbZnVsbHNjcmVlblNjcmVlbiBmcmFtZV0sIFtmdWxsc2NyZWVuU2NyZWVuIHZpc2li
bGVGcmFtZV0pKQorICAgICAgICBlbHNlIGlmICghTlNFcXVhbFJlY3RzKFtmdWxsU2NyZWVuU2Ny
ZWVuIGZyYW1lXSwgW2Z1bGxTY3JlZW5TY3JlZW4gdmlzaWJsZUZyYW1lXSkpCiAgICAgICAgICAg
ICBvcHRpb25zIHw9IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25BdXRvSGlkZURvY2s7CiAgICAg
fQogICAgIApAQCAtNjQ5LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFtOU0FwcCBzZXRQ
cmVzZW50YXRpb25PcHRpb25zOm9wdGlvbnNdOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBT
ZXRTeXN0ZW1VSU1vZGUoX2lzRnVsbHNjcmVlbiA/IGtVSU1vZGVOb3JtYWwgOiBrVUlNb2RlQWxs
SGlkZGVuLCAwKTsKKyAgICAgICAgU2V0U3lzdGVtVUlNb2RlKF9pc0Z1bGxTY3JlZW4gPyBrVUlN
b2RlTm9ybWFsIDoga1VJTW9kZUFsbEhpZGRlbiwgMCk7CiB9CiAKICNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgLy8gSU9QTUFzc2VydGlvbkNyZWF0ZVdpdGhOYW1lIG5vdCBkZWZpbmVk
IG9uIDwgMTAuNQpAQCAtNjU5LDcgKzQwNSw3IEBAIHByaXZhdGU6CiAjaWYgZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKSAvLyBJT1BNQXNzZXJ0aW9uQ3JlYXRlV2l0aE5hbWUgaXMgbm90IGRl
ZmluZWQgaW4gdGhlIDEwLjUgU0RLCiAgICAgICAgIElPUE1Bc3NlcnRpb25DcmVhdGUoa0lPUE1B
c3NlcnRpb25UeXBlTm9EaXNwbGF5U2xlZXAsIGtJT1BNQXNzZXJ0aW9uTGV2ZWxPbiwgJl9pZGxl
RGlzcGxheVNsZWVwQXNzZXJ0aW9uKTsKICNlbHNlIC8vIElPUE1Bc3NlcnRpb25DcmVhdGUgaXMg
ZGVwcmVjaWF0ZWQgaW4gPiAxMC41Ci0gICAgICAgIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFt
ZShrSU9QTUFzc2VydGlvblR5cGVOb0Rpc3BsYXlTbGVlcCwga0lPUE1Bc3NlcnRpb25MZXZlbE9u
LCBDRlNUUigiV2ViS2l0IHBsYXlpbmcgYSB2aWRlbyBmdWxsc2NyZWVuLiIpLCAmX2lkbGVEaXNw
bGF5U2xlZXBBc3NlcnRpb24pOworICAgIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZShrSU9Q
TUFzc2VydGlvblR5cGVOb0Rpc3BsYXlTbGVlcCwga0lPUE1Bc3NlcnRpb25MZXZlbE9uLCBDRlNU
UigiV2ViS2l0IHBsYXlpbmcgYSB2aWRlbyBmdWxsU2NyZWVuLiIpLCAmX2lkbGVEaXNwbGF5U2xl
ZXBBc3NlcnRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTY3Nyw3ICs0MjMsNyBAQCBwcml2YXRlOgog
I2lmIGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgLy8gSU9QTUFzc2VydGlvbkNyZWF0ZVdp
dGhOYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZSAxMC41IFNESwogICAgICAgICBJT1BNQXNzZXJ0
aW9uQ3JlYXRlKGtJT1BNQXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBrSU9QTUFzc2VydGlvbkxl
dmVsT24sICZfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uKTsKICNlbHNlIC8vIElPUE1Bc3NlcnRp
b25DcmVhdGUgaXMgZGVwcmVjaWF0ZWQgaW4gPiAxMC41Ci0gICAgSU9QTUFzc2VydGlvbkNyZWF0
ZVdpdGhOYW1lKGtJT1BNQXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBrSU9QTUFzc2VydGlvbkxl
dmVsT24sIENGU1RSKCJXZWJLaXQgcGxheWluZyBhIHZpZGVvIGZ1bGxzY3JlZW4uIiksICZfaWRs
ZVN5c3RlbVNsZWVwQXNzZXJ0aW9uKTsKKyAgICBJT1BNQXNzZXJ0aW9uQ3JlYXRlV2l0aE5hbWUo
a0lPUE1Bc3NlcnRpb25UeXBlTm9JZGxlU2xlZXAsIGtJT1BNQXNzZXJ0aW9uTGV2ZWxPbiwgQ0ZT
VFIoIldlYktpdCBwbGF5aW5nIGEgdmlkZW8gZnVsbFNjcmVlbi4iKSwgJl9pZGxlU3lzdGVtU2xl
ZXBBc3NlcnRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTcxMiw5ICs0NTgsNyBAQCBwcml2YXRlOgog
LSAodm9pZClfdXBkYXRlUG93ZXJBc3NlcnRpb25zCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpIAotICAgIEJPT0wgaXNQbGF5aW5nID0gW3NlbGYgX2lzQW55TW92aWVQbGF5aW5n
XTsKLSAgICAKLSAgICBpZiAoaXNQbGF5aW5nICYmIF9pc0Z1bGxzY3JlZW4pIHsKKyAgICBpZiAo
X2lzUGxheWluZyAmJiBfaXNGdWxsU2NyZWVuKSB7CiAgICAgICAgIFtzZWxmIF9kaXNhYmxlSWRs
ZVN5c3RlbVNsZWVwXTsKICAgICAgICAgW3NlbGYgX2Rpc2FibGVJZGxlRGlzcGxheVNsZWVwXTsK
ICAgICAgICAgW3NlbGYgX2VuYWJsZVRpY2tsZVRpbWVyXTsKQEAgLTcyNiw1MCArNDcwLDQxIEBA
IHByaXZhdGU6CiAjZW5kaWYKIH0KIAorLSAoV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21h
bmFnZXIKK3sKKyAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSB0b0ltcGwoW193ZWJWaWV3IHBh
Z2VSZWZdKTsKKyAgICBpZiAoIXdlYlBhZ2UpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJl
dHVybiB3ZWJQYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpOworfQorCiAtICh2b2lkKV9yZXF1ZXN0
RXhpdAogewotICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuXTsKKyAgICBbc2VsZiBleGl0RnVsbFNj
cmVlbl07CiAgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwogfQogCi0tICh2b2lkKV9y
ZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5pbWF0aW9uOihCT09MKWFuaW1hdGlvbgorLSAodm9p
ZClfcmVxdWVzdEV4aXRGdWxsU2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb24KIHsK
ICAgICBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uID0gIWFuaW1hdGlvbjsKICAgICBbc2VsZiBwZXJm
b3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9yZXF1ZXN0RXhpdCkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJE
ZWxheTowXTsKLQorICAgIAogfQogCi0tIChCT09MKV9pc0FueU1vdmllUGxheWluZworLSAodm9p
ZClfc3dhcFZpZXc6KE5TVmlldyopdmlldyB3aXRoOihOU1ZpZXcqKW90aGVyVmlldwogewotICAg
IGlmICghX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBOb2RlKiBuZXh0
Tm9kZSA9IF9lbGVtZW50LmdldCgpOwotICAgIHdoaWxlIChuZXh0Tm9kZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChuZXh0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSkgewotICAg
ICAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRp
YUVsZW1lbnQqPihuZXh0Tm9kZSk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQtPnBhdXNlZCgp
ICYmICFlbGVtZW50LT5lbmRlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoX2VsZW1lbnQuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTk87CisgICAg
W290aGVyVmlldyBzZXRGcmFtZTpbdmlldyBmcmFtZV1dOyAgICAgICAgCisgICAgW290aGVyVmll
dyBzZXRBdXRvcmVzaXppbmdNYXNrOlt2aWV3IGF1dG9yZXNpemluZ01hc2tdXTsKKyAgICBbb3Ro
ZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIFtbdmlldyBzdXBlcnZpZXddIHJlcGxh
Y2VTdWJ2aWV3OnZpZXcgd2l0aDpvdGhlclZpZXddOwogfQogCiAjcHJhZ21hIG1hcmsgLQogI3By
YWdtYSBtYXJrIFV0aWxpdHkgRnVuY3Rpb25zCiAKLS0gKFdlYkZ1bGxzY3JlZW5XaW5kb3cgKilf
ZnVsbHNjcmVlbldpbmRvdwotewotICAgIHJldHVybiAoV2ViRnVsbHNjcmVlbldpbmRvdyAqKVtz
ZWxmIHdpbmRvd107Ci19Ci0KLS0gKERvY3VtZW50KilfZG9jdW1lbnQgCistIChXS0Z1bGxTY3Jl
ZW5XaW5kb3cgKilfZnVsbFNjcmVlbldpbmRvdwogewotICAgIHJldHVybiBjb3JlKFtbW3NlbGYg
d2ViVmlld10gbWFpbkZyYW1lXSBET01Eb2N1bWVudF0pOworICAgIHJldHVybiAoV0tGdWxsU2Ny
ZWVuV2luZG93ICopW3NlbGYgd2luZG93XTsKIH0KIAogLSAoQ0ZUaW1lSW50ZXJ2YWwpX2FuaW1h
dGlvbkR1cmF0aW9uCkBAIC03OTUsNyArNTMwLDcgQEAgcHJpdmF0ZToKIEBlbmQKIAogI3ByYWdt
YSBtYXJrIC0KLUBpbXBsZW1lbnRhdGlvbiBXZWJGdWxsc2NyZWVuV2luZG93CitAaW1wbGVtZW50
YXRpb24gV0tGdWxsU2NyZWVuV2luZG93CiAKIC0gKGlkKWluaXRXaXRoQ29udGVudFJlY3Q6KE5T
UmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpYVN0eWxlIGJhY2tpbmc6KE5T
QmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcKIHsKQEAgLTgy
NiwxMiArNTYxLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBfYmFja2dyb3VuZExheWVyID0gW1tD
QUxheWVyIGFsbG9jXSBpbml0XTsKICAgICBbY29udGVudExheWVyIGFkZFN1YmxheWVyOl9iYWNr
Z3JvdW5kTGF5ZXJdOwotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIFtjb250ZW50TGF5ZXIgc2V0R2VvbWV0cnlGbGlw
cGVkOllFU107Ci0jZWxzZQotICAgIFtjb250ZW50TGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06
Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwgMSldOwotI2VuZGlmCi0gICAgW2NvbnRlbnRM
YXllciBzZXRPcGFjaXR5OjBdOwogICAgIAogICAgIFtfYmFja2dyb3VuZExheWVyIHNldEJhY2tn
cm91bmRDb2xvcjpDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKV07CiAgICAg
W19iYWNrZ3JvdW5kTGF5ZXIgc2V0T3BhY2l0eTowXTsKQEAgLTg0Miw3ICs1NzEsNiBAQCBwcml2
YXRlOgogewogICAgIFtfYW5pbWF0aW9uVmlldyByZWxlYXNlXTsKICAgICBbX2JhY2tncm91bmRM
YXllciByZWxlYXNlXTsKLSAgICBbX3JlbmRlcmVyTGF5ZXIgcmVsZWFzZV07CiAgICAgW3N1cGVy
IGRlYWxsb2NdOwogfQogCkBAIC04NjEsMjYgKzU4OSw3IEBAIHByaXZhdGU6CiAtICh2b2lkKWNh
bmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCiB7CiAgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Ci0g
ICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIF9yZXF1ZXN0RXhpdEZ1bGxzY3JlZW5XaXRoQW5p
bWF0aW9uOllFU107Ci19Ci0KLS0gKENBTGF5ZXIqKXJlbmRlcmVyTGF5ZXIKLXsKLSAgICByZXR1
cm4gX3JlbmRlcmVyTGF5ZXI7Ci19Ci0KLS0gKHZvaWQpc2V0UmVuZGVyZXJMYXllcjooQ0FMYXll
ciAqKXJlbmRlcmVyTGF5ZXIKLXsKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NB
VHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICBbcmVuZGVyZXJMYXllciBy
ZXRhaW5dOwotICAgIFtfcmVuZGVyZXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAg
W19yZW5kZXJlckxheWVyIHJlbGVhc2VdOwotICAgIF9yZW5kZXJlckxheWVyID0gcmVuZGVyZXJM
YXllcjsKLSAgICAKLSAgICBpZiAoX3JlbmRlcmVyTGF5ZXIpCi0gICAgICAgIFtbW3NlbGYgYW5p
bWF0aW9uVmlld10gbGF5ZXJdIGFkZFN1YmxheWVyOl9yZW5kZXJlckxheWVyXTsKLSAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBfcmVxdWVz
dEV4aXRGdWxsU2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwogfQogCiAtIChDQUxheWVyKiliYWNr
Z3JvdW5kTGF5ZXIKQEAgLTg5NCwyOCArNjAzLDQgQEAgcHJpdmF0ZToKIH0KIEBlbmQKIAotI3By
YWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBNZWRpYUV2ZW50TGlzdGVuZXIKLQotTWVkaWFFdmVu
dExpc3RlbmVyOjpNZWRpYUV2ZW50TGlzdGVuZXIoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGRl
bGVnYXRlKQotICAgIDogRXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAs
IGRlbGVnYXRlKGRlbGVnYXRlKQoteyAKLX0KLQotUGFzc1JlZlB0cjxNZWRpYUV2ZW50TGlzdGVu
ZXI+IE1lZGlhRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBk
ZWxlZ2F0ZSkgCi17IAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFFdmVudExpc3RlbmVy
KGRlbGVnYXRlKSk7IAotfQotCi1ib29sIE1lZGlhRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShj
b25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKLXsKLSAgICByZXR1cm4gdGhpcyA9PSAmbGlz
dGVuZXI7Ci19Ci0KLXZvaWQgTWVkaWFFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCi17Ci0gICAgW2RlbGVnYXRl
IF91cGRhdGVQb3dlckFzc2VydGlvbnNdOwotfQotCi0jZW5kaWYgLyogRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggOWQ4Njg1MC4uNzMwMWE1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzQ1LDYgKzc0
NSw5IEBACiAJCUNENzNCQTREMTMxQUNEOEYwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5TWVzc2FnZXMuaCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q3M0JBNEExMzFBQ0Q4RjAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oICovOyB9OwogCQlDRDczQkE0RTEzMUFDREI3MDBFRURFRDIgLyogV2Vi
RnVsbFNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3M0JBNDgxMzFBQ0Q4RTAwRUVERUQyIC8qIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJQ0Q3M0JBNTMx
MzFCNjQ1QjAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzNCQTM3MTMxQTI5RkUwMEVFREVE
MiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAgKi87IH07CisJCUNEQ0E4NUM4MTMyQUJBNEUw
MEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1QzYxMzJBQkE0RTAwRTk2MURG
IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07CisJCUNEQ0E4NUM5MTMy
QUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVDNzEzMkFCQTRFMDBF
OTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oICovOyB9OworCQlDRENBODVE
NTEzMkFDMkIzMDBFOTYxREYgLyogSU9LaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1RDQxMzJBQzJCMzAwRTk2MURGIC8q
IElPS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJRDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8qIFdl
YlBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEM0I5NDg0MjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLzsgfTsK
IAkJRDNCOTQ4NDcxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDMxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlBvcHVwTWVudS5oICovOyB9OwogCQlEM0I5NDg0ODExRkY0QjY1MDAwMzJCMzkg
LyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1
cE1lbnUuY3BwICovOyB9OwpAQCAtMTYwOCw2ICsxNjExLDkgQEAKIAkJQ0Q3M0JBNDgxMzFBQ0Q4
RTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3M0JBNDkx
MzFBQ0Q4RTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRnVsbFNjcmVlbk1hbmFnZXJNZXNzYWdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDczQkE0QTEzMUFDRDhGMDBFRURFRDIg
LyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRENBODVDNjEzMkFCQTRFMDBFOTYxREYgLyogV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEQ0E4NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RDQTg1RDQxMzJBQzJCMzAwRTk2MURGIC8qIElPS2l0LmZyYW1ld29yayAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3Jr
OyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlEM0I5
NDg0MjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUG9wdXBNZW51Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFy
Y2hQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
U2VhcmNoUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjQs
NiArMTY3MCw3IEBACiAJCQkJMUFBMUNDNUQxMDBGQTFBMTAwNzhERUJDIC8qIFF1YXJ0ekNvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJMUExQzRFQzgxMEQwNjA5OTAwNUU2N0U3
IC8qIFdlYkNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJQkNGNTA2ODUxMjQz
MTg2MTAwNTk1NUFFIC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJ
CUNEQ0E4NUQ1MTMyQUMyQjMwMEU5NjFERiAvKiBJT0tpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTE3MzUsNiArMTc0Miw3IEBACiAJCQkJMUFBMUNEMDYxMDBGQTFCQTAwNzhERUJD
IC8qIENhcmJvbi5mcmFtZXdvcmsgKi8sCiAJCQkJMTA1OEM3QjFGRUE1NTg1RTExQ0EyQ0JCIC8q
IENvY29hLmZyYW1ld29yayAqLywKIAkJCQlCQ0QwMDQyQzExMEMxRTI3MDAzQjhBNjcgLyogQ29y
ZVNlcnZpY2VzLmZyYW1ld29yayAqLywKKwkJCQlDRENBODVENDEzMkFDMkIzMDBFOTYxREYgLyog
SU9LaXQuZnJhbWV3b3JrICovLAogCQkJCTFBQTFDN0RFMTAwRTg0NkUwMDc4REVCQyAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkJQkM4N0RGQTkxMDE4MTAxNDAwNTY0MjE2IC8q
IGxpYmljdWNvcmUuZHlsaWIgKi8sCiAJCQkJMUFBMUNDNUMxMDBGQTFBMTAwNzhERUJDIC8qIFF1
YXJ0ekNvcmUuZnJhbWV3b3JrICovLApAQCAtMjg0OCw2ICsyODU2LDggQEAKIAkJQkNDRjA4NUMx
MTNGM0I3NTAwQzY1MEM1IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJQ0RDQTg1QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIubW0gKi8sCisJCQkJQ0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCAqLywKIAkJCQkxQTY0MjkyQzEyREU1Rjk4MDBD
QUFFMkMgLyogQmFja2luZ1N0b3JlTWFjLm1tICovLAogCQkJCUJDMjY1MUY1MTE4MjVFRjgwMDI0
M0UxMiAvKiBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eU1hYy5tbSAqLywKIAkJCQkxQUE0
MTdFRDEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJNYWMubW0gKi8sCkBAIC0zNDM1LDYg
KzM0NDUsNyBAQAogCQkJCTM3QzRFOUY2MTMxQzZFN0UwMDI5QkQ1QSAvKiBjb25maWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQkIxNkE0MTMyMDFCOUIwMEY0OTQzMSAvKiBGdWxsS2V5Ym9hcmRB
Y2Nlc3NXYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0FBMTA2NzEzMUYwNjAwMDBENEE1
NzUgLyogV2ViQ29va2llTWFuYWdlclByb3h5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlD
RENBODVDOTEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC00MDE4LDYgKzQwMjksNyBAQAogCQkJCUNENzNCQTRFMTMxQUNE
QjcwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDRDczQkE1MzEzMUI2NDVCMDBFRURFRDIgLyogV2ViRnVsbFNjcmVl
bk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q2Rjc1RjQxMzFCNjZEMDAwRDZCMjFF
IC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RD
QTg1QzgxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKLS0gCjEuNy40LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85518</attachid>
            <date>2011-03-11 13:16:34 -0800</date>
            <delta_ts>2011-03-11 17:27:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Add-the-WKFullScreenWindowController-mostly-cribbed-.patch</filename>
            <type>text/plain</type>
            <size>56996</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBkNjg4ODdjYzNlMTgyY2QxNmYxNzBkYWIyZjE3ODRjN2Q0ZWFmNmE2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IEZyaSwgMTEgTWFyIDIwMTEgMDk6MjE6MDUgLTA4MDAKU3ViamVjdDogW1BBVENIXSBBZGQgdGhl
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIsIG1vc3RseSBjcmliYmVkIGZyb20gV2ViS2l0
J3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
CltXZWJLaXQyXSBJbXBsZW1lbnQgYSBmdWxsIHNjcmVlbiB3aW5kb3cgY29udHJvbGxlcgpodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMTAKCiogVUlQcm9jZXNzL21h
Yy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmg6IEFkZGVkLgoqIFVJUHJvY2Vzcy9tYWMv
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbTogQWRkZWQuCigtW1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgaW5pdF0pOiBSZW1vdmUgdGhlIF9tZWRpYUV2ZW50TGlzdGVuZXIuCigt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZGVhbGxvY10pOiBNYWtlIHN1cmUgdG8gY2Fu
Y2VsIHByZXZpb3VzIGFzeW5jIHJlcXVlc3RzLgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIHdpbmRvd0RpZExvYWRdKTogUmVtb3ZlIHRoZSBUaWdlciBwcm90ZWN0aW9uLgooLVtXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXddKTogVHlwZSBjaGFuZ2UuCigtW1dLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgc2V0V2ViVmlldzpdKTogVHlwZSBjaGFuZ2UuCigtW1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6XSk6
IENhc2UgY2hhbmdlcy4KKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBhcHBsaWNhdGlv
bkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6XSk6IENhc2UgY2hhbmdlcy4KKC1bV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW46XSk6IFJlbW92ZWQgbW9zdCBvZiB0
aGUgYW5pbWF0aW9uIGNvZGUKICAgIHdoaWNoIHdpbGwgcmVhcHBlYXIgaW4gV2ViRnVsbFNjcmVl
bk1hbmFnZXIuCigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5FbnRlckZ1bGxT
Y3JlZW5BbmltYXRpb25dKTogQWRkZWQuCigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
ZmluaXNoZWRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb246XSk6IEFkZGVkLgooLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuXSk6IERpdHRvIHRvIGVudGVyRnVsbFNj
cmVlbi4KKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBiZWdhbkV4aXRGdWxsU2NyZWVu
QW5pbWF0aW9uXSk6IEFkZGVkLgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGZpbmlz
aGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246XSk6IEFkZGVkLgooLVtXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU6V2ViS2l0OjpdKTog
U2V0IHVwIHRoZQogICAgbGF5ZXIgdHJlZSBob3N0LgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZV0pOiBUZWFyIGRvd24gc2FtZS4K
KC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBnZXRGdWxsU2NyZWVuUmVjdDpXZWJDb3Jl
OjpdKTogQWRkZWQuCigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3VwZGF0ZU1lbnVB
bmREb2NrRm9yRnVsbFNjcmVlbl0pOiBDYXNlIGNoYW5nZXMuCigtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgX2Rpc2FibGVJZGxlRGlzcGxheVNsZWVwXSk6IERpdHRvLgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIF9lbmFibGVJZGxlRGlzcGxheVNsZWVwXSk6IERpdHRvLgoo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9kaXNhYmxlSWRsZVN5c3RlbVNsZWVwXSk6
IERpdHRvLgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9lbmFibGVJZGxlU3lzdGVt
U2xlZXBdKTogRGl0dG8uCigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2VuYWJsZVRp
Y2tsZVRpbWVyXSk6IERpdHRvLgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9kaXNh
YmxlVGlja2xlVGltZXJdKTogRGl0dG8uCigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
X3RpY2tsZVRpbWVyRmlyZWRdKTogRGl0dG8uCigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBVc2UgX2lzUGxheWluZyBpdmFyLgooLVtXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9tYW5hZ2VyXSk6IEFkZGVkLgooLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9yZXF1ZXN0RXhpdF0pOiBDYXNlIGNoYW5nZXMuCigtW1dLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3JlcXVlc3RFeGl0RnVsbFNjcmVlbldpdGhBbmltYXRp
b246XSk6IERpdHRvLgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9zd2FwVmlldzp3
aXRoOl0pOiBBZGRlZC4KKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfZnVsbFNjcmVl
bldpbmRvd10pOiBDYXNlIGNoYW5nZXMuCigtW1dLRnVsbFNjcmVlbldpbmRvdyBpbml0V2l0aENv
bnRlbnRSZWN0OnN0eWxlTWFzazpiYWNraW5nOmRlZmVyOl0pOiBHZW9tZXRyeSBubwogICAgbG9u
Z2VyIG5lZWRzIHRvIGJlIGZsaXBwZWQuCigtW1dLRnVsbFNjcmVlbldpbmRvdyBjYW5jZWxPcGVy
YXRpb246XSk6IENhc2UgY2hhbmdlcy4KLS0tCiAuLi4vV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLmggICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gIHwgICAgMiArLQogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsrCiAuLi4vVUlQcm9jZXNz
L21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmh9ICB8ICAgNjQgKy0KIC4uLi9VSVBy
b2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW19IHwgIDc1MyArKysrKyst
LS0tLS0tLS0tLS0tLQogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qICAgfCAgIDEyICsKIDYgZmlsZXMgY2hhbmdlZCwgMzEwIGluc2VydGlvbnMoKyksIDU3
MCBkZWxldGlvbnMoLSkKIGNvcHkgU291cmNlL3tXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaCA9PiBXZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlci5ofSAoNTglKQogY29weSBTb3VyY2Uve1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSA9PiBXZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5tbX0gKDM1JSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKaW5kZXggZjg2N2RjMi4uMGY1
NWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIubW0KaW5kZXggNWI4YjQ5Ni4uM2NjODM1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggYmZmYTdiNi4uMGUzNzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMiw2ICsy
LDUzIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAg
QWRkIHRoZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLCBtb3N0bHkgY3JpYmJlZCBmcm9t
IFdlYktpdCdzIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLgorCisgICAgICAgIFtXZWJLaXQyXSBJ
bXBsZW1lbnQgYSBmdWxsIHNjcmVlbiB3aW5kb3cgY29udHJvbGxlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMTAKKworICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW06IEFkZGVkLgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGluaXRdKTogUmVtb3ZlIHRo
ZSBfbWVkaWFFdmVudExpc3RlbmVyLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIGRlYWxsb2NdKTogTWFrZSBzdXJlIHRvIGNhbmNlbCBwcmV2aW91cyBhc3luYyByZXF1
ZXN0cy4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3aW5kb3dEaWRM
b2FkXSk6IFJlbW92ZSB0aGUgVGlnZXIgcHJvdGVjdGlvbi4KKyAgICAgICAgKC1bV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3XSk6IFR5cGUgY2hhbmdlLgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHNldFdlYlZpZXc6XSk6IFR5cGUgY2hhbmdlLgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFwcGxpY2F0aW9uRGlkUmVz
aWduQWN0aXZlOl0pOiBDYXNlIGNoYW5nZXMuCisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOl0pOiBDYXNl
IGNoYW5nZXMuCisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZW50ZXJG
dWxsU2NyZWVuOl0pOiBSZW1vdmVkIG1vc3Qgb2YgdGhlIGFuaW1hdGlvbiBjb2RlCisgICAgICAg
ICAgICB3aGljaCB3aWxsIHJlYXBwZWFyIGluIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGJlZ2FuRW50ZXJGdWxsU2NyZWVuQW5p
bWF0aW9uXSk6IEFkZGVkLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IGZpbmlzaGVkRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOl0pOiBBZGRlZC4KKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbl0pOiBEaXR0byB0byBl
bnRlckZ1bGxTY3JlZW4uCisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
YmVnYW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBmaW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uOl0p
OiBBZGRlZC4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBlbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOldlYktpdDo6XSk6IFNldCB1cCB0aGUKKyAgICAgICAg
ICAgIGxheWVyIHRyZWUgaG9zdC4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVdKTogVGVhciBkb3duIHNhbWUuCisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZ2V0RnVsbFNjcmVlblJlY3Q6
V2ViQ29yZTo6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW5dKTogQ2FzZSBjaGFuZ2VzLgorICAg
ICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9kaXNhYmxlSWRsZURpc3BsYXlT
bGVlcF0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
ZW5hYmxlSWRsZURpc3BsYXlTbGVlcF0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciBfZGlzYWJsZUlkbGVTeXN0ZW1TbGVlcF0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfZW5hYmxlSWRsZVN5c3RlbVNsZWVw
XSk6IERpdHRvLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9lbmFi
bGVUaWNrbGVUaW1lcl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfZGlzYWJsZVRpY2tsZVRpbWVyXSk6IERpdHRvLgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIF90aWNrbGVUaW1lckZpcmVkXSk6IERpdHRvLgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF91cGRhdGVQb3dlckFzc2VydGlvbnNd
KTogVXNlIF9pc1BsYXlpbmcgaXZhci4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfbWFuYWdlcl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciBfcmVxdWVzdEV4aXRdKTogQ2FzZSBjaGFuZ2VzLgorICAgICAgICAoLVtXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9yZXF1ZXN0RXhpdEZ1bGxTY3JlZW5XaXRoQW5pbWF0
aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
c3dhcFZpZXc6d2l0aDpdKTogQWRkZWQuCisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgX2Z1bGxTY3JlZW5XaW5kb3ddKTogQ2FzZSBjaGFuZ2VzLgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3cgaW5pdFdpdGhDb250ZW50UmVjdDpzdHlsZU1hc2s6YmFja2luZzpk
ZWZlcjpdKTogR2VvbWV0cnkgbm8KKyAgICAgICAgICAgIGxvbmdlciBuZWVkcyB0byBiZSBmbGlw
cGVkLgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3cgY2FuY2VsT3BlcmF0aW9uOl0pOiBD
YXNlIGNoYW5nZXMuCisKKzIwMTEtMDMtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQ3Jl
YXRlIG5ldyBpbnRlcmZhY2Ugc3R1YnMgdG8gc3VwcG9ydCBmdWxsIHNjcmVlbiBtb2RlIGluIFdl
YktpdDIuCiAKICAgICAgICAgV2ViS2l0MjogUGx1bWIgbmV3IGZ1bGwgc2NyZWVuIGFuaW1hdGlv
biBBUElzIHRocm91Z2ggV2ViS2l0Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oCnNpbWlsYXJpdHkgaW5kZXggNTgl
CmNvcHkgZnJvbSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLmgKY29weSB0byBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIuaAppbmRleCBmODY3ZGMyLi5mNTZhNWFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDU0
ICsyNSw1MCBAQAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogCi0jaW1wb3J0IDx3dGYv
UmVmUHRyLmg+CisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsgCitjbGFzcyBMYXllclRyZWVDb250ZXh0OworfQog
Ci1AY2xhc3MgV2ViV2luZG93RmFkZUFuaW1hdGlvbjsKLUBjbGFzcyBXZWJWaWV3OwogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7Ci0gICAgY2xhc3MgUmVuZGVyQm94Owot
ICAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7CitjbGFzcyBJbnRSZWN0OwogfQogCi1AaW50ZXJmYWNl
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIDogTlNXaW5kb3dDb250cm9sbGVyIHsKLUBwcml2YXRl
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IF9lbGVtZW50OwotICAgIFdlYkNvcmU6OlJl
bmRlckJveCogX3JlbmRlcmVyOyAvLyAoc2V0KQotICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50
PiBfcmVwbGFjZW1lbnRFbGVtZW50OyAKLSAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2Ny
ZWVuV2luZG93OyAvLyAocmV0YWluKQotICAgIFdlYldpbmRvd0ZhZGVBbmltYXRpb24gKl9mYWRl
QW5pbWF0aW9uOyAvLyAocmV0YWluKQotICAgIFdlYlZpZXcgKl93ZWJWaWV3OwotICAgIE5TVmll
dyogX3BsYWNlaG9sZGVyVmlldzsKLSAgICBDQUxheWVyKiBfcmVuZGVyZXJMYXllcjsKLSAgICBD
QUxheWVyKiBfYmFja2dyb3VuZExheWVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudExpc3Rl
bmVyPiBfbWVkaWFFdmVudExpc3RlbmVyOyAKK0BjbGFzcyBXS1ZpZXc7CiAKK0BpbnRlcmZhY2Ug
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA6IE5TV2luZG93Q29udHJvbGxlciB7CitAcHJp
dmF0ZQorICAgIFdLVmlldyAqX3dlYlZpZXc7CisgICAgUmV0YWluUHRyPE5TVmlldz4gX3dlYlZp
ZXdQbGFjZWhvbGRlcjsKKyAgICBSZXRhaW5QdHI8TlNWaWV3PiBfbGF5ZXJWaWV3UGxhY2Vob2xk
ZXI7CisgICAgUmV0YWluUHRyPE5TVmlldz4gX2xheWVySG9zdGluZ1ZpZXc7CisgICAgCiAgICAg
Qk9PTCBfaXNBbmltYXRpbmc7Ci0gICAgQk9PTCBfaXNGdWxsc2NyZWVuOworICAgIEJPT0wgX2lz
RnVsbFNjcmVlbjsKICAgICBCT09MIF9pc1dpbmRvd0xvYWRlZDsKICAgICBCT09MIF9mb3JjZURp
c2FibGVBbmltYXRpb247CiAgICAgQk9PTCBfaXNQbGF5aW5nOworICAgIENHUmVjdCBfaW5pdGlh
bEZyYW1lOyAgICAKICAgICB1aW50MzJfdCBfaWRsZURpc3BsYXlTbGVlcEFzc2VydGlvbjsKICAg
ICB1aW50MzJfdCBfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uOwogICAgIE5TVGltZXIgKl90aWNr
bGVUaW1lcjsKLSAgICBTeXN0ZW1VSU1vZGUgX3NhdmVkVUlNb2RlOwotICAgIFN5c3RlbVVJT3B0
aW9ucyBfc2F2ZWRVSU9wdGlvbnM7Ci0gICAgQ0dSZWN0IF9pbml0aWFsRnJhbWU7CiB9CiAKLS0g
KFdlYlZpZXcqKXdlYlZpZXc7Ci0tICh2b2lkKXNldFdlYlZpZXc6KFdlYlZpZXcqKXdlYlZpZXc7
Ci0KLS0gKHZvaWQpc2V0RWxlbWVudDooUGFzc1JlZlB0cjxXZWJDb3JlOjpFbGVtZW50PillbGVt
ZW50OwotLSAoV2ViQ29yZTo6RWxlbWVudCopZWxlbWVudDsKLQotLSAodm9pZClzZXRSZW5kZXJl
cjooV2ViQ29yZTo6UmVuZGVyQm94KilyZW5kZXJlcjsKLS0gKFdlYkNvcmU6OlJlbmRlckJveCop
cmVuZGVyZXI7CistIChXS1ZpZXcqKXdlYlZpZXc7CistICh2b2lkKXNldFdlYlZpZXc6KFdLVmll
dyopd2ViVmlldzsKIAotLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVu
OwotLSAodm9pZClleGl0RnVsbHNjcmVlbjsKKy0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuOihOU1Nj
cmVlbiAqKXNjcmVlbjsKKy0gKHZvaWQpZXhpdEZ1bGxTY3JlZW47CistICh2b2lkKWJlZ2FuRW50
ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOworLSAodm9pZCliZWdhbkV4aXRGdWxsU2NyZWVuQW5pbWF0
aW9uOworLSAodm9pZClmaW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21w
bGV0ZWQ7CistICh2b2lkKWZpbmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29t
cGxldGVkOworLSAodm9pZCllbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOihjb25zdCBX
ZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQmKWNvbnRleHQ7CistICh2b2lkKWV4aXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZTsKKy0gKHZvaWQpZ2V0RnVsbFNjcmVlblJlY3Q6KFdlYkNvcmU6Oklu
dFJlY3QqKXJlY3Q7CiAKIEBlbmQKIAotI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5tbQpzaW1pbGFyaXR5IGluZGV4IDM1JQpjb3B5IGZyb20gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQpjb3B5IHRv
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5tbQppbmRleCA1YjhiNDk2Li5kZGVmNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQpAQCAtMjMsNDAg
KzIzLDI3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lt
cG9ydCAiY29uZmlnLmgiCisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAKLSNpbXBvcnQg
IldlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgiCi0KLSNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJp
dmF0ZS5oIgotI2ltcG9ydCAiV2ViV2luZG93QW5pbWF0aW9uLmgiCi0jaW1wb3J0ICJXZWJWaWV3
SW50ZXJuYWwuaCIKLSNpbXBvcnQgPElPS2l0L3B3cl9tZ3QvSU9QTUxpYi5oPgotI2ltcG9ydCA8
T1NTZXJ2aWNlcy9Qb3dlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9BbmltYXRpb25MaXN0Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0NTU1Byb3BlcnR5TmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29s
b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRE9N
RG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRE9NRG9jdW1lbnRJbnRlcm5hbC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9ET01IVE1MRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9ET01XaW5k
b3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9FdmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50
Lmg+CisjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisKKyNpbXBvcnQg
IkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAi
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV0tBUElDYXN0LmgiCisjaW1w
b3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCA8SU9LaXQvcHdyX21ndC9JT1BNTGliLmg+
IC8vIEZvciBJT1BNQXNzZXJ0aW9uQ3JlYXRlKCkKKyNpbXBvcnQgPEhJVG9vbGJveC9NYWNBcHBs
aWNhdGlvbi5oPiAvLyBGb3IgU2V0U3lzdGVtVUlNb2RlKCkKKyNpbXBvcnQgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL05vZGVMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckJsb2NrLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgotI2ltcG9ydCA8b2JqYy9v
YmpjLXJ1bnRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiBz
dGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgdGlja2xlVGltZXJJbnRlcnZhbCA9IDEuMDsKLXN0
YXRpYyBOU1N0cmluZyogY29uc3QgaXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXkgPSBAImlzRW50ZXJp
bmdGdWxsc2NyZWVuIjsKIAordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQpAQCAtNzksNzEg
KzY2LDUwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZW5kaWYKIAotQGludGVyZmFj
ZSBXZWJGdWxsc2NyZWVuV2luZG93IDogTlNXaW5kb3cKLSNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKLTxOU0FuaW1hdGlvbkRl
bGVnYXRlPgotI2VuZGlmCitAaW50ZXJmYWNlIFdLRnVsbFNjcmVlbldpbmRvdyA6IE5TV2luZG93
CiB7CiAgICAgTlNWaWV3KiBfYW5pbWF0aW9uVmlldzsKLSAgICAKLSAgICBDQUxheWVyKiBfcmVu
ZGVyZXJMYXllcjsKICAgICBDQUxheWVyKiBfYmFja2dyb3VuZExheWVyOwogfQotLSAoQ0FMYXll
ciopcmVuZGVyZXJMYXllcjsKLS0gKHZvaWQpc2V0UmVuZGVyZXJMYXllcjooQ0FMYXllciopcmVu
ZGVyZXJMYXllcjsKIC0gKENBTGF5ZXIqKWJhY2tncm91bmRMYXllcjsKIC0gKE5TVmlldyopYW5p
bWF0aW9uVmlldzsKIEBlbmQKIAotY2xhc3MgTWVkaWFFdmVudExpc3RlbmVyIDogcHVibGljIEV2
ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRXZlbnRM
aXN0ZW5lcj4gY3JlYXRlKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZSk7Ci0gICAg
dmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYpOwotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKTsKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUV2ZW50TGlzdGVuZXIoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIq
IGRlbGVnYXRlKTsgCi0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGRlbGVnYXRlOwotfTsK
LQotQGludGVyZmFjZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcihQcml2YXRlKQotLSAodm9pZClf
cmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247Ci0tICh2
b2lkKV91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47CitAaW50ZXJmYWNlIFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIoUHJpdmF0ZSkKKy0gKHZvaWQpX3JlcXVlc3RFeGl0RnVsbFNj
cmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uOworLSAodm9pZClfdXBkYXRlTWVudUFu
ZERvY2tGb3JGdWxsU2NyZWVuOwogLSAodm9pZClfdXBkYXRlUG93ZXJBc3NlcnRpb25zOwotLSAo
V2ViRnVsbHNjcmVlbldpbmRvdyAqKV9mdWxsc2NyZWVuV2luZG93OwotLSAoRG9jdW1lbnQqKV9k
b2N1bWVudDsKKy0gKFdLRnVsbFNjcmVlbldpbmRvdyAqKV9mdWxsU2NyZWVuV2luZG93OwogLSAo
Q0ZUaW1lSW50ZXJ2YWwpX2FuaW1hdGlvbkR1cmF0aW9uOwotLSAoQk9PTClfaXNBbnlNb3ZpZVBs
YXlpbmc7CistICh2b2lkKV9zd2FwVmlldzooTlNWaWV3Kil2aWV3IHdpdGg6KE5TVmlldyopb3Ro
ZXJWaWV3OworLSAoV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXI7CiBAZW5kCiAK
IEBpbnRlcmZhY2UgTlNXaW5kb3coSXNPbkFjdGl2ZVNwYWNlQWRkaXRpb25Gb3JUaWdlckFuZExl
b3BhcmQpCiAtIChCT09MKWlzT25BY3RpdmVTcGFjZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9u
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyCitAaW1wbGVtZW50YXRpb24gV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcgogCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIEluaXRpYWxpemF0
aW9uCiAtIChpZClpbml0CiB7Ci0gICAgLy8gRG8gbm90IGRlZmVyIHdpbmRvdyBjcmVhdGlvbiwg
dG8gbWFrZSBzdXJlIC13aW5kb3dOdW1iZXIgaXMgY3JlYXRlZCAobmVlZGVkIGJ5IFdlYldpbmRv
d1NjYWxlQW5pbWF0aW9uKS4KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJGdWxsc2NyZWVu
V2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qgc3R5bGVNYXNrOk5T
Qm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVy
Ok5PXTsKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tXS0Z1bGxTY3JlZW5XaW5kb3cgYWxsb2Nd
IGluaXRXaXRoQ29udGVudFJlY3Q6TlNaZXJvUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2lu
ZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOwogICAgIHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhXaW5kb3c6d2luZG93XTsKICAgICBbd2luZG93IHJlbGVhc2Vd
OwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBbc2VsZiB3aW5kb3dE
aWRMb2FkXTsKLSAgICBfbWVkaWFFdmVudExpc3RlbmVyID0gTWVkaWFFdmVudExpc3RlbmVyOjpj
cmVhdGUoc2VsZik7Ci0gICAgcmV0dXJuIHNlbGY7CiAgICAgCisgICAgcmV0dXJuIHNlbGY7CiB9
CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIEFTU0VSVCghX3RpY2tsZVRpbWVyKTsKLSAgICAK
ICAgICBbc2VsZiBzZXRXZWJWaWV3Om5pbF07Ci0gICAgW19wbGFjZWhvbGRlclZpZXcgcmVsZWFz
ZV07CisgICAgCisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0
aFRhcmdldDpzZWxmXTsKICAgICAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogICAgIFtzdXBlciBkZWFsbG9jXTsKQEAgLTE1
MSwyMDEgKzExNyw1MiBAQCBwcml2YXRlOgogCiAtICh2b2lkKXdpbmRvd0RpZExvYWQKIHsKLSNp
ZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGlz
IG5vdCBzdXBwb3J0ZWQgb24gVGlnZXI6Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxz
ZQotICAgIAorICAgIFtzdXBlciB3aW5kb3dEaWRMb2FkXTsKKwogICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IoYXBwbGljYXRpb25EaWRSZXNpZ25BY3RpdmU6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRSZXNp
Z25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKICAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczopIG5hbWU6TlNBcHBsaWNhdGlv
bkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnNOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKLSNl
bmRpZgogfQogCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIEFjY2Vzc29ycwogCi0tIChX
ZWJWaWV3Kil3ZWJWaWV3CistIChXS1ZpZXcqKXdlYlZpZXcKIHsKICAgICByZXR1cm4gX3dlYlZp
ZXc7CiB9CiAKLS0gKHZvaWQpc2V0V2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKKy0gKHZvaWQp
c2V0V2ViVmlldzooV0tWaWV3ICopd2ViVmlldwogewogICAgIFt3ZWJWaWV3IHJldGFpbl07CiAg
ICAgW193ZWJWaWV3IHJlbGVhc2VdOwogICAgIF93ZWJWaWV3ID0gd2ViVmlldzsKIH0KIAotLSAo
RWxlbWVudCopZWxlbWVudAotewotICAgIHJldHVybiBfZWxlbWVudC5nZXQoKTsKLX0KLQotLSAo
dm9pZClzZXRFbGVtZW50OihQYXNzUmVmUHRyPEVsZW1lbnQ+KWVsZW1lbnQKLXsKLSNpZmRlZiBC
VUlMRElOR19PTl9USUdFUgotICAgIC8vIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGlzIG5vdCBz
dXBwb3J0ZWQgb24gVGlnZXI6Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxzZQotICAg
IC8vIFdoZW4gYSBuZXcgRWxlbWVudCBpcyBzZXQgYXMgdGhlIGN1cnJlbnQgZnVsbCBzY3JlZW4g
ZWxlbWVudCwgcmVnaXN0ZXIgZXZlbnQKLSAgICAvLyBsaXN0ZW5lcnMgb24gdGhhdCBFbGVtZW50
J3Mgd2luZG93LCBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMgaW4gbWVkaWEgcGxheSBzdGF0ZXMuCi0g
ICAgLy8gV2Ugd2lsbCB1c2UgdGhlc2UgZXZlbnRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGRp
c2FibGUgdGhlIHNjcmVlbnNhdmVyIGFuZCAKLSAgICAvLyBkaXNwbGF5IHNsZWVwIHRpbWVycyB3
aGVuIHBsYXlpbmcgdmlkZW8gaW4gZnVsbCBzY3JlZW4uIE1ha2Ugc3VyZSB0byB1bnJlZ2lzdGVy
Ci0gICAgLy8gdGhlIGV2ZW50cyBvbiB0aGUgb2xkIGVsZW1lbnQncyB3aW5kb3csIGlmIG5lY2Vz
c2FyeSwgYXMgd2VsbC4KLSAgICAKLSAgICBFdmVudE5hbWVzJiBldmVudE5hbWVzID0gV2ViQ29y
ZTo6ZXZlbnROYW1lcygpOwotICAgIAotICAgIGlmIChfZWxlbWVudCkgewotICAgICAgICBET01X
aW5kb3cqIHdpbmRvdyA9IF9lbGVtZW50LT5kb2N1bWVudCgpLT5kb21XaW5kb3coKTsKLSAgICAg
ICAgaWYgKHdpbmRvdykgewotICAgICAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMucGxheUV2ZW50LCAgX21lZGlhRXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1ZSk7
Ci0gICAgICAgICAgICB3aW5kb3ctPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wYXVz
ZUV2ZW50LCBfbWVkaWFFdmVudExpc3RlbmVyLmdldCgpLCB0cnVlKTsKLSAgICAgICAgICAgIHdp
bmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLmVuZGVkRXZlbnQsIF9tZWRpYUV2
ZW50TGlzdGVuZXIuZ2V0KCksIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAg
ICBfZWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgCi0gICAgaWYgKF9lbGVtZW50KSB7Ci0gICAgICAg
IERPTVdpbmRvdyogd2luZG93ID0gX2VsZW1lbnQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpOwot
ICAgICAgICBpZiAod2luZG93KSB7Ci0gICAgICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcy5wbGF5RXZlbnQsICBfbWVkaWFFdmVudExpc3RlbmVyLCB0cnVlKTsKLSAg
ICAgICAgICAgIHdpbmRvdy0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQs
IF9tZWRpYUV2ZW50TGlzdGVuZXIsIHRydWUpOwotICAgICAgICAgICAgd2luZG93LT5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMuZW5kZWRFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lciwgdHJ1
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotLSAoUmVuZGVyQm94KilyZW5kZXJl
ciAKLXsKLSAgICByZXR1cm4gX3JlbmRlcmVyOwotfQotCi0tICh2b2lkKXNldFJlbmRlcmVyOihS
ZW5kZXJCb3gqKXJlbmRlcmVyCi17Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICAvLyBX
ZWJGdWxsU2NyZWVuQ29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFRpZ2VyOgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKLSAgICBfcmVuZGVyZXIgPSByZW5kZXJlcjsKLSNl
bmRpZgotfQotCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIE5vdGlmaWNhdGlvbnMKIAot
LSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjooQk9PTClmaW5pc2hlZAotewotICAgIGlm
ICghX2lzQW5pbWF0aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKF9pc0Z1bGxz
Y3JlZW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVz
KCk7Ci0gICAgQVNTRVJUKF9lbGVtZW50KTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxs
U2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBbc2VsZiBf
ZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0
KCkpOwotICAgIFtzZWxmIHNldEVsZW1lbnQ6bmlsXTsKLQotICAgIGlmIChmaW5pc2hlZCkgewot
ICAgICAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuXTsgICAKLSAgICAg
ICAgW3NlbGYgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Ci0gICAgICAgIAotICAgICAgICBbW193
ZWJWaWV3IHdpbmRvd10gZGlzcGxheV07Ci0gICAgICAgIFtbc2VsZiBfZnVsbHNjcmVlbldpbmRv
d10gc2V0UmVuZGVyZXJMYXllcjpuaWxdOwotICAgICAgICBbW3NlbGYgd2luZG93XSBjbG9zZV07
Ci0gICAgfQotCi0gICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7Ci0KLSAgICBfaXNBbmltYXRp
bmcgPSBOTzsKLSAgICBbc2VsZiBhdXRvcmVsZWFzZV07IC8vIEFzc29jaWF0ZWQgLXJldGFpbiBp
cyBpbiAtZXhpdEZ1bGxzY3JlZW4uCi19Ci0KLS0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsc2Ny
ZWVuOihCT09MKWZpbmlzaGVkCi17Ci0gICAgaWYgKCFfaXNBbmltYXRpbmcpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBpZiAoIV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+
d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Ci0gICAg
W3NlbGYgX2RvY3VtZW50XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yKENv
bG9yOjpibGFjayk7Ci0gICAgCi0gICAgaWYgKGZpbmlzaGVkKSB7Ci0gICAgICAgIFtzZWxmIF91
cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOwotICAgICAgICBbc2VsZiBfdXBkYXRlUG93
ZXJBc3NlcnRpb25zXTsKLSAgICAgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3Zl
czpZRVNdOwotICAgIAotICAgICAgICAvLyBNb3ZlIHRoZSB3ZWJWaWV3IGludG8gb3VyIGZ1bGxz
Y3JlZW4gV2luZG93Ci0gICAgICAgIGlmICghX3BsYWNlaG9sZGVyVmlldykKLSAgICAgICAgICAg
IF9wbGFjZWhvbGRlclZpZXcgPSBbW05TVmlldyBhbGxvY10gaW5pdF07Ci0KLSAgICAgICAgLy8g
RG8gbm90IHN3YXAgdGhlIHBsYWNlaG9sZGVyIGludG8gcGxhY2UgaWYgYWxyZWFkeSBpcyBpbiBh
IHdpbmRvdywKLSAgICAgICAgLy8gYXNzdW1pbmcgdGhlIHBsYWNlaG9sZGVyJ3Mgd2luZG93IHdp
bGwgYWx3YXlzIGJlIHRoZSB3ZWJWaWV3J3MgCi0gICAgICAgIC8vIG9yaWdpbmFsIHdpbmRvdy4K
LSAgICAgICAgaWYgKCFbX3BsYWNlaG9sZGVyVmlldyB3aW5kb3ddKSB7Ci0gICAgICAgICAgICBX
ZWJWaWV3KiB3ZWJWaWV3ID0gW3NlbGYgd2ViVmlld107Ci0gICAgICAgICAgICBbX3BsYWNlaG9s
ZGVyVmlldyBzZXRGcmFtZTpbd2ViVmlldyBmcmFtZV1dOyAgICAgICAgCi0gICAgICAgICAgICBb
X3BsYWNlaG9sZGVyVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOlt3ZWJWaWV3IGF1dG9yZXNpemlu
Z01hc2tdXTsKLSAgICAgICAgICAgIFtfcGxhY2Vob2xkZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZp
ZXddOwotICAgICAgICAgICAgW1t3ZWJWaWV3IHN1cGVydmlld10gcmVwbGFjZVN1YnZpZXc6d2Vi
VmlldyB3aXRoOl9wbGFjZWhvbGRlclZpZXddOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBb
W1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGFkZFN1YnZpZXc6d2ViVmlld107Ci0gICAgICAg
ICAgICBbd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZXxOU1Zp
ZXdIZWlnaHRTaXphYmxlXTsKLSAgICAgICAgICAgIFt3ZWJWaWV3IHNldEZyYW1lOltbW3NlbGYg
d2luZG93XSBjb250ZW50Vmlld10gYm91bmRzXV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFdlYkZ1bGxzY3JlZW5XaW5kb3cqIHdpbmRvdyA9IFtzZWxmIF9mdWxsc2NyZWVuV2luZG93
XTsKLSAgICAgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgYmxhY2tDb2xv
cl1dOwotICAgICAgICBbd2luZG93IHNldE9wYXF1ZTpZRVNdOwotCi0gICAgICAgIFtDQVRyYW5z
YWN0aW9uIGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKLSAgICAgICAgW1tbd2luZG93IGFuaW1hdGlvblZpZXddIGxheWVyXSBzZXRPcGFjaXR5
OjBdOwotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAgIH0KLSAgICBOU0VuYWJs
ZVNjcmVlblVwZGF0ZXMoKTsKLQotICAgIF9pc0FuaW1hdGluZyA9IE5POwotfQotCi0tICh2b2lk
KWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbSBmaW5pc2hlZDooQk9PTClmaW5p
c2hlZAotewotICAgIEJPT0wgaXNFbnRlcmluZ0Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW2FuaW0g
dmFsdWVGb3JLZXk6aXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXldIGJvb2xWYWx1ZV07Ci0gICAgCi0g
ICAgaWYgKCFpc0VudGVyaW5nRnVsbHNjcmVlbkFuaW1hdGlvbikKLSAgICAgICAgW3NlbGYgd2lu
ZG93RGlkRXhpdEZ1bGxzY3JlZW46ZmluaXNoZWRdOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYg
d2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOmZpbmlzaGVkXTsKLX0KLQogLSAodm9pZClhcHBsaWNh
dGlvbkRpZFJlc2lnbkFjdGl2ZTooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgogeyAgIAot
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZnVsbHNjcmVlbldpbmRvdyBpcyBvbiB0aGUgYWN0
aXZlIHNwYWNlOyB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQorICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGUgZnVsbFNjcmVlbldpbmRvdyBpcyBvbiB0aGUgYWN0aXZlIHNwYWNlOyB0aGlzIGZ1
bmN0aW9uIGlzIGF2YWlsYWJsZQogICAgIC8vIG9uIDEwLjYgYW5kIGxhdGVyLCBzbyBkZWZhdWx0
IHRvIFlFUyBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZToKLSAgICBOU1dpbmRvdyog
ZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIF9mdWxsc2NyZWVuV2luZG93XTsKLSAgICBCT09MIGlz
T25BY3RpdmVTcGFjZSA9IChbZnVsbHNjcmVlbldpbmRvdyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGlzT25BY3RpdmVTcGFjZSldID8gW2Z1bGxzY3JlZW5XaW5kb3cgaXNPbkFjdGl2ZVNw
YWNlXSA6IFlFUyk7Ci0KKyAgICBOU1dpbmRvdyogZnVsbFNjcmVlbldpbmRvdyA9IFtzZWxmIF9m
dWxsU2NyZWVuV2luZG93XTsKKyAgICBCT09MIGlzT25BY3RpdmVTcGFjZSA9IChbZnVsbFNjcmVl
bldpbmRvdyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGlzT25BY3RpdmVTcGFjZSldID8g
W2Z1bGxTY3JlZW5XaW5kb3cgaXNPbkFjdGl2ZVNwYWNlXSA6IFlFUyk7CisgICAgCiAgICAgLy8g
UmVwbGljYXRlIHRoZSBRdWlja1RpbWUgUGxheWVyIChYKSBiZWhhdmlvciB3aGVuIGxvc2luZyBh
Y3RpdmUgYXBwbGljYXRpb24gc3RhdHVzOgotICAgIC8vIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVl
biB0aGUgbWFpbiBzY3JlZW4/IChOb3RlOiB0aGlzIGNvdmVycyB0aGUgY2FzZSB3aGVyZSBvbmx5
IGEgCi0gICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBhdmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3Jl
ZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNlPyBJRkYgc28sIAotICAgIC8vIHRoZW4gZXhp
dCBmdWxsc2NyZWVuIG1vZGUuIAotICAgIGlmIChbZnVsbHNjcmVlbldpbmRvdyBzY3JlZW5dID09
IFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSAmJiBpc09uQWN0aXZlU3BhY2Up
Ci0gICAgICAgICBbc2VsZiBfcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107
CisgICAgLy8gSXMgdGhlIGZ1bGxTY3JlZW4gc2NyZWVuIHRoZSBtYWluIHNjcmVlbj8gKE5vdGU6
IHRoaXMgY292ZXJzIHRoZSBjYXNlIHdoZXJlIG9ubHkgYSAKKyAgICAvLyBzaW5nbGUgc2NyZWVu
IGlzIGF2YWlsYWJsZS4pICBJcyB0aGUgZnVsbFNjcmVlbiBzY3JlZW4gb24gdGhlIGN1cnJlbnQg
c3BhY2U/IElGRiBzbywgCisgICAgLy8gdGhlbiBleGl0IGZ1bGxTY3JlZW4gbW9kZS4gCisgICAg
aWYgKFtmdWxsU2NyZWVuV2luZG93IHNjcmVlbl0gPT0gW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmpl
Y3RBdEluZGV4OjBdICYmIGlzT25BY3RpdmVTcGFjZSkKKyAgICAgICAgW3NlbGYgX3JlcXVlc3RF
eGl0RnVsbFNjcmVlbldpdGhBbmltYXRpb246Tk9dOwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9u
RGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgog
ewogICAgIC8vIFRoZSB1c2VyIG1heSBoYXZlIGNoYW5nZWQgdGhlIG1haW4gc2NyZWVuIGJ5IG1v
dmluZyB0aGUgbWVudSBiYXIsIG9yIHRoZXkgbWF5IGhhdmUgY2hhbmdlZAotICAgIC8vIHRoZSBE
b2NrJ3Mgc2l6ZSBvciBsb2NhdGlvbiwgb3IgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBmdWxs
c2NyZWVuIHNjcmVlbidzIGRpbWVuc2lvbnMuIAorICAgIC8vIHRoZSBEb2NrJ3Mgc2l6ZSBvciBs
b2NhdGlvbiwgb3IgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBmdWxsU2NyZWVuIHNjcmVlbidz
IGRpbWVuc2lvbnMuIAogICAgIC8vIFVwZGF0ZSBvdXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMs
IGFuZCBlbnN1cmUgdGhhdCB0aGUgZnVsbCBzY3JlZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKICAg
ICAvLyBlbnRpcmUgc2NyZWVuOgotICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxz
Y3JlZW5dOworICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW5dOwogICAg
IE5TV2luZG93KiB3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwogICAgIFt3aW5kb3cgc2V0RnJhbWU6
W1t3aW5kb3cgc2NyZWVuXSBmcmFtZV0gZGlzcGxheTpZRVNdOwogfQpAQCAtMzUzLDE3MCArMTcw
LDExNCBAQCBwcml2YXRlOgogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBFeHBvc2VkIElu
dGVyZmFjZQogCi0tICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KKy0g
KHZvaWQpZW50ZXJGdWxsU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgogewotICAgIC8vIERpc2Fi
bGUgYW5pbWF0aW9uIGlmIHdlIGFyZSBhbHJlYWR5IGluIGZ1bGwtc2NyZWVuIG1vZGUuCi0gICAg
Qk9PTCBzaG91bGRBbmltYXRlID0gIV9pc0Z1bGxzY3JlZW47CisgICAgaWYgKF9pc0Z1bGxTY3Jl
ZW4pCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoX2lzQW5pbWF0aW5nKSB7Ci0gICAg
ICAgIC8vIFRoZSBDQUFuaW1hdGlvbiBkZWxlZ2F0ZSBmdW5jdGlvbnMgd2lsbCBvbmx5IGJlIGNh
bGxlZCB0aGUKLSAgICAgICAgLy8gbmV4dCB0cmlwIHRocm91Z2ggdGhlIHJ1bi1sb29wLCBzbyBt
YW51YWxseSBjYWxsIHRoZSBkZWxlZ2F0ZQotICAgICAgICAvLyBmdW5jdGlvbiBoZXJlLCBsZXR0
aW5nIGl0IGtub3cgdGhlIGFuaW1hdGlvbiBkaWQgbm90IGNvbXBsZXRlOgotICAgICAgICBbc2Vs
ZiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjpOT107Ci0gICAgICAgIEFTU0VSVCghX2lzQW5pbWF0
aW5nKTsKLSAgICB9Ci0gICAgX2lzRnVsbHNjcmVlbiA9IFlFUzsKKyAgICBfaXNGdWxsU2NyZWVu
ID0gWUVTOwogICAgIF9pc0FuaW1hdGluZyA9IFlFUzsKICAgICAKLSAgICAvLyBzZXRFbGVtZW50
OiBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgbm9uLW5pbCB2YWx1ZSBiZWZvcmUgY2FsbGluZyBlbnRl
ckZ1bGxzY3JlZW46LgotICAgIEFTU0VSVChfZWxlbWVudCk7Ci0gICAgCiAgICAgTlNEaXNhYmxl
U2NyZWVuVXBkYXRlcygpOwogICAgIAogICAgIGlmICghc2NyZWVuKQogICAgICAgICBzY3JlZW4g
PSBbTlNTY3JlZW4gbWFpblNjcmVlbl07CiAgICAgTlNSZWN0IHNjcmVlbkZyYW1lID0gW3NjcmVl
biBmcmFtZV07CiAgICAgCi0gICAgV2ViVmlldyogd2ViVmlldyA9IFtzZWxmIHdlYlZpZXddOwot
ICAgIE5TUmVjdCB3ZWJWaWV3RnJhbWUgPSBbd2ViVmlldyBjb252ZXJ0UmVjdFRvQmFzZTpbd2Vi
VmlldyBmcmFtZV1dOwotICAgIHdlYlZpZXdGcmFtZS5vcmlnaW4gPSBbW3dlYlZpZXcgd2luZG93
XSBjb252ZXJ0QmFzZVRvU2NyZWVuOndlYlZpZXdGcmFtZS5vcmlnaW5dOwotICAgIAotICAgIE5T
UmVjdCBlbGVtZW50RnJhbWUgPSBfZWxlbWVudC0+c2NyZWVuUmVjdCgpOwotICAgIAorICAgIE5T
UmVjdCB3ZWJWaWV3RnJhbWUgPSBbX3dlYlZpZXcgY29udmVydFJlY3RUb0Jhc2U6W193ZWJWaWV3
IGZyYW1lXV07CisgICAgd2ViVmlld0ZyYW1lLm9yaWdpbiA9IFtbX3dlYlZpZXcgd2luZG93XSBj
b252ZXJ0QmFzZVRvU2NyZWVuOndlYlZpZXdGcmFtZS5vcmlnaW5dOworICAgICAgICAKICAgICAv
LyBJbiB0aGUgY2FzZSBvZiBhIG11bHRpLW1vbml0b3Igc2V0dXAgd2hlcmUgdGhlIHdlYlZpZXcg
c3RyYWRkbGVzIHR3bwogICAgIC8vIG1vbml0b3JzLCB3ZSBtdXN0IGNyZWF0ZSBhIHdpbmRvdyBs
YXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24KICAgICAvLyBmcmFtZSBhbmQg
dGhlIGluaXRpYWwgZnJhbWUuCi0gICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0gTlNVbmlvblJlY3Qo
c2NyZWVuRnJhbWUsIGVsZW1lbnRGcmFtZSk7CisgICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0gTlNV
bmlvblJlY3Qoc2NyZWVuRnJhbWUsIHdlYlZpZXdGcmFtZSk7CiAgICAgW1tzZWxmIHdpbmRvd10g
c2V0RnJhbWU6d2luZG93RnJhbWUgZGlzcGxheTpZRVNdOwogICAgIAotICAgIC8vIEluIGEgcHJl
dmlvdXMgaW5jYXJuYXRpb24sIHRoZSBOU1dpbmRvdyBhdHRhY2hlZCB0byB0aGlzIGNvbnRyb2xs
ZXIgbWF5IGhhdmUKLSAgICAvLyBiZWVuIG9uIGEgZGlmZmVyZW50IHNjcmVlbi4gVGVtcG9yYXJp
bHkgY2hhbmdlIHRoZSBjb2xsZWN0aW9uQmVoYXZpb3Igb2YgdGhlIHdpbmRvdzoKLSAgICBOU1dp
bmRvd0NvbGxlY3Rpb25CZWhhdmlvciBiZWhhdmlvciA9IFtbc2VsZiB3aW5kb3ddIGNvbGxlY3Rp
b25CZWhhdmlvcl07Ci0gICAgW1tzZWxmIHdpbmRvd10gc2V0Q29sbGVjdGlvbkJlaGF2aW9yOk5T
V2luZG93Q29sbGVjdGlvbkJlaGF2aW9yQ2FuSm9pbkFsbFNwYWNlc107Ci0gICAgW1tzZWxmIHdp
bmRvd10gbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07Ci0gICAgW1tzZWxmIHdpbmRvd10gc2V0
Q29sbGVjdGlvbkJlaGF2aW9yOmJlaGF2aW9yXTsKLSAgICAKLSAgICBOU1ZpZXcqIGFuaW1hdGlv
blZpZXcgPSBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGlvblZpZXddOwotICAgIAot
ICAgIE5TUmVjdCBiYWNrZ3JvdW5kQm91bmRzID0ge1tbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3Jl
ZW5Ub0Jhc2U6c2NyZWVuRnJhbWUub3JpZ2luXSwgc2NyZWVuRnJhbWUuc2l6ZX07Ci0gICAgYmFj
a2dyb3VuZEJvdW5kcyA9IFthbmltYXRpb25WaWV3IGNvbnZlcnRSZWN0RnJvbUJhc2U6YmFja2dy
b3VuZEJvdW5kc107Ci0gICAgLy8gRmxpcCB0aGUgYmFja2dyb3VuZCBsYXllcidzIGNvb3JkaW5h
dGUgc3lzdGVtLgotICAgIGJhY2tncm91bmRCb3VuZHMub3JpZ2luLnkgPSB3aW5kb3dGcmFtZS5z
aXplLmhlaWdodCAtIE5TTWF4WShiYWNrZ3JvdW5kQm91bmRzKTsKLSAgICAKLSAgICAvLyBTZXQg
b3VyIGZ1bGxzY3JlZW4gZWxlbWVudCdzIGluaXRpYWwgZnJhbWUsIGFuZCBmbGlwIHRoZSBjb29y
ZGluYXRlIHN5c3RlbXMgZnJvbQotICAgIC8vIHNjcmVlbiBjb29yZGluYXRlcyAoYm90dG9tL2xl
ZnQpIHRvIGxheWVyIGNvb3JkaW5hdGVzICh0b3AvbGVmdCk6Ci0gICAgX2luaXRpYWxGcmFtZSA9
IE5TUmVjdFRvQ0dSZWN0KE5TSW50ZXJzZWN0aW9uUmVjdChlbGVtZW50RnJhbWUsIHdlYlZpZXdG
cmFtZSkpOwotICAgIF9pbml0aWFsRnJhbWUub3JpZ2luLnkgPSBzY3JlZW5GcmFtZS5zaXplLmhl
aWdodCAtIENHUmVjdEdldE1heFkoX2luaXRpYWxGcmFtZSk7Ci0gICAgCi0gICAgLy8gSW5mb3Jt
IHRoZSBkb2N1bWVudCB0aGF0IHdlIHdpbGwgYmVnaW4gZW50ZXJpbmcgZnVsbCBzY3JlZW4uIFRo
aXMgd2lsbCBjaGFuZ2UKLSAgICAvLyBwc2V1ZG8tY2xhc3NlcyBvbiB0aGUgZnVsbHNjcmVlbiBl
bGVtZW50IGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBbc2VsZiBfZG9jdW1lbnRdOwotICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBmdWxsc2NyZWVuIHJlbmRlcmVyIGlzIGNvbXBvc2l0ZWQuIElmIG5vdCwgYWNjZWxl
cmF0ZWQgZ3JhcGhpY3MgCi0gICAgLy8gbWF5IGJlIGRpc2FibGVkLiBJbiB0aGlzIGNhc2UsIGRv
IG5vdCBhdHRlbXB0IHRvIGFuaW1hdGUgdGhlIGNvbnRlbnRzIGludG8gcGxhY2U7IAotICAgIC8v
IG1lcmVseSBzbmFwIHRvIHRoZSBmaW5hbCBwb3NpdGlvbjoKLSAgICBpZiAoIXNob3VsZEFuaW1h
dGUgfHwgIV9yZW5kZXJlciB8fCAhX3JlbmRlcmVyLT5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICBbc2VsZiB3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW46WUVTXTsKLSAgICAgICAg
TlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9ICAgIAotICAg
IAotICAgIC8vIFNldCB1cCB0aGUgZmluYWwgc3R5bGUgb2YgdGhlIEZ1bGxTY3JlZW4gcmVuZGVy
IGJsb2NrLiBTZXQgYW4gYWJzb2x1dGUKLSAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGVxdWFsIHRv
IHRoZSBzaXplIG9mIHRoZSBzY3JlZW4sIGFuZCBhbmNob3IgdGhlIGxheWVyCi0gICAgLy8gYXQg
dGhlIHRvcCwgbGVmdCBhdCAoMCwwKS4gVGhlIFJlbmRlckZ1bGxTY3JlZW4gc3R5bGUgaXMgYWxy
ZWFkeSBzZXQgCi0gICAgLy8gdG8gcG9zaXRpb246Zml4ZWQuCi0gICAgW3NlbGYgX2RvY3VtZW50
XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyU2l6ZShJbnRTaXplKHNjcmVlbkZyYW1lLnNpemUpKTsK
LSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICAKLSAgICAvLyBDYXVzZSB0aGUgZG9jdW1lbnQg
dG8gbGF5b3V0LCB0aHVzIGNhbGN1bGF0aW5nIGEgbmV3IGZ1bGxzY3JlZW4gZWxlbWVudCBzaXpl
OgotICAgIFtzZWxmIF9kb2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOworICAgIENBTGF5ZXIqIGJh
Y2tncm91bmRMYXllciA9IFtbc2VsZiBfZnVsbFNjcmVlbldpbmRvd10gYmFja2dyb3VuZExheWVy
XTsKKyAgICBOU1JlY3QgYmFja2dyb3VuZEZyYW1lID0ge1tbc2VsZiB3aW5kb3ddIGNvbnZlcnRT
Y3JlZW5Ub0Jhc2U6c2NyZWVuRnJhbWUub3JpZ2luXSwgc2NyZWVuRnJhbWUuc2l6ZX07CisgICAg
YmFja2dyb3VuZEZyYW1lID0gW1tbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBjb252ZXJ0UmVj
dEZyb21CYXNlOmJhY2tncm91bmRGcmFtZV07CiAgICAgCi0gICAgLy8gRklYTUU6IHRyeSB0byB1
c2UgdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCdzIGNhbGN1bGF0ZWQgeCwgeSwgd2lkdGgsIGFuZCBo
ZWlnaHQgaW5zdGVhZCBvZiB0aGUKLSAgICAvLyByZW5kZXJCb3ggZnVuY3Rpb25zOgotICAgIFJl
bmRlckJveCogY2hpbGRSZW5kZXJlciA9IF9yZW5kZXJlci0+Zmlyc3RDaGlsZEJveCgpOwotICAg
IENHUmVjdCBkZXN0aW5hdGlvbkZyYW1lID0gQ0dSZWN0TWFrZShjaGlsZFJlbmRlcmVyLT54KCks
IGNoaWxkUmVuZGVyZXItPnkoKSwgY2hpbGRSZW5kZXJlci0+d2lkdGgoKSwgY2hpbGRSZW5kZXJl
ci0+aGVpZ2h0KCkpOyAgICAKLSAgICAKLSAgICAvLyBTb21lIHByb3BlcnRpZXMgaGF2ZW4ndCBw
cm9wb2dhdGVkIGZyb20gdGhlIEdyYXBoaWNzTGF5ZXIgdG8gdGhlIENBTGF5ZXIgeWV0LiBTbwot
ICAgIC8vIHRlbGwgdGhlIHJlbmRlcmVyJ3MgbGF5ZXIgdG8gc3luYyBpdCdzIGNvbXBvc2l0aW5n
IHN0YXRlOgotICAgIEdyYXBoaWNzTGF5ZXIqIHJlbmRlcmVyR3JhcGhpY3MgPSBfcmVuZGVyZXIt
PmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpOwotICAgIHJlbmRlcmVyR3JhcGhp
Y3MtPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7ICAgIAorICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIFtiYWNr
Z3JvdW5kTGF5ZXIgc2V0RnJhbWU6YmFja2dyb3VuZEZyYW1lXTsKKyAgICBbQ0FUcmFuc2FjdGlv
biBjb21taXRdOwogCi0gICAgQ0FMYXllciogcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyR3JhcGhp
Y3MtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIHNldFJl
bmRlcmVyTGF5ZXI6cmVuZGVyZXJMYXllcl07ICAgIAotICAgIAogICAgIENGVGltZUludGVydmFs
IGR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICBbc2VsZiBfbWFuYWdl
cl0tPndpbGxFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICBbc2VsZiBfbWFuYWdlcl0tPmJlZ2luRW50
ZXJGdWxsU2NyZWVuQW5pbWF0aW9uKGR1cmF0aW9uKTsKK30KIAotICAgIC8vIENyZWF0ZSBhIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0IHdpbGwgdHJhbnNmb3JtIHRoZSByZW5kZXJlciBsYXll
ciBzdWNoIHRoYXQgCi0gICAgLy8gdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCBhcHBlYXJzIHRvIG1v
dmUgZnJvbSBpdHMgc3RhcnRpbmcgcG9zaXRpb24gYW5kIHNpemUgdG8gaXRzCi0gICAgLy8gZmlu
YWwgb25lLiBQZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB0d28gc3RlcHMsIHVzaW5nIHRo
ZSBDQUxheWVyJ3MgbWF0cml4IAotICAgIC8vIG1hdGggdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3Rz
IG9mIGVhY2ggc3RlcDoKLSAgICAvLyAxLiBBcHBseSBhIHNjYWxlIHRyYW5mb3JtIHRvIHNocmlu
ayB0aGUgYXBwYXJlbnQgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gdGhlIG9yaWdpbmFsCi0gICAgLy8g
ICAgZWxlbWVudCBzY3JlZW4gc2l6ZS4KLSAgICAvLyAyLiBBcHBseSBhIHRyYW5zbGF0aW9uIHRy
YW5zZm9ybSB0byBtb3ZlIHRoZSBzaHJ1bmsgbGF5ZXIgaW50byB0aGUgc2FtZSBzY3JlZW4gcG9z
aXRpb24KLSAgICAvLyAgICBhcyB0aGUgb3JpZ2luYWwgZWxlbWVudC4KLSAgICBDQVRyYW5zZm9y
bTNEIHNocmlua1RyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoX2luaXRpYWxGcmFt
ZS5zaXplLndpZHRoIC8gZGVzdGluYXRpb25GcmFtZS5zaXplLndpZHRoLCBfaW5pdGlhbEZyYW1l
LnNpemUuaGVpZ2h0IC8gZGVzdGluYXRpb25GcmFtZS5zaXplLmhlaWdodCwgMSk7Ci0gICAgW3Jl
bmRlcmVyTGF5ZXIgc2V0VHJhbnNmb3JtOnNocmlua1RyYW5zZm9ybV07Ci0gICAgQ0dSZWN0IHNo
cnVua0Rlc3RpbmF0aW9uRnJhbWUgPSBbcmVuZGVyZXJMYXllciBjb252ZXJ0UmVjdDpkZXN0aW5h
dGlvbkZyYW1lIHRvTGF5ZXI6W2FuaW1hdGlvblZpZXcgbGF5ZXJdXTsKLSAgICBDQVRyYW5zZm9y
bTNEIG1vdmVUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKF9pbml0aWFs
RnJhbWUub3JpZ2luLnggLSBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi54LCBfaW5pdGlh
bEZyYW1lLm9yaWdpbi55IC0gc2hydW5rRGVzdGluYXRpb25GcmFtZS5vcmlnaW4ueSwgMCk7Ci0g
ICAgQ0FUcmFuc2Zvcm0zRCBmaW5hbFRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RDb25jYXQoc2hy
aW5rVHJhbnNmb3JtLCBtb3ZlVHJhbnNmb3JtKTsKLSAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFu
c2Zvcm06ZmluYWxUcmFuc2Zvcm1dOwotCi0gICAgQ0FMYXllciogYmFja2dyb3VuZExheWVyID0g
W1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5ZXJdOworLSAodm9pZCliZWdh
bkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbgoreyAgICAKKyAgICBbc2VsZiBfdXBkYXRlTWVudUFu
ZERvY2tGb3JGdWxsU2NyZWVuXTsgICAKKyAgICBbc2VsZiBfdXBkYXRlUG93ZXJBc3NlcnRpb25z
XTsKKyAgICAKKyAgICAvLyBJbiBhIHByZXZpb3VzIGluY2FybmF0aW9uLCB0aGUgTlNXaW5kb3cg
YXR0YWNoZWQgdG8gdGhpcyBjb250cm9sbGVyIG1heSBoYXZlCisgICAgLy8gYmVlbiBvbiBhIGRp
ZmZlcmVudCBzY3JlZW4uIFRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgY29sbGVjdGlvbkJlaGF2aW9y
IG9mIHRoZSB3aW5kb3c6CisgICAgTlNXaW5kb3cqIGZ1bGxTY3JlZW5XaW5kb3cgPSBbc2VsZiB3
aW5kb3ddOworICAgIE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yIGJlaGF2aW9yID0gW2Z1bGxT
Y3JlZW5XaW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXTsKKyAgICBbZnVsbFNjcmVlbldpbmRvdyBz
ZXRDb2xsZWN0aW9uQmVoYXZpb3I6TlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JDYW5Kb2luQWxs
U3BhY2VzXTsKKyAgICBbZnVsbFNjcmVlbldpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpzZWxm
XTsKKyAgICBbZnVsbFNjcmVlbldpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6YmVoYXZpb3Jd
OwogCiAgICAgLy8gU3RhcnQgdGhlIG9wYWNpdHkgYW5pbWF0aW9uLiBXZSBjYW4gdXNlIGltcGxp
Y2l0IGFuaW1hdGlvbnMgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgd2hlbgogICAgIC8vIHRo
ZSBhbmltYXRpb24gZmluaXNoZXMuCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtD
QVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBbYmFja2dy
b3VuZExheWVyIHNldE9wYWNpdHk6MV07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9u
RHVyYXRpb246W3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXV07CisgICAgW1tbc2VsZiBfZnVsbFNj
cmVlbldpbmRvd10gYmFja2dyb3VuZExheWVyXSBzZXRPcGFjaXR5OjFdOwogICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07Ci0gICAgCi0gICAgLy8gVXNlIGEgQ0FCYXNpY0FuaW1hdGlvbiBoZXJl
IGZvciB0aGUgem9vbSBlZmZlY3QuIFdlIHdhbnQgdG8gYmUgbm90aWZpZWQgdGhhdCB0aGUgYW5p
bWF0aW9uIGhhcyAKLSAgICAvLyBjb21wbGV0ZWQgYnkgd2F5IG9mIHRoZSBDQUFuaW1hdGlvbiBk
ZWxlZ2F0ZS4KLSAgICBDQUJhc2ljQW5pbWF0aW9uKiB6b29tQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJ0cmFuc2Zvcm0iXTsKLSAgICBbem9vbUFu
aW1hdGlvbiBzZXRGcm9tVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpmaW5h
bFRyYW5zZm9ybV1dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldFRvVmFsdWU6W05TVmFsdWUgdmFs
dWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHldXTsKLSAgICBbem9vbUFu
aW1hdGlvbiBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXREdXJhdGlv
bjpkdXJhdGlvbl07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb246W0NBTWVk
aWFUaW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOmtDQU1lZGlhVGltaW5nRnVuY3Rpb25F
YXNlSW5FYXNlT3V0XV07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1v
ZGVGb3J3YXJkc107Ci0gICAgW3pvb21BbmltYXRpb24gc2V0VmFsdWU6KGlkKWtDRkJvb2xlYW5U
cnVlIGZvcktleTppc0VudGVyaW5nRnVsbHNjcmVlbktleV07Ci0gICAgCi0gICAgLy8gRGlzYWJs
ZSBpbXBsaWNpdCBhbmltYXRpb25zIGFuZCBzZXQgdGhlIGxheWVyJ3MgdHJhbnNmb3JtYXRpb24g
bWF0cml4IHRvIGl0cyBmaW5hbCBzdGF0ZS4KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0g
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICBbcmVuZGVyZXJM
YXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRElkZW50aXR5XTsKLSAgICBbcmVuZGVyZXJM
YXllciBhZGRBbmltYXRpb246em9vbUFuaW1hdGlvbiBmb3JLZXk6QCJ6b29tIl07Ci0gICAgW2Jh
Y2tncm91bmRMYXllciBzZXRGcmFtZTpOU1JlY3RUb0NHUmVjdChiYWNrZ3JvdW5kQm91bmRzKV07
Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLSAgICAKKwogICAgIE5TRW5hYmxlU2NyZWVu
VXBkYXRlcygpOworICAgIF9pc0FuaW1hdGluZyA9IFlFUzsKIH0KIAotLSAodm9pZClleGl0RnVs
bHNjcmVlbgorLSAodm9pZClmaW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbClj
b21wbGV0ZWQKIHsKLSAgICBpZiAoIV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsgICAg
Ci0gICAgICAKLSAgICBDQVRyYW5zZm9ybTNEIHN0YXJ0VHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0z
RElkZW50aXR5OwotICAgIGlmIChfaXNBbmltYXRpbmcpIHsKLSAgICAgICAgaWYgKF9yZW5kZXJl
ciAmJiBfcmVuZGVyZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICBD
QUxheWVyKiByZW5kZXJlckxheWVyID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5nKCktPmdy
YXBoaWNzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOwotICAgICAgICAgICAgc3RhcnRUcmFuc2Zv
cm0gPSBbW3JlbmRlcmVyTGF5ZXIgcHJlc2VudGF0aW9uTGF5ZXJdIHRyYW5zZm9ybV07Ci0gICAg
ICAgIH0KKyAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgCisgICAgaWYgKGNvbXBs
ZXRlZCkgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgLy8gU3dhcCB0aGUgd2ViVmlldyBwbGFj
ZWhvbGRlciBpbnRvIHBsYWNlLgorICAgICAgICBpZiAoIV93ZWJWaWV3UGxhY2Vob2xkZXIpCisg
ICAgICAgICAgICBfd2ViVmlld1BsYWNlaG9sZGVyLmFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGlu
aXRdKTsgICAgICAgIAorICAgICAgICBbc2VsZiBfc3dhcFZpZXc6X3dlYlZpZXcgd2l0aDpfd2Vi
Vmlld1BsYWNlaG9sZGVyLmdldCgpXTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZW4gaW5zZXJ0
IHRoZSBXZWJWaWV3IGludG8gdGhlIGZ1bGwgc2NyZWVuIHdpbmRvdworICAgICAgICBOU1ZpZXcq
IGFuaW1hdGlvblZpZXcgPSBbW3NlbGYgX2Z1bGxTY3JlZW5XaW5kb3ddIGFuaW1hdGlvblZpZXdd
OworICAgICAgICBbYW5pbWF0aW9uVmlldyBhZGRTdWJ2aWV3Ol93ZWJWaWV3IHBvc2l0aW9uZWQ6
TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOl9sYXllckhvc3RpbmdWaWV3LmdldCgpXTsKKyAgICAg
ICAgW193ZWJWaWV3IHNldEZyYW1lOlthbmltYXRpb25WaWV3IGJvdW5kc11dOwogICAgICAgICAK
LSAgICAgICAgLy8gVGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlIGZ1bmN0aW9ucyB3aWxsIG9ubHkg
YmUgY2FsbGVkIHRoZQotICAgICAgICAvLyBuZXh0IHRyaXAgdGhyb3VnaCB0aGUgcnVuLWxvb3As
IHNvIG1hbnVhbGx5IGNhbGwgdGhlIGRlbGVnYXRlCi0gICAgICAgIC8vIGZ1bmN0aW9uIGhlcmUs
IGxldHRpbmcgaXQga25vdyB0aGUgYW5pbWF0aW9uIGRpZCBub3QgY29tcGxldGU6Ci0gICAgICAg
IFtzZWxmIHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbjpOT107Ci0gICAgICAgIEFTU0VSVCghX2lz
QW5pbWF0aW5nKTsKKyAgICAgICAgLy8gRklYTUU6IEluIEJhcm9sbywgb3JkZXJJbiB3aWxsIGFu
aW1hdGUsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuICBGaW5kIGEgd2F5CisgICAgICAgIC8v
IHRvIHdvcmsgYXJvdW5kIHRoaXMgYmVoYXZpb3IuCisgICAgICAgIC8vW1tfd2ViVmlld1BsYWNl
aG9sZGVyLmdldCgpIHdpbmRvd10gb3JkZXJPdXQ6c2VsZl07CisgICAgICAgIFtbc2VsZiB3aW5k
b3ddIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOwogICAgIH0KLSAgICBfaXNGdWxsc2NyZWVu
ID0gTk87CisgICAgCisgICAgW3NlbGYgX21hbmFnZXJdLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsK
KyAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsKKyAgICAKKyAgICBfaXNBbmltYXRpbmcgPSBO
TzsKK30KKworLSAodm9pZClleGl0RnVsbFNjcmVlbgoreworICAgIGlmICghX2lzRnVsbFNjcmVl
bikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIF9pc0Z1bGxTY3JlZW4gPSBOTzsKICAgICBf
aXNBbmltYXRpbmcgPSBZRVM7CiAgICAgCiAgICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRlcygpOwog
ICAgIAotICAgIC8vIFRoZSB1c2VyIG1heSBoYXZlIG1vdmVkIHRoZSBmdWxsc2NyZWVuIHdpbmRv
dyBpbiBTcGFjZXMsIHNvIHRlbXBvcmFyaWx5IGNoYW5nZSAKKyAgICBbc2VsZiBfbWFuYWdlcl0t
PndpbGxFeGl0RnVsbFNjcmVlbigpOworICAgIFtzZWxmIF9tYW5hZ2VyXS0+YmVnaW5FeGl0RnVs
bFNjcmVlbkFuaW1hdGlvbihbc2VsZiBfYW5pbWF0aW9uRHVyYXRpb25dKTsKK30KKworLSAodm9p
ZCliZWdhbkV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uCit7ICAgCisgICAgW3NlbGYgX3VwZGF0ZU1l
bnVBbmREb2NrRm9yRnVsbFNjcmVlbl07ICAgCisgICAgW3NlbGYgX3VwZGF0ZVBvd2VyQXNzZXJ0
aW9uc107CisgICAgCisgICAgLy8gVGhlIHVzZXIgbWF5IGhhdmUgbW92ZWQgdGhlIGZ1bGxTY3Jl
ZW4gd2luZG93IGluIFNwYWNlcywgc28gdGVtcG9yYXJpbHkgY2hhbmdlIAogICAgIC8vIHRoZSBj
b2xsZWN0aW9uQmVoYXZpb3Igb2YgdGhlIHdlYlZpZXcncyB3aW5kb3c6CiAgICAgTlNXaW5kb3cq
IHdlYldpbmRvdyA9IFtbc2VsZiB3ZWJWaWV3XSB3aW5kb3ddOwogICAgIE5TV2luZG93Q29sbGVj
dGlvbkJlaGF2aW9yIGJlaGF2aW9yID0gW3dlYldpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdOwpA
QCAtNTI0LDEyNCArMjg1LDEwOSBAQCBwcml2YXRlOgogICAgIFt3ZWJXaW5kb3cgb3JkZXJXaW5k
b3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl1d
OwogICAgIFt3ZWJXaW5kb3cgc2V0Q29sbGVjdGlvbkJlaGF2aW9yOmJlaGF2aW9yXTsKICAgICAK
LSAgICAvLyBUaGUgZnVsbHNjcmVlbiBhbmltYXRpb24gbWF5IGhhdmUgYmVlbiBjYW5jZWxsZWQg
YmVmb3JlIHRoZSAKLSAgICAvLyB3ZWJWaWV3IHdhcyBtb3ZlZCB0byB0aGUgZnVsbHNjcmVlbiB3
aW5kb3cuIENoZWNrIHRvIHNlZQotICAgIC8vIGlmIHRoZSBfcGxhY2Vob2xkZXJWaWV3IGV4aXN0
cyBhbmQgaXMgaW4gYSB3aW5kb3cgYmVmb3JlCi0gICAgLy8gYXR0ZW1wdGluZyB0byBzd2FwIHRo
ZSB3ZWJWaWV3IGJhY2sgdG8gaXQncyBvcmlnaW5hbCB0cmVlOgotICAgIGlmIChfcGxhY2Vob2xk
ZXJWaWV3ICYmIFtfcGxhY2Vob2xkZXJWaWV3IHdpbmRvd10pIHsKLSAgICAgICAgLy8gTW92ZSB0
aGUgd2ViVmlldyBiYWNrIHRvIGl0cyBvd24gbmF0aXZlIHdpbmRvdzoKLSAgICAgICAgV2ViVmll
dyogd2ViVmlldyA9IFtzZWxmIHdlYlZpZXddOwotICAgICAgICBbd2ViVmlldyBzZXRGcmFtZTpb
X3BsYWNlaG9sZGVyVmlldyBmcmFtZV1dOwotICAgICAgICBbd2ViVmlldyBzZXRBdXRvcmVzaXpp
bmdNYXNrOltfcGxhY2Vob2xkZXJWaWV3IGF1dG9yZXNpemluZ01hc2tdXTsKLSAgICAgICAgW3dl
YlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIFtbX3BsYWNlaG9sZGVyVmlldyBz
dXBlcnZpZXddIHJlcGxhY2VTdWJ2aWV3Ol9wbGFjZWhvbGRlclZpZXcgd2l0aDp3ZWJWaWV3XTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEJlY2F1c2UgdGhlIGFuaW1hdGlvbiB2aWV3IGlzIGxheWVy
LWhvc3RlZCwgbWFrZSBzdXJlIHRvIAotICAgICAgICAvLyBkaXNhYmxlIGFuaW1hdGlvbnMgd2hl
biBjaGFuZ2luZyB0aGUgbGF5ZXIncyBvcGFjaXR5LiBPdGhlci0KLSAgICAgICAgLy8gd2lzZSwg
dGhlIGNvbnRlbnQgd2lsbCBhcHBlYXIgdG8gZmFkZSBpbnRvIHZpZXcuCi0gICAgICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlv
bnM6WUVTXTsKLSAgICAgICAgV2ViRnVsbHNjcmVlbldpbmRvdyogd2luZG93ID0gW3NlbGYgX2Z1
bGxzY3JlZW5XaW5kb3ddOwotICAgICAgICBbW1t3aW5kb3cgYW5pbWF0aW9uVmlld10gbGF5ZXJd
IHNldE9wYWNpdHk6MV07Ci0gICAgICAgIFt3aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0Nv
bG9yIGNsZWFyQ29sb3JdXTsKLSAgICAgICAgW3dpbmRvdyBzZXRPcGFxdWU6Tk9dOwotICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAgIH0KLQotICAgIE5TVmlldyogYW5pbWF0aW9u
VmlldyA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0aW9uVmlld107Ci0gICAgQ0dS
ZWN0IGxheWVyRW5kRnJhbWUgPSBOU1JlY3RUb0NHUmVjdChbYW5pbWF0aW9uVmlldyBjb252ZXJ0
UmVjdDpOU1JlY3RGcm9tQ0dSZWN0KF9pbml0aWFsRnJhbWUpIGZyb21WaWV3Om5pbF0pOwotCi0g
ICAgLy8gVGhlIF9yZW5kZXJlciBtaWdodCBiZSBOVUxMIGR1ZSB0byBpdHMgYW5jZXN0b3IgYmVp
bmcgcmVtb3ZlZDoKLSAgICBDR1JlY3QgbGF5ZXJTdGFydEZyYW1lID0gQ0dSZWN0WmVybzsKLSAg
ICBpZiAoX3JlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGRSZW5kZXJlciA9IF9y
ZW5kZXJlci0+Zmlyc3RDaGlsZEJveCgpOwotICAgICAgICBsYXllclN0YXJ0RnJhbWUgPSBDR1Jl
Y3RNYWtlKGNoaWxkUmVuZGVyZXItPngoKSwgY2hpbGRSZW5kZXJlci0+eSgpLCBjaGlsZFJlbmRl
cmVyLT53aWR0aCgpLCBjaGlsZFJlbmRlcmVyLT5oZWlnaHQoKSk7Ci0gICAgfQorICAgIC8vIFN3
YXAgdGhlIHdlYlZpZXcgYmFjayBpbnRvIGl0cyBvcmlnaW5hbCBwb3NpdGlvbjoKKyAgICBbc2Vs
ZiBfc3dhcFZpZXc6X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKSB3aXRoOl93ZWJWaWV3XTsKICAg
ICAKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KF9lbGVtZW50LmdldCgpKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQo
KTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5p
bWF0aW9uRHVyYXRpb246W3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXV07CisgICAgW1tbc2VsZiBf
ZnVsbFNjcmVlbldpbmRvd10gYmFja2dyb3VuZExheWVyXSBzZXRPcGFjaXR5OjBdOworICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07CiAgICAgCi0gICAgLy8gV2UgaGF2ZSB0byByZXRhaW4gb3Vy
c2VsdmVzIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhbGl2ZSBmb3IgdGhlIGVuZCBvZiB0aGUgYW5p
bWF0aW9uLgotICAgIC8vIElmIG91ciBvd25lciByZWxlYXNlcyB1cyB3ZSBjb3VsZCBjcmFzaCBp
ZiB0aGlzIGlzIG5vdCB0aGUgY2FzZS4KLSAgICAvLyBCYWxhbmNlZCBpbiB3aW5kb3dEaWRFeGl0
RnVsbHNjcmVlbgotICAgIFtzZWxmIHJldGFpbl07CisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVz
KCk7CisgICAgX2lzQW5pbWF0aW5nID0gWUVTOworfQorCistICh2b2lkKWZpbmlzaGVkRXhpdEZ1
bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCit7CisgICAgTlNEaXNhYmxlU2NyZWVu
VXBkYXRlcygpOwogICAgIAotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZnVsbHNjcmVlbiBy
ZW5kZXJlciBpcyBjb21wb3NpdGVkLiBJZiBub3QsIGFjY2VsZXJhdGVkIGdyYXBoaWNzIAotICAg
IC8vIG1heSBiZSBkaXNhYmxlZC4gSW4gdGhpcyBjYXNlLCBkbyBub3QgYXR0ZW1wdCB0byBhbmlt
YXRlIHRoZSBjb250ZW50cyBpbnRvIHBsYWNlOyAKLSAgICAvLyBtZXJlbHkgc25hcCB0byB0aGUg
ZmluYWwgcG9zaXRpb246Ci0gICAgaWYgKCFfcmVuZGVyZXIgfHwgIV9yZW5kZXJlci0+bGF5ZXIo
KS0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgW3NlbGYgd2luZG93RGlkRXhpdEZ1bGxzY3Jl
ZW46WUVTXTsKLSAgICAgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoY29tcGxldGVkKSB7CisgICAgICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9j
a0ZvckZ1bGxTY3JlZW5dOworICAgICAgICBbc2VsZiBfdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsK
KyAgICAgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworICAgICAg
ICAgICAgICAgIAorICAgICAgICBbW3NlbGYgd2luZG93XSBvcmRlck91dDpzZWxmXTsKKyAgICAg
ICAgW1tfd2ViVmlldyB3aW5kb3ddIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOwogICAgIH0K
LSAgICAgICAgCi0gICAgR3JhcGhpY3NMYXllciogcmVuZGVyZXJHcmFwaGljcyA9IF9yZW5kZXJl
ci0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7Ci0gICAgCi0gICAgW3NlbGYg
X2RvY3VtZW50XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudCk7Ci0KLSAgICByZW5kZXJlckdyYXBoaWNzLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZSgpOyAgICAKLQotICAgIENBTGF5ZXIqIHJlbmRlcmVyTGF5ZXIgPSByZW5kZXJlckdyYXBoaWNz
LT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBzZXRSZW5k
ZXJlckxheWVyOnJlbmRlcmVyTGF5ZXJdOyAgICAKLSAgICAKLSAgICAvLyBDcmVhdGUgYSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXggdGhhdCB3aWxsIHRyYW5zZm9ybSB0aGUgcmVuZGVyZXIgbGF5ZXIg
c3VjaCB0aGF0IAotICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVsZW1lbnQgYXBwZWFycyB0byBtb3Zl
IGZyb20gdGhlIGZ1bGwgc2NyZWVuIHRvIGl0cyBvcmlnaW5hbCBwb3NpdGlvbiAKLSAgICAvLyBh
bmQgc2l6ZS4gUGVyZm9ybSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdHdvIHN0ZXBzLCB1c2luZyB0
aGUgQ0FMYXllcidzIG1hdHJpeCAKLSAgICAvLyBtYXRoIHRvIGNhbGN1bGF0ZSB0aGUgZWZmZWN0
cyBvZiBlYWNoIHN0ZXA6Ci0gICAgLy8gMS4gQXBwbHkgYSBzY2FsZSB0cmFuZm9ybSB0byBzaHJp
bmsgdGhlIGFwcGFyZW50IHNpemUgb2YgdGhlIGxheWVyIHRvIHRoZSBvcmlnaW5hbAotICAgIC8v
ICAgIGVsZW1lbnQgc2NyZWVuIHNpemUuCi0gICAgLy8gMi4gQXBwbHkgYSB0cmFuc2xhdGlvbiB0
cmFuc2Zvcm0gdG8gbW92ZSB0aGUgc2hydW5rIGxheWVyIGludG8gdGhlIHNhbWUgc2NyZWVuIHBv
c2l0aW9uCi0gICAgLy8gICAgYXMgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCi0gICAgQ0FUcmFuc2Zv
cm0zRCBzaHJpbmtUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGxheWVyRW5kRnJh
bWUuc2l6ZS53aWR0aCAvIGxheWVyU3RhcnRGcmFtZS5zaXplLndpZHRoLCBsYXllckVuZEZyYW1l
LnNpemUuaGVpZ2h0IC8gbGF5ZXJTdGFydEZyYW1lLnNpemUuaGVpZ2h0LCAxKTsKLSAgICBbcmVu
ZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06c2hyaW5rVHJhbnNmb3JtXTsKLSAgICBDR1JlY3Qgc2hy
dW5rRGVzdGluYXRpb25GcmFtZSA9IFtyZW5kZXJlckxheWVyIGNvbnZlcnRSZWN0OmxheWVyU3Rh
cnRGcmFtZSB0b0xheWVyOlthbmltYXRpb25WaWV3IGxheWVyXV07Ci0gICAgQ0FUcmFuc2Zvcm0z
RCBtb3ZlVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbihsYXllckVuZEZy
YW1lLm9yaWdpbi54IC0gc2hydW5rRGVzdGluYXRpb25GcmFtZS5vcmlnaW4ueCwgbGF5ZXJFbmRG
cmFtZS5vcmlnaW4ueSAtIHNocnVua0Rlc3RpbmF0aW9uRnJhbWUub3JpZ2luLnksIDApOwotICAg
IENBVHJhbnNmb3JtM0QgZmluYWxUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNEQ29uY2F0KHNocmlu
a1RyYW5zZm9ybSwgbW92ZVRyYW5zZm9ybSk7Ci0gICAgW3JlbmRlcmVyTGF5ZXIgc2V0VHJhbnNm
b3JtOmZpbmFsVHJhbnNmb3JtXTsKKyAgICAKKyAgICBbc2VsZiBfbWFuYWdlcl0tPmRpZEV4aXRG
dWxsU2NyZWVuKCk7CisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgCisgICAgX2lz
QW5pbWF0aW5nID0gTk87Cit9CiAKLSAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9IFtzZWxm
IF9hbmltYXRpb25EdXJhdGlvbl07CistICh2b2lkKWVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGU6KGNvbnN0IFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCYpbGF5ZXJUcmVlQ29udGV4dAor
eworICAgIGlmIChfbGF5ZXJIb3N0aW5nVmlldykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgQ0FM
YXllciogYmFja2dyb3VuZExheWVyID0gW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBiYWNrZ3Jv
dW5kTGF5ZXJdOworICAgIEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOworICAg
IAorICAgIC8vIENyZWF0ZSBhbiBOU1ZpZXcgdGhhdCB3aWxsIGhvc3Qgb3VyIGxheWVyIHRyZWUu
CisgICAgX2xheWVySG9zdGluZ1ZpZXcuYWRvcHROUyhbW05TVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpbW3NlbGYgd2luZG93XSBmcmFtZV1dKTsKKyAgICBbX2xheWVySG9zdGluZ1ZpZXcuZ2V0
KCkgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRT
aXphYmxlXTsKKyAgICAKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNh
Y3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246ZHVyYXRpb25dOwotICAgIFtiYWNrZ3JvdW5kTGF5
ZXIgc2V0T3BhY2l0eTowXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIFtDQVRy
YW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgW1tbc2VsZiB3aW5kb3ddIGNv
bnRlbnRWaWV3XSBhZGRTdWJ2aWV3Ol9sYXllckhvc3RpbmdWaWV3LmdldCgpXTsKICAgICAKLSAg
ICBDQUJhc2ljQW5pbWF0aW9uKiB6b29tQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5p
bWF0aW9uV2l0aEtleVBhdGg6QCJ0cmFuc2Zvcm0iXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXRG
cm9tVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpzdGFydFRyYW5zZm9ybV1d
OwotICAgIFt6b29tQW5pbWF0aW9uIHNldFRvVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFu
c2Zvcm0zRDpmaW5hbFRyYW5zZm9ybV1dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldERlbGVnYXRl
OnNlbGZdOwotICAgIFt6b29tQW5pbWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBb
em9vbUFuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbjpbQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uIGZ1
bmN0aW9uV2l0aE5hbWU6a0NBTWVkaWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VPdXRdXTsKLSAg
ICBbem9vbUFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxsTW9kZUJvdGhdOwotICAgIFt6b29t
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOwotICAgIFt6b29tQW5pbWF0aW9u
IHNldFZhbHVlOihpZClrQ0ZCb29sZWFuRmFsc2UgZm9yS2V5OmlzRW50ZXJpbmdGdWxsc2NyZWVu
S2V5XTsKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyIHRoYXQgd2lsbCBiYWNrIHRoZSBOU1Zp
ZXcuCisgICAgUmV0YWluUHRyPENBTGF5ZXI+IHJvb3RMYXllcihBZG9wdE5TLCBbW0NBTGF5ZXIg
YWxsb2NdIGluaXRdKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgW3Jvb3RMYXllci5nZXQoKSBzZXRO
YW1lOkAiSG9zdGluZyByb290IGxheWVyIl07CisjZW5kaWYKICAgICAKLSAgICBbcmVuZGVyZXJM
YXllciBhZGRBbmltYXRpb246em9vbUFuaW1hdGlvbiBmb3JLZXk6QCJ6b29tIl07CisgICAgQ0FM
YXllciAqcmVuZGVyTGF5ZXIgPSBXS01ha2VSZW5kZXJMYXllcihsYXllclRyZWVDb250ZXh0LmNv
bnRleHRJRCk7CisgICAgW3Jvb3RMYXllci5nZXQoKSBhZGRTdWJsYXllcjpyZW5kZXJMYXllcl07
CiAgICAgCi0gICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgW19sYXllckhvc3RpbmdW
aWV3LmdldCgpIHNldExheWVyOnJvb3RMYXllci5nZXQoKV07CisgICAgW19sYXllckhvc3RpbmdW
aWV3LmdldCgpIHNldFdhbnRzTGF5ZXI6WUVTXTsKKyAgICAKKyAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOworfQorCistICh2b2lkKWV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZQorewor
ICAgIGlmICghX2xheWVySG9zdGluZ1ZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBb
X2xheWVySG9zdGluZ1ZpZXcuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW19sYXll
ckhvc3RpbmdWaWV3LmdldCgpIHNldExheWVyOm5pbF07CisgICAgW19sYXllckhvc3RpbmdWaWV3
LmdldCgpIHNldFdhbnRzTGF5ZXI6Tk9dOworICAgIAorICAgIF9sYXllckhvc3RpbmdWaWV3ID0g
MDsKK30KKworLSAodm9pZClnZXRGdWxsU2NyZWVuUmVjdDooV2ViQ29yZTo6SW50UmVjdCopcmVj
dAoreworICAgIEFTU0VSVChyZWN0KTsKKyAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSBbW3NlbGYg
d2luZG93XSBmcmFtZV07CisgICAgcmVjdC0+c2V0WChyb3VuZGwoTlNNaW5YKHdpbmRvd0ZyYW1l
KSkpOworICAgIHJlY3QtPnNldFkocm91bmRsKE5TTWluWSh3aW5kb3dGcmFtZSkpKTsKKyAgICBy
ZWN0LT5zZXRXaWR0aChyb3VuZGwoTlNXaWR0aCh3aW5kb3dGcmFtZSkpKTsKKyAgICByZWN0LT5z
ZXRIZWlnaHQocm91bmRsKE5TSGVpZ2h0KHdpbmRvd0ZyYW1lKSkpOwogfQogCiAjcHJhZ21hIG1h
cmsgLQogI3ByYWdtYSBtYXJrIEludGVybmFsIEludGVyZmFjZQogCi0tICh2b2lkKV91cGRhdGVN
ZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW4KKy0gKHZvaWQpX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVs
bFNjcmVlbgogewogICAgIC8vIE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25PcHRpb25zIGlzIGF2
YWlsYWJsZSBvbiA+IDEwLjYgb25seToKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICBOU0FwcGxpY2F0aW9uUHJlc2Vu
dGF0aW9uT3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkRlZmF1bHQ7
Ci0gICAgTlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4gPSBbW3NlbGYgd2luZG93XSBzY3JlZW5d
OworICAgIE5TU2NyZWVuKiBmdWxsU2NyZWVuU2NyZWVuID0gW1tzZWxmIHdpbmRvd10gc2NyZWVu
XTsKICAgICAKLSAgICBpZiAoX2lzRnVsbHNjcmVlbikgewotICAgICAgICAvLyBBdXRvLWhpZGUg
dGhlIG1lbnUgYmFyIGlmIHRoZSBmdWxsc2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJh
cjoKLSAgICAgICAgLy8gTk9URTogaWYgdGhlIGZ1bGxzY3JlZW5TY3JlZW4gY29udGFpbnMgdGhl
IG1lbnUgYmFyIGJ1dCBub3QgdGhlIGRvY2ssIHdlIG11c3Qgc3RpbGwgCisgICAgaWYgKF9pc0Z1
bGxTY3JlZW4pIHsKKyAgICAgICAgLy8gQXV0by1oaWRlIHRoZSBtZW51IGJhciBpZiB0aGUgZnVs
bFNjcmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVudSBiYXI6CisgICAgICAgIC8vIE5PVEU6IGlm
IHRoZSBmdWxsU2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhciBidXQgbm90IHRoZSBk
b2NrLCB3ZSBtdXN0IHN0aWxsIAogICAgICAgICAvLyBhdXRvLWhpZGUgdGhlIGRvY2ssIG9yIGFu
IGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICAgICAgaWYgKFtbTlNTY3JlZW4gc2NyZWVu
c10gb2JqZWN0QXRJbmRleDowXSA9PSBmdWxsc2NyZWVuU2NyZWVuKQorICAgICAgICBpZiAoW1tO
U1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdID09IGZ1bGxTY3JlZW5TY3JlZW4pCiAg
ICAgICAgICAgICBvcHRpb25zIHw9IChOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uQXV0b0hpZGVN
ZW51QmFyIHwgTlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbkF1dG9IaWRlRG9jayk7CiAgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHNjcmVlbiBjb250YWlucyB0aGUgZG9jayBieSBjb21w
YXJpbmcgdGhlIHNjcmVlbidzIGZyYW1lIHRvIGl0cwogICAgICAgICAvLyB2aXNpYmxlRnJhbWU7
IGlmIGEgZG9jayBpcyBwcmVzZW50LCB0aGUgdmlzaWJsZUZyYW1lIHdpbGwgZGlmZmVyLiBJZiB0
aGUgY3VycmVudCBzY3JlZW4KICAgICAgICAgLy8gY29udGFpbnMgdGhlIGRvY2ssIGhpZGUgaXQu
Ci0gICAgICAgIGVsc2UgaWYgKCFOU0VxdWFsUmVjdHMoW2Z1bGxzY3JlZW5TY3JlZW4gZnJhbWVd
LCBbZnVsbHNjcmVlblNjcmVlbiB2aXNpYmxlRnJhbWVdKSkKKyAgICAgICAgZWxzZSBpZiAoIU5T
RXF1YWxSZWN0cyhbZnVsbFNjcmVlblNjcmVlbiBmcmFtZV0sIFtmdWxsU2NyZWVuU2NyZWVuIHZp
c2libGVGcmFtZV0pKQogICAgICAgICAgICAgb3B0aW9ucyB8PSBOU0FwcGxpY2F0aW9uUHJlc2Vu
dGF0aW9uQXV0b0hpZGVEb2NrOwogICAgIH0KICAgICAKQEAgLTY0OSw3ICszOTUsNyBAQCBwcml2
YXRlOgogICAgICAgICBbTlNBcHAgc2V0UHJlc2VudGF0aW9uT3B0aW9uczpvcHRpb25zXTsKICAg
ICBlbHNlCiAjZW5kaWYKLSAgICAgICAgU2V0U3lzdGVtVUlNb2RlKF9pc0Z1bGxzY3JlZW4gPyBr
VUlNb2RlTm9ybWFsIDoga1VJTW9kZUFsbEhpZGRlbiwgMCk7CisgICAgICAgIFNldFN5c3RlbVVJ
TW9kZShfaXNGdWxsU2NyZWVuID8ga1VJTW9kZU5vcm1hbCA6IGtVSU1vZGVBbGxIaWRkZW4sIDAp
OwogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIC8vIElPUE1Bc3NlcnRpb25D
cmVhdGVXaXRoTmFtZSBub3QgZGVmaW5lZCBvbiA8IDEwLjUKQEAgLTY1OSw3ICs0MDUsNyBAQCBw
cml2YXRlOgogI2lmIGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgLy8gSU9QTUFzc2VydGlv
bkNyZWF0ZVdpdGhOYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZSAxMC41IFNESwogICAgICAgICBJ
T1BNQXNzZXJ0aW9uQ3JlYXRlKGtJT1BNQXNzZXJ0aW9uVHlwZU5vRGlzcGxheVNsZWVwLCBrSU9Q
TUFzc2VydGlvbkxldmVsT24sICZfaWRsZURpc3BsYXlTbGVlcEFzc2VydGlvbik7CiAjZWxzZSAv
LyBJT1BNQXNzZXJ0aW9uQ3JlYXRlIGlzIGRlcHJlY2lhdGVkIGluID4gMTAuNQotICAgICAgICBJ
T1BNQXNzZXJ0aW9uQ3JlYXRlV2l0aE5hbWUoa0lPUE1Bc3NlcnRpb25UeXBlTm9EaXNwbGF5U2xl
ZXAsIGtJT1BNQXNzZXJ0aW9uTGV2ZWxPbiwgQ0ZTVFIoIldlYktpdCBwbGF5aW5nIGEgdmlkZW8g
ZnVsbHNjcmVlbi4iKSwgJl9pZGxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uKTsKKyAgICBJT1BNQXNz
ZXJ0aW9uQ3JlYXRlV2l0aE5hbWUoa0lPUE1Bc3NlcnRpb25UeXBlTm9EaXNwbGF5U2xlZXAsIGtJ
T1BNQXNzZXJ0aW9uTGV2ZWxPbiwgQ0ZTVFIoIldlYktpdCBwbGF5aW5nIGEgdmlkZW8gZnVsbFNj
cmVlbi4iKSwgJl9pZGxlRGlzcGxheVNsZWVwQXNzZXJ0aW9uKTsKICNlbmRpZgogfQogCkBAIC02
NzcsNyArNDIzLDcgQEAgcHJpdmF0ZToKICNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
IC8vIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgMTAu
NSBTREsKICAgICAgICAgSU9QTUFzc2VydGlvbkNyZWF0ZShrSU9QTUFzc2VydGlvblR5cGVOb0lk
bGVTbGVlcCwga0lPUE1Bc3NlcnRpb25MZXZlbE9uLCAmX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlv
bik7CiAjZWxzZSAvLyBJT1BNQXNzZXJ0aW9uQ3JlYXRlIGlzIGRlcHJlY2lhdGVkIGluID4gMTAu
NQotICAgIElPUE1Bc3NlcnRpb25DcmVhdGVXaXRoTmFtZShrSU9QTUFzc2VydGlvblR5cGVOb0lk
bGVTbGVlcCwga0lPUE1Bc3NlcnRpb25MZXZlbE9uLCBDRlNUUigiV2ViS2l0IHBsYXlpbmcgYSB2
aWRlbyBmdWxsc2NyZWVuLiIpLCAmX2lkbGVTeXN0ZW1TbGVlcEFzc2VydGlvbik7CisgICAgSU9Q
TUFzc2VydGlvbkNyZWF0ZVdpdGhOYW1lKGtJT1BNQXNzZXJ0aW9uVHlwZU5vSWRsZVNsZWVwLCBr
SU9QTUFzc2VydGlvbkxldmVsT24sIENGU1RSKCJXZWJLaXQgcGxheWluZyBhIHZpZGVvIGZ1bGxT
Y3JlZW4uIiksICZfaWRsZVN5c3RlbVNsZWVwQXNzZXJ0aW9uKTsKICNlbmRpZgogfQogCkBAIC03
MTIsOSArNDU4LDcgQEAgcHJpdmF0ZToKIC0gKHZvaWQpX3VwZGF0ZVBvd2VyQXNzZXJ0aW9ucwog
ewogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAKLSAgICBCT09MIGlzUGxheWluZyA9
IFtzZWxmIF9pc0FueU1vdmllUGxheWluZ107Ci0gICAgCi0gICAgaWYgKGlzUGxheWluZyAmJiBf
aXNGdWxsc2NyZWVuKSB7CisgICAgaWYgKF9pc1BsYXlpbmcgJiYgX2lzRnVsbFNjcmVlbikgewog
ICAgICAgICBbc2VsZiBfZGlzYWJsZUlkbGVTeXN0ZW1TbGVlcF07CiAgICAgICAgIFtzZWxmIF9k
aXNhYmxlSWRsZURpc3BsYXlTbGVlcF07CiAgICAgICAgIFtzZWxmIF9lbmFibGVUaWNrbGVUaW1l
cl07CkBAIC03MjYsNTAgKzQ3MCw0MSBAQCBwcml2YXRlOgogI2VuZGlmCiB9CiAKKy0gKFdlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHkqKV9tYW5hZ2VyCit7CisgICAgV2ViUGFnZVByb3h5KiB3ZWJQ
YWdlID0gdG9JbXBsKFtfd2ViVmlldyBwYWdlUmVmXSk7CisgICAgaWYgKCF3ZWJQYWdlKQorICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gd2ViUGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIo
KTsKK30KKwogLSAodm9pZClfcmVxdWVzdEV4aXQKIHsKLSAgICBbc2VsZiBleGl0RnVsbHNjcmVl
bl07CisgICAgW3NlbGYgZXhpdEZ1bGxTY3JlZW5dOwogICAgIF9mb3JjZURpc2FibGVBbmltYXRp
b24gPSBOTzsKIH0KIAotLSAodm9pZClfcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlv
bjooQk9PTClhbmltYXRpb24KKy0gKHZvaWQpX3JlcXVlc3RFeGl0RnVsbFNjcmVlbldpdGhBbmlt
YXRpb246KEJPT0wpYW5pbWF0aW9uCiB7CiAgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFh
bmltYXRpb247CiAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4
aXQpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07Ci0KKyAgICAKIH0KIAotLSAoQk9PTClf
aXNBbnlNb3ZpZVBsYXlpbmcKKy0gKHZvaWQpX3N3YXBWaWV3OihOU1ZpZXcqKXZpZXcgd2l0aDoo
TlNWaWV3KilvdGhlclZpZXcKIHsKLSAgICBpZiAoIV9lbGVtZW50KQotICAgICAgICByZXR1cm4g
Tk87Ci0gICAgCi0gICAgTm9kZSogbmV4dE5vZGUgPSBfZWxlbWVudC5nZXQoKTsKLSAgICB3aGls
ZSAobmV4dE5vZGUpCi0gICAgewotICAgICAgICBpZiAobmV4dE5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp2aWRlb1RhZykpIHsKLSAgICAgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obmV4dE5vZGUpOwotICAgICAgICAg
ICAgaWYgKCFlbGVtZW50LT5wYXVzZWQoKSAmJiAhZWxlbWVudC0+ZW5kZWQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gWUVTOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBuZXh0Tm9k
ZSA9IG5leHROb2RlLT50cmF2ZXJzZU5leHROb2RlKF9lbGVtZW50LmdldCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIE5POworICAgIFtvdGhlclZpZXcgc2V0RnJhbWU6W3ZpZXcgZnJhbWVd
XTsgICAgICAgIAorICAgIFtvdGhlclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbdmlldyBhdXRv
cmVzaXppbmdNYXNrXV07CisgICAgW290aGVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAg
ICBbW3ZpZXcgc3VwZXJ2aWV3XSByZXBsYWNlU3Vidmlldzp2aWV3IHdpdGg6b3RoZXJWaWV3XTsK
IH0KIAogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBVdGlsaXR5IEZ1bmN0aW9ucwogCi0t
IChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5XaW5kb3cKLXsKLSAgICByZXR1cm4g
KFdlYkZ1bGxzY3JlZW5XaW5kb3cgKilbc2VsZiB3aW5kb3ddOwotfQotCi0tIChEb2N1bWVudCop
X2RvY3VtZW50IAorLSAoV0tGdWxsU2NyZWVuV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKIHsK
LSAgICByZXR1cm4gY29yZShbW1tzZWxmIHdlYlZpZXddIG1haW5GcmFtZV0gRE9NRG9jdW1lbnRd
KTsKKyAgICByZXR1cm4gKFdLRnVsbFNjcmVlbldpbmRvdyAqKVtzZWxmIHdpbmRvd107CiB9CiAK
IC0gKENGVGltZUludGVydmFsKV9hbmltYXRpb25EdXJhdGlvbgpAQCAtNzk1LDcgKzUzMCw3IEBA
IHByaXZhdGU6CiBAZW5kCiAKICNwcmFnbWEgbWFyayAtCi1AaW1wbGVtZW50YXRpb24gV2ViRnVs
bHNjcmVlbldpbmRvdworQGltcGxlbWVudGF0aW9uIFdLRnVsbFNjcmVlbldpbmRvdwogCiAtIChp
ZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOihOU1VJ
bnRlZ2VyKWFTdHlsZSBiYWNraW5nOihOU0JhY2tpbmdTdG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBk
ZWZlcjooQk9PTClmbGFnCiB7CkBAIC04MjYsMTIgKzU2MSw2IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgX2JhY2tncm91bmRMYXllciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CiAgICAgW2NvbnRl
bnRMYXllciBhZGRTdWJsYXllcjpfYmFja2dyb3VuZExheWVyXTsKLSNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBbY29u
dGVudExheWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwotI2Vsc2UKLSAgICBbY29udGVudExh
eWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoMSwgLTEsIDEp
XTsKLSNlbmRpZgotICAgIFtjb250ZW50TGF5ZXIgc2V0T3BhY2l0eTowXTsKICAgICAKICAgICBb
X2JhY2tncm91bmRMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Q0dDb2xvckdldENvbnN0YW50Q29s
b3Ioa0NHQ29sb3JCbGFjayldOwogICAgIFtfYmFja2dyb3VuZExheWVyIHNldE9wYWNpdHk6MF07
CkBAIC04NDIsNyArNTcxLDYgQEAgcHJpdmF0ZToKIHsKICAgICBbX2FuaW1hdGlvblZpZXcgcmVs
ZWFzZV07CiAgICAgW19iYWNrZ3JvdW5kTGF5ZXIgcmVsZWFzZV07Ci0gICAgW19yZW5kZXJlckxh
eWVyIHJlbGVhc2VdOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIApAQCAtODYxLDI2ICs1ODks
NyBAQCBwcml2YXRlOgogLSAodm9pZCljYW5jZWxPcGVyYXRpb246KGlkKXNlbmRlcgogewogICAg
IFVOVVNFRF9QQVJBTShzZW5kZXIpOwotICAgIFtbc2VsZiB3aW5kb3dDb250cm9sbGVyXSBfcmVx
dWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpZRVNdOwotfQotCi0tIChDQUxheWVyKily
ZW5kZXJlckxheWVyCi17Ci0gICAgcmV0dXJuIF9yZW5kZXJlckxheWVyOwotfQotCi0tICh2b2lk
KXNldFJlbmRlcmVyTGF5ZXI6KENBTGF5ZXIgKilyZW5kZXJlckxheWVyCi17Ci0gICAgW0NBVHJh
bnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllF
U107Ci0gICAgW3JlbmRlcmVyTGF5ZXIgcmV0YWluXTsKLSAgICBbX3JlbmRlcmVyTGF5ZXIgcmVt
b3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFtfcmVuZGVyZXJMYXllciByZWxlYXNlXTsKLSAgICBf
cmVuZGVyZXJMYXllciA9IHJlbmRlcmVyTGF5ZXI7Ci0gICAgCi0gICAgaWYgKF9yZW5kZXJlckxh
eWVyKQotICAgICAgICBbW1tzZWxmIGFuaW1hdGlvblZpZXddIGxheWVyXSBhZGRTdWJsYXllcjpf
cmVuZGVyZXJMYXllcl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICBbW3NlbGYg
d2luZG93Q29udHJvbGxlcl0gX3JlcXVlc3RFeGl0RnVsbFNjcmVlbldpdGhBbmltYXRpb246WUVT
XTsKIH0KIAogLSAoQ0FMYXllciopYmFja2dyb3VuZExheWVyCkBAIC04OTQsMjggKzYwMyw0IEBA
IHByaXZhdGU6CiB9CiBAZW5kCiAKLSNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgTWVkaWFF
dmVudExpc3RlbmVyCi0KLU1lZGlhRXZlbnRMaXN0ZW5lcjo6TWVkaWFFdmVudExpc3RlbmVyKFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZSkKLSAgICA6IEV2ZW50TGlzdGVuZXIoQ1BQ
RXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBkZWxlZ2F0ZShkZWxlZ2F0ZSkKLXsgCi19Ci0KLVBh
c3NSZWZQdHI8TWVkaWFFdmVudExpc3RlbmVyPiBNZWRpYUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShX
ZWJGdWxsU2NyZWVuQ29udHJvbGxlciogZGVsZWdhdGUpIAoteyAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhRXZlbnRMaXN0ZW5lcihkZWxlZ2F0ZSkpOyAKLX0KLQotYm9vbCBNZWRpYUV2
ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCi17
Ci0gICAgcmV0dXJuIHRoaXMgPT0gJmxpc3RlbmVyOwotfQotCi12b2lkIE1lZGlhRXZlbnRMaXN0
ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQq
IGV2ZW50KQotewotICAgIFtkZWxlZ2F0ZSBfdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKLX0KLQot
I2VuZGlmIC8qIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlkODY4NTAu
LjczMDFhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTc0NSw2ICs3NDUsOSBAQAogCQlDRDczQkE0RDEzMUFDRDhGMDBFRURF
RDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gQ29weUZpbGVzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzNCQTRBMTMxQUNEOEYwMEVFREVE
MiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJQ0Q3M0JB
NEUxMzFBQ0RCNzAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENzNC
QTQ4MTMxQUNEOEUwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CiAJCUNENzNCQTUzMTMxQjY0NUIwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVu
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDczQkEzNzEzMUEyOUZFMDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwICov
OyB9OworCQlDRENBODVDODEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQ0E4NUM2MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
Lm1tICovOyB9OworCQlDRENBODVDOTEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RDQTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIuaCAqLzsgfTsKKwkJQ0RDQTg1RDUxMzJBQzJCMzAwRTk2MURGIC8qIElPS2l0LmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
Q0E4NUQ0MTMyQUMyQjMwMEU5NjFERiAvKiBJT0tpdC5mcmFtZXdvcmsgKi87IH07CiAJCUQzQjk0
ODQ2MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDIxMUZGNEI2NTAwMDMyQjM5IC8q
IFdlYlBvcHVwTWVudS5jcHAgKi87IH07CiAJCUQzQjk0ODQ3MTFGRjRCNjUwMDAzMkIzOSAvKiBX
ZWJQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAqLzsgfTsKIAkJ
RDNCOTQ4NDgxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0NDExRkY0QjY1
MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLzsgfTsKQEAgLTE2MDgsNiArMTYx
MSw5IEBACiAJCUNENzNCQTQ4MTMxQUNEOEUwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJGdWxsU2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNENzNCQTQ5MTMxQUNEOEUwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVu
TWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZ1
bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q3M0JBNEExMzFBQ0Q4RjAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDQTg1
QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRENBODVDNzEzMkFC
QTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQ0E4NUQ0MTMyQUMyQjMwMEU5NjFERiAvKiBJ
T0tpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IElPS2l0LmZyYW1ld29yazsgcGF0aCA9
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9
ICI8YWJzb2x1dGU+IjsgfTsKIAkJRDNCOTQ4NDIxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVw
TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQb3B1cE1l
bnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5NDg0MzExRkY0QjY1MDAw
MzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5NDg0NDEx
RkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjY0LDYgKzE2NzAsNyBAQAogCQkJCTFBQTFDQzVEMTAwRkEx
QTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJ
CTFBMUM0RUM4MTBEMDYwOTkwMDVFNjdFNyAvKiBXZWJDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovLAogCQkJCUJDRjUwNjg1MTI0MzE4NjEwMDU5NTVBRSAvKiBTZWN1cml0eS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlDRENBODVENTEzMkFDMkIzMDBFOTYxREYgLyogSU9L
aXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzM1LDYgKzE3NDIsNyBAQAogCQkJ
CTFBQTFDRDA2MTAwRkExQkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovLAogCQkJCTEw
NThDN0IxRkVBNTU4NUUxMUNBMkNCQiAvKiBDb2NvYS5mcmFtZXdvcmsgKi8sCiAJCQkJQkNEMDA0
MkMxMTBDMUUyNzAwM0I4QTY3IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgKi8sCisJCQkJQ0RD
QTg1RDQxMzJBQzJCMzAwRTk2MURGIC8qIElPS2l0LmZyYW1ld29yayAqLywKIAkJCQkxQUExQzdE
RTEwMEU4NDZFMDA3OERFQkMgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovLAogCQkJCUJD
ODdERkE5MTAxODEwMTQwMDU2NDIxNiAvKiBsaWJpY3Vjb3JlLmR5bGliICovLAogCQkJCTFBQTFD
QzVDMTAwRkExQTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLywKQEAgLTI4NDgs
NiArMjg1Niw4IEBACiAJCUJDQ0YwODVDMTEzRjNCNzUwMEM2NTBDNSAvKiBtYWMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUNEQ0E4NUM2MTMyQUJBNEUw
MEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tICovLAorCQkJCUNEQ0E4
NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggKi8s
CiAJCQkJMUE2NDI5MkMxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSAqLywK
IAkJCQlCQzI2NTFGNTExODI1RUY4MDAyNDNFMTIgLyogQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHlNYWMubW0gKi8sCiAJCQkJMUFBNDE3RUQxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVj
a2VyTWFjLm1tICovLApAQCAtMzQzNSw2ICszNDQ1LDcgQEAKIAkJCQkzN0M0RTlGNjEzMUM2RTdF
MDAyOUJENUEgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJCMTZBNDEzMjAxQjlC
MDBGNDk0MzEgLyogRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzNBQTEwNjcxMzFGMDYwMDAwRDRBNTc1IC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94eUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RDQTg1QzkxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDAxOCw2ICs0MDI5
LDcgQEAKIAkJCQlDRDczQkE0RTEzMUFDREI3MDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q3M0JBNTMxMzFCNjQ1
QjAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUNENkY3NUY0MTMxQjY2RDAwMEQ2QjIxRSAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUNEQ0E4NUM4MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0tIAoxLjcuNC4xCgo=
</data>
<flag name="review"
          id="77656"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>