<?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>177551</bug_id>
          
          <creation_ts>2017-09-27 10:59:14 -0700</creation_ts>
          <short_desc>Build fix for High Sierra 32 bit Mac</short_desc>
          <delta_ts>2017-09-28 10:35:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>jlewis3</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1353177</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-27 10:59:14 -0700</bug_when>
    <thetext>Some assertions have been removed form the SDK.  These assertions are used in some old carbon code, we need to replace them with equivalent WTF variants.  Additionally, since this carbon code is so old, it&apos;s still using tabs.  We need to do a bit of modernization so that this patch can land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353179</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 11:00:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/34690283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353183</commentid>
    <comment_count>2</comment_count>
      <attachid>321976</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-27 11:03:56 -0700</bug_when>
    <thetext>Created attachment 321976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353184</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-27 11:05:25 -0700</bug_when>
    <thetext>Attachment 321976 did not pass style-queue:


ERROR: Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:658:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:672:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKitLegacy/mac/Carbon/HIWebView.mm:417:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKitLegacy/mac/Carbon/HIWebView.mm:1267:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353190</commentid>
    <comment_count>4</comment_count>
      <attachid>321976</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-09-27 11:17:38 -0700</bug_when>
    <thetext>Comment on attachment 321976
Patch

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

There are lots of other opportunities for modernizing the code here. That&apos;s probably not worth it, as we may well survive another 15 years without updating it.

&gt; Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:250
&gt; +    

There are quite a few lines with trailing spaces, would be nice to get rid of them.

&gt; Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:501
&gt; +    if (osStatus==noErr &amp;&amp; defaultButton)

Missing spaces around ==

&gt; Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:656
&gt; +    view = [HIViewAdapter getHIViewForNSView:aView];\

Spurious backslash here.

Please take a closer look at the other style checker warnings - it&apos;s usually not wrong about braces in multiline line control clauses.

&gt; Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:669
&gt; +    HIViewRef view = NULL;

We don&apos;t use NULL, should be nullptr or nil for Objective-C.

&gt; Source/WebKitLegacy/mac/Carbon/CarbonWindowAdapter.mm:762
&gt; +    if (eventType==NSAppKitDefined)
&gt; +{

There should be indentation here. Missing spaces around ==.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353203</commentid>
    <comment_count>5</comment_count>
      <attachid>321983</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-27 11:34:50 -0700</bug_when>
    <thetext>Created attachment 321983
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353225</commentid>
    <comment_count>6</comment_count>
      <attachid>321983</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-27 12:14:31 -0700</bug_when>
    <thetext>Comment on attachment 321983
Patch for landing

Clearing flags on attachment: 321983

Committed r222567: &lt;http://trac.webkit.org/changeset/222567&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353226</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-27 12:14:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353805</commentid>
    <comment_count>8</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-09-27 13:12:05 -0700</bug_when>
    <thetext>Reverted r222567 for reason:

This broke and internal build.

Committed r222571: &lt;http://trac.webkit.org/changeset/222571&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353846</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-27 14:15:54 -0700</bug_when>
    <thetext>(In reply to Matt Lewis from comment #8)
&gt; Reverted r222567 for reason:
&gt; 
&gt; This broke and internal build.
&gt; 
&gt; Committed r222571: &lt;http://trac.webkit.org/changeset/222571&gt;

Actually, this would break an WebKit 32 bit debug build too.  The issue is surprising, the original code in two of the check(...) asserts was actually bad, but apparently WebKit&apos;s build was optimizing out the assert even on debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353993</commentid>
    <comment_count>10</comment_count>
      <attachid>321983</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-27 19:18:17 -0700</bug_when>
    <thetext>Comment on attachment 321983
Patch for landing

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

I would have preferred that the code style changes be be done in a separate patch from the actual build failure fix so as to make it easy to understand what the more important build fixes are. Not sure how long we need to keep this code. We could have done more clean up like making comments complete sentence and more.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:930
&gt; +            /* Despite our efforts to record what view we made the first responder

Wrong comment style. The original code used the correct comment style.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:958
&gt; +        /* Try to move on to the next or previous key view.  We use the laboriously

Ditto.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:982
&gt; +        /* No view in this window has the keyboard focus.  This view should

Ditto.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:998
&gt; +                /* The user has tabbed into this control view backwards.  Find

Ditto.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:1047
&gt; +        /*     If this control is not allowed to do autodisplay, don&apos;t let

Ditto.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:1059
&gt; +        /*  The Cocoa first responder does not correspond to the Carbon

Ditto.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:1105
&gt; +                SEL selector = _NSSelectorForHICommand(inCommand);

Although we are unlikely to ever modify this code and add new switch cases, the old style which put braces around the contents of this case was better as it scoped the variables.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:1167
&gt; +    case kHICommandUndo: return @selector(undo:);

Not the correct code style.

&gt; Source/WebKitLegacy/mac/Carbon/HIWebView.mm:1465
&gt; +//    printf(&quot;Update observer called\n&quot;);

Not the correct code style. Same issue throughout this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354114</commentid>
    <comment_count>11</comment_count>
      <attachid>322085</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-28 08:57:10 -0700</bug_when>
    <thetext>Created attachment 322085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354178</commentid>
    <comment_count>12</comment_count>
      <attachid>322085</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-28 10:35:01 -0700</bug_when>
    <thetext>Comment on attachment 322085
Patch

Clearing flags on attachment: 322085

Committed r222614: &lt;http://trac.webkit.org/changeset/222614&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354179</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-28 10:35:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321976</attachid>
            <date>2017-09-27 11:03:56 -0700</date>
            <delta_ts>2017-09-27 11:34:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177551-20170927110355.patch</filename>
            <type>text/plain</type>
            <size>120963</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjU1OCkKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDk0IEBACisyMDE3LTA5LTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
KworICAgICAgICBCdWlsZCBmaXggZm9yIEhpZ2ggU2llcnJhIDMyIGJpdCBNYWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU1MQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzQ2OTAyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU29tZSBhc3NlcnRpb25zIGhhdmUgYmVlbiByZW1vdmVkIGZyb20g
dGhlIFNESy4gUmVwbGFjZSB0aGVzZSBhc3NlcnRpb25zIHdpdGggZXF1aXZhbGVudAorICAgICAg
ICBXVEYgYXNzZXJ0IGNvZGUuICBTaW5jZSB0aGUgZmlsZXMgaW4gdGhpcyBwYXRjaCBhcmUgdXNp
bmcgdGFicywgc29tZSBzdHlsZSBjaGFuZ2VzIHdlcmUKKyAgICAgICAgYWxzbyBtYWRlLgorCisg
ICAgICAgICogQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIubW06CisgICAgICAgICgrW0NhcmJv
bldpbmRvd0FkYXB0ZXIgZnJhbWVWaWV3Q2xhc3NGb3JTdHlsZU1hc2s6XSk6CisgICAgICAgICgt
W0NhcmJvbldpbmRvd0FkYXB0ZXIgaW5pdFdpdGhDb250ZW50UmVjdDpzdHlsZU1hc2s6YmFja2lu
ZzpkZWZlcjpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBpbml0V2l0aENhcmJv
bldpbmRvd1JlZjp0YWtpbmdPd25lcnNoaXA6ZGlzYWJsZU9yZGVyaW5nOmNhcmJvbjpdKToKKyAg
ICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZXRWaWV3c05lZWREaXNwbGF5Ol0pOgorICAg
ICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGluaXRXaXRoQ2FyYm9uV2luZG93UmVmOnRha2lu
Z093bmVyc2hpcDpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBkZWFsbG9jXSk6
CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgd2luZG93UmVmXSk6CisgICAgICAgICgt
W0NhcmJvbldpbmRvd0FkYXB0ZXIgX2hhc1dpbmRvd1JlZl0pOgorICAgICAgICAoLVtDYXJib25X
aW5kb3dBZGFwdGVyIF9tYW5hZ2VzV2luZG93UmVmXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRv
d0FkYXB0ZXIgX3JlbW92ZVdpbmRvd1JlZl0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFw
dGVyIF9jYXJib25XaW5kb3dDbGFzc10pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVy
IHJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRv
d0FkYXB0ZXIgc2VuZFN1cGVyRXZlbnQ6XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0
ZXIgcmVsaW5xdWlzaEZvY3VzXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX2Nh
bmNlbEtleTpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfY29tbW9uQXdha2Vd
KToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfZGVzdHJveVJlYWxXaW5kb3c6XSk6
CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX29sZFBsYWNlV2luZG93Ol0pOgorICAg
ICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF90ZXJtV2luZG93SWZPd25lcl0pOgorICAgICAg
ICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF93aW5kb3dNb3ZlZFRvUmVjdDpdKToKKyAgICAgICAg
KC1bQ2FyYm9uV2luZG93QWRhcHRlciBjb25zdHJhaW5GcmFtZVJlY3Q6dG9TY3JlZW46XSk6Cisg
ICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgc2VsZWN0S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6
XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgc2VsZWN0S2V5Vmlld1ByZWNlZGlu
Z1ZpZXc6XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgY2FuQmVjb21lS2V5V2lu
ZG93XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgY2FuQmVjb21lTWFpbldpbmRv
d10pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGVuY29kZVdpdGhDb2RlcjpdKToK
KyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBpbml0V2l0aENvZGVyOl0pOgorICAgICAg
ICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIHNldENvbnRlbnRWaWV3Ol0pOgorICAgICAgICAoLVtD
YXJib25XaW5kb3dBZGFwdGVyIHdvcmtzV2hlbk1vZGFsXSk6CisgICAgICAgICgtW0NhcmJvbldp
bmRvd0FkYXB0ZXIgX3NldE1vZGFsV2luZG93TGV2ZWxdKToKKyAgICAgICAgKC1bQ2FyYm9uV2lu
ZG93QWRhcHRlciBfY2xlYXJNb2RhbFdpbmRvd0xldmVsXSk6CisgICAgICAgICgtW0NhcmJvbldp
bmRvd0FkYXB0ZXIgY2FyYm9uSElDb21tYW5kSURGcm9tQWN0aW9uU2VsZWN0b3I6XSk6CisgICAg
ICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgc2VuZENhcmJvblByb2Nlc3NISUNvbW1hbmRFdmVu
dDpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZW5kQ2FyYm9uVXBkYXRlSElD
b21tYW5kU3RhdHVzRXZlbnQ6d2l0aE1lbnVSZWY6YW5kTWVudUl0ZW1JbmRleDpdKToKKyAgICAg
ICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWRdKToKKyAg
ICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfaGFuZGxlQ29udGVudEJvdW5kc0NoYW5nZWRd
KToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfaGFuZGxlQ2FyYm9uRXZlbnQ6Y2Fs
bFJlZjpdKToKKyAgICAgICAgKE5TQ2FyYm9uV2luZG93SGFuZGxlRXZlbnQpOgorICAgICAgICAo
LVtDYXJib25XaW5kb3dBZGFwdGVyIF9yZWFsbHlEb09yZGVyV2luZG93OnJlbGF0aXZlVG86Zmlu
ZEtleTpmb3JDb3VudGVyOmZvcmNlOmlzTW9kYWw6XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRv
d0FkYXB0ZXIgX2dyb3dCb3hSZWN0XSk6CisgICAgICAgICogQ2FyYm9uL0hJV2ViVmlldy5tbToK
KyAgICAgICAgKEhJV2ViVmlld0dldFdlYlZpZXcpOgorICAgICAgICAoSElXZWJWaWV3Q29uc3Ry
dWN0b3IpOgorICAgICAgICAoSElXZWJWaWV3RGVzdHJ1Y3Rvcik6CisgICAgICAgIChISVdlYlZp
ZXdSZWdpc3RlckNsYXNzKToKKyAgICAgICAgKEdldEJlaGF2aW9ycyk6CisgICAgICAgIChEcmF3
KToKKyAgICAgICAgKEhpdFRlc3QpOgorICAgICAgICAoR2V0UmVnaW9uKToKKyAgICAgICAgKEdl
dFdpbmRvd1JlZik6CisgICAgICAgIChDcmVhdGVOU0V2ZW50QWRvcHRpbmdDR0V2ZW50KToKKyAg
ICAgICAgKENvcHlFdmVudENHRXZlbnQpOgorICAgICAgICAoQ3JlYXRlTlNFdmVudFdpdGhDYXJi
b25DbGlja0V2ZW50KToKKyAgICAgICAgKENsaWNrKToKKyAgICAgICAgKENyZWF0ZU5TRXZlbnRX
aXRoQ2FyYm9uRXZlbnQpOgorICAgICAgICAoTW91c2VVcCk6CisgICAgICAgIChDcmVhdGVOU0V2
ZW50V2l0aENhcmJvbk1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKE1vdXNlTW92ZWQpOgorICAg
ICAgICAoTW91c2VEcmFnZ2VkKToKKyAgICAgICAgKE1vdXNlV2hlZWxNb3ZlZCk6CisgICAgICAg
IChDb250ZXh0TWVudUNsaWNrKToKKyAgICAgICAgKEdldEtpbmQpOgorICAgICAgICAoQm91bmRz
Q2hhbmdlZCk6CisgICAgICAgIChPd25pbmdXaW5kb3dDaGFuZ2VkKToKKyAgICAgICAgKFdpbmRv
d0hhbmRsZXIpOgorICAgICAgICAoU3luY0ZyYW1lKToKKyAgICAgICAgKFNldEZvY3VzUGFydCk6
CisgICAgICAgIChBZHZhbmNlRm9jdXMpOgorICAgICAgICAoUmVsaW5xdWlzaEZvY3VzKToKKyAg
ICAgICAgKEFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChQcm9jZXNzQ29tbWFuZCk6Cisg
ICAgICAgIChVcGRhdGVDb21tYW5kU3RhdHVzKToKKyAgICAgICAgKF9OU1NlbGVjdG9yRm9ySElD
b21tYW5kKToKKyAgICAgICAgKEhJV2ViVmlld0V2ZW50SGFuZGxlcik6CisgICAgICAgIChTdGFy
dFVwZGF0ZU9ic2VydmVyKToKKyAgICAgICAgKFN0b3BVcGRhdGVPYnNlcnZlcik6CisgICAgICAg
IChVcGRhdGVPYnNlcnZlcik6CisKIDIwMTctMDktMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFBvbGljeUFjdGlvbiBhbiBlbmNv
ZGFibGUgZW51bSBjbGFzcwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0Nh
cmJvbldpbmRvd0FkYXB0ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIubW0JKHJldmlzaW9uIDIyMjU1MykKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVyLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAjaW1wb3J0IDxwYWwvc3BpL21hYy9ISVRvb2xi
b3hTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TV2luZG93U1BJLmg+CiAjaW1wb3J0IDxy
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIApA
QCAtMTEzLDcgKzExNCw4IEBAIHN0YXRpYyBPU1N0YXR1cyBOU0NhcmJvbldpbmRvd0hhbmRsZUV2
ZW4KIAogCiAvLyBSZXR1cm4gYW4gYXBwcm9wcmlhdGUgd2luZG93IGZyYW1lIGNsYXNzLgotKyAo
Q2xhc3MpZnJhbWVWaWV3Q2xhc3NGb3JTdHlsZU1hc2s6KHVuc2lnbmVkIGludClzdHlsZSB7Cisr
IChDbGFzcylmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazoodW5zaWduZWQpc3R5bGUKK3sKIAog
ICAgIC8vIFRoZXJlJ3Mgb25seSBvbmUgYXBwcm9wcmlhdGUgd2luZG93IHN0eWxlLCBhbmQgb25s
eSBvbmUgYXBwcm9wcmlhdGUgd2luZG93IGZyYW1lIGNsYXNzLgogICAgIGFzc2VydChzdHlsZSAm
IF9OU0NhcmJvbldpbmRvd01hc2spOwpAQCAtMTIzLDcgKzEyNSw4IEBAICsgKENsYXNzKWZyYW1l
Vmlld0NsYXNzRm9yU3R5bGVNYXNrOih1bnMKIAogCiAvLyBPdmVycmlkaW5nIG9mIHRoZSBwYXJl
bnQgY2xhc3MnIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGp1c3QgZm9yIHNhZmV0eSdzIHNha2Uu
Ci0tIChpZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNr
Oih1bnNpZ25lZCBpbnQpc3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmlu
Z1R5cGUgZGVmZXI6KEJPT0wpZmxhZyB7CistIChpZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1Jl
Y3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOih1bnNpZ25lZClzdHlsZSBiYWNraW5nOihOU0JhY2tp
bmdTdG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjooQk9PTClmbGFnCit7CiAKICAgICAvLyBE
byB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aENv
bnRlbnRSZWN0OmNvbnRlbnRSZWN0IHN0eWxlTWFzazpzdHlsZSBiYWNraW5nOmJ1ZmZlcmluZ1R5
cGUgZGVmZXI6ZmxhZ107CkBAIC0xNDAsNyArMTQzLDggQEAgLSAoaWQpaW5pdFdpdGhDb250ZW50
UmVjdDooTlNSZWN0KWNvbnRlbgogfQogCiAvLyBHaXZlbiBhIHJlZmVyZW5jZSB0byBhIENhcmJv
biB3aW5kb3cgdGhhdCBpcyB0byBiZSBlbmNhcHN1bGF0ZWQsIGFuIGluZGljYXRvciBvZiB3aGV0
aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBzaG91bGQgdGFrZSByZXNwb25zaWJpbGl0eSBmb3IgZGlz
cG9zaW5nIG9mIHRoZSBDYXJib24gd2luZG93LCBhbmQgYW4gaW5kaWNhdG9yIG9mIHdoZXRoZXIg
dG8gZGlzYWJsZSBDYXJib24gd2luZG93IG9yZGVyaW5nLCBpbml0aWFsaXplLiAgVGhpcyBpcyB0
aGUgY2xhc3MnIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIuCi0tIChpZClpbml0V2l0aENhcmJvbldp
bmRvd1JlZjooV2luZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVyc2hpcDooQk9PTClpbldp
bmRvd1JlZklzT3duZWQgZGlzYWJsZU9yZGVyaW5nOihCT09MKWluRGlzYWJsZU9yZGVyaW5nIGNh
cmJvbjooQk9PTClpbkNhcmJvbiB7CistIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2lu
ZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVyc2hpcDooQk9PTClpbldpbmRvd1JlZklzT3du
ZWQgZGlzYWJsZU9yZGVyaW5nOihCT09MKWluRGlzYWJsZU9yZGVyaW5nIGNhcmJvbjooQk9PTClp
bkNhcmJvbgorewogCiAgICAgTlNCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGU7CiAg
ICAgQ2FyYm9uV2luZG93Q29udGVudFZpZXcgKmNhcmJvbldpbmRvd0NvbnRlbnRWaWV3OwpAQCAt
MTUxLDE0ICsxNTUsMTQgQEAgLSAoaWQpaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6KFdpbmRvd1Jl
ZgogICAgIHVuc2lnbmVkIGludCBzdHlsZU1hc2s7CiAgICAgdm9pZCAqbmF0aXZlV2luZG93Owog
ICAgIFdpbmRvd01vZGFsaXR5IHdpbmRvd01vZGFsaXR5OwotCUNvbnRyb2xSZWYJCWNvbnRlbnRW
aWV3OwotCQorICAgIENvbnRyb2xSZWYgY29udGVudFZpZXc7CisgICAgCiAgICAgLy8gU2ltcGxl
LgogICAgIC8vIEl0J3MgdmVyeSB3ZWFrIHRvIGhhdmUgdG8gcHV0IHRoaXMgYmVmb3JlIHRoZSBp
bnZvY2F0aW9uIG9mIFtzdXBlciBpbml0V2l0aENvbnRlbnRSZWN0Oi4uLl0sIGJ1dCAtc2V0Q29u
dGVudFZpZXc6IGlzIGludm9rZWQgZnJvbSB3aXRoaW4gdGhhdCBpbml0aWFsaXplci4gIEl0IHR1
cm5zIG91dCB0aGF0IHRoZSBjb21tb24gYWRtb25pdGlvbiBhYm91dCBub3QgY2FsbGluZyB2aXJ0
dWFsIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiBDKysgY29uc3RydWN0b3JzIG1ha2VzIHNlbnNlIGlu
IE9iamVjdGl2ZS1DIHRvby4gIE0uUC4gTm90aWNlIC0gMTAvMTAvMDAKICAgICBfd2luZG93UmVm
ID0gaW5XaW5kb3dSZWY7CiAgICAgLy9fYXV4aWxpYXJ5U3RvcmFnZS0+X3dpbmRvd1JlZiA9IGlu
V2luZG93UmVmOwogICAgIF93aW5kb3dSZWZJc093bmVkID0gaW5XaW5kb3dSZWZJc093bmVkOwot
CV9jYXJib24gPSBpbkNhcmJvbjsKKyAgICBfY2FyYm9uID0gaW5DYXJib247CiAKICAgICAvLyBG
aW5kIG91dCB0aGUgd2luZG93J3MgQ29yZUdyYXBoaWNzIHdpbmRvdyByZWZlcmVuY2UuCiAgICAg
bmF0aXZlV2luZG93ID0gKHZvaWQqKUdldE5hdGl2ZVdpbmRvd0Zyb21XaW5kb3dSZWYoaW5XaW5k
b3dSZWYpOwpAQCAtMTcxLDkgKzE3NSw5IEBAIC0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVm
OihXaW5kb3dSZWYKIAogICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHdpbmRvdydzIGJhY2tpbmcgc3Rv
cmUgdHlwZS4KICAgICAvLyBBdCBvbmUgdGltZSwgdGhpcyBoYWQgY29kZSBzdG9sZW4gZnJvbSBD
cmVhdGVQbGF0Zm9ybVdpbmRvdyBpbiBISVRvb2xib3gvV2luZG93cy9QbGF0Zm9ybS9DR1NQbGF0
Zm9ybS5jCi0JLy8gQnV0IG5vdyB0aGUgbm9uLXJldGFpbmVkIHdpbmRvdyBjbGFzcyBpcyBhIENh
cmJvbiBzZWNyZXQgdGhhdCdzIG5vdCBldmVuIGluCi0JLy8gV2luZG93c1ByaXYuaDsgbWF5YmUg
d2UnbGwgaGF2ZSB0byByZXZpc2l0IHRoaXMgaWYgc29tZW9uZSBuZWVkcyB0byB1c2UgV2ViS2l0
Ci0JLy8gaW4gYSBub24tcmV0YWluZWQgd2luZG93LgorICAgIC8vIEJ1dCBub3cgdGhlIG5vbi1y
ZXRhaW5lZCB3aW5kb3cgY2xhc3MgaXMgYSBDYXJib24gc2VjcmV0IHRoYXQncyBub3QgZXZlbiBp
bgorICAgIC8vIFdpbmRvd3NQcml2Lmg7IG1heWJlIHdlJ2xsIGhhdmUgdG8gcmV2aXNpdCB0aGlz
IGlmIHNvbWVvbmUgbmVlZHMgdG8gdXNlIFdlYktpdAorICAgIC8vIGluIGEgbm9uLXJldGFpbmVk
IHdpbmRvdy4KICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBiYWNraW5n
U3RvcmVUeXBlID0gTlNCYWNraW5nU3RvcmVSZXRhaW5lZDsKQEAgLTIxNiwxMSArMjIwLDExIEBA
IC0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYKIAogICAgIC8vIEluc3Rh
bGwgYW4gZXZlbnQgaGFuZGxlciBmb3IgdGhlIENhcmJvbiB3aW5kb3cgZXZlbnRzIGluIHdoaWNo
IHdlJ3JlIGludGVyZXN0ZWQuCiAgICAgY29uc3QgRXZlbnRUeXBlU3BlYyBrRXZlbnRzW10gPSB7
Ci0gICAgICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dBY3RpdmF0ZWQg
fSwKLSAgICAgICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZh
dGVkIH0sCi0gICAgICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dCb3Vu
ZHNDaGFuZ2VkIH0sCi0gICAgICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5k
b3dTaG93biB9LAotICAgICAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93
SGlkZGVuIH0KKyAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93QWN0aXZh
dGVkIH0sCisgICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZh
dGVkIH0sCisgICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0JvdW5kc0No
YW5nZWQgfSwKKyAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93U2hvd24g
fSwKKyAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93SGlkZGVuIH0KICAg
ICB9OwogICAgIAogICAgIGNvbnN0IEV2ZW50VHlwZVNwZWMga0NvbnRyb2xCb3VuZHNDaGFuZ2Vk
RXZlbnQgPSB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQg
fTsKQEAgLTI0Myw3ICsyNDcsNyBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2lu
ZG93UmVmCiAgICAgICAgICAgICBbc2VsZiByZWxlYXNlXTsKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgfQotCQorICAgIAogICAgIC8vIFB1dCBhIHBvaW50ZXIgdG8gdGhpcyBDb2NvYSBO
U1dpbmRvdyBpbiBhIENhcmJvbiB3aW5kb3cgcHJvcGVydHkgdGFnLgogICAgIC8vIFJpZ2h0IG5v
dywgdGhpcyBpcyBqdXN0IHVzZWQgYnkgTlNWaWV3Q2FyYm9uQ29udHJvbC4gIE0uUC4gTm90aWNl
IC0gMTAvOS8wMAogICAgIHdpbmRvd0FzUHJvcGVydHkgPSBzZWxmOwpAQCAtMjY0LDIwICsyNjgs
MjAgQEAgLSAoaWQpaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZgogCiB9CiAKLS0g
KHZvaWQpc2V0Vmlld3NOZWVkRGlzcGxheTooQk9PTCl3ZWxsRG9UaGV5IHsKLQkvLyBNYWtlIHN1
cmUgd2UgY2FuIGZsdXNoIGFueXRoaW5nIHRoYXQgbmVlZHMgaXQuCistICh2b2lkKXNldFZpZXdz
TmVlZERpc3BsYXk6KEJPT0wpd2VsbERvVGhleQoreworICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4g
Zmx1c2ggYW55dGhpbmcgdGhhdCBuZWVkcyBpdC4KIAotCS8vIFdlIG5lZWQgdG8gc3luYyB0aGUg
Y29udGV4dCBoZXJlLiBJIHdhcyBob3BpbmcgSSBkaWRuJ3QgbmVlZCB0byBkbyB0aGlzLAotCS8v
IGJ1dCBhcHBhcmVudGx5IHdoZW4gc2Nyb2xsaW5nLCB0aGUgQXBwS2l0IHZpZXcgc3lzdGVtIGRy
YXdzIGRpcmVjdGx5LgotCS8vIFdoZW4gdGhpcyBvY2N1cnMsIEkgY2Fubm90IGludGVyY2VwdCBp
dCB0byBtYWtlIGl0IGRyYXcgaW4gbXkgSElWaWV3Ci0JLy8gY29udGV4dC4gV2hhdCBlbmRzIHVw
IGhhcHBlbmluZyBpcyB0aGF0IGl0IGRyYXdzLCBidXQgbm90aGluZyBldmVyCi0JLy8gZmx1c2hl
cyBpdC4KLQotCWlmICggW3NlbGYgd2luZG93TnVtYmVyXSAhPSAtMSApCi0JewotCQlDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gKENHQ29udGV4dFJlZilbW3NlbGYgX3RocmVhZENvbnRleHRdIGdy
YXBoaWNzUG9ydF07Ci0JCUNHQ29udGV4dFN5bmNocm9uaXplKCBjZ0NvbnRleHQgKTsKLQl9Cisg
ICAgLy8gV2UgbmVlZCB0byBzeW5jIHRoZSBjb250ZXh0IGhlcmUuIEkgd2FzIGhvcGluZyBJIGRp
ZG4ndCBuZWVkIHRvIGRvIHRoaXMsCisgICAgLy8gYnV0IGFwcGFyZW50bHkgd2hlbiBzY3JvbGxp
bmcsIHRoZSBBcHBLaXQgdmlldyBzeXN0ZW0gZHJhd3MgZGlyZWN0bHkuCisgICAgLy8gV2hlbiB0
aGlzIG9jY3VycywgSSBjYW5ub3QgaW50ZXJjZXB0IGl0IHRvIG1ha2UgaXQgZHJhdyBpbiBteSBI
SVZpZXcKKyAgICAvLyBjb250ZXh0LiBXaGF0IGVuZHMgdXAgaGFwcGVuaW5nIGlzIHRoYXQgaXQg
ZHJhd3MsIGJ1dCBub3RoaW5nIGV2ZXIKKyAgICAvLyBmbHVzaGVzIGl0LgorCisgICAgaWYgKFtz
ZWxmIHdpbmRvd051bWJlcl0gIT0gLTEpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IChDR0NvbnRleHRSZWYpW1tzZWxmIF90aHJlYWRDb250ZXh0XSBncmFwaGljc1BvcnRdOwor
ICAgICAgICBDR0NvbnRleHRTeW5jaHJvbml6ZShjZ0NvbnRleHQpOworICAgIH0KIH0KIAogKyAo
dm9pZClpbml0aWFsaXplCkBAIC0yODgsMTQgKzI5MiwxNiBAQCArICh2b2lkKWluaXRpYWxpemUK
IH0KIAogLy8gR2l2ZW4gYSByZWZlcmVuY2UgdG8gYSBDYXJib24gd2luZG93IHRoYXQgaXMgdG8g
YmUgZW5jYXBzdWxhdGVkLCBhbmQgYW4gaW5kaWNhdG9yIG9mIHdoZXRoZXIgb3Igbm90IHRoaXMg
b2JqZWN0IHNob3VsZCB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciBkaXNwb3Npbmcgb2YgdGhlIENh
cmJvbiB3aW5kb3csIGluaXRpYWxpemUuCi0tIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjoo
V2luZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVyc2hpcDooQk9PTClpbldpbmRvd1JlZklz
T3duZWQgeworLSAoaWQpaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZilpbldpbmRv
d1JlZiB0YWtpbmdPd25lcnNoaXA6KEJPT0wpaW5XaW5kb3dSZWZJc093bmVkCit7CiAgICAgLy8g
Zm9yIG5vdywgc2V0IGRpc2FibGVPcmRlcmluZyB0byBZRVMgYmVjYXVzZSB0aGF0IGlzIHdoYXQg
d2UndmUgYmVlbiBkb2luZyBhbmQgaXMgdGhlcmVmb3JlIGxvd2VyIHJpc2suIEhvd2V2ZXIsIEkg
dGhpbmsgaXQgd291bGQgYmUgY29ycmVjdCB0byBzZXQgaXQgdG8gTk8uCiAgICAgcmV0dXJuIFtz
ZWxmIGluaXRXaXRoQ2FyYm9uV2luZG93UmVmOmluV2luZG93UmVmIHRha2luZ093bmVyc2hpcDpp
bldpbmRvd1JlZklzT3duZWQgZGlzYWJsZU9yZGVyaW5nOllFUyBjYXJib246Tk9dOwogfQogCiAK
IC8vIENsZWFuIHVwLgotLSAodm9pZClkZWFsbG9jIHsKKy0gKHZvaWQpZGVhbGxvYworewogICAg
IGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbQ2FyYm9uV2lu
ZG93QWRhcHRlciBjbGFzc10sIHNlbGYpKQogICAgICAgICByZXR1cm47CiAKQEAgLTMwNyw3ICsz
MTMsOCBAQCAtICh2b2lkKWRlYWxsb2MgewogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAo
V2luZG93UmVmKXdpbmRvd1JlZiB7CistIChXaW5kb3dSZWYpd2luZG93UmVmCit7CiAKICAgICAv
LyBTaW1wbGUuCiAgICAgcmV0dXJuIF93aW5kb3dSZWY7CkBAIC0zMTUsMjQgKzMyMiwyOCBAQCAt
IChXaW5kb3dSZWYpd2luZG93UmVmIHsKIH0KIAogLy8gc2hvdWxkIGFsd2F5cyBiZSBZRVMsIGJ1
dCBjaGVjayBpbiBvcmRlciB0byBhdm9pZCBpbml0aWFsaXphdGlvbiBvciBkZWFsbG9jYXRpb24g
c3VycHJpc2VzCi0tIChCT09MKV9oYXNXaW5kb3dSZWYgeworLSAoQk9PTClfaGFzV2luZG93UmVm
Cit7CiAgICAgcmV0dXJuIChfd2luZG93UmVmICE9IE5VTEwpOwogfQogCiAvLyBhbiBOU0NhcmJv
bldpbmRvdyBkb2VzIG5vdCBtYW5hZ2UgdGhlIHdpbmRvd1JlZi4gIFRoZSB3aW5kb3dSZWYgbWFu
YWdlcyB0aGUgTlNDYXJib25XaW5kb3cKLS0gKEJPT0wpX21hbmFnZXNXaW5kb3dSZWYgeworLSAo
Qk9PTClfbWFuYWdlc1dpbmRvd1JlZgorewogICAgIHJldHVybiBOTzsKIH0KIAotLSAodm9pZClf
cmVtb3ZlV2luZG93UmVmIHsKKy0gKHZvaWQpX3JlbW92ZVdpbmRvd1JlZgorewogICAgIF93aW5k
b3dSZWYgPSBOVUxMOwotCQorICAgIAogICAgIGlmIChfZXZlbnRIYW5kbGVyKSBSZW1vdmVFdmVu
dEhhbmRsZXIoX2V2ZW50SGFuZGxlcik7Ci0JCi0JX2V2ZW50SGFuZGxlciA9IE5VTEw7CisgICAg
CisgICAgX2V2ZW50SGFuZGxlciA9IE5VTEw7CiB9CiAKLS0gKFdpbmRvd0NsYXNzKV9jYXJib25X
aW5kb3dDbGFzcyB7CistIChXaW5kb3dDbGFzcylfY2FyYm9uV2luZG93Q2xhc3MKK3sKICAgICBX
aW5kb3dDbGFzcyB3aW5kb3dDbGFzcyA9IGtEb2N1bWVudFdpbmRvd0NsYXNzOwogICAgIE9TU3Rh
dHVzIG9zU3RhdHVzOwogICAgIApAQCAtMzQ2LDcgKzM1Nyw4IEBAIC0gKFdpbmRvd0NsYXNzKV9j
YXJib25XaW5kb3dDbGFzcyB7CiB9CiAKIC8vIFVwZGF0ZSB0aGlzIHdpbmRvdydzIGZyYW1lIGFu
ZCBjb250ZW50IGZyYW1lIHJlY3RhbmdsZXMgdG8gbWF0Y2ggdGhlIENhcmJvbiB3aW5kb3cncyBz
dHJ1Y3R1cmUgYm91bmRzIGFuZCBjb250ZW50IGJvdW5kcyByZWN0YW5nbGVzLiAgUmV0dXJuIHll
cyBpZiB0aGUgdXBkYXRlIHdhcyByZWFsbHkgbmVjZXNzYXJ5LCBubyBvdGhlcndpc2UuCi0tIChC
T09MKXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzIHsKKy0gKEJPT0wpcmVjb25jaWxlVG9D
YXJib25XaW5kb3dCb3VuZHMKK3sKIAogICAgIE9TU3RhdHVzIG9zU3RhdHVzOwogICAgIE5TUmVj
dCBuZXdDb250ZW50RnJhbWVSZWN0OwpAQCAtMzYzLDkgKzM3NSwxMSBAQCAtIChCT09MKXJlY29u
Y2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzIHsKIAogICAgIC8vIEdldCB0aGUgQ2FyYm9uIHdpbmRv
dydzIGJvdW5kcywgd2hpY2ggYXJlIGV4cHJlc3NlZCBpbiBnbG9iYWwgc2NyZWVuIGNvb3JkaW5h
dGVzLCB3aXRoICgwLDApIGF0IHRoZSB0b3AtbGVmdCBvZiB0aGUgbWFpbiBzY3JlZW4uCiAgICAg
b3NTdGF0dXMgPSBHZXRXaW5kb3dCb3VuZHMoX3dpbmRvd1JlZiwga1dpbmRvd1N0cnVjdHVyZVJn
biwgJndpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3QpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIp
IE5TTG9nKEAiQSBDYXJib24gd2luZG93J3Mgc3RydWN0dXJlIGJvdW5kcyBjb3VsZG4ndCBiZSBn
b3R0ZW4uIik7CisgICAgaWYgKG9zU3RhdHVzICE9IG5vRXJyKQorICAgICAgICBOU0xvZyhAIkEg
Q2FyYm9uIHdpbmRvdydzIHN0cnVjdHVyZSBib3VuZHMgY291bGRuJ3QgYmUgZ290dGVuLiIpOwog
ICAgIG9zU3RhdHVzID0gR2V0V2luZG93Qm91bmRzKF93aW5kb3dSZWYsIGtXaW5kb3dDb250ZW50
UmduLCAmd2luZG93Q29udGVudEJvdW5kc1JlY3QpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIp
IE5TTG9nKEAiQSBDYXJib24gd2luZG93J3MgY29udGVudCBib3VuZHMgY291bGRuJ3QgYmUgZ290
dGVuLiIpOworICAgIGlmIChvc1N0YXR1cyAhPSBub0VycikKKyAgICAgICAgTlNMb2coQCJBIENh
cmJvbiB3aW5kb3cncyBjb250ZW50IGJvdW5kcyBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7CiAKICAg
ICAvLyBTZXQgdGhlIGZyYW1lIHJlY3RhbmdsZSBvZiB0aGUgYm9yZGVyIHZpZXcgYW5kIHRoaXMg
d2luZG93IGZyb20gdGhlIENhcmJvbiB3aW5kb3cncyBzdHJ1Y3R1cmUgcmVnaW9uIGJvdW5kcy4K
ICAgICBuZXdXaW5kb3dGcmFtZVJlY3Qub3JpZ2luLnggPSB3aW5kb3dTdHJ1Y3R1cmVCb3VuZHNS
ZWN0LmxlZnQ7CkBAIC0zOTYsNyArNDEwLDggQEAgLSAoQk9PTClyZWNvbmNpbGVUb0NhcmJvbldp
bmRvd0JvdW5kcyB7CiAKIAogLy8gSGFuZGxlIGFuIGV2ZW50IGp1c3QgbGlrZSBhbiBOU1dpbmRv
dyB3b3VsZC4KLS0gKHZvaWQpc2VuZFN1cGVyRXZlbnQ6KE5TRXZlbnQgKilpbkV2ZW50IHsKKy0g
KHZvaWQpc2VuZFN1cGVyRXZlbnQ6KE5TRXZlbnQgKilpbkV2ZW50Cit7CiAKICAgICAvLyBGaWx0
ZXIgb3V0IGEgZmV3IGV2ZW50cyB0aGF0IGp1c3QgcmVzdWx0IGluIGNvbXBsYWludHMgaW4gdGhl
IGxvZy4KICAgICAvLyBJZ25vcmUgc29tZSB1bmtub3duIGV2ZW50IHRoYXQgZ2V0cyBzZW50IHdo
ZW4gTlNUZXh0Vmlld3MgaW4gcHJpbnRpbmcgYWNjZXNzb3J5IHZpZXdzIGFyZSBmb2N1c2VkLiAg
TS5QLiBOb3RpY2UgLSAxMi83LzAwCkBAIC00MjUsOSArNDQwLDkgQEAgLSAodm9pZClyZWxpbnF1
aXNoRm9jdXMKICAgICAvLyBDYXJib24gdGhpbmtzIHRoYXQgYSBjb250cm9sIGhhcyB0aGUga2V5
Ym9hcmQgZm9jdXMsCiAgICAgLy8gb3Igd2Ugd291bGRuJ3QgYmUgYmVpbmcgYXNrZWQgdG8gcmVs
aW5xdWlzaCBmb2N1cy4KIAotCWZpcnN0UmVzcG9uZGVyID0gW3NlbGYgZmlyc3RSZXNwb25kZXJd
OwotCWlmIChbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gKXsK
LQkJLy8gTWFrZSB0aGUgd2luZG93IHRoZSBmaXJzdCByZXNwb25kZXIsIHNvIHRoYXQgbm8gdmll
dyBpcyB0aGUga2V5IHZpZXcuCisgICAgZmlyc3RSZXNwb25kZXIgPSBbc2VsZiBmaXJzdFJlc3Bv
bmRlcl07CisgICAgaWYgKFtmaXJzdFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xh
c3NdXSkgeworICAgICAgICAvLyBNYWtlIHRoZSB3aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwg
c28gdGhhdCBubyB2aWV3IGlzIHRoZSBrZXkgdmlldy4KICAgICAgICAgW3NlbGYgbWFrZUZpcnN0
UmVzcG9uZGVyOnNlbGZdOwogICAgIH0KIH0KQEAgLTQ3MSw3ICs0ODYsOCBAQCAtIChCT09MKW1h
a2VGaXJzdFJlc3BvbmRlcjooTlNSZXNwb25kZXIgCiAvLyBEaXNhcHBvaW50aW5nbHksIC1fYmxv
Y2tIZWFydEJlYXQ6IGlzIG5vdCBpbW1lZGlhdGVseSBpbnZva2VkIHRvIHR1cm4gb2ZmIGhlYXJ0
YmVhdGluZy4gIEhlYXJ0YmVhdGluZyBpcyB0dXJuZWQgb2ZmIGJ5IHNldHRpbmcgdGhlIGdEZWZh
dWx0QnV0dG9uUGF1c2VkIGdsb2JhbCB2YXJpYWJsZSwgYW5kIHRoZW4gdGhpcyBtZXRob2QgaXMg
aW52b2tlZCBsYXRlciwgaWYgdGhhdCBnbG9iYWwgaXMgc2V0IChhdCBoZWFydGJlYXRpbmcgdGlt
ZSBJIGd1ZXNzKS4gIFNvbWV0aGluZyBoYXMgdG8gY2hhbmdlIGlmIHdlIHdhbnQgdG8gaG9vayB0
aGlzIHVwIGluIENhcmJvbiB3aW5kb3dzLiAgTS5QLiBXYXJuaW5nIC0gOS8xNy8wMQogLyoKIC8v
IERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClfYmxvY2tI
ZWFydEJlYXQ6KEJPT0wpZmxhZyB7CistICh2b2lkKV9ibG9ja0hlYXJ0QmVhdDooQk9PTClmbGFn
Cit7CiAKICAgICBDb250cm9sUmVmIGRlZmF1bHRCdXR0b247CiAgICAgT1NTdGF0dXMgb3NTdGF0
dXM7CkBAIC00ODIsNyArNDk4LDggQEAgLSAodm9pZClfYmxvY2tIZWFydEJlYXQ6KEJPT0wpZmxh
ZyB7CiAgICAgLy8gSWYgdGhlcmUncyBhIGRlZmF1bHQgQ2FyYm9uIGJ1dHRvbiBpbiB0aGlzIENh
cmJvbiB3aW5kb3csIG1ha2UgaXQgc3RvcCBwdWxzaW5nLCB0aGUgQ2FyYm9uIHdheS4KICAgICAv
LyBUaGlzIGlzIGluc3BpcmVkIGJ5IEhJVG9vbGJveC9Db250cm9scy9EZWZpbml0aW9ucy9CdXR0
b25DREVGLmMncyBCdXR0b25FdmVudEhhbmRsZXIoKS4gIE0uUC4gTm90aWNlIC0gMTIvNS8wMAog
ICAgIG9zU3RhdHVzID0gR2V0V2luZG93RGVmYXVsdEJ1dHRvbihfd2luZG93UmVmLCAmZGVmYXVs
dEJ1dHRvbik7Ci0gICAgaWYgKG9zU3RhdHVzPT1ub0VyciAmJiBkZWZhdWx0QnV0dG9uKSB7Cisg
ICAgaWYgKG9zU3RhdHVzPT1ub0VyciAmJiBkZWZhdWx0QnV0dG9uKQorewogICAgICAgICBCb29s
ZWFuIGFub3RoZXJCdXR0b25Jc1RyYWNraW5nID0gZmxhZyA/IFRSVUUgOiBGQUxTRTsKICAgICAg
ICAgb3NTdGF0dXMgPSBTZXRDb250cm9sRGF0YShkZWZhdWx0QnV0dG9uLCBrQ29udHJvbE5vUGFy
dCwga0NvbnRyb2xQdXNoQnV0dG9uQW5vdGhlckJ1dHRvblRyYWNraW5nVGFnLCBzaXplb2YoQm9v
bGVhbiksICZhbm90aGVyQnV0dG9uSXNUcmFja2luZyk7CiAgICAgICAgIGlmIChvc1N0YXR1cz09
bm9FcnIpIERyYXdPbmVDb250cm9sKGRlZmF1bHRCdXR0b24pOwpAQCAtNDk0LDggKzUxMSw4IEBA
IC0gKHZvaWQpX2Jsb2NrSGVhcnRCZWF0OihCT09MKWZsYWcgewogCiAKIC8vIERvIHRoZSByaWdo
dCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClfY2FuY2VsS2V5OihpZClzZW5k
ZXIgewotCistICh2b2lkKV9jYW5jZWxLZXk6KGlkKXNlbmRlcgorewogICAgIC8vIE1vc3Qgb2Yg
dGhlIHRpbWUgdGhlIGhhbmRsaW5nIG9mIHRoZSBjYW5jZWwga2V5IHdpbGwgYmUgZG9uZSBieSBD
YXJib24sIGJ1dCB0aGlzIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgaWYgYW4gTlNDYXJib25XaW5k
b3cgaXMgd3JhcHBpbmcgYSBDYXJib24gd2luZG93IHRoYXQgY29udGFpbnMgYW4gTlNWaWV3Q2Fy
Ym9uQ29udHJvbCwgYW5kIHRoZSBlc2NhcGUga2V5IG9yIHdoYXRldmVyIGlzIHByZXNzZWQgd2l0
aCBhbiBOU1RleHRWaWV3IGZvY3VzZWQuICBKdXN0IGRvIHdoYXQgQ2FyYm9uIHdvdWxkIGRvLgog
ICAgIENvbnRyb2xSZWYgY2FuY2VsQnV0dG9uOwogICAgIEdldFdpbmRvd0NhbmNlbEJ1dHRvbihf
d2luZG93UmVmLCAmY2FuY2VsQnV0dG9uKTsKQEAgLTUxMCw4ICs1MjcsOCBAQCAtICh2b2lkKV9j
YW5jZWxLZXk6KGlkKXNlbmRlciB7CiAKIAogLy8gRG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBhIENh
cmJvbiB3aW5kb3cuCi0tICh2b2lkKV9jb21tb25Bd2FrZSB7Ci0KKy0gKHZvaWQpX2NvbW1vbkF3
YWtlCit7CiAgICAgLy8gQ29tcGxhaW4sIGJlY2F1c2UgdGhpcyBzaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkLiAgV2UgaW5zaXN0IHRoYXQgLVtOU0NhcmJvbldpbmRvdyBpbml0V2l0aENhcmJvbldpbmRv
d1JlZl0gaXMgdGhlIG9ubHkgdmFsaWQgaW5pdGlhbGl6ZXIgZm9yIGluc3RhbmNlcyBvZiB0aGlz
IGNsYXNzLCBhbmQgdGhhdCB0aGVyZSdzIG5vIHN1Y2ggdGhpbmcgYXMgYSBvbmUtc2hvdCBOU0Nh
cmJvbldpbmRvdy4KICAgICBOU0xvZyhAIi1bTlNDYXJib25XaW5kb3cgX2NvbW1vbkF3YWtlXSBp
cyBub3QgaW1wbGVtZW50ZWQuIik7CiAKQEAgLTUyMiwxMiArNTM5LDExIEBAIC0gKHZvaWQpX2Nv
bW1vbkF3YWtlIHsKIAogCiAvLyBEbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRv
dy4KLS0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9PTClvcmRlcmluZ091dCB7Ci0KKy0gKGlk
KV9kZXN0cm95UmVhbFdpbmRvdzooQk9PTClvcmRlcmluZ091dAorewogICAgIC8vIENvbXBsYWlu
LCBiZWNhdXNlIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gIFdlIGRvbid0IHN1cHBvcnQg
b25lLXNob3QgTlNDYXJib25XaW5kb3dzLgogICAgIE5TTG9nKEAiLVtOU0NhcmJvbldpbmRvdyBf
ZGVzdHJveVJlYWxXaW5kb3c6XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CiAgICAgcmV0dXJuIHNl
bGY7Ci0gICAgCiB9CiAKIApAQCAtNTUwLDggKzU2Niw4IEBAIC0gKGlkKV9kZXN0cm95UmVhbFdp
bmRvdzooQk9PTClvcmRlcmluZ08KIAogCiAvLyBEbyB3aGF0IE5TV2luZG93IHdvdWxkIGRvLCBi
dXQgdGhlbiBzeWNocm9uaXplIHRoZSBDYXJib24gd2luZG93IHN0cnVjdHVyZXMuCi0tICh2b2lk
KV9vbGRQbGFjZVdpbmRvdzooTlNSZWN0KWZyYW1lUmVjdCB7Ci0KKy0gKHZvaWQpX29sZFBsYWNl
V2luZG93OihOU1JlY3QpZnJhbWVSZWN0Cit7CiAgICAgT1NTdGF0dXMgb3NTdGF0dXM7CiAKICAg
ICAvLyBEbyB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCkBAIC01NjAsOCArNTc2LDggQEAgLSAo
dm9pZClfb2xkUGxhY2VXaW5kb3c6KE5TUmVjdClmcmFtZVJlYwogICAgIC8vIFRlbGwgQ2FyYm9u
IHRvIHVwZGF0ZSBpdHMgdmFyaW91cyByZWdpb25zLgogICAgIC8vIERlc3BpdGUgaXRzIG5hbWUs
IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBlYXJseSBhbmQgb2Z0ZW4sIGV2ZW4gaWYg
dGhlIHdpbmRvdyBpc24ndCB2aXNpYmxlIHlldC4gIDI3MDI2NDguICBNLlAuIE5vdGljZSAtIDcv
MjQvMDEKICAgICBvc1N0YXR1cyA9IF9TeW5jV2luZG93V2l0aENHQWZ0ZXJNb3ZlKF93aW5kb3dS
ZWYpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIE5TTG9nKEAiQSBDYXJib24gd2luZG93J3Mg
Ym91bmRzIGNvdWxkbid0IGJlIHN5bmNocm9uaXplZCAoJWkpLiIsIChpbnQpb3NTdGF0dXMpOwot
CisgICAgaWYgKG9zU3RhdHVzICE9IG5vRXJyKQorICAgICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdp
bmRvdydzIGJvdW5kcyBjb3VsZG4ndCBiZSBzeW5jaHJvbml6ZWQgKCVpKS4iLCAoaW50KW9zU3Rh
dHVzKTsKIH0KIAogCkBAIC01OTEsMTAgKzYwNywxMiBAQCAtICh2b2lkKV9vbGRQbGFjZVdpbmRv
dzooTlNSZWN0KWZyYW1lUmVjCiAKIC8vIERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8sIGJ1dCBm
b3IgYSBDYXJib24gd2luZG93LgogLy8gVGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkgY3V0LWFuZC1w
YXN0ZWQgZnJvbSAtW05TV2luZG93IF90ZXJtV2luZG93SWZPd25lcl0uICBNLlAuIE5vdGljZSAt
IDgvNy8wMAotLSAodm9pZClfdGVybVdpbmRvd0lmT3duZXIgeworLSAodm9pZClfdGVybVdpbmRv
d0lmT3duZXIKK3sKICAgICBbc2VsZiBfc2V0V2luZG93TnVtYmVyOi0xXTsKICAgICBfd0ZsYWdz
LmlzVGVybWluYXRpbmcgPSBZRVM7Ci0gICAgaWYgKF93aW5kb3dSZWYgJiYgX3dpbmRvd1JlZklz
T3duZWQpIERpc3Bvc2VXaW5kb3coX3dpbmRvd1JlZik7CisgICAgaWYgKF93aW5kb3dSZWYgJiYg
X3dpbmRvd1JlZklzT3duZWQpCisgICAgICAgIERpc3Bvc2VXaW5kb3coX3dpbmRvd1JlZik7CiAg
ICAgLy8gS1cgLSBuZWVkIHRvIGNsZWFyIHdpbmRvdyBzaGFkb3cgc3RhdGUgc28gaXQgZ2V0cyBy
ZXNldCBjb3JyZWN0bHkgd2hlbiBuZXcgd2luZG93IGNyZWF0ZWQKIC8vICAgIGlmIChbX2JvcmRl
clZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRTaGFkb3dTdGF0ZTopXSkgewog
Ly8gICAgICAgIFtfYm9yZGVyVmlldyBzZXRTaGFkb3dTdGF0ZTprRnJhbWVTaGFkb3dOb25lXTsK
QEAgLTYxMCw3ICs2MjgsOCBAQCAtICh2b2lkKV90ZXJtV2luZG93SWZPd25lciB7CiAKIAogLy8g
RG8gd2hhdCBOU1dpbmRvdyB3b3VsZCBkbywgYnV0IHRoZW4gc3ljaHJvbml6ZSB0aGUgQ2FyYm9u
IHdpbmRvdyBzdHJ1Y3R1cmVzLgotLSAodm9pZClfd2luZG93TW92ZWRUb1JlY3Q6KE5TUmVjdClh
Y3R1YWxGcmFtZSB7CistICh2b2lkKV93aW5kb3dNb3ZlZFRvUmVjdDooTlNSZWN0KWFjdHVhbEZy
YW1lCit7CiAKICAgICBPU1N0YXR1cyBvc1N0YXR1czsKIApAQCAtNjI1LDQ1ICs2NDQsMzggQEAg
LSAodm9pZClfd2luZG93TW92ZWRUb1JlY3Q6KE5TUmVjdClhY3R1YQogCiB9CiAKLS0gKE5TUmVj
dCljb25zdHJhaW5GcmFtZVJlY3Q6KE5TUmVjdClhY3R1YWxGcmFtZSB0b1NjcmVlbjooTlNTY3Jl
ZW4gKilzY3JlZW4geworLSAoTlNSZWN0KWNvbnN0cmFpbkZyYW1lUmVjdDooTlNSZWN0KWFjdHVh
bEZyYW1lIHRvU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgorewogICAgIC8vIGxldCBDYXJib24g
ZGVjaWRlIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlvbgogICAgIHJldHVybiBhY3R1YWxGcmFtZTsK
IH0KIAotLSAodm9pZClzZWxlY3RLZXlWaWV3Rm9sbG93aW5nVmlldzooTlNWaWV3ICopYVZpZXcg
ewotCUhJVmlld1JlZgl2aWV3ID0gTlVMTDsKLQkKLQl2aWV3ID0gW0hJVmlld0FkYXB0ZXIgZ2V0
SElWaWV3Rm9yTlNWaWV3OmFWaWV3XTsKLQkKLQlpZiAoIHZpZXcgKQotCXsJCi0JCUhJVmlld1Jl
Zgljb250ZW50VmlldzsKLQkJCi0JCUdldFJvb3RDb250cm9sKCBHZXRDb250cm9sT3duZXIoIHZp
ZXcgKSwgJmNvbnRlbnRWaWV3ICk7Ci0JCUhJVmlld0FkdmFuY2VGb2N1cyggY29udGVudFZpZXcs
IDAgKTsKLQl9Ci0JZWxzZQotCXsKLQkJW3N1cGVyIHNlbGVjdEtleVZpZXdGb2xsb3dpbmdWaWV3
OmFWaWV3XTsKLQl9Ci19Ci0KLS0gKHZvaWQpc2VsZWN0S2V5Vmlld1ByZWNlZGluZ1ZpZXc6KE5T
VmlldyAqKWFWaWV3IHsKLQlISVZpZXdSZWYJdmlldyA9IE5VTEw7Ci0JCi0JdmlldyA9IFtISVZp
ZXdBZGFwdGVyIGdldEhJVmlld0Zvck5TVmlldzphVmlld107Ci0JCi0JaWYgKCB2aWV3ICkKLQl7
CQotCQlISVZpZXdSZWYJY29udGVudFZpZXc7Ci0JCQotCQlHZXRSb290Q29udHJvbCggR2V0Q29u
dHJvbE93bmVyKCB2aWV3ICksICZjb250ZW50VmlldyApOwotCQlISVZpZXdBZHZhbmNlRm9jdXMo
IGNvbnRlbnRWaWV3LCBzaGlmdEtleSApOwotCX0KLQllbHNlCi0JewotCQlbc3VwZXIgc2VsZWN0
S2V5Vmlld1ByZWNlZGluZ1ZpZXc6YVZpZXddOwotCX0KKy0gKHZvaWQpc2VsZWN0S2V5Vmlld0Zv
bGxvd2luZ1ZpZXc6KE5TVmlldyAqKWFWaWV3Cit7CisgICAgSElWaWV3UmVmIHZpZXcgPSBOVUxM
OworICAgIHZpZXcgPSBbSElWaWV3QWRhcHRlciBnZXRISVZpZXdGb3JOU1ZpZXc6YVZpZXddO1wK
KworICAgIGlmICh2aWV3KSB7ICAgIAorICAgICAgICBISVZpZXdSZWYgY29udGVudFZpZXc7Cisg
ICAgICAgIAorICAgICAgICBHZXRSb290Q29udHJvbChHZXRDb250cm9sT3duZXIodmlldyksICZj
b250ZW50Vmlldyk7CisgICAgICAgIEhJVmlld0FkdmFuY2VGb2N1cyhjb250ZW50VmlldywgMCk7
CisgICAgfSBlbHNlCisgICAgICAgIFtzdXBlciBzZWxlY3RLZXlWaWV3Rm9sbG93aW5nVmlldzph
Vmlld107Cit9CisKKy0gKHZvaWQpc2VsZWN0S2V5Vmlld1ByZWNlZGluZ1ZpZXc6KE5TVmlldyAq
KWFWaWV3Cit7CisgICAgSElWaWV3UmVmIHZpZXcgPSBOVUxMOworICAgIHZpZXcgPSBbSElWaWV3
QWRhcHRlciBnZXRISVZpZXdGb3JOU1ZpZXc6YVZpZXddOworCisgICAgaWYgKHZpZXcpIHsgICAg
CisgICAgICAgIEhJVmlld1JlZiBjb250ZW50VmlldzsKKyAgICAgICAgCisgICAgICAgIEdldFJv
b3RDb250cm9sKEdldENvbnRyb2xPd25lcih2aWV3KSwgJmNvbnRlbnRWaWV3KTsKKyAgICAgICAg
SElWaWV3QWR2YW5jZUZvY3VzKGNvbnRlbnRWaWV3LCBzaGlmdEtleSk7CisgICAgfSBlbHNlCisg
ICAgICAgIFtzdXBlciBzZWxlY3RLZXlWaWV3UHJlY2VkaW5nVmlldzphVmlld107CiB9CiAKIC0g
KHZvaWQpbWFrZUtleVdpbmRvdwpAQCAtNjc0LDEzICs2ODYsMTUgQEAgLSAodm9pZCltYWtlS2V5
V2luZG93CiB9CiAKIC8vIERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93Lgot
LSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cgeworLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cK
K3sKIAogICAgIHJldHVybiBZRVM7CiB9CiAKIC8vIERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBD
YXJib24gd2luZG93LgotLSAoQk9PTCljYW5CZWNvbWVNYWluV2luZG93IHsKKy0gKEJPT0wpY2Fu
QmVjb21lTWFpbldpbmRvdworewogICAgIE9TU3RhdHVzIG9zU3RhdHVzOwogICAgIFdpbmRvd0Ns
YXNzIHdpbmRvd0NsYXNzOwogICAgIC8vIEJ5IGRlZmF1bHQsIENhcmJvbiB3aW5kb3dzIGNhbm5v
dCBiZWNvbWUgdGhlIG1haW4gd2luZG93LgpAQCAtNzA0LDcgKzcxOCw4IEBAIC0gKEJPT0wpY2Fu
QmVjb21lTWFpbldpbmRvdyB7CiAKIAogLy8gRG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBhIENhcmJv
biB3aW5kb3cuCi0tICh2b2lkKWVuY29kZVdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyIHsKKy0g
KHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKIAogICAgIC8vIEFjdHVh
bGx5LCB0aGlzIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgaW1wbGVtZW50ZWQuICBNLlAuIE5vdGlj
ZSAtIDgvMi8wMAogICAgIE5TTG9nKEAiLVtOU0NhcmJvbldpbmRvdyBlbmNvZGVXaXRoQ29kZXI6
XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CkBAIC03MTYsNyArNzMxLDggQEAgLSAodm9pZCllbmNv
ZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgogCiAKIC8vIERvIHRoZSByaWdodCB0aGluZyBm
b3IgYSBDYXJib24gd2luZG93LgotLSAoaWQpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVy
IHsKKy0gKGlkKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgorewogCiAgICAgLy8gQWN0
dWFsbHksIHRoaXMgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBpbXBsZW1lbnRlZC4gIE0uUC4gTm90
aWNlIC0gOC8yLzAwCiAgICAgTlNMb2coQCItW05TQ2FyYm9uV2luZG93IGluaXRXaXRoQ29kZXI6
XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CkBAIC03MzcsMTEgKzc1MywxMyBAQCAtIChpZClpbml0
V2l0aENvZGVyOihOU0NvZGVyICopY29kZXIgewogCiAvKgogLy8gRG8gdGhlIHJpZ2h0IHRoaW5n
IGZvciBhIENhcmJvbiBXaW5kb3cuCi0tICh2b2lkKXNlbmRFdmVudDooTlNFdmVudCAqKXRoZUV2
ZW50IHsKKy0gKHZvaWQpc2VuZEV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQKK3sKIAogICAgIC8v
IE5vdCBhbGwgZXZlbnRzIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIG1hbm5lci4KICAgICBOU0V2
ZW50VHlwZSBldmVudFR5cGUgPSBbdGhlRXZlbnQgdHlwZV07Ci0gICAgaWYgKGV2ZW50VHlwZT09
TlNBcHBLaXREZWZpbmVkKSB7CisgICAgaWYgKGV2ZW50VHlwZT09TlNBcHBLaXREZWZpbmVkKQor
ewogCiAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXZlbnQgdGhlIENvY29hIHdheS4gIENhcmJvbiB3
b24ndCB1bmRlcnN0YW5kIGl0IGFueXdheS4KICAgICAgICAgW3N1cGVyIHNlbmRFdmVudDp0aGVF
dmVudF07CkBAIC03NTcsNyArNzc1LDggQEAgLSAodm9pZClzZW5kRXZlbnQ6KE5TRXZlbnQgKil0
aGVFdmVudCB7CiAKIAogLy8gRG8gd2hhdCBOU1dpbmRvdyB3b3VsZCBkbywgYnV0IGZvciBhIENh
cmJvbiB3aW5kb3cuCi0tICh2b2lkKXNldENvbnRlbnRWaWV3OihOU1ZpZXcgKilhVmlldyB7Cist
ICh2b2lkKXNldENvbnRlbnRWaWV3OihOU1ZpZXcgKilhVmlldworewogCiAgICAgTlNSZWN0IGNv
bnRlbnRGcmFtZVJlY3Q7CiAgICAgT1NTdGF0dXMgb3NTdGF0dXM7CkBAIC03OTksMTYgKzgxOCwx
OSBAQCAtICh2b2lkKXNldENvbnRlbnRWaWV3OihOU1ZpZXcgKilhVmlldyB7CiAvLyBUaGVyZSdz
IG5vIG92ZXJyaWRlIG9mIHNldERlcHRoTGltaXQ6LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNX
aW5kb3cncyBpbnZva2VzIFtzZWxmIHdpbmRvd051bWJlcl0sIGJlY2F1c2UgaXQgbG9va3MgbGlr
ZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5kb3dzIGFzIGlzLgogCiAKLS0gKEJPT0wpd29y
a3NXaGVuTW9kYWwgeworLSAoQk9PTCl3b3Jrc1doZW5Nb2RhbAorewogICAgIFdpbmRvd0NsYXNz
IHdpbmRvd0NsYXNzID0gW3NlbGYgX2NhcmJvbldpbmRvd0NsYXNzXTsKICAgICByZXR1cm4gKHdp
bmRvd0NsYXNzID09IGtGbG9hdGluZ1dpbmRvd0NsYXNzIHx8IHdpbmRvd0NsYXNzID09IGtVdGls
aXR5V2luZG93Q2xhc3MpOwogfQogCi0tICh2b2lkKV9zZXRNb2RhbFdpbmRvd0xldmVsIHsKKy0g
KHZvaWQpX3NldE1vZGFsV2luZG93TGV2ZWwKK3sKICAgICByZXR1cm47CiB9CiAKLS0gKGlkKV9j
bGVhck1vZGFsV2luZG93TGV2ZWwgeworLSAoaWQpX2NsZWFyTW9kYWxXaW5kb3dMZXZlbAorewog
ICAgIHJldHVybiBuaWw7CiB9CiAKQEAgLTgxOSw3ICs4NDEsOCBAQCAtIChpZClfY2xlYXJNb2Rh
bFdpbmRvd0xldmVsIHsKIC8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2Ygd2luZG93TnVtYmVyLCBk
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyByZXR1cm5zIF93aW5kb3dOdW0sIGJlY2F1
c2UgX3dpbmRvd051bSBpcyBvbmUgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyB3aG9zZSB2YWx1
ZSB3ZSdyZSBrZWVwaW5nIHN5bmNocm9uaXplZCB3aXRoIHRoZSBDYXJib24gd2luZG93LgogCiAK
LS0gKFVJbnQzMiljYXJib25ISUNvbW1hbmRJREZyb21BY3Rpb25TZWxlY3RvcjooU0VMKWluQWN0
aW9uU2VsZWN0b3IgeworLSAoVUludDMyKWNhcmJvbkhJQ29tbWFuZElERnJvbUFjdGlvblNlbGVj
dG9yOihTRUwpaW5BY3Rpb25TZWxlY3RvcgorewogCiAgICAgLy8gSW5pdGlhbGl6ZSB3aXRoIHRo
ZSBkZWZhdWx0IHJldHVybiB2YWx1ZS4KICAgICBVSW50MzIgaGlDb21tYW5kSUQgPSAwOwpAQCAt
ODM5LDcgKzg2Miw4IEBAIC0gKFVJbnQzMiljYXJib25ISUNvbW1hbmRJREZyb21BY3Rpb25TZWwK
IH0KIAogCi0tICh2b2lkKXNlbmRDYXJib25Qcm9jZXNzSElDb21tYW5kRXZlbnQ6KFVJbnQzMilp
bkhJQ29tbWFuZElEIHsKKy0gKHZvaWQpc2VuZENhcmJvblByb2Nlc3NISUNvbW1hbmRFdmVudDoo
VUludDMyKWluSElDb21tYW5kSUQKK3sKIAogICAgIEV2ZW50VGFyZ2V0UmVmIGV2ZW50VGFyZ2V0
UmVmOwogICAgIEhJQ29tbWFuZCBoaUNvbW1hbmQ7CkBAIC04NzUsMTIgKzg5OSwxMyBAQCAtICh2
b2lkKXNlbmRDYXJib25Qcm9jZXNzSElDb21tYW5kRXZlbnQ6CiBDbGVhblVwOgogCiAgICAgLy8g
Q2xlYW4gdXAuCi0gICAgaWYgKGV2ZW50UmVmKSBSZWxlYXNlRXZlbnQoZXZlbnRSZWYpOwotCisg
ICAgaWYgKGV2ZW50UmVmKQorICAgICAgICBSZWxlYXNlRXZlbnQoZXZlbnRSZWYpOwogfQogCiAK
LS0gKEJvb2xlYW4pc2VuZENhcmJvblVwZGF0ZUhJQ29tbWFuZFN0YXR1c0V2ZW50OihVSW50MzIp
aW5ISUNvbW1hbmRJRCB3aXRoTWVudVJlZjooTWVudVJlZilpbk1lbnVSZWYgYW5kTWVudUl0ZW1J
bmRleDooVUludDE2KWluTWVudUl0ZW1JbmRleCB7CistIChCb29sZWFuKXNlbmRDYXJib25VcGRh
dGVISUNvbW1hbmRTdGF0dXNFdmVudDooVUludDMyKWluSElDb21tYW5kSUQgd2l0aE1lbnVSZWY6
KE1lbnVSZWYpaW5NZW51UmVmIGFuZE1lbnVJdGVtSW5kZXg6KFVJbnQxNilpbk1lbnVJdGVtSW5k
ZXgKK3sKIAogICAgIEV2ZW50VGFyZ2V0UmVmIGV2ZW50VGFyZ2V0UmVmOwogICAgIEhJQ29tbWFu
ZCBoaUNvbW1hbmQ7CkBAIC05MTksOTQgKzk0NCw5MSBAQCAtIChCb29sZWFuKXNlbmRDYXJib25V
cGRhdGVISUNvbW1hbmRTdGF0CiBDbGVhblVwOgogCiAgICAgLy8gQ2xlYW4gdXAuCi0gICAgaWYg
KGV2ZW50UmVmKSBSZWxlYXNlRXZlbnQoZXZlbnRSZWYpOworICAgIGlmIChldmVudFJlZikKKyAg
ICAgICAgUmVsZWFzZUV2ZW50KGV2ZW50UmVmKTsKIAogICAgIC8vIERvbmUuCiAgICAgcmV0dXJu
IGV2ZW50V2FzSGFuZGxlZDsKLQogfQogCiAtICh2b2lkKV9oYW5kbGVSb290Qm91bmRzQ2hhbmdl
ZAogewotCUhJVmlld1JlZglyb290ID0gSElWaWV3R2V0Um9vdCggX3dpbmRvd1JlZiApOyAKLQlI
SVJlY3QJCWZyYW1lOworICAgIEhJVmlld1JlZiByb290ID0gSElWaWV3R2V0Um9vdChfd2luZG93
UmVmKTsgCisgICAgSElSZWN0IGZyYW1lOwogCi0JSElWaWV3R2V0RnJhbWUoIHJvb3QsICZmcmFt
ZSApOwotCVtfYm9yZGVyVmlldyBzZXRGcmFtZVNpemU6KihOU1NpemUqKSZmcmFtZS5zaXplXTsK
KyAgICBISVZpZXdHZXRGcmFtZShyb290LCAmZnJhbWUpOworICAgIFtfYm9yZGVyVmlldyBzZXRG
cmFtZVNpemU6KihOU1NpemUqKSZmcmFtZS5zaXplXTsKIH0KIAogLSAodm9pZClfaGFuZGxlQ29u
dGVudEJvdW5kc0NoYW5nZWQKIHsKLQlISVZpZXdSZWYJcm9vdCwgY29udGVudFZpZXc7IAotCUhJ
UmVjdAkJcm9vdEJvdW5kcywgY29udGVudEZyYW1lOwotCU5TUmVjdAkJb2xkQ29udGVudEZyYW1l
UmVjdDsKLQotCXJvb3QgPSBISVZpZXdHZXRSb290KCBfd2luZG93UmVmICk7Ci0JSElWaWV3Rmlu
ZEJ5SUQoIHJvb3QsIGtISVZpZXdXaW5kb3dDb250ZW50SUQsICZjb250ZW50VmlldyApOwotCUhJ
Vmlld0dldEZyYW1lKCBjb250ZW50VmlldywgJmNvbnRlbnRGcmFtZSApOwotCUhJVmlld0dldEJv
dW5kcyggcm9vdCwgJnJvb3RCb3VuZHMgKTsKLQkKKyAgICBISVZpZXdSZWYgcm9vdCwgY29udGVu
dFZpZXc7IAorICAgIEhJUmVjdCByb290Qm91bmRzLCBjb250ZW50RnJhbWU7CisgICAgTlNSZWN0
IG9sZENvbnRlbnRGcmFtZVJlY3Q7CisKKyAgICByb290ID0gSElWaWV3R2V0Um9vdChfd2luZG93
UmVmKTsKKyAgICBISVZpZXdGaW5kQnlJRChyb290LCBrSElWaWV3V2luZG93Q29udGVudElELCAm
Y29udGVudFZpZXcpOworICAgIEhJVmlld0dldEZyYW1lKGNvbnRlbnRWaWV3LCAmY29udGVudEZy
YW1lKTsKKyAgICBISVZpZXdHZXRCb3VuZHMocm9vdCwgJnJvb3RCb3VuZHMpOworICAgIAogICAg
IC8vIFNldCB0aGUgY29udGVudCB2aWV3J3MgZnJhbWUgcmVjdCBmcm9tIHRoZSBDYXJib24gd2lu
ZG93J3MgY29udGVudCByZWdpb24gYm91bmRzLgotICAgIGNvbnRlbnRGcmFtZS5vcmlnaW4ueSA9
IHJvb3RCb3VuZHMuc2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRNYXhZKCBjb250ZW50RnJhbWUgKTsK
KyAgICBjb250ZW50RnJhbWUub3JpZ2luLnkgPSByb290Qm91bmRzLnNpemUuaGVpZ2h0IC0gQ0dS
ZWN0R2V0TWF4WShjb250ZW50RnJhbWUpOwogCiAgICAgb2xkQ29udGVudEZyYW1lUmVjdCA9IFso
TlNWaWV3ICopX2NvbnRlbnRWaWV3IGZyYW1lXTsKLSAgICBpZiAoICFOU0VxdWFsUmVjdHMoICoo
TlNSZWN0KikmY29udGVudEZyYW1lLCBvbGRDb250ZW50RnJhbWVSZWN0ICkgKSB7CisgICAgaWYg
KCFOU0VxdWFsUmVjdHMoKihOU1JlY3QqKSZjb250ZW50RnJhbWUsIG9sZENvbnRlbnRGcmFtZVJl
Y3QpKSB7CiAgICAgICAgIFsoTlNWaWV3ICopX2NvbnRlbnRWaWV3IHNldEZyYW1lOiooTlNSZWN0
KikmY29udGVudEZyYW1lXTsKICAgICB9CiB9CiAKLS0gKE9TU3RhdHVzKV9oYW5kbGVDYXJib25F
dmVudDooRXZlbnRSZWYpaW5FdmVudCBjYWxsUmVmOihFdmVudEhhbmRsZXJDYWxsUmVmKWluQ2Fs
bFJlZiB7CistIChPU1N0YXR1cylfaGFuZGxlQ2FyYm9uRXZlbnQ6KEV2ZW50UmVmKWluRXZlbnQg
Y2FsbFJlZjooRXZlbnRIYW5kbGVyQ2FsbFJlZilpbkNhbGxSZWYKK3sKICAgICBPU1N0YXR1cyBy
ZXN1bHQgPSBldmVudE5vdEhhbmRsZWRFcnI7CiAgICAgCi0gICAgc3dpdGNoICggR2V0RXZlbnRD
bGFzcyggaW5FdmVudCApICkKLSAgICB7Ci0JCWNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgotCQkJ
ewotCQkJCUNvbnRyb2xSZWYJCWNvbnRyb2w7Ci0JCQkJCi0JCQkJY2hlY2soIEdldEV2ZW50S2lu
ZCggaW5FdmVudCApID09IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkICk7Ci0JCQkJCi0JCQkJ
R2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBl
Q29udHJvbFJlZiwgTlVMTCwKLQkJCQkJCXNpemVvZiggQ29udHJvbFJlZiApLCBOVUxMLCAmY29u
dHJvbCApOwotCQkJCQotCQkJCWlmICggY29udHJvbCA9PSBISVZpZXdHZXRSb290KCBfd2luZG93
UmVmICkgKQotCQkJCQlbc2VsZiBfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWRdOwotCQkJCWVsc2UK
LQkJCQkJW3NlbGYgX2hhbmRsZUNvbnRlbnRCb3VuZHNDaGFuZ2VkXTsKLQkJCX0KLQkJCWJyZWFr
OwotCQkJCi0gICAgCWNhc2Uga0V2ZW50Q2xhc3NXaW5kb3c6Ci0gICAgCQlzd2l0Y2ggKCBHZXRF
dmVudEtpbmQoIGluRXZlbnQgKSApCi0gICAgCQl7Ci0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dT
aG93bjoKLQkJCQkJW3NlbGYgX3NldFZpc2libGU6WUVTXTsKLSAgICAJCQkJYnJlYWs7Ci0gICAg
CQkJCi0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dIaWRkZW46Ci0JCQkJCVtzZWxmIF9zZXRWaXNp
YmxlOk5PXTsKLSAgICAJCQkJYnJlYWs7Ci0gICAgCQkJCi0gICAgCQkJY2FzZSBrRXZlbnRXaW5k
b3dBY3RpdmF0ZWQ6Ci0JCQkJCVtzZWxmIG1ha2VLZXlXaW5kb3ddOwotCQkJCQlicmVhazsKLQkJ
CQkKLSAgICAJCQljYXNlIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkOgotCQkJCQlbc2VsZiByZXNp
Z25LZXlXaW5kb3ddOwotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudFdpbmRvd0Jv
dW5kc0NoYW5nZWQ6Ci0JCQkJCVtzZWxmIHJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzXTsK
LQkJCQkJYnJlYWs7Ci0JCQl9Ci0gICAgCQlicmVhazsKLSAgIAl9Ci0gICAJCisgICAgc3dpdGNo
IChHZXRFdmVudENsYXNzKGluRXZlbnQpKSB7CisgICAgY2FzZSBrRXZlbnRDbGFzc0NvbnRyb2w6
CisgICAgICAgIENvbnRyb2xSZWYgY29udHJvbDsKKworICAgICAgICBBU1NFUlQoR2V0RXZlbnRL
aW5kKGluRXZlbnQpID09IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkKTsKKworICAgICAgICBH
ZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbURpcmVjdE9iamVjdCwgdHlwZUNv
bnRyb2xSZWYsIE5VTEwsIHNpemVvZihDb250cm9sUmVmKSwgTlVMTCwgJmNvbnRyb2wpOworCisg
ICAgICAgIGlmIChjb250cm9sID09IEhJVmlld0dldFJvb3QoX3dpbmRvd1JlZikpCisgICAgICAg
ICAgICBbc2VsZiBfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWRdOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBbc2VsZiBfaGFuZGxlQ29udGVudEJvdW5kc0NoYW5nZWRdOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2Uga0V2ZW50Q2xhc3NXaW5kb3c6CisgICAgICAgIHN3
aXRjaCAoR2V0RXZlbnRLaW5kKGluRXZlbnQpKSB7CisgICAgICAgIGNhc2Uga0V2ZW50V2luZG93
U2hvd246CisgICAgICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpZRVNdOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Uga0V2ZW50V2luZG93SGlkZGVu
OgorICAgICAgICAgICAgW3NlbGYgX3NldFZpc2libGU6Tk9dOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Uga0V2ZW50V2luZG93QWN0aXZhdGVkOgor
ICAgICAgICAgICAgW3NlbGYgbWFrZUtleVdpbmRvd107CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dEZWFjdGl2YXRlZDoKKyAg
ICAgICAgICAgIFtzZWxmIHJlc2lnbktleVdpbmRvd107CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dCb3VuZHNDaGFuZ2VkOgor
ICAgICAgICAgICAgW3NlbGYgcmVjb25jaWxlVG9DYXJib25XaW5kb3dCb3VuZHNdOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogLy8gSGFuZGxlIHZhcmlvdXMgZXZlbnRzIHRoYXQgQ2FyYm9uIGlz
IHNlbmRpbmcgdG8gb3VyIHdpbmRvdy4KLXN0YXRpYyBPU1N0YXR1cyBOU0NhcmJvbldpbmRvd0hh
bmRsZUV2ZW50KEV2ZW50SGFuZGxlckNhbGxSZWYgaW5FdmVudEhhbmRsZXJDYWxsUmVmLCBFdmVu
dFJlZiBpbkV2ZW50UmVmLCB2b2lkICppblVzZXJEYXRhKSB7CitzdGF0aWMgT1NTdGF0dXMgTlND
YXJib25XaW5kb3dIYW5kbGVFdmVudChFdmVudEhhbmRsZXJDYWxsUmVmIGluRXZlbnRIYW5kbGVy
Q2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudFJlZiwgdm9pZCAqaW5Vc2VyRGF0YSkKK3sKIAogICAg
IC8vIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHNlbmQgZXZlbnQgdG8gbmV4dCBoYW5kbGVyLiAgV2Ug
bW9kaWZ5IG9zU3RhdHVzIGFzIG5lY2Vzc2FyeSB3aGVyZSB3ZSBkb24ndCB3YW50IHRoaXMgYmVo
YXZpb3IKICAgICBPU1N0YXR1cyBvc1N0YXR1cyA9IGV2ZW50Tm90SGFuZGxlZEVycjsKQEAgLTEw
MTQsNDAgKzEwMzYsNDAgQEAgc3RhdGljIE9TU3RhdHVzIE5TQ2FyYm9uV2luZG93SGFuZGxlRXZl
bgogICAgIC8vIFdlIGRvIGRpZmZlcmVudCB0aGluZ3MgZm9yIGRpZmZlcmVudCBldmVudCB0eXBl
cy4KICAgICBDYXJib25XaW5kb3dBZGFwdGVyICpjYXJib25XaW5kb3cgPSAoQ2FyYm9uV2luZG93
QWRhcHRlciAqKWluVXNlckRhdGE7CiAKLQlvc1N0YXR1cyA9IFtjYXJib25XaW5kb3cgX2hhbmRs
ZUNhcmJvbkV2ZW50OiBpbkV2ZW50UmVmIGNhbGxSZWY6IGluRXZlbnRIYW5kbGVyQ2FsbFJlZl07
Ci0JCisgICAgb3NTdGF0dXMgPSBbY2FyYm9uV2luZG93IF9oYW5kbGVDYXJib25FdmVudDogaW5F
dmVudFJlZiBjYWxsUmVmOiBpbkV2ZW50SGFuZGxlckNhbGxSZWZdOworICAgIAogICAgIC8vIERv
bmUuICBJZiB3ZSB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQsIHdlIHJldHVybiBldmVudE5v
dEhhbmRsZWRFcnIgdG8gc2VuZCBpdCB0byB0aGUgbmV4dCBoYW5kbGVyCiAgICAgcmV0dXJuIG9z
U3RhdHVzOwogICAgIAogfQogCiAvLyBbMzM2NDExN10gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhp
cyBkb2VzIG5vdCBmYWxsIHRocm91Z2ggdG8gdGhlIEFwcEtpdCBpbXBsZW1lbnRhdGlvbiEgYmFk
IHRoaW5ncyBoYXBwZW4uCi0tICh2b2lkKV9yZWFsbHlEb09yZGVyV2luZG93OihOU1dpbmRvd09y
ZGVyaW5nTW9kZSlwbGFjZSByZWxhdGl2ZVRvOihpbnQpb3RoZXJXaW4gZmluZEtleTooQk9PTClk
b0tleUNhbGMgZm9yQ291bnRlcjooQk9PTClpc0FDb3VudGVyIGZvcmNlOihCT09MKWRvRm9yY2Ug
aXNNb2RhbDooQk9PTClpc01vZGFsIHsKKy0gKHZvaWQpX3JlYWxseURvT3JkZXJXaW5kb3c6KE5T
V2luZG93T3JkZXJpbmdNb2RlKXBsYWNlIHJlbGF0aXZlVG86KGludClvdGhlcldpbiBmaW5kS2V5
OihCT09MKWRvS2V5Q2FsYyBmb3JDb3VudGVyOihCT09MKWlzQUNvdW50ZXIgZm9yY2U6KEJPT0wp
ZG9Gb3JjZSBpc01vZGFsOihCT09MKWlzTW9kYWwKK3sKIH0KIAogLSAoTlNSZWN0KSBfZ3Jvd0Jv
eFJlY3QKIHsKLSAgICAgIFdpbmRvd0F0dHJpYnV0ZXMgICAgICAgICAgICAgICAgYXR0cnM7Ci0g
ICAgICBOU1JlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0UmVjdCA9IE5T
WmVyb1JlY3Q7CisgICAgV2luZG93QXR0cmlidXRlcyBhdHRyczsKKyAgICBOU1JlY3QgcmV0UmVj
dCA9IE5TWmVyb1JlY3Q7CiAKLSAgICAgIEdldFdpbmRvd0F0dHJpYnV0ZXMoIF93aW5kb3dSZWYs
ICZhdHRycyApOworICAgIEdldFdpbmRvd0F0dHJpYnV0ZXMoX3dpbmRvd1JlZiwgJmF0dHJzKTsK
IAotICAgICAgaWYgKCBhdHRycyAmIGtXaW5kb3dSZXNpemFibGVBdHRyaWJ1dGUgKQotICAgICAg
ewotICAgICAgICAgICAgICBISVJlY3QgICAgICAgICAgYm91bmRzLCByZWN0OwotICAgICAgICAg
ICAgICBISVZpZXdSZWYgICB2aWV3OworICAgIGlmIChhdHRycyAmIGtXaW5kb3dSZXNpemFibGVB
dHRyaWJ1dGUpIHsKKyAgICAgICAgSElSZWN0IGJvdW5kcywgcmVjdDsKKyAgICAgICAgSElWaWV3
UmVmIHZpZXc7CiAKLSAgICAgICAgICAgICAgSElWaWV3R2V0Qm91bmRzKCBISVZpZXdHZXRSb290
KCBfd2luZG93UmVmICksICZib3VuZHMgKTsKLSAgICAgICAgICAgICAgSElWaWV3RmluZEJ5SUQo
IEhJVmlld0dldFJvb3QoIF93aW5kb3dSZWYgKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwgJnZp
ZXcgKTsKLSAgICAgICAgICAgICAgSElWaWV3R2V0RnJhbWUoIHZpZXcsICZyZWN0ICk7CisgICAg
ICAgIEhJVmlld0dldEJvdW5kcyhISVZpZXdHZXRSb290KF93aW5kb3dSZWYpLCAmYm91bmRzKTsK
KyAgICAgICAgSElWaWV3RmluZEJ5SUQoSElWaWV3R2V0Um9vdChfd2luZG93UmVmKSwga0hJVmll
d1dpbmRvd0dyb3dCb3hJRCwgJnZpZXcpOworICAgICAgICBISVZpZXdHZXRGcmFtZSh2aWV3LCAm
cmVjdCk7CiAKLSAgICAgICAgICAgICAgcmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdo
dCAtIENHUmVjdEdldE1heFkoIHJlY3QgKSAtIDE7Ci0gICAgICAgICAgICAgIHJlY3Qub3JpZ2lu
LngrKzsKKyAgICAgICAgcmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVj
dEdldE1heFkocmVjdCkgLSAxOworICAgICAgICByZWN0Lm9yaWdpbi54Kys7CiAKLSAgICAgICAg
ICAgICAgcmV0UmVjdCA9ICooTlNSZWN0KikmcmVjdDsKLSAgICAgIH0KKyAgICAgICAgcmV0UmVj
dCA9ICooTlNSZWN0KikmcmVjdDsKKyAgICB9CiAKLSAgICAgIHJldHVybiByZXRSZWN0OworICAg
IHJldHVybiByZXRSZWN0OwogfQogCiBAZW5kIC8vIGltcGxlbWVudGF0aW9uIENhcmJvbldpbmRv
d0FkYXB0ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVdlYlZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmll
dy5tbQkocmV2aXNpb24gMjIyNTUzKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9u
L0hJV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8
cGFsL3NwaS9tYWMvTlNFdmVudFNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNHcmFwaGlj
c1NQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvUXVpY2tEcmF3U1BJLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL09iamNSdW50aW1lRXh0cmFzLmg+CiAKIEBp
bnRlcmZhY2UgTlNXaW5kb3cgKEFwcEtpdFNlY3JldHNISVdlYlZpZXdLbm93cykKQEAgLTEwMywx
MyArMTA0LDEzIEBAIC0gKHZvaWQpX3dlYl9zZXRHcmFwaGljc1BvcnQ6KENHQ29udGV4dFIKIAog
c3RydWN0IEhJV2ViVmlldwogewotICAgIEhJVmlld1JlZgkJCQkJCQlmVmlld1JlZjsKKyAgICBI
SVZpZXdSZWYgZlZpZXdSZWY7CiAKLSAgICBXZWJWaWV3KgkJCQkJCQlmV2ViVmlldzsKLSAgICBO
U1ZpZXcqCQkJCQkJCQlmRmlyc3RSZXNwb25kZXI7Ci0gICAgQ2FyYm9uV2luZG93QWRhcHRlcgkq
CQkJCWZLaXRXaW5kb3c7Ci0gICAgYm9vbAkJCQkJCQkJZklzQ29tcG9zaXRlZDsKLSAgICBDRlJ1
bkxvb3BPYnNlcnZlclJlZgkJCQlmVXBkYXRlT2JzZXJ2ZXI7CisgICAgV2ViVmlldyogZldlYlZp
ZXc7CisgICAgTlNWaWV3KiBmRmlyc3RSZXNwb25kZXI7CisgICAgQ2FyYm9uV2luZG93QWRhcHRl
ciogZktpdFdpbmRvdzsKKyAgICBib29sIGZJc0NvbXBvc2l0ZWQ7CisgICAgQ0ZSdW5Mb29wT2Jz
ZXJ2ZXJSZWYgZlVwZGF0ZU9ic2VydmVyOwogfTsKIHR5cGVkZWYgc3RydWN0IEhJV2ViVmlldyBI
SVdlYlZpZXc7CiAKQEAgLTEyMyw5NyArMTI0LDgxIEBAIHN0YXRpYyBjb25zdCBPU1R5cGUgTlNW
aWV3Q2FyYm9uQ29udHJvbEYKIHN0YXRpYyBjb25zdCBPU1R5cGUgTlNDYXJib25XaW5kb3dQcm9w
ZXJ0eVRhZyA9ICd3aW4gJzsKIAogCi1zdGF0aWMgU0VMIF9OU1NlbGVjdG9yRm9ySElDb21tYW5k
KCBjb25zdCBISUNvbW1hbmQqIGhpQ29tbWFuZCApOworc3RhdGljIFNFTCBfTlNTZWxlY3RvckZv
ckhJQ29tbWFuZChjb25zdCBISUNvbW1hbmQqKTsKIAogc3RhdGljIGNvbnN0IEV2ZW50VHlwZVNw
ZWMga0V2ZW50c1tdID0geyAKLQl7IGtFdmVudENsYXNzSElPYmplY3QsIGtFdmVudEhJT2JqZWN0
Q29uc3RydWN0IH0sCi0JeyBrRXZlbnRDbGFzc0hJT2JqZWN0LCBrRXZlbnRISU9iamVjdERlc3Ry
dWN0IH0sCi0JCi0JeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZVVwIH0sCi0JeyBrRXZl
bnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZU1vdmVkIH0sCi0JeyBrRXZlbnRDbGFzc01vdXNlLCBr
RXZlbnRNb3VzZURyYWdnZWQgfSwKLQl7IGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlV2hl
ZWxNb3ZlZCB9LAotCi0JeyBrRXZlbnRDbGFzc0tleWJvYXJkLCBrRXZlbnRSYXdLZXlEb3duIH0s
Ci0JeyBrRXZlbnRDbGFzc0tleWJvYXJkLCBrRXZlbnRSYXdLZXlSZXBlYXQgfSwKLQotCXsga0V2
ZW50Q2xhc3NDb21tYW5kLCBrRXZlbnRDb21tYW5kUHJvY2VzcyB9LAotCXsga0V2ZW50Q2xhc3ND
b21tYW5kLCBrRXZlbnRDb21tYW5kVXBkYXRlU3RhdHVzIH0sCi0KLQl7IGtFdmVudENsYXNzQ29u
dHJvbCwga0V2ZW50Q29udHJvbEluaXRpYWxpemUgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwg
a0V2ZW50Q29udHJvbERyYXcgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJv
bEhpdFRlc3QgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEdldFBhcnRS
ZWdpb24gfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEdldERhdGEgfSwK
LQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQgfSwKLQl7
IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEFjdGl2YXRlIH0sCi0JeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEZWFjdGl2YXRlIH0sCi0JeyBrRXZlbnRDbGFzc0Nv
bnRyb2wsIGtFdmVudENvbnRyb2xPd25pbmdXaW5kb3dDaGFuZ2VkIH0sCi0JeyBrRXZlbnRDbGFz
c0NvbnRyb2wsIGtFdmVudENvbnRyb2xDbGljayB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBr
RXZlbnRDb250cm9sQ29udGV4dHVhbE1lbnVDbGljayB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9s
LCBrRXZlbnRDb250cm9sU2V0Rm9jdXNQYXJ0IH0KKyAgICB7IGtFdmVudENsYXNzSElPYmplY3Qs
IGtFdmVudEhJT2JqZWN0Q29uc3RydWN0IH0sCisgICAgeyBrRXZlbnRDbGFzc0hJT2JqZWN0LCBr
RXZlbnRISU9iamVjdERlc3RydWN0IH0sCisgICAgCisgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBr
RXZlbnRNb3VzZVVwIH0sCisgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZU1vdmVk
IH0sCisgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZURyYWdnZWQgfSwKKyAgICB7
IGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlV2hlZWxNb3ZlZCB9LAorCisgICAgeyBrRXZl
bnRDbGFzc0tleWJvYXJkLCBrRXZlbnRSYXdLZXlEb3duIH0sCisgICAgeyBrRXZlbnRDbGFzc0tl
eWJvYXJkLCBrRXZlbnRSYXdLZXlSZXBlYXQgfSwKKworICAgIHsga0V2ZW50Q2xhc3NDb21tYW5k
LCBrRXZlbnRDb21tYW5kUHJvY2VzcyB9LAorICAgIHsga0V2ZW50Q2xhc3NDb21tYW5kLCBrRXZl
bnRDb21tYW5kVXBkYXRlU3RhdHVzIH0sCisKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2
ZW50Q29udHJvbEluaXRpYWxpemUgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50
Q29udHJvbERyYXcgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEhp
dFRlc3QgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEdldFBhcnRS
ZWdpb24gfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEdldERhdGEg
fSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQg
fSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEFjdGl2YXRlIH0sCisg
ICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEZWFjdGl2YXRlIH0sCisgICAg
eyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xPd25pbmdXaW5kb3dDaGFuZ2VkIH0s
CisgICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xDbGljayB9LAorICAgIHsg
a0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sQ29udGV4dHVhbE1lbnVDbGljayB9LAor
ICAgIHsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sU2V0Rm9jdXNQYXJ0IH0KIH07
CiAKLSNkZWZpbmUga0hJVmlld0Jhc2VDbGFzc0lECQlDRlNUUiggImNvbS5hcHBsZS5oaXZpZXci
ICkKLSNkZWZpbmUga0hJV2ViVmlld0NsYXNzSUQJCUNGU1RSKCAiY29tLmFwcGxlLkhJV2ViVmll
dyIgKQorI2RlZmluZSBrSElWaWV3QmFzZUNsYXNzSUQgQ0ZTVFIoImNvbS5hcHBsZS5oaXZpZXci
KQorI2RlZmluZSBrSElXZWJWaWV3Q2xhc3NJRCBDRlNUUigiY29tLmFwcGxlLkhJV2ViVmlldyIp
CisKK3N0YXRpYyBISVdlYlZpZXcqIEhJV2ViVmlld0NvbnN0cnVjdG9yKEhJVmlld1JlZiBpblZp
ZXcpOworc3RhdGljIHZvaWQgSElXZWJWaWV3RGVzdHJ1Y3RvcihISVdlYlZpZXcqKTsKIAotc3Rh
dGljIEhJV2ViVmlldyoJCUhJV2ViVmlld0NvbnN0cnVjdG9yKCBISVZpZXdSZWYgaW5WaWV3ICk7
Ci1zdGF0aWMgdm9pZAkJCQlISVdlYlZpZXdEZXN0cnVjdG9yKCBISVdlYlZpZXcqIHZpZXcgKTsK
K3N0YXRpYyBPU1N0YXR1cyBISVdlYlZpZXdFdmVudEhhbmRsZXIoRXZlbnRIYW5kbGVyQ2FsbFJl
ZiBpbkNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnQsIHZvaWQgKmluVXNlckRhdGEpOwogCi1zdGF0
aWMgT1NTdGF0dXMJCQlISVdlYlZpZXdFdmVudEhhbmRsZXIoCi0JCQkJCQkJCUV2ZW50SGFuZGxl
ckNhbGxSZWYJaW5DYWxsUmVmLAotCQkJCQkJCQlFdmVudFJlZgkJCWluRXZlbnQsCi0JCQkJCQkJ
CXZvaWQgKgkJCQlpblVzZXJEYXRhICk7Ci0KLXN0YXRpYyBVSW50MzIJCQlHZXRCZWhhdmlvcnMo
KTsKLXN0YXRpYyBDb250cm9sS2luZAkJR2V0S2luZCgpOwotc3RhdGljIHZvaWQJCQkJRHJhdygg
SElXZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdFJnbiwgQ0dDb250ZXh0UmVmIGluQ29u
dGV4dCApOwotc3RhdGljIENvbnRyb2xQYXJ0Q29kZQlIaXRUZXN0KCBISVdlYlZpZXcqIHZpZXcs
IGNvbnN0IEhJUG9pbnQqIHdoZXJlICk7Ci1zdGF0aWMgT1NTdGF0dXMJCQlHZXRSZWdpb24oIEhJ
V2ViVmlldyogdmlldywgQ29udHJvbFBhcnRDb2RlIGluUGFydCwgUmduSGFuZGxlIG91dFJnbiAp
Owotc3RhdGljIHZvaWQJCQkJQm91bmRzQ2hhbmdlZCgKLQkJCQkJCQkJSElXZWJWaWV3KgkJCWlu
VmlldywKLQkJCQkJCQkJVUludDMyCQkJCWluT3B0aW9ucywKLQkJCQkJCQkJY29uc3QgSElSZWN0
KgkJaW5PcmlnaW5hbEJvdW5kcywKLQkJCQkJCQkJY29uc3QgSElSZWN0KgkJaW5DdXJyZW50Qm91
bmRzICk7Ci1zdGF0aWMgdm9pZAkJCQlPd25pbmdXaW5kb3dDaGFuZ2VkKAotCQkJCQkJCQlISVdl
YlZpZXcqCQkJdmlldywKLQkJCQkJCQkJV2luZG93UmVmCQkJb2xkV2luZG93LAotCQkJCQkJCQlX
aW5kb3dSZWYJCQluZXdXaW5kb3cgKTsKLXN0YXRpYyB2b2lkCQkJCUFjdGl2ZVN0YXRlQ2hhbmdl
ZCggSElXZWJWaWV3KiB2aWV3ICk7Ci0KLXN0YXRpYyBPU1N0YXR1cwkJCUNsaWNrKCBISVdlYlZp
ZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApOwotc3RhdGljIE9TU3RhdHVzCQkJQ29udGV4
dE1lbnVDbGljayggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKTsKLXN0YXRp
YyBPU1N0YXR1cwkJCU1vdXNlVXAoIEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50
ICk7Ci1zdGF0aWMgT1NTdGF0dXMJCQlNb3VzZU1vdmVkKCBISVdlYlZpZXcqIGluVmlldywgRXZl
bnRSZWYgaW5FdmVudCApOwotc3RhdGljIE9TU3RhdHVzCQkJTW91c2VEcmFnZ2VkKCBISVdlYlZp
ZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApOwotc3RhdGljIE9TU3RhdHVzCQkJTW91c2VX
aGVlbE1vdmVkKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApOwotCi1zdGF0
aWMgT1NTdGF0dXMJCQlQcm9jZXNzQ29tbWFuZCggSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJ
Q29tbWFuZCogaW5Db21tYW5kICk7Ci1zdGF0aWMgT1NTdGF0dXMJCQlVcGRhdGVDb21tYW5kU3Rh
dHVzKCBISVdlYlZpZXcqIGluVmlldywgY29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQgKTsKLQot
c3RhdGljIE9TU3RhdHVzCQkJU2V0Rm9jdXNQYXJ0KAotCQkJCQkJCQlISVdlYlZpZXcqCQkJCXZp
ZXcsCi0JCQkJCQkJCUNvbnRyb2xQYXJ0Q29kZSAJCWRlc2lyZWRGb2N1cywKLQkJCQkJCQkJUmdu
SGFuZGxlIAkJCQlpbnZhbGlkUmduLAotCQkJCQkJCQlCb29sZWFuIAkJCQlmb2N1c0V2ZXJ5dGhp
bmcsCi0JCQkJCQkJCUNvbnRyb2xQYXJ0Q29kZSogCQlhY3R1YWxGb2N1cyApOwotc3RhdGljIE5T
VmlldyoJCQlBZHZhbmNlRm9jdXMoIEhJV2ViVmlldyogdmlldywgYm9vbCBmb3J3YXJkICk7Ci1z
dGF0aWMgdm9pZAkJCQlSZWxpbnF1aXNoRm9jdXMoIEhJV2ViVmlldyogdmlldywgYm9vbCBpbkF1
dG9kaXNwbGF5ICk7CitzdGF0aWMgVUludDMyIEdldEJlaGF2aW9ycygpOworc3RhdGljIENvbnRy
b2xLaW5kIEdldEtpbmQoKTsKK3N0YXRpYyB2b2lkIERyYXcoSElXZWJWaWV3KiBpblZpZXcsIFJn
bkhhbmRsZSBsaW1pdFJnbiwgQ0dDb250ZXh0UmVmIGluQ29udGV4dCk7CitzdGF0aWMgQ29udHJv
bFBhcnRDb2RlIEhpdFRlc3QoSElXZWJWaWV3KiwgY29uc3QgSElQb2ludCogd2hlcmUpOworc3Rh
dGljIE9TU3RhdHVzIEdldFJlZ2lvbihISVdlYlZpZXcqLCBDb250cm9sUGFydENvZGUgaW5QYXJ0
LCBSZ25IYW5kbGUgb3V0UmduKTsKK3N0YXRpYyB2b2lkIEJvdW5kc0NoYW5nZWQoSElXZWJWaWV3
KiBpblZpZXcsIFVJbnQzMiBpbk9wdGlvbnMsIGNvbnN0IEhJUmVjdCogaW5PcmlnaW5hbEJvdW5k
cywgY29uc3QgSElSZWN0KiBpbkN1cnJlbnRCb3VuZHMpOworc3RhdGljIHZvaWQgT3duaW5nV2lu
ZG93Q2hhbmdlZChISVdlYlZpZXcqLCBXaW5kb3dSZWYgb2xkV2luZG93LCBXaW5kb3dSZWYgbmV3
V2luZG93KTsKK3N0YXRpYyB2b2lkIEFjdGl2ZVN0YXRlQ2hhbmdlZChISVdlYlZpZXcqKTsKKwor
c3RhdGljIE9TU3RhdHVzIENsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50
KTsKK3N0YXRpYyBPU1N0YXR1cyBDb250ZXh0TWVudUNsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBF
dmVudFJlZiBpbkV2ZW50KTsKK3N0YXRpYyBPU1N0YXR1cyBNb3VzZVVwKEhJV2ViVmlldyogaW5W
aWV3LCBFdmVudFJlZiBpbkV2ZW50KTsKK3N0YXRpYyBPU1N0YXR1cyBNb3VzZU1vdmVkKEhJV2Vi
VmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KTsKK3N0YXRpYyBPU1N0YXR1cyBNb3VzZURy
YWdnZWQoSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpOworc3RhdGljIE9TU3Rh
dHVzIE1vdXNlV2hlZWxNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7
CisKK3N0YXRpYyBPU1N0YXR1cyBQcm9jZXNzQ29tbWFuZChISVdlYlZpZXcqIGluVmlldywgY29u
c3QgSElDb21tYW5kKiBpbkNvbW1hbmQpOworc3RhdGljIE9TU3RhdHVzIFVwZGF0ZUNvbW1hbmRT
dGF0dXMoSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kKTsKKwor
c3RhdGljIE9TU3RhdHVzIFNldEZvY3VzUGFydChISVdlYlZpZXcqLCBDb250cm9sUGFydENvZGUg
ZGVzaXJlZEZvY3VzLCBSZ25IYW5kbGUgaW52YWxpZFJnbiwgQm9vbGVhbiBmb2N1c0V2ZXJ5dGhp
bmcsIENvbnRyb2xQYXJ0Q29kZSogYWN0dWFsRm9jdXMpOworc3RhdGljIE5TVmlldyogQWR2YW5j
ZUZvY3VzKEhJV2ViVmlldyosIGJvb2wgZm9yd2FyZCk7CitzdGF0aWMgdm9pZCBSZWxpbnF1aXNo
Rm9jdXMoSElXZWJWaWV3KiwgYm9vbCBpbkF1dG9kaXNwbGF5KTsKIAotc3RhdGljIFdpbmRvd1Jl
ZgkJR2V0V2luZG93UmVmKCBISVdlYlZpZXcqIGluVmlldyApOwotc3RhdGljIHZvaWQJCQkJU3lu
Y0ZyYW1lKCBISVdlYlZpZXcqIGluVmlldyApOworc3RhdGljIFdpbmRvd1JlZiBHZXRXaW5kb3dS
ZWYoSElXZWJWaWV3KiBpblZpZXcpOworc3RhdGljIHZvaWQgU3luY0ZyYW1lKEhJV2ViVmlldyog
aW5WaWV3KTsKIAotc3RhdGljIE9TU3RhdHVzCQkJV2luZG93SGFuZGxlciggRXZlbnRIYW5kbGVy
Q2FsbFJlZiBpbkNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnQsIHZvaWQqIGluVXNlckRhdGEgKTsK
K3N0YXRpYyBPU1N0YXR1cyBXaW5kb3dIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxs
UmVmLCBFdmVudFJlZiBpbkV2ZW50LCB2b2lkKiBpblVzZXJEYXRhKTsKIAotc3RhdGljIHZvaWQJ
CQkJU3RhcnRVcGRhdGVPYnNlcnZlciggSElXZWJWaWV3KiB2aWV3ICk7Ci1zdGF0aWMgdm9pZAkJ
CQlTdG9wVXBkYXRlT2JzZXJ2ZXIoIEhJV2ViVmlldyogdmlldyApOworc3RhdGljIHZvaWQgU3Rh
cnRVcGRhdGVPYnNlcnZlcihISVdlYlZpZXcqKTsKK3N0YXRpYyB2b2lkIFN0b3BVcGRhdGVPYnNl
cnZlcihISVdlYlZpZXcqKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBISVdl
YlZpZXdDcmVhdGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLU9TU3RhdHVzCi1I
SVdlYlZpZXdDcmVhdGUoSElWaWV3UmVmKiBvdXRDb250cm9sKQorT1NTdGF0dXMgSElXZWJWaWV3
Q3JlYXRlKEhJVmlld1JlZiogb3V0Q29udHJvbCkKIHsKICAgICBISVdlYlZpZXdSZWdpc3RlckNs
YXNzKCk7CiAgICAgcmV0dXJuIEhJT2JqZWN0Q3JlYXRlKGtISVdlYlZpZXdDbGFzc0lELCBOVUxM
LCAoSElPYmplY3RSZWYqKW91dENvbnRyb2wpOwpAQCAtMjIzLDE2ICsyMDgsMTUgQEAgSElXZWJW
aWV3Q3JlYXRlKEhJVmlld1JlZiogb3V0Q29udHJvbCkKIC8vIEhJV2ViVmlld0dldFdlYlZpZXcK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLVdlYlZpZXcqCi1ISVdlYlZpZXdHZXRX
ZWJWaWV3KCBISVZpZXdSZWYgaW5WaWV3ICkKK1dlYlZpZXcqIEhJV2ViVmlld0dldFdlYlZpZXco
SElWaWV3UmVmIGluVmlldykKIHsKLQlISVdlYlZpZXcqIAl2aWV3ID0gKEhJV2ViVmlldyopSElP
YmplY3REeW5hbWljQ2FzdCggKEhJT2JqZWN0UmVmKWluVmlldywga0hJV2ViVmlld0NsYXNzSUQg
KTsKLQlXZWJWaWV3KgkJCXJlc3VsdCA9IE5VTEw7Ci0JCi0JaWYgKCB2aWV3ICkKLQkJcmVzdWx0
ID0gdmlldy0+ZldlYlZpZXc7Ci0JCi0JcmV0dXJuIHJlc3VsdDsKKyAgICBISVdlYlZpZXcqIHZp
ZXcgPSAoSElXZWJWaWV3KilISU9iamVjdER5bmFtaWNDYXN0KChISU9iamVjdFJlZilpblZpZXcs
IGtISVdlYlZpZXdDbGFzc0lEKTsKKyAgICBXZWJWaWV3KiByZXN1bHQgPSBOVUxMOworICAgIAor
ICAgIGlmICh2aWV3KQorICAgICAgICByZXN1bHQgPSB2aWV3LT5mV2ViVmlldzsKKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0
MCwzOCArMjI0LDM1IEBAIEhJV2ViVmlld0dldFdlYlZpZXcoIEhJVmlld1JlZiBpblZpZXcgKQog
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogCi1zdGF0aWMgSElXZWJWaWV3KgotSElX
ZWJWaWV3Q29uc3RydWN0b3IoIEhJVmlld1JlZiBpblZpZXcgKQorc3RhdGljIEhJV2ViVmlldyog
SElXZWJWaWV3Q29uc3RydWN0b3IoSElWaWV3UmVmIGluVmlldykKIHsKLQlISVdlYlZpZXcqCQl2
aWV3ID0gKEhJV2ViVmlldyopbWFsbG9jKCBzaXplb2YoIEhJV2ViVmlldyApICk7Ci0JCi0JaWYg
KCB2aWV3ICkKLQl7Ci0JCU5TUmVjdAkJZnJhbWUgPSB7IHsgMCwgMCB9LCB7IDQwMCwgNDAwICB9
IH07Ci0JCi0JCXZpZXctPmZWaWV3UmVmID0gaW5WaWV3OwotCi0gICAgICAgICAgICAgICAgV2Vi
VmlldyAqd2ViVmlldyA9IFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTogZnJhbWVdOwot
ICAgICAgICAgICAgICAgIENGUmV0YWluKHdlYlZpZXcpOwotICAgICAgICAgICAgICAgIFt3ZWJW
aWV3IHJlbGVhc2VdOwotCQl2aWV3LT5mV2ViVmlldyA9IHdlYlZpZXc7Ci0JCVtISVZpZXdBZGFw
dGVyIGJpbmRISVZpZXdUb05TVmlldzppblZpZXcgbnNWaWV3OnZpZXctPmZXZWJWaWV3XTsKLQkJ
Ci0JCXZpZXctPmZGaXJzdFJlc3BvbmRlciA9IE5VTEw7Ci0JCXZpZXctPmZLaXRXaW5kb3cgPSBO
VUxMOworICAgIEhJV2ViVmlldyogdmlldyA9IChISVdlYlZpZXcqKW1hbGxvYyhzaXplb2YoSElX
ZWJWaWV3KSk7CisgICAgCisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgTlNSZWN0IGZyYW1lID0g
eyB7IDAsIDAgfSwgeyA0MDAsIDQwMCAgfSB9OworICAgIAorICAgICAgICB2aWV3LT5mVmlld1Jl
ZiA9IGluVmlldzsKKworICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOiBmcmFtZV07CisgICAgICAgIENGUmV0YWluKHdlYlZpZXcpOworICAg
ICAgICBbd2ViVmlldyByZWxlYXNlXTsKKyAgICAgICAgdmlldy0+ZldlYlZpZXcgPSB3ZWJWaWV3
OworICAgICAgICBbSElWaWV3QWRhcHRlciBiaW5kSElWaWV3VG9OU1ZpZXc6aW5WaWV3IG5zVmll
dzp2aWV3LT5mV2ViVmlld107CisgICAgICAgIAorICAgICAgICB2aWV3LT5mRmlyc3RSZXNwb25k
ZXIgPSBOVUxMOworICAgICAgICB2aWV3LT5mS2l0V2luZG93ID0gTlVMTDsKICAgICAgICAgdmll
dy0+ZklzQ29tcG9zaXRlZCA9IGZhbHNlOwogICAgICAgICB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIg
PSBOVUxMOwotCX0KLQkKLQlyZXR1cm4gdmlldzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHZp
ZXc7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gSElXZWJWaWV3RGVzdHJ1
Y3RvcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIHZvaWQKLUhJV2Vi
Vmlld0Rlc3RydWN0b3IoIEhJV2ViVmlldyogaW5WaWV3ICkKK3N0YXRpYyB2b2lkIEhJV2ViVmll
d0Rlc3RydWN0b3IoSElXZWJWaWV3KiBpblZpZXcpCiB7CiAgICAgW0hJVmlld0FkYXB0ZXIgdW5i
aW5kTlNWaWV3OmluVmlldy0+ZldlYlZpZXddOwogICAgIENGUmVsZWFzZShpblZpZXctPmZXZWJW
aWV3KTsKQEAgLTI4MywyNyArMjY0LDI0IEBAIEhJV2ViVmlld0Rlc3RydWN0b3IoIEhJV2ViVmll
dyogaW5WaWV3ICkKIC8vIEhJV2ViVmlld1JlZ2lzdGVyQ2xhc3MKIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogLy8KLXZvaWQKLUhJV2ViVmlld1JlZ2lzdGVyQ2xhc3MoKQordm9pZCBISVdl
YlZpZXdSZWdpc3RlckNsYXNzKCkKIHsKLQlzdGF0aWMgYm9vbCBzUmVnaXN0ZXJlZDsKLQkKLQlp
ZiAoICFzUmVnaXN0ZXJlZCApCi0JewotCQlISU9iamVjdFJlZ2lzdGVyU3ViY2xhc3MoIGtISVdl
YlZpZXdDbGFzc0lELCBrSElWaWV3QmFzZUNsYXNzSUQsIDAsIEhJV2ViVmlld0V2ZW50SGFuZGxl
ciwKLQkJCUdldEV2ZW50VHlwZUNvdW50KCBrRXZlbnRzICksIGtFdmVudHMsIDAsIE5VTEwgKTsK
LQkJc1JlZ2lzdGVyZWQgPSB0cnVlOwotCX0KKyAgICBzdGF0aWMgYm9vbCBzUmVnaXN0ZXJlZDsK
KyAgICAKKyAgICBpZiAoIXNSZWdpc3RlcmVkKSB7CisgICAgICAgIEhJT2JqZWN0UmVnaXN0ZXJT
dWJjbGFzcyhrSElXZWJWaWV3Q2xhc3NJRCwga0hJVmlld0Jhc2VDbGFzc0lELCAwLCBISVdlYlZp
ZXdFdmVudEhhbmRsZXIsCisgICAgICAgICAgICBHZXRFdmVudFR5cGVDb3VudChrRXZlbnRzKSwg
a0V2ZW50cywgMCwgTlVMTCk7CisgICAgICAgIHNSZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICB9CiB9
CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gR2V0QmVoYXZpb3JzCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgVUludDMyCi1HZXRCZWhhdmlvcnMoKQor
c3RhdGljIFVJbnQzMiBHZXRCZWhhdmlvcnMoKQogewotCXJldHVybiBrQ29udHJvbFN1cHBvcnRz
RGF0YUFjY2VzcyB8IGtDb250cm9sU3VwcG9ydHNHZXRSZWdpb24gfCBrQ29udHJvbEdldHNGb2N1
c09uQ2xpY2s7CisgICAgcmV0dXJuIGtDb250cm9sU3VwcG9ydHNEYXRhQWNjZXNzIHwga0NvbnRy
b2xTdXBwb3J0c0dldFJlZ2lvbiB8IGtDb250cm9sR2V0c0ZvY3VzT25DbGljazsKIH0KIAogc3Rh
dGljIENHQ29udGV4dFJlZiBvdmVycmlkZUNHQ29udGV4dChOU1dpbmRvdyAqd2luZG93LCBDR0Nv
bnRleHRSZWYgY29udGV4dCkKQEAgLTMyNiw0OCArMzA0LDQ2IEBAIHN0YXRpYyB2b2lkIHJlc3Rv
cmVDR0NvbnRleHQoTlNXaW5kb3cgKncKIC8vIERyYXcKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogLy8KLXN0YXRpYyB2b2lkCi1EcmF3KCBISVdlYlZpZXcqIGluVmlldywgUmduSGFuZGxl
IGxpbWl0UmduLCBDR0NvbnRleHRSZWYgaW5Db250ZXh0ICkKK3N0YXRpYyB2b2lkIERyYXcoSElX
ZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdFJnbiwgQ0dDb250ZXh0UmVmIGluQ29udGV4
dCkKIHsKLQlISVJlY3QJCQkJYm91bmRzOwotCVJlY3QJCQkJZHJhd1JlY3Q7Ci0JSElSZWN0CQkJ
CWhpUmVjdDsKLQlib29sCQkJCWNyZWF0ZWRDb250ZXh0ID0gZmFsc2U7CisgICAgSElSZWN0IGJv
dW5kczsKKyAgICBSZWN0IGRyYXdSZWN0OworICAgIEhJUmVjdCBoaVJlY3Q7CisgICAgYm9vbCBj
cmVhdGVkQ29udGV4dCA9IGZhbHNlOwogCi0gICAgaWYgKCFpblZpZXctPmZJc0NvbXBvc2l0ZWQp
Ci0gICAgeworICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVkKSB7CiAgICAgICAgIEdyYWZQ
dHIgcG9ydDsKICAgICAgICAgUmVjdCBwb3J0UmVjdDsKIAogI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIgotICAgICAgICBHZXRQb3J0KCAmcG9ydCApOwotICAgICAgICBHZXRQb3J0
Qm91bmRzKCBwb3J0LCAmcG9ydFJlY3QgKTsKLSAgICAgICAgQ3JlYXRlQ0dDb250ZXh0Rm9yUG9y
dCggcG9ydCwgJmluQ29udGV4dCApOworICAgICAgICBHZXRQb3J0KCZwb3J0KTsKKyAgICAgICAg
R2V0UG9ydEJvdW5kcyhwb3J0LCAmcG9ydFJlY3QpOworICAgICAgICBDcmVhdGVDR0NvbnRleHRG
b3JQb3J0KHBvcnQsICZpbkNvbnRleHQpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
LSAgICAgICAgU3luY0NHQ29udGV4dE9yaWdpbldpdGhQb3J0KCBpbkNvbnRleHQsIHBvcnQgKTsK
LSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKCBpbkNvbnRleHQsIDAsIChwb3J0UmVjdC5i
b3R0b20gLSBwb3J0UmVjdC50b3ApICk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKCBpbkNv
bnRleHQsIDEsIC0xICk7CisgICAgICAgIFN5bmNDR0NvbnRleHRPcmlnaW5XaXRoUG9ydChpbkNv
bnRleHQsIHBvcnQpOworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oaW5Db250ZXh0LCAw
LCAocG9ydFJlY3QuYm90dG9tIC0gcG9ydFJlY3QudG9wKSk7CisgICAgICAgIENHQ29udGV4dFNj
YWxlQ1RNKGluQ29udGV4dCwgMSwgLTEpOwogICAgICAgICBjcmVhdGVkQ29udGV4dCA9IHRydWU7
CiAgICAgfQogCi0JSElWaWV3R2V0Qm91bmRzKCBpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7
CisgICAgSElWaWV3R2V0Qm91bmRzKGluVmlldy0+ZlZpZXdSZWYsICZib3VuZHMpOwogCiAgICAg
Q0dDb250ZXh0UmVmIHNhdmVkQ29udGV4dCA9IG92ZXJyaWRlQ0dDb250ZXh0KGluVmlldy0+Zktp
dFdpbmRvdywgaW5Db250ZXh0KTsKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENv
bnRleHQ6W2luVmlldy0+ZktpdFdpbmRvdyBncmFwaGljc0NvbnRleHRdXTsKIAotCUdldFJlZ2lv
bkJvdW5kcyggbGltaXRSZ24sICZkcmF3UmVjdCApOworICAgIEdldFJlZ2lvbkJvdW5kcyhsaW1p
dFJnbiwgJmRyYXdSZWN0KTsKIAotICAgIGlmICggIWluVmlldy0+ZklzQ29tcG9zaXRlZCApCi0g
ICAgICAgIE9mZnNldFJlY3QoICZkcmF3UmVjdCwgKFNJbnQxNiktYm91bmRzLm9yaWdpbi54LCAo
U0ludDE2KS1ib3VuZHMub3JpZ2luLnkgKTsKKyAgICBpZiAoIWluVmlldy0+ZklzQ29tcG9zaXRl
ZCkKKyAgICAgICAgT2Zmc2V0UmVjdCgmZHJhd1JlY3QsIChTSW50MTYpLWJvdW5kcy5vcmlnaW4u
eCwgKFNJbnQxNiktYm91bmRzLm9yaWdpbi55KTsKICAgICAKLQloaVJlY3Qub3JpZ2luLnggPSBk
cmF3UmVjdC5sZWZ0OwotCWhpUmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIGRy
YXdSZWN0LmJvdHRvbTsgLy8gZmxpcCB5Ci0JaGlSZWN0LnNpemUud2lkdGggPSBkcmF3UmVjdC5y
aWdodCAtIGRyYXdSZWN0LmxlZnQ7Ci0JaGlSZWN0LnNpemUuaGVpZ2h0ID0gZHJhd1JlY3QuYm90
dG9tIC0gZHJhd1JlY3QudG9wOworICAgIGhpUmVjdC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7
CisgICAgaGlSZWN0Lm9yaWdpbi55ID0gYm91bmRzLnNpemUuaGVpZ2h0IC0gZHJhd1JlY3QuYm90
dG9tOyAvLyBmbGlwIHkKKyAgICBoaVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0LnJpZ2h0IC0g
ZHJhd1JlY3QubGVmdDsKKyAgICBoaVJlY3Quc2l6ZS5oZWlnaHQgPSBkcmF3UmVjdC5ib3R0b20g
LSBkcmF3UmVjdC50b3A7CiAKLS8vICAgIHByaW50ZiggIkRyYXdpbmc6IGRyYXdSZWN0IGlzICgl
ZyAlZykgKCVnICVnKVxuIiwgaGlSZWN0Lm9yaWdpbi54LCBoaVJlY3Qub3JpZ2luLnksCi0vLyAg
ICAgICAgICAgIGhpUmVjdC5zaXplLndpZHRoLCBoaVJlY3Quc2l6ZS5oZWlnaHQgKTsKKy8vICAg
IHByaW50ZigiRHJhd2luZzogZHJhd1JlY3QgaXMgKCVnICVnKSAoJWcgJWcpXG4iLCBoaVJlY3Qu
b3JpZ2luLngsIGhpUmVjdC5vcmlnaW4ueSwKKy8vICAgICAgICAgICAgaGlSZWN0LnNpemUud2lk
dGgsIGhpUmVjdC5zaXplLmhlaWdodCk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyBs
YXlvdXQgYmVmb3JlIENhcmJvbiBoYXMgZGVjaWRlZCB3aGF0IHJlZ2lvbiBuZWVkcyBkcmF3bi4K
ICAgICAvLyBJbiBDb2NvYSB3ZSBtYWtlIHN1cmUgdG8gZG8gbGF5b3V0IGFuZCBpbnZhbGlkYXRl
IGFueSBuZXcgcmVnaW9ucyBiZWZvcmUgZHJhdywgc28gZXZlcnl0aGluZwpAQCAtMzc4LDQwICsz
NTQsNDAgQEAgRHJhdyggSElXZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdAogICAgIGlm
IChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAg
ICAgIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3dlYl91cGRhdGVMYXlvdXRBbmRTdHls
ZUlmTmVlZGVkUmVjdXJzaXZlXTsKIAotICAgIGlmICggaW5WaWV3LT5mSXNDb21wb3NpdGVkICkK
KyAgICBpZiAoaW5WaWV3LT5mSXNDb21wb3NpdGVkKQogICAgICAgICBbaW5WaWV3LT5mV2ViVmll
dyBkaXNwbGF5SWZOZWVkZWRJblJlY3Q6ICooTlNSZWN0KikmaGlSZWN0XTsKICAgICBlbHNlCiAg
ICAgICAgIFtpblZpZXctPmZXZWJWaWV3IGRpc3BsYXlSZWN0OiooTlNSZWN0KikmaGlSZWN0XTsK
IAogICAgIHJlc3RvcmVDR0NvbnRleHQoaW5WaWV3LT5mS2l0V2luZG93LCBzYXZlZENvbnRleHQp
OwogCi0gICAgaWYgKCAhaW5WaWV3LT5mSXNDb21wb3NpdGVkICkKKyAgICBpZiAoIWluVmlldy0+
ZklzQ29tcG9zaXRlZCkKICAgICB7CiAgICAgICAgIEhJVmlld1JlZiAgICAgIHZpZXc7Ci0gICAg
ICAgIEhJVmlld0ZpbmRCeUlEKCBISVZpZXdHZXRSb290KCBHZXRDb250cm9sT3duZXIoIGluVmll
dy0+ZlZpZXdSZWYgKSApLCBrSElWaWV3V2luZG93R3Jvd0JveElELCAmdmlldyApOwotICAgICAg
ICBpZiAoIHZpZXcgKQorICAgICAgICBISVZpZXdGaW5kQnlJRChISVZpZXdHZXRSb290KEdldENv
bnRyb2xPd25lcihpblZpZXctPmZWaWV3UmVmKSksIGtISVZpZXdXaW5kb3dHcm93Qm94SUQsICZ2
aWV3KTsKKyAgICAgICAgaWYgKHZpZXcpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhJUmVjdCAg
ICAgZnJhbWU7CiAKLSAgICAgICAgICAgIEhJVmlld0dldEJvdW5kcyggdmlldywgJmZyYW1lICk7
Ci0gICAgICAgICAgICBISVZpZXdDb252ZXJ0UmVjdCggJmZyYW1lLCB2aWV3LCBOVUxMICk7Cisg
ICAgICAgICAgICBISVZpZXdHZXRCb3VuZHModmlldywgJmZyYW1lKTsKKyAgICAgICAgICAgIEhJ
Vmlld0NvbnZlcnRSZWN0KCZmcmFtZSwgdmlldywgTlVMTCk7CiAKICAgICAgICAgICAgIGhpUmVj
dC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7CiAgICAgICAgICAgICBoaVJlY3Qub3JpZ2luLnkg
PSBkcmF3UmVjdC50b3A7CiAgICAgICAgICAgICBoaVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0
LnJpZ2h0IC0gZHJhd1JlY3QubGVmdDsKICAgICAgICAgICAgIGhpUmVjdC5zaXplLmhlaWdodCA9
IGRyYXdSZWN0LmJvdHRvbSAtIGRyYXdSZWN0LnRvcDsKIAotICAgICAgICAgICAgSElWaWV3Q29u
dmVydFJlY3QoICZoaVJlY3QsIGluVmlldy0+ZlZpZXdSZWYsIE5VTEwgKTsKKyAgICAgICAgICAg
IEhJVmlld0NvbnZlcnRSZWN0KCZoaVJlY3QsIGluVmlldy0+ZlZpZXdSZWYsIE5VTEwpOwogCi0g
ICAgICAgICAgICBpZiAoIENHUmVjdEludGVyc2VjdHNSZWN0KCBmcmFtZSwgaGlSZWN0ICkgKQot
ICAgICAgICAgICAgICAgIEhJVmlld1NldE5lZWRzRGlzcGxheSggdmlldywgdHJ1ZSApOworICAg
ICAgICAgICAgaWYgKENHUmVjdEludGVyc2VjdHNSZWN0KGZyYW1lLCBoaVJlY3QpKQorICAgICAg
ICAgICAgICAgIEhJVmlld1NldE5lZWRzRGlzcGxheSh2aWV3LCB0cnVlKTsKICAgICAgICAgfQog
ICAgICB9CiAKLSAgICBpZiAoIGNyZWF0ZWRDb250ZXh0ICkKKyAgICBpZiAoY3JlYXRlZENvbnRl
eHQpCiAgICAgewotICAgICAgICBDR0NvbnRleHRTeW5jaHJvbml6ZSggaW5Db250ZXh0ICk7Ci0g
ICAgICAgIENHQ29udGV4dFJlbGVhc2UoIGluQ29udGV4dCApOworICAgICAgICBDR0NvbnRleHRT
eW5jaHJvbml6ZShpbkNvbnRleHQpOworICAgICAgICBDR0NvbnRleHRSZWxlYXNlKGluQ29udGV4
dCk7CiAgICAgfQogfQogCkBAIC00MTksNjEgKzM5NSw0OSBAQCBEcmF3KCBISVdlYlZpZXcqIGlu
VmlldywgUmduSGFuZGxlIGxpbWl0CiAvLyBIaXRUZXN0CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIC8vCi1zdGF0aWMgQ29udHJvbFBhcnRDb2RlCi1IaXRUZXN0KCBISVdlYlZpZXcqIHZp
ZXcsIGNvbnN0IEhJUG9pbnQqIHdoZXJlICkKK3N0YXRpYyBDb250cm9sUGFydENvZGUgSGl0VGVz
dChISVdlYlZpZXcqIHZpZXcsIGNvbnN0IEhJUG9pbnQqIHdoZXJlKQogewotCUhJUmVjdAkJYm91
bmRzOwotCQotCUhJVmlld0dldEJvdW5kcyggdmlldy0+ZlZpZXdSZWYsICZib3VuZHMgKTsKLQot
CWlmICggQ0dSZWN0Q29udGFpbnNQb2ludCggYm91bmRzLCAqd2hlcmUgKSApCi0JCXJldHVybiAx
OwotCWVsc2UKLQkJcmV0dXJuIGtDb250cm9sTm9QYXJ0OworICAgIEhJUmVjdCBib3VuZHM7Cisg
ICAgCisgICAgSElWaWV3R2V0Qm91bmRzKHZpZXctPmZWaWV3UmVmLCAmYm91bmRzKTsKKworICAg
IGlmIChDR1JlY3RDb250YWluc1BvaW50KGJvdW5kcywgKndoZXJlKSkKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgcmV0dXJuIGtDb250cm9sTm9QYXJ0OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIC8vIEdldFJlZ2lvbgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwot
c3RhdGljIE9TU3RhdHVzCi1HZXRSZWdpb24oCi0JSElXZWJWaWV3KgkJCWluVmlldywKLQlDb250
cm9sUGFydENvZGUJCWluUGFydCwKLQlSZ25IYW5kbGUJCQlvdXRSZ24gKQotewotCU9TU3RhdHVz
CSBlcnIgPSBldmVudE5vdEhhbmRsZWRFcnI7Ci0JCi0JaWYgKCBpblBhcnQgPT0gLTMgKSAvLyBr
Q29udHJvbE9wYXF1ZU1ldGFQYXJ0OgotCXsKLQkJaWYgKCBbaW5WaWV3LT5mV2ViVmlldyBpc09w
YXF1ZV0gKQotCQl7Ci0JCQlISVJlY3QJYm91bmRzOwotCQkJUmVjdAl0ZW1wOwotCQkJCi0JCQlI
SVZpZXdHZXRCb3VuZHMoIGluVmlldy0+ZlZpZXdSZWYsICZib3VuZHMgKTsKLQotCQkJdGVtcC50
b3AgPSAoU0ludDE2KWJvdW5kcy5vcmlnaW4ueTsKLQkJCXRlbXAubGVmdCA9IChTSW50MTYpYm91
bmRzLm9yaWdpbi54OwotCQkJdGVtcC5ib3R0b20gPSAoU0ludDE2KUNHUmVjdEdldE1heFkoIGJv
dW5kcyApOwotCQkJdGVtcC5yaWdodCA9IChTSW50MTYpQ0dSZWN0R2V0TWF4WCggYm91bmRzICk7
Ci0KLQkJCVJlY3RSZ24oIG91dFJnbiwgJnRlbXAgKTsKLQkJCWVyciA9IG5vRXJyOwotCQl9Ci0J
fQotCQotCXJldHVybiBlcnI7CitzdGF0aWMgT1NTdGF0dXMgR2V0UmVnaW9uKEhJV2ViVmlldyog
aW5WaWV3LCBDb250cm9sUGFydENvZGUgaW5QYXJ0LCBSZ25IYW5kbGUgb3V0UmduKQoreworICAg
IE9TU3RhdHVzIGVyciA9IGV2ZW50Tm90SGFuZGxlZEVycjsKKyAgICAKKyAgICBpZiAoaW5QYXJ0
ID09IC0zICYmIFtpblZpZXctPmZXZWJWaWV3IGlzT3BhcXVlXSkgeyAvLyBrQ29udHJvbE9wYXF1
ZU1ldGFQYXJ0OgorICAgICAgICBISVJlY3QgYm91bmRzOworICAgICAgICBSZWN0IHRlbXA7Cisg
ICAgICAgIAorICAgICAgICBISVZpZXdHZXRCb3VuZHMoaW5WaWV3LT5mVmlld1JlZiwgJmJvdW5k
cyk7CisKKyAgICAgICAgdGVtcC50b3AgPSAoU0ludDE2KWJvdW5kcy5vcmlnaW4ueTsKKyAgICAg
ICAgdGVtcC5sZWZ0ID0gKFNJbnQxNilib3VuZHMub3JpZ2luLng7CisgICAgICAgIHRlbXAuYm90
dG9tID0gKFNJbnQxNilDR1JlY3RHZXRNYXhZKGJvdW5kcyk7CisgICAgICAgIHRlbXAucmlnaHQg
PSAoU0ludDE2KUNHUmVjdEdldE1heFgoYm91bmRzKTsKKworICAgICAgICBSZWN0UmduKG91dFJn
biwgJnRlbXApOworICAgICAgICBlcnIgPSBub0VycjsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGVycjsKIH0KIAotc3RhdGljIFdpbmRvd1JlZgotR2V0V2luZG93UmVmKCBISVdlYlZpZXcqIGlu
VmlldyApCitzdGF0aWMgV2luZG93UmVmIEdldFdpbmRvd1JlZihISVdlYlZpZXcqIGluVmlldykK
IHsKLSAgICAgICByZXR1cm4gR2V0Q29udHJvbE93bmVyKCBpblZpZXctPmZWaWV3UmVmICk7Cisg
ICAgcmV0dXJuIEdldENvbnRyb2xPd25lcihpblZpZXctPmZWaWV3UmVmKTsKIH0KIAotc3RhdGlj
IE5TRXZlbnQgKgotQ3JlYXRlTlNFdmVudEFkb3B0aW5nQ0dFdmVudCggQ0dFdmVudFJlZiBjZ0V2
ZW50LCBFdmVudFJlZiBldmVudFJlZiApCitzdGF0aWMgTlNFdmVudCAqQ3JlYXRlTlNFdmVudEFk
b3B0aW5nQ0dFdmVudChDR0V2ZW50UmVmIGNnRXZlbnQsIEV2ZW50UmVmIGV2ZW50UmVmKQogewog
ICAgIE5TRXZlbnQgKnJlc3VsdCA9IFtbTlNFdmVudCBhbGxvY10gX2luaXRXaXRoQ0dFdmVudDpj
Z0V2ZW50IGV2ZW50UmVmOmV2ZW50UmVmXTsKICAgICBDRlJlbGVhc2UoY2dFdmVudCk7CkBAIC00
ODEsNyArNDQ1LDcgQEAgQ3JlYXRlTlNFdmVudEFkb3B0aW5nQ0dFdmVudCggQ0dFdmVudFJlZgog
fQogCiBzdGF0aWMgQm9vbGVhbgotQ29weUV2ZW50Q0dFdmVudCggRXZlbnRSZWYgZXZlbnQsIENH
RXZlbnRSZWYqIGNnRXZlbnQgKQorQ29weUV2ZW50Q0dFdmVudChFdmVudFJlZiBldmVudCwgQ0dF
dmVudFJlZiogY2dFdmVudCkKIHsKICAgICBpZiAoKCpjZ0V2ZW50ID0gQ29weUV2ZW50Q0dFdmVu
dChldmVudCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5Niw4ICs0NjAsNyBAQCBDb3B5
RXZlbnRDR0V2ZW50KCBFdmVudFJlZiBldmVudCwgQ0dFdmVuCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVOU0V2ZW50V2l0aENhcmJvbkNsaWNrRXZlbnQo
IEV2ZW50UmVmIGluRXZlbnQsIFdpbmRvd1JlZiB3aW5kb3dSZWYgKQorc3RhdGljIE5TRXZlbnQg
KkNyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uQ2xpY2tFdmVudChFdmVudFJlZiBpbkV2ZW50LCBXaW5k
b3dSZWYgd2luZG93UmVmKQogewogICAgIEV2ZW50UmVmIG5ld0V2ZW50OwogICAgIFBvaW50IHdo
ZXJlOwpAQCAtNTM0LDggKzQ5Nyw3IEBAIENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uQ2xpY2tFdmVu
dCggRXZlbnQKIC8vIENsaWNrCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0
aWMgT1NTdGF0dXMKLUNsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KQor
c3RhdGljIE9TU3RhdHVzIENsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50
KQogewogICAgIE5TRXZlbnQgKmtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25DbGlj
a0V2ZW50KGluRXZlbnQsIEdldFdpbmRvd1JlZihpblZpZXcpKTsKIApAQCAtNTUyLDggKzUxNCw3
IEBAIENsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW4KICAgICByZXR1cm4g
bm9FcnI7CiB9CiAKLXN0YXRpYyBOU0V2ZW50ICoKLUNyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZl
bnQoIEV2ZW50UmVmIGluRXZlbnQgKQorc3RhdGljIE5TRXZlbnQgKkNyZWF0ZU5TRXZlbnRXaXRo
Q2FyYm9uRXZlbnQoRXZlbnRSZWYgaW5FdmVudCkKIHsKICAgICBOU0V2ZW50ICpldmVudCA9IFtO
U0V2ZW50IGV2ZW50V2l0aEV2ZW50UmVmOmluRXZlbnRdOwogICAgIGlmICghZXZlbnQpCkBAIC01
NjYsOCArNTI3LDcgQEAgQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudCggRXZlbnRSZWYgaQog
Ly8gTW91c2VVcAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9TU3Rh
dHVzCi1Nb3VzZVVwKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApCitzdGF0
aWMgT1NTdGF0dXMgTW91c2VVcChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkK
IHsKICAgICBOU0V2ZW50KiBraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQo
aW5FdmVudCk7CiAKQEAgLTU3NSwxMSArNTM1LDEwIEBAIE1vdXNlVXAoIEhJV2ViVmlldyogaW5W
aWV3LCBFdmVudFJlZiBpbkUKIAogICAgIFtraXRFdmVudCByZWxlYXNlXTsKIAotCXJldHVybiBu
b0VycjsKKyAgICByZXR1cm4gbm9FcnI7CiB9CiAKLXN0YXRpYyBOU0V2ZW50ICoKLUNyZWF0ZU5T
RXZlbnRXaXRoQ2FyYm9uTW91c2VNb3ZlRXZlbnQoIEV2ZW50UmVmIGluRXZlbnQsIE5TV2luZG93
ICp3aW5kb3cgKQorc3RhdGljIE5TRXZlbnQgKkNyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uTW91c2VN
b3ZlRXZlbnQoRXZlbnRSZWYgaW5FdmVudCwgTlNXaW5kb3cgKndpbmRvdykKIHsKICAgICBOU0V2
ZW50KiBraXRFdmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aEV2ZW50UmVmOmluRXZlbnRdOwogCkBA
IC01OTksMjIgKzU1OCwyMCBAQCBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbk1vdXNlTW92ZUV2ZW50
KCBFCiAvLyBNb3VzZU1vdmVkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0
aWMgT1NTdGF0dXMKLU1vdXNlTW92ZWQoIEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2
ZW50ICkKK3N0YXRpYyBPU1N0YXR1cyBNb3VzZU1vdmVkKEhJV2ViVmlldyogaW5WaWV3LCBFdmVu
dFJlZiBpbkV2ZW50KQogewogICAgIE5TRXZlbnQgKmtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdp
dGhDYXJib25Nb3VzZU1vdmVFdmVudChpbkV2ZW50LCBpblZpZXctPmZLaXRXaW5kb3cpOwogICAg
IFtpblZpZXctPmZLaXRXaW5kb3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsKLQlba2l0RXZlbnQgcmVs
ZWFzZV07CisgICAgW2tpdEV2ZW50IHJlbGVhc2VdOwogCi0JcmV0dXJuIG5vRXJyOworICAgIHJl
dHVybiBub0VycjsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBNb3VzZURy
YWdnZWQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBPU1N0YXR1cwot
TW91c2VEcmFnZ2VkKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApCitzdGF0
aWMgT1NTdGF0dXMgTW91c2VEcmFnZ2VkKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2
ZW50KQogewogICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25F
dmVudChpbkV2ZW50KTsKIApAQCAtNjIyLDE1ICs1NzksMTQgQEAgTW91c2VEcmFnZ2VkKCBISVdl
YlZpZXcqIGluVmlldywgRXZlbnRSZQogCiAgICAgW2tpdEV2ZW50IHJlbGVhc2VdOwogCi0JcmV0
dXJuIG5vRXJyOworICAgIHJldHVybiBub0VycjsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAvLyBNb3VzZURyYWdnZWQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8K
LXN0YXRpYyBPU1N0YXR1cwotTW91c2VXaGVlbE1vdmVkKCBISVdlYlZpZXcqIGluVmlldywgRXZl
bnRSZWYgaW5FdmVudCApCitzdGF0aWMgT1NTdGF0dXMgTW91c2VXaGVlbE1vdmVkKEhJV2ViVmll
dyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KQogewogICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0g
Q3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKIApAQCAtNjM4LDE1ICs1OTQs
MTQgQEAgTW91c2VXaGVlbE1vdmVkKCBISVdlYlZpZXcqIGluVmlldywgRXZlbgogCiAgICAgW2tp
dEV2ZW50IHJlbGVhc2VdOwogCi0JcmV0dXJuIG5vRXJyOworICAgIHJldHVybiBub0VycjsKIH0K
IAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBDb250ZXh0TWVudUNsaWNrCiAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgT1NTdGF0dXMKLUNvbnRleHRNZW51
Q2xpY2soIEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50ICkKK3N0YXRpYyBPU1N0
YXR1cyBDb250ZXh0TWVudUNsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50
KQogewogICAgIE5TVmlldyAqd2ViVmlldyA9IGluVmlldy0+ZldlYlZpZXc7CiAgICAgTlNXaW5k
b3cgKndpbmRvdyA9IFt3ZWJWaWV3IHdpbmRvd107CkBAIC02NzcsMjkgKzYzMiwyMSBAQCBDb250
ZXh0TWVudUNsaWNrKCBISVdlYlZpZXcqIGluVmlldywgRXZlCiAvLyBHZXRLaW5kCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgQ29udHJvbEtpbmQKLUdldEtpbmQoKQor
c3RhdGljIENvbnRyb2xLaW5kIEdldEtpbmQoKQogewotCWNvbnN0IENvbnRyb2xLaW5kIGtNeUtp
bmQgPSB7ICdhcHBsJywgJ3didncnIH07Ci0JCi0JcmV0dXJuIGtNeUtpbmQ7CisgICAgY29uc3Qg
Q29udHJvbEtpbmQga015S2luZCA9IHsgJ2FwcGwnLCAnd2J2dycgfTsKKyAgICAKKyAgICByZXR1
cm4ga015S2luZDsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBCb3VuZHND
aGFuZ2VkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgdm9pZAotQm91
bmRzQ2hhbmdlZCgKLQlISVdlYlZpZXcqCQkJaW5WaWV3LAotCVVJbnQzMgkJCQlpbk9wdGlvbnMs
Ci0JY29uc3QgSElSZWN0KgkJaW5PcmlnaW5hbEJvdW5kcywKLQljb25zdCBISVJlY3QqCQlpbkN1
cnJlbnRCb3VuZHMgKQotewotCWlmICggaW5WaWV3LT5mV2ViVmlldyApCi0JewotCQlTeW5jRnJh
bWUoIGluVmlldyApOwotCX0KK3N0YXRpYyB2b2lkIEJvdW5kc0NoYW5nZWQoSElXZWJWaWV3KiBp
blZpZXcsIFVJbnQzMiBpbk9wdGlvbnMsIGNvbnN0IEhJUmVjdCogaW5PcmlnaW5hbEJvdW5kcywg
Y29uc3QgSElSZWN0KiBpbkN1cnJlbnRCb3VuZHMpCit7CisgICAgaWYgKGluVmlldy0+ZldlYlZp
ZXcpCisgICAgICAgIFN5bmNGcmFtZShpblZpZXcpOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTcwNywxNyArNjU0LDEzIEBAIEJvdW5kc0NoYW5nZWQoCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vCiBzdGF0aWMgdm9pZAotT3duaW5nV2luZG93Q2hhbmdlZCgK
LQlISVdlYlZpZXcqCQkJdmlldywKLQlXaW5kb3dSZWYJCQlvbGRXaW5kb3csCi0JV2luZG93UmVm
CQkJbmV3V2luZG93ICkKK093bmluZ1dpbmRvd0NoYW5nZWQoSElXZWJWaWV3KiB2aWV3LCBXaW5k
b3dSZWYgb2xkV2luZG93LCBXaW5kb3dSZWYgbmV3V2luZG93KQogewotICAgIGlmICggbmV3V2lu
ZG93ICl7Ci0gICAgICAgIFdpbmRvd0F0dHJpYnV0ZXMJYXR0cnM7CisgICAgaWYgKG5ld1dpbmRv
dykgeworICAgICAgICBXaW5kb3dBdHRyaWJ1dGVzIGF0dHJzOwogICAgICAgICAKICAgICAgICAg
T1NTdGF0dXMgZXJyID0gR2V0V2luZG93UHJvcGVydHkobmV3V2luZG93LCBOU0FwcEtpdFByb3Bl
cnR5Q3JlYXRvciwgTlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5TV2luZG93ICop
LCBOVUxMLCAmdmlldy0+ZktpdFdpbmRvdyk7Ci0gICAgICAgIGlmICggZXJyICE9IG5vRXJyICkK
LSAgICAgICAgeworICAgICAgICBpZiAoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgICAgICBjb25z
dCBFdmVudFR5cGVTcGVjIGtXaW5kb3dFdmVudHNbXSA9IHsKICAgICAgICAgICAgIHsga0V2ZW50
Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0Nsb3NlZCB9LAogICAgICAgICAgICAgeyBrRXZlbnRD
bGFzc01vdXNlLCBrRXZlbnRNb3VzZU1vdmVkIH0sCkBAIC03MzMsMjAgKzY3NiwxOCBAQCBPd25p
bmdXaW5kb3dDaGFuZ2VkKAogICAgICAgICAgICAgdmlldy0+ZktpdFdpbmRvdyA9IFtbQ2FyYm9u
V2luZG93QWRhcHRlciBhbGxvY10gaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6IG5ld1dpbmRvdyB0
YWtpbmdPd25lcnNoaXA6IE5PIGRpc2FibGVPcmRlcmluZzpOTyBjYXJib246WUVTXTsKICAgICAg
ICAgICAgIFNldFdpbmRvd1Byb3BlcnR5KG5ld1dpbmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0
b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRvdyAqKSwgJnZpZXct
PmZLaXRXaW5kb3cpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBJbnN0YWxsV2luZG93RXZl
bnRIYW5kbGVyKCBuZXdXaW5kb3csIFdpbmRvd0hhbmRsZXIsIEdldEV2ZW50VHlwZUNvdW50KCBr
V2luZG93RXZlbnRzICksIGtXaW5kb3dFdmVudHMsIG5ld1dpbmRvdywgTlVMTCApOworICAgICAg
ICAgICAgSW5zdGFsbFdpbmRvd0V2ZW50SGFuZGxlcihuZXdXaW5kb3csIFdpbmRvd0hhbmRsZXIs
IEdldEV2ZW50VHlwZUNvdW50KGtXaW5kb3dFdmVudHMpLCBrV2luZG93RXZlbnRzLCBuZXdXaW5k
b3csIE5VTEwpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBbW3ZpZXctPmZLaXRXaW5k
b3cgY29udGVudFZpZXddIGFkZFN1YnZpZXc6dmlldy0+ZldlYlZpZXddOwogICAgICAgICAKLSAg
ICAgICAgR2V0V2luZG93QXR0cmlidXRlcyggbmV3V2luZG93LCAmYXR0cnMgKTsKLSAgICAgICAg
dmlldy0+ZklzQ29tcG9zaXRlZCA9ICggKCBhdHRycyAmIGtXaW5kb3dDb21wb3NpdGluZ0F0dHJp
YnV0ZSApICE9IDAgKTsKKyAgICAgICAgR2V0V2luZG93QXR0cmlidXRlcyhuZXdXaW5kb3csICZh
dHRycyk7CisgICAgICAgIHZpZXctPmZJc0NvbXBvc2l0ZWQgPSBhdHRycyAmIGtXaW5kb3dDb21w
b3NpdGluZ0F0dHJpYnV0ZTsKICAgICAgICAgCi0gICAgICAgIFN5bmNGcmFtZSggdmlldyApOyAg
ICAgICAgCi0gICAgfQotICAgIGVsc2UKLSAgICB7CisgICAgICAgIFN5bmNGcmFtZSh2aWV3KTsg
ICAgICAgIAorICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEJlIHN1cmUgdG8gZGV0YWNoIHRoZSBj
b2NvYSB2aWV3LCB0b28uCi0gICAgICAgIGlmICggdmlldy0+ZldlYlZpZXcgKQorICAgICAgICBp
ZiAodmlldy0+ZldlYlZpZXcpCiAgICAgICAgICAgICBbdmlldy0+ZldlYlZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CiAgICAgICAgIAogICAgICAgICB2aWV3LT5mS2l0V2luZG93ID0gTlVMTDsg
Ly8gYnJlYWsgdGhlIHRpZXMgdGhhdCBiaW5kCkBAIC03NTQsMTMwICs2OTUsMTA1IEBAIE93bmlu
Z1dpbmRvd0NoYW5nZWQoCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8J
V2luZG93SGFuZGxlcgorLy8gICAgV2luZG93SGFuZGxlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLwlSZWRpcmVjdCBtb3VzZSBldmVudHMgdG8gdGhlIHZpZXdzIGJlbmVhdGgg
dGhlbS4gVGhpcyBpcyByZXF1aXJlZCBmb3IgV2ViS2l0IHRvIHdvcmsKLS8vIAlwcm9wZXJseS4g
V2UgaW5zdGFsbCBpdCBvbmNlIHBlciB3aW5kb3cuIFdlIGFsc28gdGFwIGludG8gd2luZG93IGNs
b3NlIHRvIHJlbGVhc2UKLS8vCXRoZSBOU1dpbmRvdyB0aGF0IHNoYWRvd3Mgb3VyIENhcmJvbiB3
aW5kb3cuCi0vLwotc3RhdGljIE9TU3RhdHVzCi1XaW5kb3dIYW5kbGVyKCBFdmVudEhhbmRsZXJD
YWxsUmVmIGluQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudCwgdm9pZCogaW5Vc2VyRGF0YSApCi17
Ci0JV2luZG93UmVmCXdpbmRvdyA9IChXaW5kb3dSZWYpaW5Vc2VyRGF0YTsKLQlPU1N0YXR1cwly
ZXN1bHQgPSBldmVudE5vdEhhbmRsZWRFcnI7CisvLyAgICBSZWRpcmVjdCBtb3VzZSBldmVudHMg
dG8gdGhlIHZpZXdzIGJlbmVhdGggdGhlbS4gVGhpcyBpcyByZXF1aXJlZCBmb3IgV2ViS2l0IHRv
IHdvcmsKKy8vICAgIHByb3Blcmx5LiBXZSBpbnN0YWxsIGl0IG9uY2UgcGVyIHdpbmRvdy4gV2Ug
YWxzbyB0YXAgaW50byB3aW5kb3cgY2xvc2UgdG8gcmVsZWFzZQorLy8gICAgdGhlIE5TV2luZG93
IHRoYXQgc2hhZG93cyBvdXIgQ2FyYm9uIHdpbmRvdy4KKy8vCitzdGF0aWMgT1NTdGF0dXMgV2lu
ZG93SGFuZGxlcihFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVu
dCwgdm9pZCogaW5Vc2VyRGF0YSkKK3sKKyAgICBXaW5kb3dSZWYgd2luZG93ID0gKFdpbmRvd1Jl
ZilpblVzZXJEYXRhOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2ZW50Tm90SGFuZGxlZEVycjsK
KworICAgIE5TV2luZG93KiBraXRXaW5kb3c7CisgICAgT1NTdGF0dXMgZXJyID0gbm9FcnI7Cisg
ICAgTlNFdmVudCoga2l0RXZlbnQ7CisKKyAgICBzd2l0Y2ggKEdldEV2ZW50Q2xhc3MoaW5FdmVu
dCkpIHsKKyAgICBjYXNlIGtFdmVudENsYXNzQ29udHJvbDoKKyAgICAgICAgc3dpdGNoIChHZXRF
dmVudEtpbmQoaW5FdmVudCkpIHsKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sQ2xpY2s6Cisg
ICAgICAgICAgICBDYXJib25XaW5kb3dBZGFwdGVyICpraXRXaW5kb3c7CiAKLSAgICBzd2l0Y2go
IEdldEV2ZW50Q2xhc3MoIGluRXZlbnQgKSApCi0gICAgewotICAgIAljYXNlIGtFdmVudENsYXNz
Q29udHJvbDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCggR2V0RXZlbnRLaW5k
KCBpbkV2ZW50ICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2Uga0V2ZW50
Q29udHJvbENsaWNrOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBDYXJib25XaW5kb3dBZGFwdGVyICpraXRXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBPU1N0YXR1cyBlcnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KCB3aW5kb3csIE5TQXBwS2l0UHJv
cGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cg
KiksIE5VTEwsICZraXRXaW5kb3cpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGJlIG91dHNpZGUgdGhlIEhJV2ViVmlldywgcmVs
aW5xdWlzaCBmb2N1cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFtraXRXaW5kb3cgcmVsaW5x
dWlzaEZvY3VzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIg
PSBHZXRXaW5kb3dQcm9wZXJ0eSh3aW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yLCBOU0Nh
cmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiksIE5VTEwsICZraXRXaW5k
b3cpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgbXVzdCBiZSBvdXRzaWRl
IHRoZSBISVdlYlZpZXcsIHJlbGlucXVpc2ggZm9jdXMuCisgICAgICAgICAgICBba2l0V2luZG93
IHJlbGlucXVpc2hGb2N1c107CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAotICAgIAljYXNlIGtFdmVudENsYXNzS2V5Ym9hcmQ6Ci0g
ICAgCQl7Ci0gICAgICAgICAgICAgICAgTlNXaW5kb3cqCQlraXRXaW5kb3c7Ci0gICAgICAgICAg
ICAgICAgT1NTdGF0dXMJCWVycjsKLSAgIAkJCQlOU0V2ZW50KgkJa2l0RXZlbnQ7Ci0gICAJCQkJ
Ci0gICAJCQkJLy8gaWYgdGhlIGZpcnN0IHJlc3BvbmRlciBpbiB0aGUga2l0IHdpbmRvdyBpcyBz
b21ldGhpbmcgb3RoZXIgdGhhbiB0aGUKLSAgIAkJCQkvLyB3aW5kb3csIHdlIGFzc3VtZSBhIHN1
YnZpZXcgb2YgdGhlIHdlYnZpZXcgaXMgZm9jdXNlZC4gd2UgbXVzdCBzZW5kCi0gICAJCQkJLy8g
dGhlIGV2ZW50IHRvIHRoZSB3aW5kb3cgc28gdGhhdCBpdCBnb2VzIHRocm91Z2ggdGhlIGtpdCdz
IG5vcm1hbCBUU00KLSAgIAkJCQkvLyBsb2dpYywgYW5kIC0tIG1vcmUgaW1wb3J0YW50bHkgLS0g
YWxsb3dzIGFueSBkZWxlZ2F0ZXMgYXNzb2NpYXRlZAotICAgCQkJCS8vIHdpdGggdGhlIGZpcnN0
IHJlc3BvbmRlciB0byBoYXZlIGEgY2hhbmNlIGF0IHRoZSBldmVudC4KLSAgIAkJCQkKLQkJCQll
cnIgPSBHZXRXaW5kb3dQcm9wZXJ0eSggd2luZG93LCBOU0FwcEtpdFByb3BlcnR5Q3JlYXRvciwg
TlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5TV2luZG93ICopLCBOVUxMLCAma2l0
V2luZG93KTsKLQkJCQlpZiAoIGVyciA9PSBub0VyciApCi0JCQkJewotCQkJCQlOU1Jlc3BvbmRl
ciogcmVzcG9uZGVyID0gW2tpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0JCQkJCWlmICggcmVz
cG9uZGVyICE9IGtpdFdpbmRvdyApCi0JCQkJCXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtp
dEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLQkJCQkJCQot
CQkJCQkJW2tpdFdpbmRvdyBzZW5kRXZlbnQ6a2l0RXZlbnRdOwotCQkJCQkJW2tpdEV2ZW50IHJl
bGVhc2VdOwotCQkJCQkJCi0JCQkJCQlyZXN1bHQgPSBub0VycjsKLQkJCQkJfQotCQkJCX0KLSAg
ICAJCX0KLSAgICAJCWJyZWFrOwotCi0gICAgICAgIGNhc2Uga0V2ZW50Q2xhc3NXaW5kb3c6Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTlNXaW5kb3cqCWtpdFdpbmRvdzsKLSAgICAg
ICAgICAgICAgICBPU1N0YXR1cwllcnI7CisgICAgY2FzZSBrRXZlbnRDbGFzc0tleWJvYXJkOgor
ICAgICAgICAvLyBpZiB0aGUgZmlyc3QgcmVzcG9uZGVyIGluIHRoZSBraXQgd2luZG93IGlzIHNv
bWV0aGluZyBvdGhlciB0aGFuIHRoZQorICAgICAgICAvLyB3aW5kb3csIHdlIGFzc3VtZSBhIHN1
YnZpZXcgb2YgdGhlIHdlYnZpZXcgaXMgZm9jdXNlZC4gd2UgbXVzdCBzZW5kCisgICAgICAgIC8v
IHRoZSBldmVudCB0byB0aGUgd2luZG93IHNvIHRoYXQgaXQgZ29lcyB0aHJvdWdoIHRoZSBraXQn
cyBub3JtYWwgVFNNCisgICAgICAgIC8vIGxvZ2ljLCBhbmQgLS0gbW9yZSBpbXBvcnRhbnRseSAt
LSBhbGxvd3MgYW55IGRlbGVnYXRlcyBhc3NvY2lhdGVkCisgICAgICAgIC8vIHdpdGggdGhlIGZp
cnN0IHJlc3BvbmRlciB0byBoYXZlIGEgY2hhbmNlIGF0IHRoZSBldmVudC4KKworICAgICAgICBl
cnIgPSBHZXRXaW5kb3dQcm9wZXJ0eSh3aW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yLCBO
U0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiksIE5VTEwsICZraXRX
aW5kb3cpOworICAgICAgICBpZiAoZXJyID09IG5vRXJyKSB7CisgICAgICAgICAgICBOU1Jlc3Bv
bmRlciogcmVzcG9uZGVyID0gW2tpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07CisgICAgICAgICAg
ICBpZiAocmVzcG9uZGVyICE9IGtpdFdpbmRvdykgeworICAgICAgICAgICAgICAgIGtpdEV2ZW50
ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBba2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07CisgICAg
ICAgICAgICAgICAgW2tpdEV2ZW50IHJlbGVhc2VdOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KCB3aW5kb3csIE5TQXBwS2l0UHJvcGVy
dHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiks
IE5VTEwsICZraXRXaW5kb3cpOwotICAgICAgICAgICAgICAgIGlmICggZXJyID09IG5vRXJyICkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFtraXRXaW5kb3cgX3JlbW92
ZVdpbmRvd1JlZl07Ci0gICAgICAgICAgICAgICAgICAgIFtraXRXaW5kb3cgY2xvc2VdOwotICAg
ICAgICAgICAgICAgIH0KLQkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBrRXZlbnRDbGFzc1dpbmRvdzoKICAgICAgICAgCi0gICAgICAgIGNhc2Uga0V2
ZW50Q2xhc3NNb3VzZToKLSAgICAgICAgICAgIHN3aXRjaCAoR2V0RXZlbnRLaW5kKGluRXZlbnQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2Uga0V2ZW50TW91c2VNb3ZlZDoK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQgd2hl
cmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBr
RXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVRRFBvaW50LCBOVUxMLCBzaXplb2YoUG9pbnQp
LCBOVUxMLCAmd2hlcmUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dSZWYgdGVt
cDsKLSAgICAgICAgICAgICAgICAgICAgICAgIEZpbmRXaW5kb3cod2hlcmUsICZ0ZW1wKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IHdpbmRvdykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN0IGJvdW5kczsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRXaW5kb3dCb3VuZHMod2luZG93LCBrV2luZG93
U3RydWN0dXJlUmduLCAmYm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVy
ZS5oIC09IGJvdW5kcy5sZWZ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlLnYg
LT0gYm91bmRzLnRvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRFdmVudFBhcmFt
ZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbVdpbmRvd1JlZiwgdHlwZVdpbmRvd1JlZiwgc2l6ZW9m
KFdpbmRvd1JlZiksICZ3aW5kb3cpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldEV2
ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93TW91c2VMb2NhdGlvbiwgdHlw
ZVFEUG9pbnQsIHNpemVvZihQb2ludCksICZ3aGVyZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPU1N0YXR1cyBlcnIgPSBub0VycjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBISVZpZXdSZWYgdmlldyA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnIgPSBISVZpZXdHZXRWaWV3Rm9yTW91c2VFdmVudChISVZpZXdHZXRSb290KHdpbmRvdyksIGlu
RXZlbnQsICZ2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IG5v
RXJyICYmIHZpZXcgJiYgSElPYmplY3RJc09mQ2xhc3MoKEhJT2JqZWN0UmVmKXZpZXcsIGtISVdl
YlZpZXdDbGFzc0lEKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
U2VuZEV2ZW50VG9FdmVudFRhcmdldFdpdGhPcHRpb25zKGluRXZlbnQsIEhJT2JqZWN0R2V0RXZl
bnRUYXJnZXQoKEhJT2JqZWN0UmVmKXZpZXcpLCBrRXZlbnRUYXJnZXREb250UHJvcGFnYXRlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBj
YXNlIGtFdmVudE1vdXNlVXA6Ci0gICAgICAgICAgICAgICAgY2FzZSBrRXZlbnRNb3VzZURyYWdn
ZWQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6Ci0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9TU3RhdHVzIGVyciA9IG5v
RXJyOwotICAgICAgICAgICAgICAgICAgICAgICAgSElWaWV3UmVmIHZpZXcgPSBOVUxMOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBISVZpZXdHZXRWaWV3Rm9yTW91c2VFdmVudChI
SVZpZXdHZXRSb290KHdpbmRvdyksIGluRXZlbnQsICZ2aWV3KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgdmlldyAmJiBISU9iamVjdElzT2ZDbGFzcygoSElP
YmplY3RSZWYpdmlldywga0hJV2ViVmlld0NsYXNzSUQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFNlbmRFdmVudFRvRXZlbnRUYXJnZXRXaXRoT3B0aW9ucyhpbkV2ZW50
LCBISU9iamVjdEdldEV2ZW50VGFyZ2V0KChISU9iamVjdFJlZil2aWV3KSwga0V2ZW50VGFyZ2V0
RG9udFByb3BhZ2F0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkod2luZG93LCBOU0Fw
cEtpdFByb3BlcnR5Q3JlYXRvciwgTlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5T
V2luZG93ICopLCBOVUxMLCAma2l0V2luZG93KTsKKyAgICAgICAgaWYgKGVyciA9PSBub0Vycikg
eworICAgICAgICAgICAgW2tpdFdpbmRvdyBfcmVtb3ZlV2luZG93UmVmXTsKKyAgICAgICAgICAg
IFtraXRXaW5kb3cgY2xvc2VdOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IG5vRXJyOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0V2ZW50Q2xhc3NNb3VzZToKKyAgICAgICAgc3dp
dGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKKyAgICAgICAgY2FzZSBrRXZlbnRNb3VzZU1v
dmVkOgorICAgICAgICAgICAgUG9pbnQgd2hlcmU7CisgICAgICAgICAgICBHZXRFdmVudFBhcmFt
ZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVRRFBvaW50LCBOVUxM
LCBzaXplb2YoUG9pbnQpLCBOVUxMLCAmd2hlcmUpOworCisgICAgICAgICAgICBXaW5kb3dSZWYg
dGVtcDsKKyAgICAgICAgICAgIEZpbmRXaW5kb3cod2hlcmUsICZ0ZW1wKTsKKyAgICAgICAgICAg
IGlmICh0ZW1wID09IHdpbmRvdykgeworICAgICAgICAgICAgICAgIFJlY3QgYm91bmRzOworICAg
ICAgICAgICAgICAgIEdldFdpbmRvd0JvdW5kcyh3aW5kb3csIGtXaW5kb3dTdHJ1Y3R1cmVSZ24s
ICZib3VuZHMpOworICAgICAgICAgICAgICAgIHdoZXJlLmggLT0gYm91bmRzLmxlZnQ7CisgICAg
ICAgICAgICAgICAgd2hlcmUudiAtPSBib3VuZHMudG9wOworICAgICAgICAgICAgICAgIFNldEV2
ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93UmVmLCB0eXBlV2luZG93UmVm
LCBzaXplb2YoV2luZG93UmVmKSwgJndpbmRvdyk7CisgICAgICAgICAgICAgICAgU2V0RXZlbnRQ
YXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5kb3dNb3VzZUxvY2F0aW9uLCB0eXBlUURQ
b2ludCwgc2l6ZW9mKFBvaW50KSwgJndoZXJlKTsKKworICAgICAgICAgICAgICAgIEhJVmlld1Jl
ZiB2aWV3ID0gTlVMTDsKKworICAgICAgICAgICAgICAgIGVyciA9IEhJVmlld0dldFZpZXdGb3JN
b3VzZUV2ZW50KEhJVmlld0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcpOworICAgICAg
ICAgICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgdmlldyAmJiBISU9iamVjdElzT2ZDbGFzcygo
SElPYmplY3RSZWYpdmlldywga0hJV2ViVmlld0NsYXNzSUQpKQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0V2l0aE9wdGlvbnMoaW5FdmVudCwgSElP
YmplY3RHZXRFdmVudFRhcmdldCgoSElPYmplY3RSZWYpdmlldyksIGtFdmVudFRhcmdldERvbnRQ
cm9wYWdhdGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgIGNhc2Uga0V2ZW50TW91c2VVcDoKKyAgICAgICAgY2FzZSBrRXZlbnRN
b3VzZURyYWdnZWQ6CisgICAgICAgIGNhc2Uga0V2ZW50TW91c2VXaGVlbE1vdmVkOgorICAgICAg
ICAgICAgSElWaWV3UmVmIHZpZXcgPSBOVUxMOworCisgICAgICAgICAgICBlcnIgPSBISVZpZXdH
ZXRWaWV3Rm9yTW91c2VFdmVudChISVZpZXdHZXRSb290KHdpbmRvdyksIGluRXZlbnQsICZ2aWV3
KTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgdmlldyAmJiBISU9iamVjdElzT2ZD
bGFzcygoSElPYmplY3RSZWYpdmlldywga0hJV2ViVmlld0NsYXNzSUQpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IFNlbmRFdmVudFRvRXZlbnRUYXJnZXRXaXRoT3B0aW9ucyhpbkV2ZW50LCBI
SU9iamVjdEdldEV2ZW50VGFyZ2V0KChISU9iamVjdFJlZil2aWV3KSwga0V2ZW50VGFyZ2V0RG9u
dFByb3BhZ2F0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKICAgICB9CiAKLQlyZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApA
QCAtODg1LDU3ICs4MDEsNTIgQEAgV2luZG93SGFuZGxlciggRXZlbnRIYW5kbGVyQ2FsbFJlZiBp
bkNhbAogLy8gU3luY0ZyYW1lCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0
aWMgdm9pZAotU3luY0ZyYW1lKCBISVdlYlZpZXcqIGluVmlldyApCitzdGF0aWMgdm9pZCBTeW5j
RnJhbWUoSElXZWJWaWV3KiBpblZpZXcpCiB7Ci0JSElWaWV3UmVmCXBhcmVudCA9IEhJVmlld0dl
dFN1cGVydmlldyggaW5WaWV3LT5mVmlld1JlZiApOwotCQotCWlmICggcGFyZW50ICkKLQl7Ci0g
ICAgICAgIGlmICggaW5WaWV3LT5mSXNDb21wb3NpdGVkICkKLSAgICAgICAgewotICAgICAgICAg
ICAgSElSZWN0CQlmcmFtZTsKLSAgICAgICAgICAgIEhJUmVjdAkJcGFyZW50Qm91bmRzOwotICAg
ICAgICAgICAgTlNQb2ludAkJb3JpZ2luOworICAgIEhJVmlld1JlZiBwYXJlbnQgPSBISVZpZXdH
ZXRTdXBlcnZpZXcoaW5WaWV3LT5mVmlld1JlZik7CisgICAgCisgICAgaWYgKHBhcmVudCkgewor
ICAgICAgICBpZiAoaW5WaWV3LT5mSXNDb21wb3NpdGVkKSB7CisgICAgICAgICAgICBISVJlY3Qg
ZnJhbWU7CisgICAgICAgICAgICBISVJlY3QgcGFyZW50Qm91bmRzOworICAgICAgICAgICAgTlNQ
b2ludCBvcmlnaW47CiAKLSAgICAgICAgICAgIEhJVmlld0dldEZyYW1lKCBpblZpZXctPmZWaWV3
UmVmLCAmZnJhbWUgKTsKLSAgICAgICAgICAgIEhJVmlld0dldEJvdW5kcyggcGFyZW50LCAmcGFy
ZW50Qm91bmRzICk7CisgICAgICAgICAgICBISVZpZXdHZXRGcmFtZShpblZpZXctPmZWaWV3UmVm
LCAmZnJhbWUpOworICAgICAgICAgICAgSElWaWV3R2V0Qm91bmRzKHBhcmVudCwgJnBhcmVudEJv
dW5kcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG9yaWdpbi54ID0gZnJhbWUub3JpZ2lu
Lng7Ci0gICAgICAgICAgICBvcmlnaW4ueSA9IHBhcmVudEJvdW5kcy5zaXplLmhlaWdodCAtIENH
UmVjdEdldE1heFkoIGZyYW1lICk7Ci0vLyAgICBwcmludGYoICJzeW5jaW5nIHRvICglZyAlZykg
KCVnICVnKVxuIiwgb3JpZ2luLngsIG9yaWdpbi55LAotLy8gICAgICAgICAgICBmcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCApOworICAgICAgICAgICAgb3JpZ2luLnkgPSBwYXJl
bnRCb3VuZHMuc2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRNYXhZKGZyYW1lKTsKKy8vICAgIHByaW50
Zigic3luY2luZyB0byAoJWcgJWcpICglZyAlZylcbiIsIG9yaWdpbi54LCBvcmlnaW4ueSwKKy8v
ICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogICAgICAg
ICAgICAgW2luVmlldy0+ZldlYlZpZXcgc2V0RnJhbWVPcmlnaW46IG9yaWdpbl07CiAgICAgICAg
ICAgICBbaW5WaWV3LT5mV2ViVmlldyBzZXRGcmFtZVNpemU6ICooTlNTaXplKikmZnJhbWUuc2l6
ZV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFm
UHRyCQkJcG9ydCA9IEdldFdpbmRvd1BvcnQoIEdldENvbnRyb2xPd25lciggaW5WaWV3LT5mVmll
d1JlZiApICk7Ci0gICAgICAgICAgICBQaXhNYXBIYW5kbGUJcG9ydFBpeCA9IEdldFBvcnRQaXhN
YXAoIHBvcnQgKTsKLSAgICAgICAgICAgIFJlY3QJCQlib3VuZHM7Ci0gICAgICAgICAgICBISVJl
Y3QJCQlyb290RnJhbWU7Ci0gICAgICAgICAgICBISVJlY3QJCQlmcmFtZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEdyYWZQdHIgcG9ydCA9IEdldFdpbmRvd1BvcnQoR2V0Q29udHJv
bE93bmVyKGluVmlldy0+ZlZpZXdSZWYpKTsKKyAgICAgICAgICAgIFBpeE1hcEhhbmRsZSBwb3J0
UGl4ID0gR2V0UG9ydFBpeE1hcChwb3J0KTsKKyAgICAgICAgICAgIFJlY3QgYm91bmRzOworICAg
ICAgICAgICAgSElSZWN0IHJvb3RGcmFtZTsKKyAgICAgICAgICAgIEhJUmVjdCBmcmFtZTsKIAot
ICAgICAgICAgICAgR2V0Q29udHJvbEJvdW5kcyggaW5WaWV3LT5mVmlld1JlZiwgJmJvdW5kcyAp
OwotICAgICAgICAgICAgT2Zmc2V0UmVjdCggJmJvdW5kcywgLSgqKnBvcnRQaXgpLmJvdW5kcy5s
ZWZ0LCAtKCoqcG9ydFBpeCkuYm91bmRzLnRvcCApOworICAgICAgICAgICAgR2V0Q29udHJvbEJv
dW5kcyhpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzKTsKKyAgICAgICAgICAgIE9mZnNldFJlY3Qo
JmJvdW5kcywgLSgqKnBvcnRQaXgpLmJvdW5kcy5sZWZ0LCAtKCoqcG9ydFBpeCkuYm91bmRzLnRv
cCk7CiAKLS8vICAgICAgICAgICAgcHJpbnRmKCAiY29udHJvbCBsaXZlcyBhdCAlZCAlZCAlZCAl
ZCBpbiB3aW5kb3ctY29vcmRzXG4iLCBib3VuZHMudG9wLCBib3VuZHMubGVmdCwKLS8vICAgICAg
ICAgICAgICAgIGJvdW5kcy5ib3R0b20sIGJvdW5kcy5yaWdodCApOworLy8gICAgICAgICAgICBw
cmludGYoImNvbnRyb2wgbGl2ZXMgYXQgJWQgJWQgJWQgJWQgaW4gd2luZG93LWNvb3Jkc1xuIiwg
Ym91bmRzLnRvcCwgYm91bmRzLmxlZnQsCisvLyAgICAgICAgICAgICAgICBib3VuZHMuYm90dG9t
LCBib3VuZHMucmlnaHQpOwogICAKLSAgICAgICAgICAgIEhJVmlld0dldEZyYW1lKCBISVZpZXdH
ZXRSb290KCBHZXRDb250cm9sT3duZXIoIGluVmlldy0+ZlZpZXdSZWYgKSApLCAmcm9vdEZyYW1l
ICk7CisgICAgICAgICAgICBISVZpZXdHZXRGcmFtZShISVZpZXdHZXRSb290KEdldENvbnRyb2xP
d25lcihpblZpZXctPmZWaWV3UmVmKSksICZyb290RnJhbWUpOwogCiAgICAgICAgICAgICBmcmFt
ZS5vcmlnaW4ueCA9IGJvdW5kcy5sZWZ0OwogICAgICAgICAgICAgZnJhbWUub3JpZ2luLnkgPSBy
b290RnJhbWUuc2l6ZS5oZWlnaHQgLSBib3VuZHMuYm90dG9tOwogICAgICAgICAgICAgZnJhbWUu
c2l6ZS53aWR0aCA9IGJvdW5kcy5yaWdodCAtIGJvdW5kcy5sZWZ0OwogICAgICAgICAgICAgZnJh
bWUuc2l6ZS5oZWlnaHQgPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcDsKIAotLy8gICAgICAg
ICAgICBwcmludGYoICIgICBiZWZvcmUgZnJhbWUgY29udmVydCAoJWcgJWcpICglZyAlZylcbiIs
IGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwKLS8vICAgICAgICAgICAgICAgIGZyYW1l
LnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0ICk7CisvLyAgICAgICAgICAgIHByaW50Zigi
ICAgYmVmb3JlIGZyYW1lIGNvbnZlcnQgKCVnICVnKSAoJWcgJWcpXG4iLCBmcmFtZS5vcmlnaW4u
eCwgZnJhbWUub3JpZ2luLnksCisvLyAgICAgICAgICAgICAgICBmcmFtZS5zaXplLndpZHRoLCBm
cmFtZS5zaXplLmhlaWdodCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFtpblZpZXctPmZX
ZWJWaWV3IGNvbnZlcnRSZWN0OiooTlNSZWN0KikmZnJhbWUgZnJvbVZpZXc6bmlsXTsKIAotLy8g
ICAgICAgICAgICBwcmludGYoICIgICBtb3Zpbmcgd2ViIHZpZXcgdG8gKCVnICVnKSAoJWcgJWcp
XG4iLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksCi0vLyAgICAgICAgICAgICAgICBm
cmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCApOworLy8gICAgICAgICAgICBwcmlu
dGYoIiAgIG1vdmluZyB3ZWIgdmlldyB0byAoJWcgJWcpICglZyAlZylcbiIsIGZyYW1lLm9yaWdp
bi54LCBmcmFtZS5vcmlnaW4ueSwKKy8vICAgICAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgs
IGZyYW1lLnNpemUuaGVpZ2h0KTsKIAogICAgICAgICAgICAgW2luVmlldy0+ZldlYlZpZXcgc2V0
RnJhbWVPcmlnaW46ICooTlNQb2ludCopJmZyYW1lLm9yaWdpbl07CiAgICAgICAgICAgICBbaW5W
aWV3LT5mV2ViVmlldyBzZXRGcmFtZVNpemU6ICooTlNTaXplKikmZnJhbWUuc2l6ZV07CkBAIC05
NDcsMTgwICs4NTgsMTUwIEBAIFN5bmNGcmFtZSggSElXZWJWaWV3KiBpblZpZXcgKQogLy8gU2V0
Rm9jdXNQYXJ0CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgT1NTdGF0
dXMKLVNldEZvY3VzUGFydCgKLQlISVdlYlZpZXcqCQkJCXZpZXcsCi0JQ29udHJvbFBhcnRDb2Rl
IAkJZGVzaXJlZEZvY3VzLAotCVJnbkhhbmRsZSAJCQkJaW52YWxpZFJnbiwKLQlCb29sZWFuIAkJ
CQlmb2N1c0V2ZXJ5dGhpbmcsCi0JQ29udHJvbFBhcnRDb2RlKiAJCWFjdHVhbEZvY3VzICkKK3N0
YXRpYyBPU1N0YXR1cyBTZXRGb2N1c1BhcnQoSElXZWJWaWV3KiB2aWV3LCBDb250cm9sUGFydENv
ZGUgZGVzaXJlZEZvY3VzLCBSZ25IYW5kbGUgaW52YWxpZFJnbiwgQm9vbGVhbiBmb2N1c0V2ZXJ5
dGhpbmcsIENvbnRyb2xQYXJ0Q29kZSogYWN0dWFsRm9jdXMpCiB7Ci0gICAgTlNWaWV3ICoJZnJl
c2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXc7Ci0gICAgU0ludDMyIAkJcGFydENvZGVUb1JldHVy
bjsKKyAgICBOU1ZpZXcgKmZyZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3OworICAgIFNJbnQz
MiBwYXJ0Q29kZVRvUmV0dXJuOwogCiAgICAgLy8gRG8gd2hhdCBDYXJib24gaXMgdGVsbGluZyB1
cyB0byBkby4KLSAgICBpZiAoIGRlc2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTm9QYXJ0ICkK
LQl7CisgICAgaWYgKGRlc2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTm9QYXJ0KSB7CiAgICAg
ICAgIC8vIFJlbGlucXVpc2ggdGhlIGtleWJvYXJkIGZvY3VzLgotICAgICAgICBSZWxpbnF1aXNo
Rm9jdXMoIHZpZXcsIHRydWUgKTsgLy8oYXV0b2Rpc3BsYXkgPyBZRVMgOiBOTykpOworICAgICAg
ICBSZWxpbnF1aXNoRm9jdXModmlldywgdHJ1ZSk7IC8vIChhdXRvZGlzcGxheSA/IFlFUyA6IE5P
KSk7CiAgICAgICAgIGZyZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3ID0gbmlsOwogICAgICAg
ICBwYXJ0Q29kZVRvUmV0dXJuID0ga0NvbnRyb2xGb2N1c05vUGFydDsKLQkJLy9OU0xvZyhAIlJl
bGlucXVpc2hlZCB0aGUga2V5IGZvY3VzIGJlY2F1c2Ugd2UgaGF2ZSBubyBjaG9pY2UuIik7Ci0g
ICAgfQotCWVsc2UgaWYgKCBkZXNpcmVkRm9jdXMgPT0ga0NvbnRyb2xGb2N1c05leHRQYXJ0IHx8
IGRlc2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzUHJldlBhcnQgKQotCXsKLSAgICAgICAgQk9P
TCBnb0ZvcndhcmQgPSAoZGVzaXJlZEZvY3VzID09IGtDb250cm9sRm9jdXNOZXh0UGFydCApOwor
ICAgICAgICAvLyBOU0xvZyhAIlJlbGlucXVpc2hlZCB0aGUga2V5IGZvY3VzIGJlY2F1c2Ugd2Ug
aGF2ZSBubyBjaG9pY2UuIik7CisgICAgfSBlbHNlIGlmIChkZXNpcmVkRm9jdXMgPT0ga0NvbnRy
b2xGb2N1c05leHRQYXJ0IHx8IGRlc2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzUHJldlBhcnQp
IHsKKyAgICAgICAgQk9PTCBnb0ZvcndhcmQgPSAoZGVzaXJlZEZvY3VzID09IGtDb250cm9sRm9j
dXNOZXh0UGFydCk7CiAKICAgICAgICAgLy8gQWR2YW5jZSB0aGUga2V5Ym9hcmQgZm9jdXMsIG1h
eWJlIHJpZ2h0IG9mZiBvZiB0aGlzIHZpZXcuICBNYXliZSBhIHN1YnZpZXcgb2YgdGhpcyBvbmUg
YWxyZWFkeSBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLCBtYXliZSBub3QuCi0gICAgICAgIGZyZXNo
bHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3ID0gQWR2YW5jZUZvY3VzKCB2aWV3LCBnb0ZvcndhcmQg
KTsKKyAgICAgICAgZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBBZHZhbmNlRm9jdXMo
dmlldywgZ29Gb3J3YXJkKTsKICAgICAgICAgaWYgKGZyZXNobHlNYWRlRmlyc3RSZXNwb25kZXJW
aWV3KQogICAgICAgICAgICAgcGFydENvZGVUb1JldHVybiA9IGRlc2lyZWRGb2N1czsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcGFydENvZGVUb1JldHVybiA9IGtDb250cm9sRm9jdXNOb1Bh
cnQ7Ci0gICAgICAgIC8vTlNMb2coZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPyBAIkFk
dmFuY2VkIHRoZSBrZXkgZm9jdXMuIiA6IEAiUmVsaW5xdWlzaGVkIHRoZSBrZXkgZm9jdXMuIik7
Ci0gICAgfQotCWVsc2UKLQl7Ci0JCS8vIFdoYXQncyB0aGlzPwotICAgICAgICAgICAgICAgIGlm
IChkZXNpcmVkRm9jdXMgIT0ga0NvbnRyb2xJbmRpY2F0b3JQYXJ0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoZWNrKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0JCWZyZXNobHlNYWRlRmly
c3RSZXNwb25kZXJWaWV3ID0gbmlsOwotCQlwYXJ0Q29kZVRvUmV0dXJuID0gZGVzaXJlZEZvY3Vz
OworICAgICAgICAvLyBOU0xvZyhmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA/IEAiQWR2
YW5jZWQgdGhlIGtleSBmb2N1cy4iIDogQCJSZWxpbnF1aXNoZWQgdGhlIGtleSBmb2N1cy4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGF0J3MgdGhpcz8KKyAgICAgICAgaWYgKGRlc2ly
ZWRGb2N1cyAhPSBrQ29udHJvbEluZGljYXRvclBhcnQpCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBuaWw7
CisgICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBkZXNpcmVkRm9jdXM7CiAgICAgfQogCi0Jdmll
dy0+ZkZpcnN0UmVzcG9uZGVyID0gZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXc7CisgICAg
dmlldy0+ZkZpcnN0UmVzcG9uZGVyID0gZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXc7CiAK
LQkqYWN0dWFsRm9jdXMgPSBwYXJ0Q29kZVRvUmV0dXJuOworICAgICphY3R1YWxGb2N1cyA9IHBh
cnRDb2RlVG9SZXR1cm47CiAKLQkvLyBEb25lLgotCXJldHVybiBub0VycjsKKyAgICAvLyBEb25l
LgorICAgIHJldHVybiBub0VycjsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAv
LyBBZHZhbmNlRm9jdXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBO
U1ZpZXcqCi1BZHZhbmNlRm9jdXMoIEhJV2ViVmlldyogdmlldywgYm9vbCBmb3J3YXJkICkKK3N0
YXRpYyBOU1ZpZXcqIEFkdmFuY2VGb2N1cyhISVdlYlZpZXcqIHZpZXcsIGJvb2wgZm9yd2FyZCkK
IHsKLSAgICBOU1Jlc3BvbmRlcioJCW9sZEZpcnN0UmVzcG9uZGVyOwotICAgIE5TVmlldyoJCQkJ
Y3VycmVudEtleVZpZXc7Ci0gICAgTlNWaWV3KgkJCQl2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXI7
Ci0gICAgCi0gICAgLy8JRm9jdXMgb24gc29tZSBwYXJ0IChzdWJ2aWV3KSBvZiB0aGlzIGNvbnRy
b2wgKHZpZXcpLiAgTWF5YmUKLQkvLwlhIHN1YnZpZXcgb2YgdGhpcyBvbmUgYWxyZWFkeSBoYXMg
dGhlIGtleWJvYXJkIGZvY3VzLCBtYXliZSBub3QuCi0JCi0Jb2xkRmlyc3RSZXNwb25kZXIgPSBb
dmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0KLQkvLyBJZiB3ZSB0YWIgb3V0IG9m
IG91ciBOU1ZpZXcsIGl0IHdpbGwgbm8gbG9uZ2VyIGJlIHRoZSByZXNwb25kZXIKLQkvLyB3aGVu
IHdlIGdldCBoZXJlLiBXZSdsbCB0cnkgdGhpcyB0cmljayBmb3Igbm93LiBXZSBtaWdodCBuZWVk
IHRvCi0JLy8gdGFnIHRoZSB2aWV3IGFwcHJvcHJpYXRlbHkuCi0KLQlpZiAoIHZpZXctPmZGaXJz
dFJlc3BvbmRlciAmJiAoIChOU1Jlc3BvbmRlciopdmlldy0+ZkZpcnN0UmVzcG9uZGVyICE9IG9s
ZEZpcnN0UmVzcG9uZGVyICkgKQotCXsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCQotCWlmICggW29s
ZEZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dICkKLQl7Ci0JCU5T
VmlldyoJCXRlbnRhdGl2ZU5ld0tleVZpZXc7CisgICAgTlNSZXNwb25kZXIqIG9sZEZpcnN0UmVz
cG9uZGVyOworICAgIE5TVmlldyogY3VycmVudEtleVZpZXc7CisgICAgTlNWaWV3KiB2aWV3V2VN
YWRlRmlyc3RSZXNwb25kZXI7CisgICAgCisgICAgLy8gRm9jdXMgb24gc29tZSBwYXJ0IChzdWJ2
aWV3KSBvZiB0aGlzIGNvbnRyb2wgKHZpZXcpLgorICAgIC8vIE1heWJlIGEgc3VidmlldyBvZiB0
aGlzIG9uZSBhbHJlYWR5IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMsIG1heWJlIG5vdC4KKyAgICAK
KyAgICBvbGRGaXJzdFJlc3BvbmRlciA9IFt2aWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9uZGVy
XTsKKworICAgIC8vIElmIHdlIHRhYiBvdXQgb2Ygb3VyIE5TVmlldywgaXQgd2lsbCBubyBsb25n
ZXIgYmUgdGhlIHJlc3BvbmRlcgorICAgIC8vIHdoZW4gd2UgZ2V0IGhlcmUuIFdlJ2xsIHRyeSB0
aGlzIHRyaWNrIGZvciBub3cuIFdlIG1pZ2h0IG5lZWQgdG8KKyAgICAvLyB0YWcgdGhlIHZpZXcg
YXBwcm9wcmlhdGVseS4KKworICAgIGlmICh2aWV3LT5mRmlyc3RSZXNwb25kZXIgJiYgKChOU1Jl
c3BvbmRlciopdmlldy0+ZkZpcnN0UmVzcG9uZGVyICE9IG9sZEZpcnN0UmVzcG9uZGVyKSkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgaWYgKFtvbGRGaXJzdFJlc3BvbmRlciBpc0tp
bmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgeworICAgICAgICBOU1ZpZXcqIHRlbnRhdGl2ZU5l
d0tleVZpZXc7CiAKICAgICAgICAgLy8gU29tZSB2aWV3IGluIHRoaXMgd2luZG93IGFscmVhZHkg
aGFzIHRoZSBrZXlib2FyZCBmb2N1cy4gIEl0IGJldHRlciBhdCBsZWFzdCBiZSBhIHN1YnZpZXcg
b2YgdGhpcyBvbmUuCi0gICAgICAgIE5TVmlldyoJb2xkRmlyc3RSZXNwb25kZXJWaWV3ID0gKE5T
VmlldyAqKW9sZEZpcnN0UmVzcG9uZGVyOwotICAgICAgICBjaGVjayggW29sZEZpcnN0UmVzcG9u
ZGVyVmlldyBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5mV2ViVmlld10gKTsKKyAgICAgICAgTlNWaWV3
KiBvbGRGaXJzdFJlc3BvbmRlclZpZXcgPSAoTlNWaWV3ICopb2xkRmlyc3RSZXNwb25kZXI7Cisg
ICAgICAgIEFTU0VSVChbb2xkRmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXct
PmZXZWJWaWV3XSk7CiAKLQkJaWYgKCBvbGRGaXJzdFJlc3BvbmRlclZpZXcgIT0gdmlldy0+ZkZp
cnN0UmVzcG9uZGVyCi0JCQkmJiAhW29sZEZpcnN0UmVzcG9uZGVyVmlldyBpc0Rlc2NlbmRhbnRP
Zjp2aWV3LT5mRmlyc3RSZXNwb25kZXJdICkKLQkJewotICAgICAgICAgICAgLy8gRGVzcGl0ZSBv
dXIgZWZmb3J0cyB0byByZWNvcmQgd2hhdCB2aWV3IHdlIG1hZGUgdGhlIGZpcnN0IHJlc3BvbmRl
cgotCQkJLy8gKGZvciB1c2UgaW4gdGhlIG5leHQgcGFyYWdyYXBoKSB3ZSBjb3VsZG4ndCBrZWVw
IHVwIGJlY2F1c2UgdGhlIHVzZXIKLQkJCS8vIGhhcyBjbGlja2VkIGluIGEgdGV4dCBmaWVsZCB0
byBtYWtlIGl0IHRoZSBrZXkgZm9jdXMsIGluc3RlYWQgb2YgdXNpbmcKLQkJCS8vIHRoZSB0YWIg
a2V5LiAgRmluZCBhIGNvbnRyb2wgb24gd2hpY2ggaXQncyByZWFzb25hYmxlIHRvIGludm9rZQot
CQkJLy8gLVtOU1ZpZXcgbmV4dFZhbGlkS2V5Vmlld10sIHRha2luZyBpbnRvIGFjY291bnQgdGhl
IGZhY3QgdGhhdAotCQkJLy8gTlNUZXh0RmllbGRzIGFsd2F5cyBwYXNzIG9uIGZpcnN0LXJlc3Bv
bmRlcnNoaXAgdG8gYSB0ZW1wb3JhcmlseS0KLQkJCS8vIGNvbnRhaW5lZCBOU1RleHRWaWV3Lgot
Ci0JCQlOU1ZpZXcgKnZpZXdCZWluZ1Rlc3RlZDsKLQkJCWN1cnJlbnRLZXlWaWV3ID0gb2xkRmly
c3RSZXNwb25kZXJWaWV3OwotCQkJdmlld0JlaW5nVGVzdGVkID0gY3VycmVudEtleVZpZXc7Ci0J
CQl3aGlsZSAoIHZpZXdCZWluZ1Rlc3RlZCAhPSB2aWV3LT5mV2ViVmlldyApCi0JCQl7Ci0JCQkJ
aWYgKCBbdmlld0JlaW5nVGVzdGVkIGlzS2luZE9mQ2xhc3M6W05TVGV4dEZpZWxkIGNsYXNzXV0g
KQotCQkJCXsKLQkJCQkJY3VycmVudEtleVZpZXcgPSB2aWV3QmVpbmdUZXN0ZWQ7Ci0JCQkJCWJy
ZWFrOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQl2aWV3QmVpbmdUZXN0ZWQgPSBbdmll
d0JlaW5nVGVzdGVkIHN1cGVydmlld107Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgCi0JCXsK
LQkJCS8vIFdlIHJlY29yZGVkIHdoaWNoIHZpZXcgd2UgbWFkZSBpbnRvIHRoZSBmaXJzdCByZXNw
b25kZXIgdGhlCi0JCQkvLyBsYXN0IHRpbWUgdGhlIHVzZXIgaGl0IHRoZSB0YWIga2V5LCBhbmQg
bm90aGluZyBoYXMgaW52YWxpZGF0ZWQKLQkJCS8vIG91ciByZWNvcmRlZCB2YWx1ZSBzaW5jZS4K
LQkJCQotCQkJY3VycmVudEtleVZpZXcgPSB2aWV3LT5mRmlyc3RSZXNwb25kZXI7Ci0JCX0KLQot
ICAgICAgICAvLyBUcnkgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBrZXkgdmll
dy4gIFdlIHVzZSB0aGUgbGFib3Jpb3VzbHkKLQkJLy8gcmVjb3JkZWQvZmlndXJlZCBjdXJyZW50
S2V5VmlldyBpbnN0ZWFkIG9mIGp1c3Qgb2xkRmlyc3RSZXNwb25kZXIgYXMgdGhlCi0JCS8vIGp1
bXBpbmctb2ZmLXBvaW50IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgbmV4dCB2YWxpZCBrZXkgdmll
dy4gIFRoaXMgaXMgc28KLQkJLy8gd2UgZG9uJ3QgZ2V0IGZvb2xlZCBpZiB3ZSByZWNlbnRseSBt
YWRlIHNvbWUgdmlldyB0aGUgZmlyc3QgcmVzcG9uZGVyLCBidXQKLQkJLy8gaXQgcGFzc2VkIG9u
IGZpcnN0LXJlc3BvbmRlci1uZXNzIHRvIHNvbWUgdGVtcG9yYXJ5IHN1YnZpZXcuCi0JCQotICAg
ICAgICAvLyBZb3UgY2FuJ3QgcHV0IG5vcm1hbCB2aWV3cyBpbiBhIHdpbmRvdyB3aXRoIENhcmJv
bi1jb250cm9sLXdyYXBwZWQgdmlld3MuCi0JCS8vIFN0dWZmIGxpa2UgdGhpcyB3b3VsZCBicmVh
ay4gIE0uUC4gTm90aWNlIC0gMTIvMi8wMAorICAgICAgICBpZiAob2xkRmlyc3RSZXNwb25kZXJW
aWV3ICE9IHZpZXctPmZGaXJzdFJlc3BvbmRlciAmJiAhW29sZEZpcnN0UmVzcG9uZGVyVmlldyBp
c0Rlc2NlbmRhbnRPZjp2aWV3LT5mRmlyc3RSZXNwb25kZXJdKSB7CisgICAgICAgICAgICAvKiBE
ZXNwaXRlIG91ciBlZmZvcnRzIHRvIHJlY29yZCB3aGF0IHZpZXcgd2UgbWFkZSB0aGUgZmlyc3Qg
cmVzcG9uZGVyCisgICAgICAgICAgICAgKiAoZm9yIHVzZSBpbiB0aGUgbmV4dCBwYXJhZ3JhcGgp
IHdlIGNvdWxkbid0IGtlZXAgdXAgYmVjYXVzZSB0aGUgdXNlcgorICAgICAgICAgICAgICogaGFz
IGNsaWNrZWQgaW4gYSB0ZXh0IGZpZWxkIHRvIG1ha2UgaXQgdGhlIGtleSBmb2N1cywgaW5zdGVh
ZCBvZiB1c2luZworICAgICAgICAgICAgICogdGhlIHRhYiBrZXkuICBGaW5kIGEgY29udHJvbCBv
biB3aGljaCBpdCdzIHJlYXNvbmFibGUgdG8gaW52b2tlCisgICAgICAgICAgICAgKiAtW05TVmll
dyBuZXh0VmFsaWRLZXlWaWV3XSwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0Cisg
ICAgICAgICAgICAgKiBOU1RleHRGaWVsZHMgYWx3YXlzIHBhc3Mgb24gZmlyc3QtcmVzcG9uZGVy
c2hpcCB0byBhIHRlbXBvcmFyaWx5LQorICAgICAgICAgICAgICogY29udGFpbmVkIE5TVGV4dFZp
ZXcuCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgTlNWaWV3ICp2aWV3QmVpbmdUZXN0
ZWQ7CisgICAgICAgICAgICBjdXJyZW50S2V5VmlldyA9IG9sZEZpcnN0UmVzcG9uZGVyVmlldzsK
KyAgICAgICAgICAgIHZpZXdCZWluZ1Rlc3RlZCA9IGN1cnJlbnRLZXlWaWV3OworICAgICAgICAg
ICAgd2hpbGUgKHZpZXdCZWluZ1Rlc3RlZCAhPSB2aWV3LT5mV2ViVmlldykgeworICAgICAgICAg
ICAgICAgIGlmIChbdmlld0JlaW5nVGVzdGVkIGlzS2luZE9mQ2xhc3M6W05TVGV4dEZpZWxkIGNs
YXNzXV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEtleVZpZXcgPSB2aWV3QmVpbmdU
ZXN0ZWQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2aWV3QmVpbmdUZXN0ZWQgPSBbdmlld0JlaW5nVGVzdGVkIHN1cGVydmll
d107CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBXZSBy
ZWNvcmRlZCB3aGljaCB2aWV3IHdlIG1hZGUgaW50byB0aGUgZmlyc3QgcmVzcG9uZGVyIHRoZQor
ICAgICAgICAgICAgICogbGFzdCB0aW1lIHRoZSB1c2VyIGhpdCB0aGUgdGFiIGtleSwgYW5kIG5v
dGhpbmcgaGFzIGludmFsaWRhdGVkCisgICAgICAgICAgICAgKiBvdXIgcmVjb3JkZWQgdmFsdWUg
c2luY2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY3VycmVu
dEtleVZpZXcgPSB2aWV3LT5mRmlyc3RSZXNwb25kZXI7CisgICAgICAgIH0KKworICAgICAgICAv
KiBUcnkgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBrZXkgdmlldy4gIFdlIHVz
ZSB0aGUgbGFib3Jpb3VzbHkKKyAgICAgICAgICogcmVjb3JkZWQvZmlndXJlZCBjdXJyZW50S2V5
VmlldyBpbnN0ZWFkIG9mIGp1c3Qgb2xkRmlyc3RSZXNwb25kZXIgYXMgdGhlCisgICAgICAgICAq
IGp1bXBpbmctb2ZmLXBvaW50IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgbmV4dCB2YWxpZCBrZXkg
dmlldy4gIFRoaXMgaXMgc28KKyAgICAgICAgICogd2UgZG9uJ3QgZ2V0IGZvb2xlZCBpZiB3ZSBy
ZWNlbnRseSBtYWRlIHNvbWUgdmlldyB0aGUgZmlyc3QgcmVzcG9uZGVyLCBidXQKKyAgICAgICAg
ICogaXQgcGFzc2VkIG9uIGZpcnN0LXJlc3BvbmRlci1uZXNzIHRvIHNvbWUgdGVtcG9yYXJ5IHN1
YnZpZXcuCisgICAgICAgICAqCisgICAgICAgICAqIFlvdSBjYW4ndCBwdXQgbm9ybWFsIHZpZXdz
IGluIGEgd2luZG93IHdpdGggQ2FyYm9uLWNvbnRyb2wtd3JhcHBlZCB2aWV3cy4KKyAgICAgICAg
ICogU3R1ZmYgbGlrZSB0aGlzIHdvdWxkIGJyZWFrLiAgTS5QLiBOb3RpY2UgLSAxMi8yLzAwCisg
ICAgICAgICAqLwogCiAgICAgICAgIHRlbnRhdGl2ZU5ld0tleVZpZXcgPSBmb3J3YXJkID8gW2N1
cnJlbnRLZXlWaWV3IG5leHRWYWxpZEtleVZpZXddIDogW2N1cnJlbnRLZXlWaWV3IHByZXZpb3Vz
VmFsaWRLZXlWaWV3XTsKLSAgICAgICAgaWYgKCB0ZW50YXRpdmVOZXdLZXlWaWV3ICYmIFt0ZW50
YXRpdmVOZXdLZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSApCi0JCXsKKyAg
ICAgICAgaWYgKHRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW3RlbnRhdGl2ZU5ld0tleVZpZXcgaXNE
ZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKSB7CiAgICAgICAgICAgICAvLyBUaGUgdXNlciBo
YXMgdGFiYmVkIHRvIGFub3RoZXIgc3VidmlldyBvZiB0aGlzIGNvbnRyb2wgdmlldy4gIENoYW5n
ZSB0aGUga2V5Ym9hcmQgZm9jdXMuCiAgICAgICAgICAgICAvL05TTG9nKEAiVGFiYmVkIHRvIHRo
ZSBuZXh0IG9yIHByZXZpb3VzIGtleSB2aWV3LiIpOwogCiAgICAgICAgICAgICBbdmlldy0+Zktp
dFdpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6dGVudGF0aXZlTmV3S2V5Vmlld107CiAgICAgICAg
ICAgICB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXIgPSB0ZW50YXRpdmVOZXdLZXlWaWV3OwotICAg
ICAgICB9Ci0JCWVsc2UKLQkJeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhl
IHVzZXIgaGFzIHRhYmJlZCBwYXN0IHRoZSBzdWJ2aWV3cyBvZiB0aGlzIGNvbnRyb2wgdmlldy4g
IFRoZSB3aW5kb3cgaXMgdGhlIGZpcnN0IHJlc3BvbmRlciBub3cuCiAgICAgICAgICAgICAvL05T
TG9nKEAiVGFiYmVkIHBhc3QgdGhlIGZpcnN0IG9yIGxhc3Qga2V5IHZpZXcuIik7CiAgICAgICAg
ICAgICBbdmlldy0+ZktpdFdpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6dmlldy0+ZktpdFdpbmRv
d107CiAgICAgICAgICAgICB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXIgPSBuaWw7CiAgICAgICAg
IH0KLSAgICB9Ci0JZWxzZQotCXsKLSAgICAgICAgLy8gTm8gdmlldyBpbiB0aGlzIHdpbmRvdyBo
YXMgdGhlIGtleWJvYXJkIGZvY3VzLiAgVGhpcyB2aWV3IHNob3VsZAotCQkvLyB0cnkgdG8gc2Vs
ZWN0IG9uZSBvZiBpdHMga2V5IHN1YnZpZXdzLiAgV2UncmUgbm90IGludGVyZXN0ZWQgaW4KLQkJ
Ly8gdGhlIHN1YnZpZXdzIG9mIHNpYmxpbmcgdmlld3MgaGVyZS4KLQotCQkvL05TTG9nKEAiTm8g
a2V5Ym9hcmQgZm9jdXMgaW4gd2luZG93LiBBdHRlbXB0aW5nIHRvIHNldC4uLiIpOwotCi0JCU5T
VmlldyAqdGVudGF0aXZlTmV3S2V5VmlldzsKLQkJY2hlY2sob2xkRmlyc3RSZXNwb25kZXI9PWZL
aXRXaW5kb3cpOwotCQlpZiAoIFt2aWV3LT5mV2ViVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJd
ICkKLQkJCXRlbnRhdGl2ZU5ld0tleVZpZXcgPSB2aWV3LT5mV2ViVmlldzsKLQkJZWxzZQotCQkJ
dGVudGF0aXZlTmV3S2V5VmlldyA9IFt2aWV3LT5mV2ViVmlldyBuZXh0VmFsaWRLZXlWaWV3XTsK
LSAgICAgICAgaWYgKCB0ZW50YXRpdmVOZXdLZXlWaWV3ICYmIFt0ZW50YXRpdmVOZXdLZXlWaWV3
IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSApCi0JCXsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvKiBObyB2aWV3IGluIHRoaXMgd2luZG93IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMuICBU
aGlzIHZpZXcgc2hvdWxkCisgICAgICAgICAqIHRyeSB0byBzZWxlY3Qgb25lIG9mIGl0cyBrZXkg
c3Vidmlld3MuICBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbgorICAgICAgICAgKiB0aGUgc3Vidmll
d3Mgb2Ygc2libGluZyB2aWV3cyBoZXJlLgorICAgICAgICAgKi8KKworICAgICAgICAvLyBOU0xv
ZyhAIk5vIGtleWJvYXJkIGZvY3VzIGluIHdpbmRvdy4gQXR0ZW1wdGluZyB0byBzZXQuLi4iKTsK
KworICAgICAgICBOU1ZpZXcgKnRlbnRhdGl2ZU5ld0tleVZpZXc7CisgICAgICAgIEFTU0VSVChv
bGRGaXJzdFJlc3BvbmRlciA9PSBmS2l0V2luZG93KTsKKyAgICAgICAgaWYgKFt2aWV3LT5mV2Vi
VmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKQorICAgICAgICAgICAgdGVudGF0aXZlTmV3S2V5
VmlldyA9IHZpZXctPmZXZWJWaWV3OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZW50YXRp
dmVOZXdLZXlWaWV3ID0gW3ZpZXctPmZXZWJWaWV3IG5leHRWYWxpZEtleVZpZXddOworICAgICAg
ICBpZiAodGVudGF0aXZlTmV3S2V5VmlldyAmJiBbdGVudGF0aXZlTmV3S2V5VmlldyBpc0Rlc2Nl
bmRhbnRPZjp2aWV3LT5mV2ViVmlld10pIHsKICAgICAgICAgICAgIC8vIFRoaXMgY29udHJvbCB2
aWV3IGhhcyBhdCBsZWFzdCBvbmUgc3VidmlldyB0aGF0IGNhbiB0YWtlIHRoZSBrZXlib2FyZCBm
b2N1cy4KLSAgICAgICAgICAgIGlmICggIWZvcndhcmQgKQotCQkJewotICAgICAgICAgICAgICAg
IC8vIFRoZSB1c2VyIGhhcyB0YWJiZWQgaW50byB0aGlzIGNvbnRyb2wgdmlldyBiYWNrd2FyZHMu
ICBGaW5kCi0JCQkJLy8gYW5kIHNlbGVjdCB0aGUgbGFzdCBzdWJ2aWV3IG9mIHRoaXMgb25lIHRo
YXQgY2FuIHRha2UgdGhlCi0JCQkJLy8ga2V5Ym9hcmQgZm9jdXMuICBXYXRjaCBvdXQgZm9yIGxv
b3BzIG9mIHZhbGlkIGtleSB2aWV3cy4KKyAgICAgICAgICAgIGlmICghZm9yd2FyZCkgeworICAg
ICAgICAgICAgICAgIC8qIFRoZSB1c2VyIGhhcyB0YWJiZWQgaW50byB0aGlzIGNvbnRyb2wgdmll
dyBiYWNrd2FyZHMuICBGaW5kCisgICAgICAgICAgICAgICAgICogYW5kIHNlbGVjdCB0aGUgbGFz
dCBzdWJ2aWV3IG9mIHRoaXMgb25lIHRoYXQgY2FuIHRha2UgdGhlCisgICAgICAgICAgICAgICAg
ICoga2V5Ym9hcmQgZm9jdXMuICBXYXRjaCBvdXQgZm9yIGxvb3BzIG9mIHZhbGlkIGtleSB2aWV3
cy4KKyAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgIE5TVmlldyAqZmlyc3RU
ZW50YXRpdmVOZXdLZXlWaWV3ID0gdGVudGF0aXZlTmV3S2V5VmlldzsKICAgICAgICAgICAgICAg
ICBOU1ZpZXcgKm5leHRUZW50YXRpdmVOZXdLZXlWaWV3ID0gW3RlbnRhdGl2ZU5ld0tleVZpZXcg
bmV4dFZhbGlkS2V5Vmlld107Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBuZXh0VGVudGF0aXZl
TmV3S2V5VmlldyAKLQkJCQkJCSYmIFtuZXh0VGVudGF0aXZlTmV3S2V5VmlldyBpc0Rlc2NlbmRh
bnRPZjp2aWV3LT5mV2ViVmlld10gCi0JCQkJCQkmJiBuZXh0VGVudGF0aXZlTmV3S2V5VmlldyE9
Zmlyc3RUZW50YXRpdmVOZXdLZXlWaWV3KQotCQkJCXsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
bmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW25leHRUZW50YXRpdmVOZXdLZXlWaWV3IGlzRGVz
Y2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSAmJiBuZXh0VGVudGF0aXZlTmV3S2V5VmlldyAhPSBm
aXJzdFRlbnRhdGl2ZU5ld0tleVZpZXcpIHsKICAgICAgICAgICAgICAgICAgICAgdGVudGF0aXZl
TmV3S2V5VmlldyA9IG5leHRUZW50YXRpdmVOZXdLZXlWaWV3OwogICAgICAgICAgICAgICAgICAg
ICBuZXh0VGVudGF0aXZlTmV3S2V5VmlldyA9IFt0ZW50YXRpdmVOZXdLZXlWaWV3IG5leHRWYWxp
ZEtleVZpZXddOwogICAgICAgICAgICAgICAgIH0KQEAgLTExMzEsOSArMTAxMiw3IEBAIEFkdmFu
Y2VGb2N1cyggSElXZWJWaWV3KiB2aWV3LCBib29sIGZvcncKICAgICAgICAgICAgIC8vTlNMb2co
QCJUYWJiZWQgaW50byB0aGUgZmlyc3Qgb3IgbGFzdCBrZXkgdmlldy4iKTsKICAgICAgICAgICAg
IFt2aWV3LT5mS2l0V2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp0ZW50YXRpdmVOZXdLZXlWaWV3
XTsKICAgICAgICAgICAgIHZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlciA9IHRlbnRhdGl2ZU5ld0tl
eVZpZXc7Ci0gICAgICAgIH0KLQkJZWxzZQotCQl7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBUaGlzIGNvbnRyb2wgdmlldyBoYXMgbm8gc3Vidmlld3MgdGhhdCBjYW4gdGFrZSB0
aGUga2V5Ym9hcmQgZm9jdXMuCiAgICAgICAgICAgICAvL05TTG9nKEAiQ2FuJ3QgdGFiIGludG8g
dGhpcyB2aWV3LiIpOwogICAgICAgICAgICAgdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gbmls
OwpAQCAtMTE0OSw1OSArMTAyOCw1NSBAQCBBZHZhbmNlRm9jdXMoIEhJV2ViVmlldyogdmlldywg
Ym9vbCBmb3J3CiAvLyBSZWxpbnF1aXNoRm9jdXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogLy8KLXN0YXRpYyB2b2lkCi1SZWxpbnF1aXNoRm9jdXMoIEhJV2ViVmlldyogdmlldywgYm9v
bCBpbkF1dG9kaXNwbGF5ICkKK3N0YXRpYyB2b2lkIFJlbGlucXVpc2hGb2N1cyhISVdlYlZpZXcq
IHZpZXcsIGJvb2wgaW5BdXRvZGlzcGxheSkKIHsKLSAgICBOU1Jlc3BvbmRlciogIGZpcnN0UmVz
cG9uZGVyOworICAgIE5TUmVzcG9uZGVyKiBmaXJzdFJlc3BvbmRlcjsKIAogICAgIC8vIEFwcGFy
ZW50bHkgQ2FyYm9uIHRoaW5rcyB0aGF0IHNvbWUgc3VidmlldyBvZiB0aGlzIGNvbnRyb2wgdmll
dyBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLAotCS8vIG9yIHdlIHdvdWxkbid0IGJlIGJlaW5nIGFz
a2VkIHRvIHJlbGlucXVpc2ggZm9jdXMuCisgICAgLy8gb3Igd2Ugd291bGRuJ3QgYmUgYmVpbmcg
YXNrZWQgdG8gcmVsaW5xdWlzaCBmb2N1cy4KIAotCWZpcnN0UmVzcG9uZGVyID0gW3ZpZXctPmZL
aXRXaW5kb3cgZmlyc3RSZXNwb25kZXJdOwotCWlmICggW2ZpcnN0UmVzcG9uZGVyIGlzS2luZE9m
Q2xhc3M6W05TVmlldyBjbGFzc11dICkKLQl7Ci0JCS8vIFNvbWUgc3VidmlldyBvZiB0aGlzIGNv
bnRyb2wgdmlldyByZWFsbHkgaXMgdGhlIGZpcnN0IHJlc3BvbmRlciByaWdodCBub3cuCi0JCWNo
ZWNrKCBbKE5TVmlldyAqKWZpcnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJW
aWV3XSApOworICAgIGZpcnN0UmVzcG9uZGVyID0gW3ZpZXctPmZLaXRXaW5kb3cgZmlyc3RSZXNw
b25kZXJdOworICAgIGlmIChbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNs
YXNzXV0pIHsKKyAgICAgICAgLy8gU29tZSBzdWJ2aWV3IG9mIHRoaXMgY29udHJvbCB2aWV3IHJl
YWxseSBpcyB0aGUgZmlyc3QgcmVzcG9uZGVyIHJpZ2h0IG5vdy4KKyAgICAgICAgQVNTRVJUKFso
TlNWaWV3ICopZmlyc3RSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKTsK
IAotCQkvLyBNYWtlIHRoZSB3aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwgc28gdGhhdCBubyB2
aWV3IGlzIHRoZSBrZXkgdmlldy4KKyAgICAgICAgLy8gTWFrZSB0aGUgd2luZG93IHRoZSBmaXJz
dCByZXNwb25kZXIsIHNvIHRoYXQgbm8gdmlldyBpcyB0aGUga2V5IHZpZXcuCiAgICAgICAgIFt2
aWV3LT5mS2l0V2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3LT5mS2l0V2luZG93XTsKIAot
CQkvLyAJSWYgdGhpcyBjb250cm9sIGlzIG5vdCBhbGxvd2VkIHRvIGRvIGF1dG9kaXNwbGF5LCBk
b24ndCBsZXQKLQkJLy8JaXQgYXV0b2Rpc3BsYXkgYW55IGp1c3QtY2hhbmdlZCBmb2N1cyByaW5n
cyBvciB0ZXh0IG9uIHRoZQotCQkvLwluZXh0IGdvIGFyb3VuZCB0aGUgZXZlbnQgbG9vcC4gSSdt
IHByb2JhYmx5IGNsZWFyaW5nIG1vcmUKLQkJLy8JZGlydHkgcmVjdHMgdGhhbiBJIGhhdmUgdG8s
IGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gaHVydCBpbgotCQkvLwl0aGUgcHJpbnQgcGFuZWwgYWNj
ZXNzb3J5IHZpZXcgY2FzZSwgYW5kIEkgZG9uJ3QgaGF2ZSB0aW1lCi0JCS8vCXRvIGZpZ3VyZSBv
dXQgZXhhY3RseSB3aGF0IC1bTlNDZWxsIF9zZXRLZXlib2FyZEZvY3VzUmluZ05lZWRzRGlzcGxh
eV0KLQkJLy8JaXMgZG9pbmcgd2hlbiBpbnZva2VkIGluZGlyZWN0bHkgZnJvbSAtbWFrZUZpcnN0
UmVzcG9uZGVyIHVwIGFib3ZlLiAgTS5QLiBOb3RpY2UgLSAxMi80LzAwCisgICAgICAgIC8qICAg
ICBJZiB0aGlzIGNvbnRyb2wgaXMgbm90IGFsbG93ZWQgdG8gZG8gYXV0b2Rpc3BsYXksIGRvbid0
IGxldAorICAgICAgICAgKiAgICBpdCBhdXRvZGlzcGxheSBhbnkganVzdC1jaGFuZ2VkIGZvY3Vz
IHJpbmdzIG9yIHRleHQgb24gdGhlCisgICAgICAgICAqICAgIG5leHQgZ28gYXJvdW5kIHRoZSBl
dmVudCBsb29wLiBJJ20gcHJvYmFibHkgY2xlYXJpbmcgbW9yZQorICAgICAgICAgKiAgICBkaXJ0
eSByZWN0cyB0aGFuIEkgaGF2ZSB0bywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0IGluCisg
ICAgICAgICAqICAgIHRoZSBwcmludCBwYW5lbCBhY2Nlc3NvcnkgdmlldyBjYXNlLCBhbmQgSSBk
b24ndCBoYXZlIHRpbWUKKyAgICAgICAgICogICAgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQg
LVtOU0NlbGwgX3NldEtleWJvYXJkRm9jdXNSaW5nTmVlZHNEaXNwbGF5XQorICAgICAgICAgKiAg
ICBpcyBkb2luZyB3aGVuIGludm9rZWQgaW5kaXJlY3RseSBmcm9tIC1tYWtlRmlyc3RSZXNwb25k
ZXIgdXAgYWJvdmUuICBNLlAuIE5vdGljZSAtIDEyLzQvMDAKKyAgICAgICAgICovCisKKyAgICAg
ICAgaWYgKCFpbkF1dG9kaXNwbGF5KQorICAgICAgICAgICAgW1t2aWV3LT5mV2ViVmlldyBvcGFx
dWVBbmNlc3Rvcl0gX2NsZWFyRGlydHlSZWN0c0ZvclRyZWVdOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8qICBUaGUgQ29jb2EgZmlyc3QgcmVzcG9uZGVyIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8g
dGhlIENhcmJvbgorICAgICAgICAgKiAgICBjb250cm9sIHRoYXQgaGFzIHRoZSBrZXlib2FyZCBm
b2N1cy4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuCisgICAgICAgICAqICAgIHlvdSd2ZSBjbG9zZWQg
YSBkaWFsb2cgYnkgaGl0dGluZyByZXR1cm4gaW4gYW4gTlNUZXh0VmlldworICAgICAgICAgKiAg
ICB0aGF0J3MgYSBzdWJ2aWV3IG9mIHRoaXMgb25lOyBDb2NvYSBjbG9zZWQgdGhlIHdpbmRvdywg
YW5kCisgICAgICAgICAqICAgIG5vdyBDYXJib24gaXMgdGVsbGluZyB0aGlzIGNvbnRyb2wgdG8g
cmVsaW5xdWlzaCB0aGUgZm9jdXMKKyAgICAgICAgICogICAgYXMgaXQncyBiZWluZyBkaXNwb3Nl
ZC4gIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KKyAgICAgICAgICovCiAKLQkJaWYgKCAhaW5BdXRv
ZGlzcGxheSApCi0JCQlbW3ZpZXctPmZXZWJWaWV3IG9wYXF1ZUFuY2VzdG9yXSBfY2xlYXJEaXJ0
eVJlY3RzRm9yVHJlZV07CisgICAgICAgIEFTU0VSVChmaXJzdFJlc3BvbmRlciA9PSB3aW5kb3cp
OwogICAgIH0KLQllbHNlCi0JewotCQkvLyAgVGhlIENvY29hIGZpcnN0IHJlc3BvbmRlciBkb2Vz
IG5vdCBjb3JyZXNwb25kIHRvIHRoZSBDYXJib24KLQkJLy8JY29udHJvbCB0aGF0IGhhcyB0aGUg
a2V5Ym9hcmQgZm9jdXMuICBUaGlzIGNhbiBoYXBwZW4gd2hlbgotCQkvLwl5b3UndmUgY2xvc2Vk
IGEgZGlhbG9nIGJ5IGhpdHRpbmcgcmV0dXJuIGluIGFuIE5TVGV4dFZpZXcKLQkJLy8JdGhhdCdz
IGEgc3VidmlldyBvZiB0aGlzIG9uZTsgQ29jb2EgY2xvc2VkIHRoZSB3aW5kb3csIGFuZAotCQkv
Lwlub3cgQ2FyYm9uIGlzIHRlbGxpbmcgdGhpcyBjb250cm9sIHRvIHJlbGlucXVpc2ggdGhlIGZv
Y3VzCi0JCS8vCWFzIGl0J3MgYmVpbmcgZGlzcG9zZWQuICBUaGVyZSdzIG5vdGhpbmcgdG8gZG8u
Ci0KLQkJY2hlY2soZmlyc3RSZXNwb25kZXI9PXdpbmRvdyk7Ci0JfQogfQogCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIEFjdGl2ZVN0YXRlQ2hhbmdlZAogLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIHZvaWQKLUFjdGl2ZVN0YXRlQ2hhbmdlZCggSElXZWJW
aWV3KiB2aWV3ICkKK3N0YXRpYyB2b2lkIEFjdGl2ZVN0YXRlQ2hhbmdlZChISVdlYlZpZXcqIHZp
ZXcpCiB7Ci0JaWYgKCBbdmlldy0+ZldlYlZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihzZXRFbmFibGVkKV0gKQotCXsKLQkJWyhOU0NvbnRyb2wqKXZpZXctPmZXZWJWaWV3IHNldEVu
YWJsZWQ6IElzQ29udHJvbEVuYWJsZWQoIHZpZXctPmZWaWV3UmVmICldOwotCQlISVZpZXdTZXRO
ZWVkc0Rpc3BsYXkoIHZpZXctPmZWaWV3UmVmLCB0cnVlICk7Ci0JfQorICAgIGlmIChbdmlldy0+
ZldlYlZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRFbmFibGVkKV0pIHsKKyAg
ICAgICAgWyhOU0NvbnRyb2wqKXZpZXctPmZXZWJWaWV3IHNldEVuYWJsZWQ6IElzQ29udHJvbEVu
YWJsZWQodmlldy0+ZlZpZXdSZWYpXTsKKyAgICAgICAgSElWaWV3U2V0TmVlZHNEaXNwbGF5KHZp
ZXctPmZWaWV3UmVmLCB0cnVlKTsKKyAgICB9CiB9CiAKIApAQCAtMTIwOSw0MiArMTA4NCwzNCBA
QCBBY3RpdmVTdGF0ZUNoYW5nZWQoIEhJV2ViVmlldyogdmlldyApCiAvLyBQcm9jZXNzQ29tbWFu
ZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9TU3RhdHVzCi1Qcm9j
ZXNzQ29tbWFuZCggSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5k
ICkKK3N0YXRpYyBPU1N0YXR1cyBQcm9jZXNzQ29tbWFuZChISVdlYlZpZXcqIGluVmlldywgY29u
c3QgSElDb21tYW5kKiBpbkNvbW1hbmQpCiB7Ci0JT1NTdGF0dXMJCXJlc3VsdCA9IGV2ZW50Tm90
SGFuZGxlZEVycjsKLQlOU1Jlc3BvbmRlcioJcmVzcDsKLQkKLQlyZXNwID0gW2luVmlldy0+Zktp
dFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0KLQlpZiAoIFtyZXNwIGlzS2luZE9mQ2xhc3M6W05T
VmlldyBjbGFzc11dICkKLQl7Ci0JCU5TVmlldyoJcmVzcFZpZXcgPSAoTlNWaWV3KilyZXNwOwot
Ci0JCWlmICggcmVzcFZpZXcgPT0gaW5WaWV3LT5mV2ViVmlldwotCQkJfHwgW3Jlc3BWaWV3IGlz
RGVzY2VuZGFudE9mOiBpblZpZXctPmZXZWJWaWV3XSApCi0JCXsKLQkJCXN3aXRjaCAoIGluQ29t
bWFuZC0+Y29tbWFuZElEICkKLQkJCXsKLQkJCQljYXNlIGtISUNvbW1hbmRDdXQ6Ci0JCQkJY2Fz
ZSBrSElDb21tYW5kQ29weToKLQkJCQljYXNlIGtISUNvbW1hbmRQYXN0ZToKLQkJCQljYXNlIGtI
SUNvbW1hbmRDbGVhcjoKLQkJCQljYXNlIGtISUNvbW1hbmRTZWxlY3RBbGw6Ci0JCQkJCXsKLQkJ
CQkJCVNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKCBpbkNvbW1hbmQgKTsK
LQkJCQkJCWlmICggW3Jlc3BWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0gKQotCQkJ
CQkJewotCQkJCQkJCVtyZXNwVmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVj
dDpuaWxdOwotCQkJCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJy
ZWFrOwotCQkJfQotCQl9Ci0JfQotCQotCXJldHVybiByZXN1bHQ7CisgICAgT1NTdGF0dXMgcmVz
dWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIE5TUmVzcG9uZGVyKiByZXNwOworICAgIAor
ICAgIHJlc3AgPSBbaW5WaWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9uZGVyXTsKKworICAgIGlm
IChbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgeworICAgICAgICBOU1ZpZXcq
IHJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKKworICAgICAgICBpZiAocmVzcFZpZXcgPT0gaW5W
aWV3LT5mV2ViVmlldyB8fCBbcmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+ZldlYlZp
ZXddKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGluQ29tbWFuZC0+Y29tbWFuZElEKSB7CisgICAg
ICAgICAgICBjYXNlIGtISUNvbW1hbmRDdXQ6CisgICAgICAgICAgICBjYXNlIGtISUNvbW1hbmRD
b3B5OgorICAgICAgICAgICAgY2FzZSBrSElDb21tYW5kUGFzdGU6CisgICAgICAgICAgICBjYXNl
IGtISUNvbW1hbmRDbGVhcjoKKyAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFuZFNlbGVjdEFsbDoK
KyAgICAgICAgICAgICAgICBTRUwgc2VsZWN0b3IgPSBfTlNTZWxlY3RvckZvckhJQ29tbWFuZChp
bkNvbW1hbmQpOworICAgICAgICAgICAgICAgIGlmIChbcmVzcFZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSkgeworICAgICAgICAgICAgICAgICAgICBbcmVzcFZpZXcgcGVyZm9ybVNl
bGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6bmlsXTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbm9FcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTI1Miw0OSArMTExOSwzOSBA
QCBQcm9jZXNzQ29tbWFuZCggSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0CiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIC8vCiBzdGF0aWMgT1NTdGF0dXMKLVVwZGF0ZUNvbW1hbmRTdGF0dXMo
IEhJV2ViVmlldyogaW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCApCitVcGRhdGVD
b21tYW5kU3RhdHVzKEhJV2ViVmlldyogaW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFu
ZCkKIHsKLQlPU1N0YXR1cwkJcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOwotCU1lbnVJdGVt
UHJveHkqIAlwcm94eSA9IE5VTEw7Ci0JTlNSZXNwb25kZXIqCXJlc3A7Ci0JCi0JcmVzcCA9IFtp
blZpZXctPmZLaXRXaW5kb3cgZmlyc3RSZXNwb25kZXJdOwotCQotCWlmICggW3Jlc3AgaXNLaW5k
T2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gKQotCXsKLQkJTlNWaWV3KglyZXNwVmlldyA9IChOU1Zp
ZXcqKXJlc3A7Ci0KLQkJaWYgKCByZXNwVmlldyA9PSBpblZpZXctPmZXZWJWaWV3Ci0JCQl8fCBb
cmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+ZldlYlZpZXddICkKLQkJewotCQkJaWYg
KCBpbkNvbW1hbmQtPmF0dHJpYnV0ZXMgJiBrSElDb21tYW5kRnJvbU1lbnUgKQotCQkJewotCQkJ
CVNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKCBpbkNvbW1hbmQgKTsKLQkK
LQkJCQlpZiAoIHNlbGVjdG9yICkKLQkJCQl7Ci0JCQkJCWlmICggW3Jlc3AgcmVzcG9uZHNUb1Nl
bGVjdG9yOiBzZWxlY3Rvcl0gKQotCQkJCQl7Ci0JCQkJCQlwcm94eSA9IFtbTWVudUl0ZW1Qcm94
eSBhbGxvY10gaW5pdFdpdGhBY3Rpb246IHNlbGVjdG9yXTsKLQkJCQkJCQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIC1wZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDogaGVy
ZSBiZWNhdXNlIHRoZSBtZXRob2Qgd2UncmUgY2FsbGluZyByZXR1cm5zIEJPT0wsIHdoaWxlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyAtcGVyZm9ybVNlbGVjdG9yOndpdGhPYmplY3Q6J3Mg
cmV0dXJuIHZhbHVlIGlzIGFzc3VtZWQgdG8gYmUgYW4gaWQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAod3RmT2JqY01zZ1NlbmQ8Qk9PTD4ocmVzcCwgQHNlbGVjdG9yKHZhbGlkYXRlVXNl
ckludGVyZmFjZUl0ZW06KSwgcHJveHkpKQotCQkJCQkJCUVuYWJsZU1lbnVJdGVtKCBpbkNvbW1h
bmQtPm1lbnUubWVudVJlZiwgaW5Db21tYW5kLT5tZW51Lm1lbnVJdGVtSW5kZXggKTsKLQkJCQkJ
CWVsc2UKLQkJCQkJCQlEaXNhYmxlTWVudUl0ZW0oIGluQ29tbWFuZC0+bWVudS5tZW51UmVmLCBp
bkNvbW1hbmQtPm1lbnUubWVudUl0ZW1JbmRleCApOwotCQkJCQkJCi0JCQkJCQlyZXN1bHQgPSBu
b0VycjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlpZiAoIHByb3h5ICkKLQkJ
W3Byb3h5IHJlbGVhc2VdOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2ZW50Tm90SGFuZGxlZEVy
cjsKKyAgICBNZW51SXRlbVByb3h5KiBwcm94eSA9IE5VTEw7CisgICAgTlNSZXNwb25kZXIqIHJl
c3A7CisgICAgCisgICAgcmVzcCA9IFtpblZpZXctPmZLaXRXaW5kb3cgZmlyc3RSZXNwb25kZXJd
OworICAgIAorICAgIGlmIChbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgewor
ICAgICAgICBOU1ZpZXcqIHJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKIAotCXJldHVybiByZXN1
bHQ7CisgICAgICAgIGlmICgocmVzcFZpZXcgPT0gaW5WaWV3LT5mV2ViVmlldyB8fCBbcmVzcFZp
ZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+ZldlYlZpZXddKSAmJiBpbkNvbW1hbmQtPmF0dHJp
YnV0ZXMgJiBrSElDb21tYW5kRnJvbU1lbnUpIHsKKyAgICAgICAgICAgIFNFTCBzZWxlY3RvciA9
IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKGluQ29tbWFuZCk7CisgICAgCisgICAgICAgICAgICBp
ZiAoc2VsZWN0b3IgJiYgW3Jlc3AgcmVzcG9uZHNUb1NlbGVjdG9yOiBzZWxlY3Rvcl0pIHsKKyAg
ICAgICAgICAgICAgICBwcm94eSA9IFtbTWVudUl0ZW1Qcm94eSBhbGxvY10gaW5pdFdpdGhBY3Rp
b246IHNlbGVjdG9yXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdXNlIC1wZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDogaGVyZSBiZWNhdXNlIHRoZSBt
ZXRob2Qgd2UncmUgY2FsbGluZyByZXR1cm5zIEJPT0wsIHdoaWxlCisgICAgICAgICAgICAgICAg
Ly8gLXBlcmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0OidzIHJldHVybiB2YWx1ZSBpcyBhc3N1bWVk
IHRvIGJlIGFuIGlkLgorICAgICAgICAgICAgICAgIGlmICh3dGZPYmpjTXNnU2VuZDxCT09MPihy
ZXNwLCBAc2VsZWN0b3IodmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTopLCBwcm94eSkpCisgICAg
ICAgICAgICAgICAgICAgIEVuYWJsZU1lbnVJdGVtKGluQ29tbWFuZC0+bWVudS5tZW51UmVmLCBp
bkNvbW1hbmQtPm1lbnUubWVudUl0ZW1JbmRleCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBEaXNhYmxlTWVudUl0ZW0oaW5Db21tYW5kLT5tZW51Lm1lbnVSZWYs
IGluQ29tbWFuZC0+bWVudS5tZW51SXRlbUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaWYgKHByb3h5KQorICAgICAgICBbcHJveHkgcmVsZWFzZV07CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBCbGF0YW50bHkgc3RvbGVuIGZyb20gQXBwS2l0
IGFuZCBjcm9wcGVkIGEgYml0CkBAIC0xMzAzLDE5ICsxMTYwLDE3IEBAIFVwZGF0ZUNvbW1hbmRT
dGF0dXMoIEhJV2ViVmlldyogaW5WaWV3LCAKIC8vIF9OU1NlbGVjdG9yRm9ySElDb21tYW5kCiAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgU0VMCi1fTlNTZWxlY3RvckZv
ckhJQ29tbWFuZCggY29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQgKQorc3RhdGljIFNFTCBfTlNT
ZWxlY3RvckZvckhJQ29tbWFuZChjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCkKIHsKLSAgICBz
d2l0Y2ggKCBpbkNvbW1hbmQtPmNvbW1hbmRJRCApCi0JewotICAgICAgICBjYXNlIGtISUNvbW1h
bmRVbmRvOiByZXR1cm4gQHNlbGVjdG9yKHVuZG86KTsKLSAgICAgICAgY2FzZSBrSElDb21tYW5k
UmVkbzogcmV0dXJuIEBzZWxlY3RvcihyZWRvOik7Ci0gICAgICAgIGNhc2Uga0hJQ29tbWFuZEN1
dCAgOiByZXR1cm4gQHNlbGVjdG9yKGN1dDopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRDb3B5
IDogcmV0dXJuIEBzZWxlY3Rvcihjb3B5Oik7Ci0gICAgICAgIGNhc2Uga0hJQ29tbWFuZFBhc3Rl
OiByZXR1cm4gQHNlbGVjdG9yKHBhc3RlOik7Ci0gICAgICAgIGNhc2Uga0hJQ29tbWFuZENsZWFy
OiByZXR1cm4gQHNlbGVjdG9yKGRlbGV0ZTopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRTZWxl
Y3RBbGw6IHJldHVybiBAc2VsZWN0b3Ioc2VsZWN0QWxsOik7Ci0gICAgICAgIGRlZmF1bHQ6IHJl
dHVybiBOVUxMOworICAgIHN3aXRjaCAoaW5Db21tYW5kLT5jb21tYW5kSUQpIHsKKyAgICBjYXNl
IGtISUNvbW1hbmRVbmRvOiByZXR1cm4gQHNlbGVjdG9yKHVuZG86KTsKKyAgICBjYXNlIGtISUNv
bW1hbmRSZWRvOiByZXR1cm4gQHNlbGVjdG9yKHJlZG86KTsKKyAgICBjYXNlIGtISUNvbW1hbmRD
dXQgIDogcmV0dXJuIEBzZWxlY3RvcihjdXQ6KTsKKyAgICBjYXNlIGtISUNvbW1hbmRDb3B5IDog
cmV0dXJuIEBzZWxlY3Rvcihjb3B5Oik7CisgICAgY2FzZSBrSElDb21tYW5kUGFzdGU6IHJldHVy
biBAc2VsZWN0b3IocGFzdGU6KTsKKyAgICBjYXNlIGtISUNvbW1hbmRDbGVhcjogcmV0dXJuIEBz
ZWxlY3RvcihkZWxldGU6KTsKKyAgICBjYXNlIGtISUNvbW1hbmRTZWxlY3RBbGw6IHJldHVybiBA
c2VsZWN0b3Ioc2VsZWN0QWxsOik7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQog
CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzIzLDQwMSArMTE3OCwzNjEgQEAgX05TU2VsZWN0b3JG
b3JISUNvbW1hbmQoIGNvbnN0IEhJQ29tbWFuZAogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vCUhJV2ViVmlld0V2ZW50SGFuZGxlcgorLy8gICAgSElXZWJWaWV3RXZlbnRIYW5k
bGVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwlPdXIgb2JqZWN0J3MgdmlydHVh
bCBldmVudCBoYW5kbGVyIG1ldGhvZC4gSSdtIG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhpcyB0aGVz
ZSBkYXlzLgotLy8JV2UgdXNlZCB0byBkbyB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBidXQgdGhv
c2UgZGF5cyBhcmUgbG9uZyBnb25lLi4uCisvLyAgICBPdXIgb2JqZWN0J3MgdmlydHVhbCBldmVu
dCBoYW5kbGVyIG1ldGhvZC4gSSdtIG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhpcyB0aGVzZSBkYXlz
LgorLy8gICAgV2UgdXNlZCB0byBkbyB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBidXQgdGhvc2Ug
ZGF5cyBhcmUgbG9uZyBnb25lLi4uCiAvLwogc3RhdGljIE9TU3RhdHVzCi1ISVdlYlZpZXdFdmVu
dEhhbmRsZXIoCi0JRXZlbnRIYW5kbGVyQ2FsbFJlZglpbkNhbGxSZWYsCi0JRXZlbnRSZWYJCQlp
bkV2ZW50LAotCXZvaWQgKgkJCQlpblVzZXJEYXRhICkKLXsKLQlPU1N0YXR1cwkJCXJlc3VsdCA9
IGV2ZW50Tm90SGFuZGxlZEVycjsKLQlISVBvaW50CQkJCXdoZXJlOwotCU9TVHlwZQkJCQl0YWc7
Ci0Jdm9pZCAqCQkJCXB0cjsKLQlTaXplCQkJCXNpemU7Ci0JVUludDMyCQkJCWZlYXR1cmVzOwot
CVJnbkhhbmRsZQkJCXJlZ2lvbiA9IE5VTEw7Ci0JQ29udHJvbFBhcnRDb2RlCQlwYXJ0OwotCUhJ
V2ViVmlldyoJCQl2aWV3ID0gKEhJV2ViVmlldyopaW5Vc2VyRGF0YTsKLQotICAgICAgICAvLyBb
TlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZXZl
bnRzIHNvIHRoYXQgQWN0aXZhdGVUU01Eb2N1bWVudCBpcyBjYWxsZWQgdG8gc2V0IGFuIGFjdGl2
ZSBkb2N1bWVudC4gCi0gICAgICAgIC8vIFdpdGhvdXQgYW4gYWN0aXZlIGRvY3VtZW50LCBUU00g
d2lsbCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVzZXMgYSBib3R0b20tbGluZSBpbnB1
dCB3aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KLSAgICAgICAgW05TQXBwIHNldFdpbmRvd3NO
ZWVkVXBkYXRlOllFU107CitISVdlYlZpZXdFdmVudEhhbmRsZXIoRXZlbnRIYW5kbGVyQ2FsbFJl
ZiBpbkNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnQsIHZvaWQgKmluVXNlckRhdGEpCit7CisgICAg
T1NTdGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIEhJUG9pbnQgd2hlcmU7
CisgICAgT1NUeXBlIHRhZzsKKyAgICB2b2lkICpwdHI7CisgICAgU2l6ZSBzaXplOworICAgIFVJ
bnQzMiBmZWF0dXJlczsKKyAgICBSZ25IYW5kbGUgcmVnaW9uID0gTlVMTDsKKyAgICBDb250cm9s
UGFydENvZGUgcGFydDsKKyAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElXZWJWaWV3KilpblVzZXJE
YXRhOworCisgICAgLy8gW05TQXBwIHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU10gbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGV2ZW50cyBzbyB0aGF0IEFjdGl2YXRlVFNNRG9jdW1lbnQgaXMgY2FsbGVk
IHRvIHNldCBhbiBhY3RpdmUgZG9jdW1lbnQuIAorICAgIC8vIFdpdGhvdXQgYW4gYWN0aXZlIGRv
Y3VtZW50LCBUU00gd2lsbCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVzZXMgYSBib3R0
b20tbGluZSBpbnB1dCB3aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KKyAgICBbTlNBcHAgc2V0
V2luZG93c05lZWRVcGRhdGU6WUVTXTsKICAgICAgICAgCi0Jc3dpdGNoICggR2V0RXZlbnRDbGFz
cyggaW5FdmVudCApICkKLQl7Ci0JCWNhc2Uga0V2ZW50Q2xhc3NISU9iamVjdDoKLQkJCXN3aXRj
aCAoIEdldEV2ZW50S2luZCggaW5FdmVudCApICkKLQkJCXsKLQkJCQljYXNlIGtFdmVudEhJT2Jq
ZWN0Q29uc3RydWN0OgotCQkJCQl7Ci0JCQkJCQlISU9iamVjdFJlZgkJb2JqZWN0OwotCi0JCQkJ
CQlyZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1ISU9iamVj
dEluc3RhbmNlLAotCQkJCQkJCQl0eXBlSElPYmplY3RSZWYsIE5VTEwsIHNpemVvZiggSElPYmpl
Y3RSZWYgKSwgTlVMTCwgJm9iamVjdCApOwotCQkJCQkJcmVxdWlyZV9ub2VyciggcmVzdWx0LCBN
aXNzaW5nUGFyYW1ldGVyICk7Ci0JCQkJCQkKLQkJCQkJCS8vIG9uIGVudHJ5IGZvciBvdXIgY29u
c3RydWN0IGV2ZW50LCB3ZSdyZSBwYXNzZWQgdGhlCi0JCQkJCQkvLyBjcmVhdGlvbiBwcm9jIHdl
IHJlZ2lzdGVyZWQgd2l0aCBmb3IgdGhpcyBjbGFzcy4KLQkJCQkJCS8vIHdlIHVzZSBpdCBub3cg
dG8gY3JlYXRlIHRoZSBpbnN0YW5jZSwgYW5kIHRoZW4gd2UKLQkJCQkJCS8vIHJlcGxhY2UgdGhl
IGluc3RhbmNlIHBhcmFtZXRlciBkYXRhIHdpdGggc2FpZCBpbnN0YW5jZQotCQkJCQkJLy8gYXMg
dHlwZSB2b2lkLgotCi0JCQkJCQl2aWV3ID0gSElXZWJWaWV3Q29uc3RydWN0b3IoIChISVZpZXdS
ZWYpb2JqZWN0ICk7Ci0KLQkJCQkJCWlmICggdmlldyApCi0JCQkJCQl7Ci0JCQkJCQkJU2V0RXZl
bnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtSElPYmplY3RJbnN0YW5jZSwKLQkJCQkJ
CQkJCXR5cGVWb2lkUHRyLCBzaXplb2YoIHZvaWQgKiApLCAmdmlldyApOyAKLQkJCQkJCX0KLQkJ
CQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudEhJT2JqZWN0RGVzdHJ1Y3Q6
Ci0JCQkJCUhJV2ViVmlld0Rlc3RydWN0b3IoIHZpZXcgKTsKLQkJCQkJLy8gcmVzdWx0IGlzIHVu
aW1wb3J0YW50Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBrRXZlbnRD
bGFzc0tleWJvYXJkOgotCQkJewotICAgICAgICAgICAgICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0g
Q3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLQkJCQlbdmlldy0+ZktpdFdp
bmRvdyBzZW5kU3VwZXJFdmVudDpraXRFdmVudF07Ci0JCQkJW2tpdEV2ZW50IHJlbGVhc2VdOwot
CQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBrRXZlbnRDbGFz
c01vdXNlOgotCQkJc3dpdGNoICggR2V0RXZlbnRLaW5kKCBpbkV2ZW50ICkgKQotCQkJewotCQkJ
CWNhc2Uga0V2ZW50TW91c2VVcDoKLQkJCQkJcmVzdWx0ID0gTW91c2VVcCggdmlldywgaW5FdmVu
dCApOwotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudE1vdXNlV2hlZWxNb3ZlZDoK
LQkJCQkJcmVzdWx0ID0gTW91c2VXaGVlbE1vdmVkKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJy
ZWFrOwotCi0JCQkJY2FzZSBrRXZlbnRNb3VzZU1vdmVkOgotCQkJCQlyZXN1bHQgPSBNb3VzZU1v
dmVkKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBrRXZlbnRNb3Vz
ZURyYWdnZWQ6Ci0JCQkJCXJlc3VsdCA9IE1vdXNlRHJhZ2dlZCggdmlldywgaW5FdmVudCApOwot
CQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2Uga0V2ZW50Q2xhc3NDb21tYW5k
OgotCQkJewotCQkJCUhJQ29tbWFuZAkJY29tbWFuZDsKLQkJCQkKLQkJCQlyZXN1bHQgPSBHZXRF
dmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1EaXJlY3RPYmplY3QsIHR5cGVISUNv
bW1hbmQsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggSElDb21tYW5kICksIE5VTEwsICZjb21tYW5k
ICk7Ci0JCQkJcmVxdWlyZV9ub2VyciggcmVzdWx0LCBNaXNzaW5nUGFyYW1ldGVyICk7Ci0JCQkJ
Ci0JCQkJc3dpdGNoICggR2V0RXZlbnRLaW5kKCBpbkV2ZW50ICkgKQotCQkJCXsKLQkJCQkJY2Fz
ZSBrRXZlbnRDb21tYW5kUHJvY2VzczoKLQkJCQkJCXJlc3VsdCA9IFByb2Nlc3NDb21tYW5kKCB2
aWV3LCAmY29tbWFuZCApOwotCQkJCQkJYnJlYWs7Ci0JCQkJCQotCQkJCQljYXNlIGtFdmVudENv
bW1hbmRVcGRhdGVTdGF0dXM6Ci0JCQkJCQlyZXN1bHQgPSBVcGRhdGVDb21tYW5kU3RhdHVzKCB2
aWV3LCAmY29tbWFuZCApOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0K
LQkJY2FzZSBrRXZlbnRDbGFzc0NvbnRyb2w6Ci0JCQlzd2l0Y2ggKCBHZXRFdmVudEtpbmQoIGlu
RXZlbnQgKSApCi0JCQl7Ci0JCQkJY2FzZSBrRXZlbnRDb250cm9sSW5pdGlhbGl6ZToKLQkJCQkJ
ZmVhdHVyZXMgPSBHZXRCZWhhdmlvcnMoKTsKLQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZl
bnQsIGtFdmVudFBhcmFtQ29udHJvbEZlYXR1cmVzLCB0eXBlVUludDMyLAotCQkJCQkJCXNpemVv
ZiggVUludDMyICksICZmZWF0dXJlcyApOwotCQkJCQlyZXN1bHQgPSBub0VycjsKLQkJCQkJYnJl
YWs7Ci0JCQkJCQotCQkJCWNhc2Uga0V2ZW50Q29udHJvbERyYXc6Ci0JCQkJCXsKLQkJCQkJCUNH
Q29udGV4dFJlZgkJY29udGV4dCA9IE5VTEw7Ci0JCQkJCQkKLQkJCQkJCUdldEV2ZW50UGFyYW1l
dGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbVJnbkhhbmRsZSwgdHlwZVFEUmduSGFuZGxlLCBOVUxM
LAotCQkJCQkJCQlzaXplb2YoIFJnbkhhbmRsZSApLCBOVUxMLCAmcmVnaW9uICk7Ci0JCQkJCQlH
ZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1DR0NvbnRleHRSZWYsIHR5cGVD
R0NvbnRleHRSZWYsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggQ0dDb250ZXh0UmVmICksIE5VTEws
ICZjb250ZXh0ICk7Ci0KLQkJCQkJCURyYXcoIHZpZXcsIHJlZ2lvbiwgY29udGV4dCApOwotCi0J
CQkJCQlyZXN1bHQgPSBub0VycjsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNl
IGtFdmVudENvbnRyb2xIaXRUZXN0OgotCQkJCQlHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwg
a0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgTlVMTCwKLQkJCQkJCQlzaXpl
b2YoIEhJUG9pbnQgKSwgTlVMTCwgJndoZXJlICk7Ci0JCQkJCXBhcnQgPSBIaXRUZXN0KCB2aWV3
LCAmd2hlcmUgKTsKLQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFt
Q29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIHNpemVvZiggQ29udHJvbFBhcnRDb2Rl
ICksICZwYXJ0ICk7Ci0JCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQlicmVhazsKLQkJCQkJCi0J
CQkJY2FzZSBrRXZlbnRDb250cm9sR2V0UGFydFJlZ2lvbjoKLQkJCQkJR2V0RXZlbnRQYXJhbWV0
ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUs
IE5VTEwsCi0JCQkJCQkJc2l6ZW9mKCBDb250cm9sUGFydENvZGUgKSwgTlVMTCwgJnBhcnQgKTsK
LQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFJlZ2lv
biwgdHlwZVFEUmduSGFuZGxlLCBOVUxMLAotCQkJCQkJCXNpemVvZiggUmduSGFuZGxlICksIE5V
TEwsICZyZWdpb24gKTsKLQkJCQkJcmVzdWx0ID0gR2V0UmVnaW9uKCB2aWV3LCBwYXJ0LCByZWdp
b24gKTsKLQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9sR2V0RGF0YToK
LQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwg
dHlwZUNvbnRyb2xQYXJ0Q29kZSwgTlVMTCwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksIE5VTEws
ICZwYXJ0KTsKLQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250
cm9sRGF0YVRhZywgdHlwZUVudW1lcmF0aW9uLCBOVUxMLCBzaXplb2YoT1NUeXBlKSwgTlVMTCwg
JnRhZyk7Ci0JCQkJCUdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJv
bERhdGFCdWZmZXIsIHR5cGVQdHIsIE5VTEwsIHNpemVvZihQdHIpLCBOVUxMLCAmcHRyKTsKLQkJ
CQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZl
clNpemUsIHR5cGVCeXRlQ291bnQsIE5VTEwsIHNpemVvZihTaXplKSwgTlVMTCwgJnNpemUpOwot
Ci0JCQkJCWlmICh0YWcgPT0ga0NvbnRyb2xLaW5kVGFnKSB7Ci0JCQkJCQlTaXplIG91dFNpemU7
Ci0JCQkJCQlyZXN1bHQgPSBub0VycjsKLQotCQkJCQkJaWYgKHB0cikgewotCQkJCQkJCWlmIChz
aXplICE9IHNpemVvZihDb250cm9sS2luZCkpCi0JCQkJCQkJCXJlc3VsdCA9IGVyckRhdGFTaXpl
TWlzbWF0Y2g7Ci0JCQkJCQkJZWxzZQotCQkJCQkJCQkoKihDb250cm9sS2luZCAqKXB0cikgPSBH
ZXRLaW5kKCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCW91dFNpemUgPSBzaXplb2YoQ29udHJvbEtpbmQp
OwotCQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0
YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIHNpemVvZihTaXplKSwgJm91dFNpemUpOwotCQkJ
CQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9sQm91bmRzQ2hh
bmdlZDoKLQkJCQkJewotCQkJCQkJSElSZWN0CQlwcmV2UmVjdCwgY3VyclJlY3Q7Ci0JCQkJCQlV
SW50MzIJCWF0dHJzOwotCQkJCQkJCi0JCQkJCQlHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwg
a0V2ZW50UGFyYW1BdHRyaWJ1dGVzLCB0eXBlVUludDMyLCBOVUxMLAotCQkJCQkJCQlzaXplb2Yo
IFVJbnQzMiApLCBOVUxMLCAmYXR0cnMgKTsKLQkJCQkJCUdldEV2ZW50UGFyYW1ldGVyKCBpbkV2
ZW50LCBrRXZlbnRQYXJhbU9yaWdpbmFsQm91bmRzLCB0eXBlSElSZWN0LCBOVUxMLAotCQkJCQkJ
CQlzaXplb2YoIEhJUmVjdCApLCBOVUxMLCAmcHJldlJlY3QgKTsKLQkJCQkJCUdldEV2ZW50UGFy
YW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbUN1cnJlbnRCb3VuZHMsIHR5cGVISVJlY3QsIE5V
TEwsCi0JCQkJCQkJCXNpemVvZiggSElSZWN0ICksIE5VTEwsICZjdXJyUmVjdCApOwotCi0JCQkJ
CQlCb3VuZHNDaGFuZ2VkKCB2aWV3LCBhdHRycywgJnByZXZSZWN0LCAmY3VyclJlY3QgKTsKLQkJ
CQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCQotCQkJCWNhc2Ug
a0V2ZW50Q29udHJvbEFjdGl2YXRlOgotCQkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIHZpZXcgKTsK
LQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCWJyZWFrOwotCQkJCQkKLQkJCQljYXNlIGtFdmVu
dENvbnRyb2xEZWFjdGl2YXRlOgotCQkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIHZpZXcgKTsKLQkJ
CQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCWJyZWFrOwotCQkJCQkJCQkJCQkJCQkJCi0JCQkJY2Fz
ZSBrRXZlbnRDb250cm9sT3duaW5nV2luZG93Q2hhbmdlZDoKLQkJCQkJewotCQkJCQkJV2luZG93
UmVmCQlmcm9tV2luZG93LCB0b1dpbmRvdzsKLQkJCQkJCQotCQkJCQkJcmVzdWx0ID0gR2V0RXZl
bnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbE9yaWdpbmFsT3duaW5nV2lu
ZG93LCB0eXBlV2luZG93UmVmLCBOVUxMLAotCQkJCQkJCQkJCXNpemVvZiggV2luZG93UmVmICks
IE5VTEwsICZmcm9tV2luZG93ICk7Ci0JCQkJCQlyZXF1aXJlX25vZXJyKCByZXN1bHQsIE1pc3Np
bmdQYXJhbWV0ZXIgKTsKLQotCQkJCQkJcmVzdWx0ID0gR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZl
bnQsIGtFdmVudFBhcmFtQ29udHJvbEN1cnJlbnRPd25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYs
IE5VTEwsCi0JCQkJCQkJCQkJc2l6ZW9mKCBXaW5kb3dSZWYgKSwgTlVMTCwgJnRvV2luZG93ICk7
Ci0JCQkJCQlyZXF1aXJlX25vZXJyKCByZXN1bHQsIE1pc3NpbmdQYXJhbWV0ZXIgKTsKLQotCQkJ
CQkJT3duaW5nV2luZG93Q2hhbmdlZCggdmlldywgZnJvbVdpbmRvdywgdG9XaW5kb3cgKTsKLQkJ
CQkJCQotCQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQljYXNlIGtFdmVudENvbnRyb2xDbGlj
azoKLQkJCQkJcmVzdWx0ID0gQ2xpY2soIHZpZXcsIGluRXZlbnQgKTsKLQkJCQkJYnJlYWs7Cisg
ICAgc3dpdGNoIChHZXRFdmVudENsYXNzKGluRXZlbnQpKSB7CisgICAgY2FzZSBrRXZlbnRDbGFz
c0hJT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAg
ICAgICBjYXNlIGtFdmVudEhJT2JqZWN0Q29uc3RydWN0OgorICAgICAgICAgICAgSElPYmplY3RS
ZWYgb2JqZWN0OworCisgICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlcihpbkV2
ZW50LCBrRXZlbnRQYXJhbUhJT2JqZWN0SW5zdGFuY2UsCisgICAgICAgICAgICB0eXBlSElPYmpl
Y3RSZWYsIE5VTEwsIHNpemVvZihISU9iamVjdFJlZiksIE5VTEwsICZvYmplY3QpOworICAgICAg
ICAgICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAvLyBvbiBlbnRyeSBmb3Igb3Vy
IGNvbnN0cnVjdCBldmVudCwgd2UncmUgcGFzc2VkIHRoZQorICAgICAgICAgICAgLy8gY3JlYXRp
b24gcHJvYyB3ZSByZWdpc3RlcmVkIHdpdGggZm9yIHRoaXMgY2xhc3MuCisgICAgICAgICAgICAv
LyB3ZSB1c2UgaXQgbm93IHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UsIGFuZCB0aGVuIHdlCisgICAg
ICAgICAgICAvLyByZXBsYWNlIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXIgZGF0YSB3aXRoIHNhaWQg
aW5zdGFuY2UKKyAgICAgICAgICAgIC8vIGFzIHR5cGUgdm9pZC4KKworICAgICAgICAgICAgdmll
dyA9IEhJV2ViVmlld0NvbnN0cnVjdG9yKChISVZpZXdSZWYpb2JqZWN0KTsKKworICAgICAgICAg
ICAgaWYgKHZpZXcpCisgICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwg
a0V2ZW50UGFyYW1ISU9iamVjdEluc3RhbmNlLCB0eXBlVm9pZFB0ciwgc2l6ZW9mKHZvaWQgKiks
ICZ2aWV3KTsgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBrRXZlbnRISU9iamVjdERlc3RydWN0OgorICAgICAgICAgICAgSElXZWJWaWV3RGVzdHJ1
Y3Rvcih2aWV3KTsKKyAgICAgICAgICAgIC8vIHJlc3VsdCBpcyB1bmltcG9ydGFudAorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtFdmVu
dENsYXNzS2V5Ym9hcmQ6IHsKKyAgICAgICAgTlNFdmVudCoga2l0RXZlbnQgPSBDcmVhdGVOU0V2
ZW50V2l0aENhcmJvbkV2ZW50KGluRXZlbnQpOworICAgICAgICBbdmlldy0+ZktpdFdpbmRvdyBz
ZW5kU3VwZXJFdmVudDpraXRFdmVudF07CisgICAgICAgIFtraXRFdmVudCByZWxlYXNlXTsKKyAg
ICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
a0V2ZW50Q2xhc3NNb3VzZToKKyAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkp
IHsKKyAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVVwOgorICAgICAgICAgICAgcmVzdWx0ID0gTW91
c2VVcCh2aWV3LCBpbkV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgY2FzZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBNb3Vz
ZVdoZWVsTW92ZWQodmlldywgaW5FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIGtFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBNb3VzZU1vdmVk
KHZpZXcsIGluRXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRXZl
bnRNb3VzZURyYWdnZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBNb3VzZURyYWdnZWQodmlldywg
aW5FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb21tYW5kOgorICAgICAgICBISUNvbW1hbmQgY29tbWFu
ZDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQs
IGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlSElDb21tYW5kLCBOVUxMLCBzaXplb2YoSElD
b21tYW5kKSwgTlVMTCwgJmNvbW1hbmQpOworICAgICAgICBBU1NFUlQoIXJlc3VsdCk7CisgICAg
ICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAgICAgICBj
YXNlIGtFdmVudENvbW1hbmRQcm9jZXNzOgorICAgICAgICAgICAgcmVzdWx0ID0gUHJvY2Vzc0Nv
bW1hbmQodmlldywgJmNvbW1hbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgCisgICAgICAg
IGNhc2Uga0V2ZW50Q29tbWFuZFVwZGF0ZVN0YXR1czoKKyAgICAgICAgICAgIHJlc3VsdCA9IFVw
ZGF0ZUNvbW1hbmRTdGF0dXModmlldywgJmNvbW1hbmQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtFdmVudENsYXNzQ29udHJvbDoK
KyAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKKyAgICAgICAgY2FzZSBr
RXZlbnRDb250cm9sSW5pdGlhbGl6ZToKKyAgICAgICAgICAgIGZlYXR1cmVzID0gR2V0QmVoYXZp
b3JzKCk7CisgICAgICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bUNvbnRyb2xGZWF0dXJlcywgdHlwZVVJbnQzMiwgc2l6ZW9mKFVJbnQzMiksICZmZWF0dXJlcyk7
CisgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2Uga0V2ZW50Q29udHJvbERyYXc6IHsKKyAgICAgICAgICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gTlVMTDsKKworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwg
a0V2ZW50UGFyYW1SZ25IYW5kbGUsIHR5cGVRRFJnbkhhbmRsZSwgTlVMTCwgc2l6ZW9mKFJnbkhh
bmRsZSksIE5VTEwsICZyZWdpb24pOworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5F
dmVudCwga0V2ZW50UGFyYW1DR0NvbnRleHRSZWYsIHR5cGVDR0NvbnRleHRSZWYsIE5VTEwsIHNp
emVvZihDR0NvbnRleHRSZWYpLCBOVUxMLCAmY29udGV4dCk7CisKKyAgICAgICAgICAgIERyYXco
dmlldywgcmVnaW9uLCBjb250ZXh0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xI
aXRUZXN0OgorICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFy
YW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgTlVMTCwgc2l6ZW9mKEhJUG9pbnQpLCBOVUxM
LCAmd2hlcmUpOworICAgICAgICAgICAgcGFydCA9IEhpdFRlc3QodmlldywgJndoZXJlKTsKKyAg
ICAgICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBh
cnQsIHR5cGVDb250cm9sUGFydENvZGUsIHNpemVvZihDb250cm9sUGFydENvZGUpLCAmcGFydCk7
CisgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2Uga0V2ZW50Q29udHJvbEdldFBhcnRSZWdpb246CisgICAgICAgICAgICBHZXRFdmVu
dFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBh
cnRDb2RlLCBOVUxMLCBzaXplb2YoQ29udHJvbFBhcnRDb2RlKSwgTlVMTCwgJnBhcnQpOworICAg
ICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUmVn
aW9uLCB0eXBlUURSZ25IYW5kbGUsIE5VTEwsIHNpemVvZihSZ25IYW5kbGUpLCBOVUxMLCAmcmVn
aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IEdldFJlZ2lvbih2aWV3LCBwYXJ0LCByZWdpb24p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Uga0V2
ZW50Q29udHJvbEdldERhdGE6IHsKKyAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZl
bnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIE5VTEwsIHNp
emVvZihDb250cm9sUGFydENvZGUpLCBOVUxMLCAmcGFydCk7CisgICAgICAgICAgICBHZXRFdmVu
dFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xEYXRhVGFnLCB0eXBlRW51bWVy
YXRpb24sIE5VTEwsIHNpemVvZihPU1R5cGUpLCBOVUxMLCAmdGFnKTsKKyAgICAgICAgICAgIEdl
dEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbERhdGFCdWZmZXIsIHR5
cGVQdHIsIE5VTEwsIHNpemVvZihQdHIpLCBOVUxMLCAmcHRyKTsKKyAgICAgICAgICAgIEdldEV2
ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbERhdGFCdWZmZXJTaXplLCB0
eXBlQnl0ZUNvdW50LCBOVUxMLCBzaXplb2YoU2l6ZSksIE5VTEwsICZzaXplKTsKKworICAgICAg
ICAgICAgaWYgKHRhZyA9PSBrQ29udHJvbEtpbmRUYWcpIHsKKyAgICAgICAgICAgICAgICBTaXpl
IG91dFNpemU7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisKKyAgICAgICAgICAg
ICAgICBpZiAocHRyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaXplICE9IHNpemVvZihD
b250cm9sS2luZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBlcnJEYXRhU2l6
ZU1pc21hdGNoOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAoKihDb250cm9sS2luZCAqKXB0cikgPSBHZXRLaW5kKCk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgb3V0U2l6ZSA9IHNpemVvZihDb250cm9sS2luZCk7CisgICAg
ICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9s
RGF0YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIHNpemVvZihTaXplKSwgJm91dFNpemUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkOiB7CisgICAgICAgICAgICBISVJlY3QgcHJl
dlJlY3QsIGN1cnJSZWN0OworICAgICAgICAgICAgVUludDMyIGF0dHJzOworICAgICAgICAKKyAg
ICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQXR0cmlidXRl
cywgdHlwZVVJbnQzMiwgTlVMTCwgc2l6ZW9mKFVJbnQzMiksIE5VTEwsICZhdHRycyk7CisgICAg
ICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbU9yaWdpbmFsQm91
bmRzLCB0eXBlSElSZWN0LCBOVUxMLCBzaXplb2YoSElSZWN0KSwgTlVMTCwgJnByZXZSZWN0KTsK
KyAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ3VycmVu
dEJvdW5kcywgdHlwZUhJUmVjdCwgTlVMTCwgc2l6ZW9mKEhJUmVjdCksIE5VTEwsICZjdXJyUmVj
dCk7CisKKyAgICAgICAgICAgIEJvdW5kc0NoYW5nZWQodmlldywgYXR0cnMsICZwcmV2UmVjdCwg
JmN1cnJSZWN0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xBY3RpdmF0ZToKKyAg
ICAgICAgICAgIEFjdGl2ZVN0YXRlQ2hhbmdlZCh2aWV3KTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG5vRXJyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9s
RGVhY3RpdmF0ZToKKyAgICAgICAgICAgIEFjdGl2ZVN0YXRlQ2hhbmdlZCh2aWV3KTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG5vRXJyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
ICAgICBjYXNlIGtFdmVudENvbnRyb2xPd25pbmdXaW5kb3dDaGFuZ2VkOiB7CisgICAgICAgICAg
ICBXaW5kb3dSZWYgZnJvbVdpbmRvdywgdG9XaW5kb3c7CisKKyAgICAgICAgICAgIHJlc3VsdCA9
IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbE9yaWdpbmFsT3du
aW5nV2luZG93LCB0eXBlV2luZG93UmVmLCBOVUxMLCBzaXplb2YoV2luZG93UmVmKSwgTlVMTCwg
JmZyb21XaW5kb3cpOworICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAg
ICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xD
dXJyZW50T3duaW5nV2luZG93LCB0eXBlV2luZG93UmVmLCBOVUxMLCBzaXplb2YoV2luZG93UmVm
KSwgTlVMTCwgJnRvV2luZG93KTsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0KTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAg
ICAgICAgICAgT3duaW5nV2luZG93Q2hhbmdlZCh2aWV3LCBmcm9tV2luZG93LCB0b1dpbmRvdyk7
CisgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sQ2xpY2s6CisgICAgICAgICAgICByZXN1
bHQgPSBDbGljayh2aWV3LCBpbkV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkJY2FzZSBrRXZlbnRDb250cm9sQ29udGV4
dHVhbE1lbnVDbGljazoKLQkJCQkJcmVzdWx0ID0gQ29udGV4dE1lbnVDbGljayggdmlldywgaW5F
dmVudCApOwotCQkJCQlicmVhazsKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sQ29udGV4dHVh
bE1lbnVDbGljazoKKyAgICAgICAgICAgIHJlc3VsdCA9IENvbnRleHRNZW51Q2xpY2sodmlldywg
aW5FdmVudCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotCQkJCWNhc2Uga0V2ZW50Q29udHJvbFNldEZvY3VzUGFydDoKLQkJCQkJewot
CQkJCQkJQ29udHJvbFBhcnRDb2RlCQlkZXNpcmVkRm9jdXM7Ci0JCQkJCQlSZ25IYW5kbGUJCQlp
bnZhbGlkUmduOwotCQkJCQkJQm9vbGVhbgkJCQlmb2N1c0V2ZXJ5dGhpbmc7Ci0JCQkJCQlDb250
cm9sUGFydENvZGUJCWFjdHVhbEZvY3VzOwotCQkJCQkJCi0JCQkJCQlyZXN1bHQgPSBHZXRFdmVu
dFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQ
YXJ0Q29kZSwgTlVMTCwKLQkJCQkJCQkJCQlzaXplb2YoIENvbnRyb2xQYXJ0Q29kZSApLCBOVUxM
LCAmZGVzaXJlZEZvY3VzICk7IAotCQkJCQkJcmVxdWlyZV9ub2VyciggcmVzdWx0LCBNaXNzaW5n
UGFyYW1ldGVyICk7Ci0JCQkJCQkKLQkJCQkJCUdldEV2ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBr
RXZlbnRQYXJhbUNvbnRyb2xJbnZhbFJnbiwgdHlwZVFEUmduSGFuZGxlLCBOVUxMLAotCQkJCQkJ
CQlzaXplb2YoIFJnbkhhbmRsZSApLCBOVUxMLCAmaW52YWxpZFJnbiApOwotCi0JCQkJCQlmb2N1
c0V2ZXJ5dGhpbmcgPSBmYWxzZTsgLy8gYSBnb29kIGRlZmF1bHQgaW4gY2FzZSB0aGUgcGFyYW1l
dGVyIGRvZXNuJ3QgZXhpc3QKLQotCQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtF
dmVudFBhcmFtQ29udHJvbEZvY3VzRXZlcnl0aGluZywgdHlwZUJvb2xlYW4sIE5VTEwsCi0JCQkJ
CQkJCXNpemVvZiggQm9vbGVhbiApLCBOVUxMLCAmZm9jdXNFdmVyeXRoaW5nICk7Ci0KLQkJCQkJ
CXJlc3VsdCA9IFNldEZvY3VzUGFydCggdmlldywgZGVzaXJlZEZvY3VzLCBpbnZhbGlkUmduLCBm
b2N1c0V2ZXJ5dGhpbmcsICZhY3R1YWxGb2N1cyApOwotCQkJCQkJCi0JCQkJCQlpZiAoIHJlc3Vs
dCA9PSBub0VyciApCi0JCQkJCQkJdmVyaWZ5X25vZXJyKCBTZXRFdmVudFBhcmFtZXRlciggaW5F
dmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwKLQkJCQkJ
CQkJCXNpemVvZiggQ29udHJvbFBhcnRDb2RlICksICZhY3R1YWxGb2N1cyApICk7Ci0JCQkJCX0K
LQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJLy8gc29tZSBvdGhlciBraW5kIG9mIENvbnRyb2wgZXZl
bnQKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQkJCi0JCS8v
IHNvbWUgb3RoZXIgZXZlbnQgY2xhc3MKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCX0KKyAgICAg
ICAgY2FzZSBrRXZlbnRDb250cm9sU2V0Rm9jdXNQYXJ0OiB7CisgICAgICAgICAgICBDb250cm9s
UGFydENvZGUgZGVzaXJlZEZvY3VzOworICAgICAgICAgICAgUmduSGFuZGxlIGludmFsaWRSZ247
CisgICAgICAgICAgICBCb29sZWFuIGZvY3VzRXZlcnl0aGluZzsKKyAgICAgICAgICAgIENvbnRy
b2xQYXJ0Q29kZSBhY3R1YWxGb2N1czsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0
ID0gR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlw
ZUNvbnRyb2xQYXJ0Q29kZSwgTlVMTCwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksIE5VTEwsICZk
ZXNpcmVkRm9jdXMpOyAKKyAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAg
ICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sSW52YWxSZ24s
IHR5cGVRRFJnbkhhbmRsZSwgTlVMTCwgc2l6ZW9mKFJnbkhhbmRsZSksIE5VTEwsICZpbnZhbGlk
UmduKTsKKyAgICAgICAgICAgIGZvY3VzRXZlcnl0aGluZyA9IGZhbHNlOyAvLyBhIGdvb2QgZGVm
YXVsdCBpbiBjYXNlIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgR2V0
RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRm9jdXNFdmVyeXRoaW5n
LCB0eXBlQm9vbGVhbiwgTlVMTCwgc2l6ZW9mKEJvb2xlYW4pLCBOVUxMLCAmZm9jdXNFdmVyeXRo
aW5nKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gU2V0Rm9jdXNQYXJ0KHZpZXcsIGRlc2lyZWRG
b2N1cywgaW52YWxpZFJnbiwgZm9jdXNFdmVyeXRoaW5nLCAmYWN0dWFsRm9jdXMpOworICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBub0VycikKKyAgICAgICAgICAgICAgICBBU1NFUlQoIVNldEV2
ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9s
UGFydENvZGUsIHNpemVvZihDb250cm9sUGFydENvZGUpLCAmYWN0dWFsRm9jdXMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gc29tZSBvdGhlciBraW5kIG9m
IENvbnRyb2wgZXZlbnQKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOwogCi1NaXNzaW5nUGFyYW1ldGVyOgotCXJldHVybiByZXN1
bHQ7CisgICAgLy8gc29tZSBvdGhlciBldmVudCBjbGFzcworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKIHN0YXRpYyB2b2lkIFVw
ZGF0ZU9ic2VydmVyKENGUnVuTG9vcE9ic2VydmVyUmVmIG9ic2VydmVyLCBDRlJ1bkxvb3BBY3Rp
dml0eSBhY3Rpdml0eSwgdm9pZCAqaW5mbyk7CiAKLXN0YXRpYyB2b2lkCi1TdGFydFVwZGF0ZU9i
c2VydmVyKCBISVdlYlZpZXcqIHZpZXcgKQorc3RhdGljIHZvaWQgU3RhcnRVcGRhdGVPYnNlcnZl
cihISVdlYlZpZXcqIHZpZXcpCiB7Ci0JQ0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0CWNvbnRleHQ7
Ci0JQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYJCW9ic2VydmVyOwotICAgIENGUnVuTG9vcFJlZgkJCQlt
YWluUnVuTG9vcDsKLSAgICAKLSAgICBjaGVjayggdmlldy0+ZklzQ29tcG9zaXRlZCA9PSBmYWxz
ZSApOwotICAgIGNoZWNrKCB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPT0gTlVMTCApOwotCi0JY29u
dGV4dC52ZXJzaW9uID0gMDsKLQljb250ZXh0LmluZm8gPSB2aWV3OwotCWNvbnRleHQucmV0YWlu
ID0gTlVMTDsKLQljb250ZXh0LnJlbGVhc2UgPSBOVUxMOwotCWNvbnRleHQuY29weURlc2NyaXB0
aW9uID0gTlVMTDsKLQotICAgIG1haW5SdW5Mb29wID0gKENGUnVuTG9vcFJlZilHZXRDRlJ1bkxv
b3BGcm9tRXZlbnRMb29wKCBHZXRNYWluRXZlbnRMb29wKCkgKTsKLQlvYnNlcnZlciA9IENGUnVu
TG9vcE9ic2VydmVyQ3JlYXRlKCBOVUxMLCBrQ0ZSdW5Mb29wRW50cnkgfCBrQ0ZSdW5Mb29wQmVm
b3JlV2FpdGluZywgdHJ1ZSwgMCwgVXBkYXRlT2JzZXJ2ZXIsICZjb250ZXh0ICk7Ci0JQ0ZSdW5M
b29wQWRkT2JzZXJ2ZXIoIG1haW5SdW5Mb29wLCBvYnNlcnZlciwga0NGUnVuTG9vcENvbW1vbk1v
ZGVzICk7IAorICAgIENGUnVuTG9vcE9ic2VydmVyQ29udGV4dCBjb250ZXh0OworICAgIENGUnVu
TG9vcE9ic2VydmVyUmVmIG9ic2VydmVyOworICAgIENGUnVuTG9vcFJlZiBtYWluUnVuTG9vcDsK
KyAgICAKKyAgICBBU1NFUlQoIXZpZXctPmZJc0NvbXBvc2l0ZWQpOworICAgIEFTU0VSVCghdmll
dy0+ZlVwZGF0ZU9ic2VydmVyKTsKKworICAgIGNvbnRleHQudmVyc2lvbiA9IDA7CisgICAgY29u
dGV4dC5pbmZvID0gdmlldzsKKyAgICBjb250ZXh0LnJldGFpbiA9IE5VTEw7CisgICAgY29udGV4
dC5yZWxlYXNlID0gTlVMTDsKKyAgICBjb250ZXh0LmNvcHlEZXNjcmlwdGlvbiA9IE5VTEw7CisK
KyAgICBtYWluUnVuTG9vcCA9IChDRlJ1bkxvb3BSZWYpR2V0Q0ZSdW5Mb29wRnJvbUV2ZW50TG9v
cChHZXRNYWluRXZlbnRMb29wKCkpOworICAgIG9ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJD
cmVhdGUoTlVMTCwga0NGUnVuTG9vcEVudHJ5IHwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcsIHRy
dWUsIDAsIFVwZGF0ZU9ic2VydmVyLCAmY29udGV4dCk7CisgICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2
ZXIobWFpblJ1bkxvb3AsIG9ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOyAKIAogICAg
IHZpZXctPmZVcGRhdGVPYnNlcnZlciA9IG9ic2VydmVyOwogICAgIAotLy8gICAgcHJpbnRmKCAi
VXBkYXRlIG9ic2VydmVyIHN0YXJ0ZWRcbiIgKTsKKy8vICAgIHByaW50ZigiVXBkYXRlIG9ic2Vy
dmVyIHN0YXJ0ZWRcbiIpOwogfQogCi1zdGF0aWMgdm9pZAotU3RvcFVwZGF0ZU9ic2VydmVyKCBI
SVdlYlZpZXcqIHZpZXcgKQorc3RhdGljIHZvaWQgU3RvcFVwZGF0ZU9ic2VydmVyKEhJV2ViVmll
dyogdmlldykKIHsKLSAgICBjaGVjayggdmlldy0+ZklzQ29tcG9zaXRlZCA9PSBmYWxzZSApOwot
ICAgIGNoZWNrKCB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgIT0gTlVMTCApOworICAgIEFTU0VSVCgh
dmlldy0+ZklzQ29tcG9zaXRlZCk7CisgICAgQVNTRVJUKHZpZXctPmZVcGRhdGVPYnNlcnZlcik7
CiAKLSAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUoIHZpZXctPmZVcGRhdGVPYnNlcnZl
ciApOwotICAgIENGUmVsZWFzZSggdmlldy0+ZlVwZGF0ZU9ic2VydmVyICk7CisgICAgQ0ZSdW5M
b29wT2JzZXJ2ZXJJbnZhbGlkYXRlKHZpZXctPmZVcGRhdGVPYnNlcnZlcik7CisgICAgQ0ZSZWxl
YXNlKHZpZXctPmZVcGRhdGVPYnNlcnZlcik7CiAgICAgdmlldy0+ZlVwZGF0ZU9ic2VydmVyID0g
TlVMTDsKIAotLy8gICAgcHJpbnRmKCAiVXBkYXRlIG9ic2VydmVyIHJlbW92ZWRcbiIgKTsKKy8v
ICAgIHByaW50ZigiVXBkYXRlIG9ic2VydmVyIHJlbW92ZWRcbiIpOwogfQogCiBzdGF0aWMgdm9p
ZCAKLVVwZGF0ZU9ic2VydmVyKCBDRlJ1bkxvb3BPYnNlcnZlclJlZiBvYnNlcnZlciwgQ0ZSdW5M
b29wQWN0aXZpdHkgYWN0aXZpdHksIHZvaWQgKmluZm8gKQorVXBkYXRlT2JzZXJ2ZXIoQ0ZSdW5M
b29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5IGFjdGl2aXR5LCB2b2lk
ICppbmZvKQogewotCUhJV2ViVmlldyoJCQl2aWV3ID0gKEhJV2ViVmlldyopaW5mbzsKLSAgICBS
Z25IYW5kbGUJCQlyZWdpb24gPSBOZXdSZ24oKTsKKyAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElX
ZWJWaWV3KilpbmZvOworICAgIFJnbkhhbmRsZSByZWdpb24gPSBOZXdSZ24oKTsKICAgICAKLS8v
ICAgIHByaW50ZiggIlVwZGF0ZSBvYnNlcnZlciBjYWxsZWRcbiIgKTsKKy8vICAgIHByaW50Zigi
VXBkYXRlIG9ic2VydmVyIGNhbGxlZFxuIik7CiAKLSAgICBpZiAoIHJlZ2lvbiApCi0gICAgewot
ICAgICAgICBHZXRXaW5kb3dSZWdpb24oIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYg
KSwga1dpbmRvd1VwZGF0ZVJnbiwgcmVnaW9uICk7CisgICAgaWYgKHJlZ2lvbikgeworICAgICAg
ICBHZXRXaW5kb3dSZWdpb24oR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSwga1dpbmRv
d1VwZGF0ZVJnbiwgcmVnaW9uKTsKICAgICAgICAgCi0gICAgICAgIGlmICggIUVtcHR5UmduKCBy
ZWdpb24gKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJnbkhhbmRsZQkJb3VyUmduID0gTmV3
UmduKCk7Ci0gICAgICAgICAgICBSZWN0CQkJcmVjdDsKKyAgICAgICAgaWYgKCFFbXB0eVJnbihy
ZWdpb24pKSB7CisgICAgICAgICAgICBSZ25IYW5kbGUgb3VyUmduID0gTmV3UmduKCk7CisgICAg
ICAgICAgICBSZWN0IHJlY3Q7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdldFdpbmRvd0Jv
dW5kcyggR2V0Q29udHJvbE93bmVyKCB2aWV3LT5mVmlld1JlZiApLCBrV2luZG93U3RydWN0dXJl
UmduLCAmcmVjdCApOworICAgICAgICAgICAgR2V0V2luZG93Qm91bmRzKEdldENvbnRyb2xPd25l
cih2aWV3LT5mVmlld1JlZiksIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZyZWN0KTsKICAgICAgICAg
ICAgIAotLy8gICAgICAgICAgICBwcmludGYoICJVcGRhdGUgcmVnaW9uIGlzIG5vbi1lbXB0eVxu
IiApOworLy8gICAgICAgICAgICBwcmludGYoIlVwZGF0ZSByZWdpb24gaXMgbm9uLWVtcHR5XG4i
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCBvdXJSZ24gKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIFJlY3QJCXJlY3Q7Ci0gICAgICAgICAgICAgICAgR3JhZlB0cgkJ
c2F2ZVBvcnQsIHBvcnQ7Ci0gICAgICAgICAgICAgICAgUG9pbnQJCW9mZnNldCA9IHsgMCwgMCB9
OworICAgICAgICAgICAgaWYgKG91clJnbikgeworICAgICAgICAgICAgICAgIFJlY3QgcmVjdDsK
KyAgICAgICAgICAgICAgICBHcmFmUHRyIHNhdmVQb3J0LCBwb3J0OworICAgICAgICAgICAgICAg
IFBvaW50IG9mZnNldCA9IHsgMCwgMCB9OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHBvcnQgPSBHZXRXaW5kb3dQb3J0KCBHZXRDb250cm9sT3duZXIoIHZpZXctPmZWaWV3UmVm
ICkgKTsKKyAgICAgICAgICAgICAgICBwb3J0ID0gR2V0V2luZG93UG9ydChHZXRDb250cm9sT3du
ZXIodmlldy0+ZlZpZXdSZWYpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBH
ZXRQb3J0KCAmc2F2ZVBvcnQgKTsKLSAgICAgICAgICAgICAgICBTZXRQb3J0KCBwb3J0ICk7Cisg
ICAgICAgICAgICAgICAgR2V0UG9ydCgmc2F2ZVBvcnQpOworICAgICAgICAgICAgICAgIFNldFBv
cnQocG9ydCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR2xvYmFsVG9Mb2Nh
bCggJm9mZnNldCApOwotICAgICAgICAgICAgICAgIE9mZnNldFJnbiggcmVnaW9uLCBvZmZzZXQu
aCwgb2Zmc2V0LnYgKTsKKyAgICAgICAgICAgICAgICBHbG9iYWxUb0xvY2FsKCZvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIE9mZnNldFJnbihyZWdpb24sIG9mZnNldC5oLCBvZmZzZXQudik7CiAK
LSAgICAgICAgICAgICAgICBHZXRDb250cm9sQm91bmRzKCB2aWV3LT5mVmlld1JlZiwgJnJlY3Qg
KTsKLSAgICAgICAgICAgICAgICBSZWN0UmduKCBvdXJSZ24sICZyZWN0ICk7CisgICAgICAgICAg
ICAgICAgR2V0Q29udHJvbEJvdW5kcyh2aWV3LT5mVmlld1JlZiwgJnJlY3QpOworICAgICAgICAg
ICAgICAgIFJlY3RSZ24ob3VyUmduLCAmcmVjdCk7CiAgICAgICAgICAgICAgICAgCi0vLyAgICAg
ICAgICAgICAgICBwcmludGYoICJvdXIgY29udHJvbCBpcyBhdCAlZCAlZCAlZCAlZFxuIiwKLS8v
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVjdC5ib3R0b20s
IHJlY3QucmlnaHQgKTsKKy8vICAgICAgICAgICAgICAgIHByaW50Zigib3VyIGNvbnRyb2wgaXMg
YXQgJWQgJWQgJWQgJWRcbiIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wLCBy
ZWN0LmxlZnQsIHJlY3QuYm90dG9tLCByZWN0LnJpZ2h0KTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBHZXRSZWdpb25Cb3VuZHMoIHJlZ2lvbiwgJnJlY3QgKTsKLS8vICAgICAg
ICAgICAgICAgIHByaW50ZiggInJlZ2lvbiBpcyBhdCAlZCAlZCAlZCAlZFxuIiwKLS8vICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVjdC5ib3R0b20sIHJlY3Qu
cmlnaHQgKTsKKyAgICAgICAgICAgICAgICBHZXRSZWdpb25Cb3VuZHMocmVnaW9uLCAmcmVjdCk7
CisvLyAgICAgICAgICAgICAgICBwcmludGYoInJlZ2lvbiBpcyBhdCAlZCAlZCAlZCAlZFxuIiwK
Ky8vICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVjdC5ib3R0
b20sIHJlY3QucmlnaHQpOwogCi0gICAgICAgICAgICAgICAgU2VjdFJnbiggb3VyUmduLCByZWdp
b24sIG91clJnbiApOworICAgICAgICAgICAgICAgIFNlY3RSZ24ob3VyUmduLCByZWdpb24sIG91
clJnbik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR2V0UmVnaW9uQm91bmRz
KCBvdXJSZ24sICZyZWN0ICk7Ci0vLyAgICAgICAgICAgICAgICBwcmludGYoICJpbnRlcnNlY3Rp
b24gaXMgICVkICVkICVkICVkXG4iLAotLy8gICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9w
LCByZWN0LmxlZnQsIHJlY3QuYm90dG9tLCByZWN0LnJpZ2h0ICk7Ci0gICAgICAgICAgICAgICAg
aWYgKCAhRW1wdHlSZ24oIG91clJnbiApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIFJnbkhhbmRsZQlzYXZlVmlzID0gTmV3UmduKCk7CisgICAgICAgICAgICAgICAg
R2V0UmVnaW9uQm91bmRzKG91clJnbiwgJnJlY3QpOworLy8gICAgICAgICAgICAgICAgcHJpbnRm
KCJpbnRlcnNlY3Rpb24gaXMgICVkICVkICVkICVkXG4iLAorLy8gICAgICAgICAgICAgICAgICAg
ICAgIHJlY3QudG9wLCByZWN0LmxlZnQsIHJlY3QuYm90dG9tLCByZWN0LnJpZ2h0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIUVtcHR5UmduKG91clJnbikpIHsKKyAgICAgICAgICAgICAgICAgICAg
UmduSGFuZGxlIHNhdmVWaXMgPSBOZXdSZ24oKTsKICAgICAgICAgICAgICAgICAgICAgCi0vLyAg
ICAgICAgICAgICAgICAgICAgcHJpbnRmKCAibG9va3MgbGlrZSB3ZSBzaG91bGQgZHJhd1xuIiAp
OworLy8gICAgICAgICAgICAgICAgICAgIHByaW50ZigibG9va3MgbGlrZSB3ZSBzaG91bGQgZHJh
d1xuIik7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzYXZlVmlzICkKLSAgICAgICAgICAg
ICAgICAgICAgewotLy8gICAgICAgICAgICAgICAgICAgICAgICBSR0JDb2xvcglrUmVkQ29sb3Ig
PSB7IDB4ZmZmZiwgMCwgMCB9OworICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZVZpcykgewor
Ly8gICAgICAgICAgICAgICAgICAgICAgICBSR0JDb2xvciAgICBrUmVkQ29sb3IgPSB7IDB4ZmZm
ZiwgMCwgMCB9OwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBHZXRQb3J0VmlzaWJsZVJlZ2lvbiggR2V0V2luZG93UG9ydCggR2V0Q29udHJvbE93bmVy
KCB2aWV3LT5mVmlld1JlZiApICksIHNhdmVWaXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFNldFBvcnRWaXNpYmxlUmVnaW9uKCBHZXRXaW5kb3dQb3J0KCBHZXRDb250cm9sT3duZXIoIHZp
ZXctPmZWaWV3UmVmICkgKSwgb3VyUmduICk7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRQ
b3J0VmlzaWJsZVJlZ2lvbihHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcih2aWV3LT5mVmll
d1JlZikpLCBzYXZlVmlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldFBvcnRWaXNpYmxl
UmVnaW9uKEdldFdpbmRvd1BvcnQoR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSksIG91
clJnbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLS8vICAgICAgICAgICAgICAgICAgICAg
ICAgUkdCRm9yZUNvbG9yKCAma1JlZENvbG9yICk7Ci0vLyAgICAgICAgICAgICAgICAgICAgICAg
IFBhaW50UmduKCBvdXJSZ24gKTsKLS8vICAgICAgICAgICAgICAgICAgICAgICAgUURGbHVzaFBv
cnRCdWZmZXIoIHBvcnQsIE5VTEwgKTsKLS8vICAgICAgICAgICAgICAgICAgICAgICAgRGVsYXko
IDE1LCBOVUxMICk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFJHQkZvcmVDb2xvcigma1Jl
ZENvbG9yKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRSZ24ob3VyUmduKTsKKy8v
ICAgICAgICAgICAgICAgICAgICAgICAgUURGbHVzaFBvcnRCdWZmZXIocG9ydCwgTlVMTCk7Cisv
LyAgICAgICAgICAgICAgICAgICAgICAgIERlbGF5KDE1LCBOVUxMKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgRHJhdzFDb250cm9sKCB2aWV3LT5mVmlld1JlZiApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsaWRXaW5kb3dSZ24oIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdS
ZWYgKSwgb3VyUmduICk7CisgICAgICAgICAgICAgICAgICAgICAgICBEcmF3MUNvbnRyb2wodmll
dy0+ZlZpZXdSZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRXaW5kb3dSZ24oR2V0
Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSwgb3VyUmduKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgU2V0UG9ydFZpc2libGVSZWdpb24oIEdl
dFdpbmRvd1BvcnQoIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSApLCBzYXZlVmlz
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlUmduKCBzYXZlVmlzICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBTZXRQb3J0VmlzaWJsZVJlZ2lvbihHZXRXaW5kb3dQb3J0KEdl
dENvbnRyb2xPd25lcih2aWV3LT5mVmlld1JlZikpLCBzYXZlVmlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIERpc3Bvc2VSZ24oc2F2ZVZpcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBTZXRQb3J0KCBzYXZlUG9ydCApOwor
ICAgICAgICAgICAgICAgIFNldFBvcnQoc2F2ZVBvcnQpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIERpc3Bvc2VSZ24oIG91clJnbiApOworICAgICAgICAgICAgICAgIERpc3Bv
c2VSZ24ob3VyUmduKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgRGlzcG9zZVJnbiggcmVnaW9uICk7CisgICAgICAgIERpc3Bvc2VSZ24ocmVnaW9uKTsKICAg
ICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321983</attachid>
            <date>2017-09-27 11:34:50 -0700</date>
            <delta_ts>2017-09-28 08:57:09 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177551-20170927113449.patch</filename>
            <type>text/plain</type>
            <size>129776</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjU1OCkKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDk0IEBACisyMDE3LTA5LTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
KworICAgICAgICBCdWlsZCBmaXggZm9yIEhpZ2ggU2llcnJhIDMyIGJpdCBNYWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU1MQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzQ2OTAyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFBy
b3NrdXJ5YWtvdi4KKworICAgICAgICBTb21lIGFzc2VydGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQg
ZnJvbSB0aGUgU0RLLiBSZXBsYWNlIHRoZXNlIGFzc2VydGlvbnMgd2l0aCBlcXVpdmFsZW50Cisg
ICAgICAgIFdURiBhc3NlcnQgY29kZS4gIFNpbmNlIHRoZSBmaWxlcyBpbiB0aGlzIHBhdGNoIGFy
ZSB1c2luZyB0YWJzLCBzb21lIHN0eWxlIGNoYW5nZXMgd2VyZQorICAgICAgICBhbHNvIG1hZGUu
CisKKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5tbToKKyAgICAgICAgKCtb
Q2FyYm9uV2luZG93QWRhcHRlciBmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazpdKToKKyAgICAg
ICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBpbml0V2l0aENvbnRlbnRSZWN0OnN0eWxlTWFzazpi
YWNraW5nOmRlZmVyOl0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGluaXRXaXRo
Q2FyYm9uV2luZG93UmVmOnRha2luZ093bmVyc2hpcDpkaXNhYmxlT3JkZXJpbmc6Y2FyYm9uOl0p
OgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIHNldFZpZXdzTmVlZERpc3BsYXk6XSk6
CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6
dGFraW5nT3duZXJzaGlwOl0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGRlYWxs
b2NdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciB3aW5kb3dSZWZdKToKKyAgICAg
ICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfaGFzV2luZG93UmVmXSk6CisgICAgICAgICgtW0Nh
cmJvbldpbmRvd0FkYXB0ZXIgX21hbmFnZXNXaW5kb3dSZWZdKToKKyAgICAgICAgKC1bQ2FyYm9u
V2luZG93QWRhcHRlciBfcmVtb3ZlV2luZG93UmVmXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRv
d0FkYXB0ZXIgX2NhcmJvbldpbmRvd0NsYXNzXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0Fk
YXB0ZXIgcmVjb25jaWxlVG9DYXJib25XaW5kb3dCb3VuZHNdKToKKyAgICAgICAgKC1bQ2FyYm9u
V2luZG93QWRhcHRlciBzZW5kU3VwZXJFdmVudDpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93
QWRhcHRlciByZWxpbnF1aXNoRm9jdXNdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRl
ciBfY2FuY2VsS2V5Ol0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9jb21tb25B
d2FrZV0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9kZXN0cm95UmVhbFdpbmRv
dzpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfb2xkUGxhY2VXaW5kb3c6XSk6
CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX3Rlcm1XaW5kb3dJZk93bmVyXSk6Cisg
ICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX3dpbmRvd01vdmVkVG9SZWN0Ol0pOgorICAg
ICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGNvbnN0cmFpbkZyYW1lUmVjdDp0b1NjcmVlbjpd
KToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZWxlY3RLZXlWaWV3Rm9sbG93aW5n
VmlldzpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZWxlY3RLZXlWaWV3UHJl
Y2VkaW5nVmlldzpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBjYW5CZWNvbWVL
ZXlXaW5kb3ddKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBjYW5CZWNvbWVNYWlu
V2luZG93XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgZW5jb2RlV2l0aENvZGVy
Ol0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGluaXRXaXRoQ29kZXI6XSk6Cisg
ICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgc2V0Q29udGVudFZpZXc6XSk6CisgICAgICAg
ICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgd29ya3NXaGVuTW9kYWxdKToKKyAgICAgICAgKC1bQ2Fy
Ym9uV2luZG93QWRhcHRlciBfc2V0TW9kYWxXaW5kb3dMZXZlbF0pOgorICAgICAgICAoLVtDYXJi
b25XaW5kb3dBZGFwdGVyIF9jbGVhck1vZGFsV2luZG93TGV2ZWxdKToKKyAgICAgICAgKC1bQ2Fy
Ym9uV2luZG93QWRhcHRlciBjYXJib25ISUNvbW1hbmRJREZyb21BY3Rpb25TZWxlY3RvcjpdKToK
KyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZW5kQ2FyYm9uUHJvY2Vzc0hJQ29tbWFu
ZEV2ZW50Ol0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIHNlbmRDYXJib25VcGRh
dGVISUNvbW1hbmRTdGF0dXNFdmVudDp3aXRoTWVudVJlZjphbmRNZW51SXRlbUluZGV4Ol0pOgor
ICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9oYW5kbGVSb290Qm91bmRzQ2hhbmdlZF0p
OgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9oYW5kbGVDb250ZW50Qm91bmRzQ2hh
bmdlZF0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9oYW5kbGVDYXJib25FdmVu
dDpjYWxsUmVmOl0pOgorICAgICAgICAoTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudCk6CisgICAg
ICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX3JlYWxseURvT3JkZXJXaW5kb3c6cmVsYXRpdmVU
bzpmaW5kS2V5OmZvckNvdW50ZXI6Zm9yY2U6aXNNb2RhbDpdKToKKyAgICAgICAgKC1bQ2FyYm9u
V2luZG93QWRhcHRlciBfZ3Jvd0JveFJlY3RdKToKKyAgICAgICAgKiBDYXJib24vSElXZWJWaWV3
Lm1tOgorICAgICAgICAoSElXZWJWaWV3R2V0V2ViVmlldyk6CisgICAgICAgIChISVdlYlZpZXdD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChISVdlYlZpZXdEZXN0cnVjdG9yKToKKyAgICAgICAgKEhJ
V2ViVmlld1JlZ2lzdGVyQ2xhc3MpOgorICAgICAgICAoR2V0QmVoYXZpb3JzKToKKyAgICAgICAg
KERyYXcpOgorICAgICAgICAoSGl0VGVzdCk6CisgICAgICAgIChHZXRSZWdpb24pOgorICAgICAg
ICAoR2V0V2luZG93UmVmKToKKyAgICAgICAgKENyZWF0ZU5TRXZlbnRBZG9wdGluZ0NHRXZlbnQp
OgorICAgICAgICAoQ29weUV2ZW50Q0dFdmVudCk6CisgICAgICAgIChDcmVhdGVOU0V2ZW50V2l0
aENhcmJvbkNsaWNrRXZlbnQpOgorICAgICAgICAoQ2xpY2spOgorICAgICAgICAoQ3JlYXRlTlNF
dmVudFdpdGhDYXJib25FdmVudCk6CisgICAgICAgIChNb3VzZVVwKToKKyAgICAgICAgKENyZWF0
ZU5TRXZlbnRXaXRoQ2FyYm9uTW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoTW91c2VNb3ZlZCk6
CisgICAgICAgIChNb3VzZURyYWdnZWQpOgorICAgICAgICAoTW91c2VXaGVlbE1vdmVkKToKKyAg
ICAgICAgKENvbnRleHRNZW51Q2xpY2spOgorICAgICAgICAoR2V0S2luZCk6CisgICAgICAgIChC
b3VuZHNDaGFuZ2VkKToKKyAgICAgICAgKE93bmluZ1dpbmRvd0NoYW5nZWQpOgorICAgICAgICAo
V2luZG93SGFuZGxlcik6CisgICAgICAgIChTeW5jRnJhbWUpOgorICAgICAgICAoU2V0Rm9jdXNQ
YXJ0KToKKyAgICAgICAgKEFkdmFuY2VGb2N1cyk6CisgICAgICAgIChSZWxpbnF1aXNoRm9jdXMp
OgorICAgICAgICAoQWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFByb2Nlc3NDb21tYW5k
KToKKyAgICAgICAgKFVwZGF0ZUNvbW1hbmRTdGF0dXMpOgorICAgICAgICAoX05TU2VsZWN0b3JG
b3JISUNvbW1hbmQpOgorICAgICAgICAoSElXZWJWaWV3RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KFN0YXJ0VXBkYXRlT2JzZXJ2ZXIpOgorICAgICAgICAoU3RvcFVwZGF0ZU9ic2VydmVyKToKKyAg
ICAgICAgKFVwZGF0ZU9ic2VydmVyKToKKwogMjAxNy0wOS0yNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgUG9saWN5QWN0aW9uIGFu
IGVuY29kYWJsZSBlbnVtIGNsYXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJi
b24vQ2FyYm9uV2luZG93QWRhcHRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5tbQkocmV2aXNpb24gMjIyNTUzKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIubW0J
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICNpbXBvcnQgPHBhbC9zcGkvbWFjL0hJ
VG9vbGJveFNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNXaW5kb3dTUEkuaD4KICNpbXBv
cnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5o
PgogCkBAIC0xMTMsNyArMTE0LDggQEAgc3RhdGljIE9TU3RhdHVzIE5TQ2FyYm9uV2luZG93SGFu
ZGxlRXZlbgogCiAKIC8vIFJldHVybiBhbiBhcHByb3ByaWF0ZSB3aW5kb3cgZnJhbWUgY2xhc3Mu
Ci0rIChDbGFzcylmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazoodW5zaWduZWQgaW50KXN0eWxl
IHsKKysgKENsYXNzKWZyYW1lVmlld0NsYXNzRm9yU3R5bGVNYXNrOih1bnNpZ25lZClzdHlsZQor
ewogCiAgICAgLy8gVGhlcmUncyBvbmx5IG9uZSBhcHByb3ByaWF0ZSB3aW5kb3cgc3R5bGUsIGFu
ZCBvbmx5IG9uZSBhcHByb3ByaWF0ZSB3aW5kb3cgZnJhbWUgY2xhc3MuCiAgICAgYXNzZXJ0KHN0
eWxlICYgX05TQ2FyYm9uV2luZG93TWFzayk7CkBAIC0xMjMsMTYgKzEyNSwxOCBAQCArIChDbGFz
cylmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazoodW5zCiAKIAogLy8gT3ZlcnJpZGluZyBvZiB0
aGUgcGFyZW50IGNsYXNzJyBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBqdXN0IGZvciBzYWZldHkn
cyBzYWtlLgotLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0
eWxlTWFzazoodW5zaWduZWQgaW50KXN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSli
dWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcgeworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVj
dDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazoodW5zaWduZWQpc3R5bGUgYmFja2luZzoo
TlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworewogCiAg
ICAgLy8gRG8gdGhlIHN0YW5kYXJkIENvY29hIHRoaW5nLgogICAgIHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6c3R5bGUgYmFja2luZzpidWZm
ZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlmIChzZWxmPT1uaWwpIHJldHVybiBuaWw7Cisg
ICAgaWYgKHNlbGYgPT0gbmlsKQorICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gU2ltcGxl
LgotICAgIF93aW5kb3dSZWYgPSBOVUxMOworICAgIF93aW5kb3dSZWYgPSBudWxscHRyOwogICAg
IF93aW5kb3dSZWZJc093bmVkID0gTk87Ci0gICAgX2V2ZW50SGFuZGxlciA9IE5VTEw7CisgICAg
X2V2ZW50SGFuZGxlciA9IG51bGxwdHI7CiAgICAgCiAgICAgLy8gRG9uZS4KICAgICByZXR1cm4g
c2VsZjsKQEAgLTE0MCw3ICsxNDQsOCBAQCAtIChpZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1Jl
Y3QpY29udGVuCiB9CiAKIC8vIEdpdmVuIGEgcmVmZXJlbmNlIHRvIGEgQ2FyYm9uIHdpbmRvdyB0
aGF0IGlzIHRvIGJlIGVuY2Fwc3VsYXRlZCwgYW4gaW5kaWNhdG9yIG9mIHdoZXRoZXIgb3Igbm90
IHRoaXMgb2JqZWN0IHNob3VsZCB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciBkaXNwb3Npbmcgb2Yg
dGhlIENhcmJvbiB3aW5kb3csIGFuZCBhbiBpbmRpY2F0b3Igb2Ygd2hldGhlciB0byBkaXNhYmxl
IENhcmJvbiB3aW5kb3cgb3JkZXJpbmcsIGluaXRpYWxpemUuICBUaGlzIGlzIHRoZSBjbGFzcycg
ZGVzaWduYXRlZCBpbml0aWFsaXplci4KLS0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihX
aW5kb3dSZWYpaW5XaW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNP
d25lZCBkaXNhYmxlT3JkZXJpbmc6KEJPT0wpaW5EaXNhYmxlT3JkZXJpbmcgY2FyYm9uOihCT09M
KWluQ2FyYm9uIHsKKy0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYpaW5X
aW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNPd25lZCBkaXNhYmxl
T3JkZXJpbmc6KEJPT0wpaW5EaXNhYmxlT3JkZXJpbmcgY2FyYm9uOihCT09MKWluQ2FyYm9uCit7
CiAKICAgICBOU0JhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZTsKICAgICBDYXJib25X
aW5kb3dDb250ZW50VmlldyAqY2FyYm9uV2luZG93Q29udGVudFZpZXc7CkBAIC0xNTEsMTQgKzE1
NiwxNCBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAgICAgdW5z
aWduZWQgaW50IHN0eWxlTWFzazsKICAgICB2b2lkICpuYXRpdmVXaW5kb3c7CiAgICAgV2luZG93
TW9kYWxpdHkgd2luZG93TW9kYWxpdHk7Ci0JQ29udHJvbFJlZgkJY29udGVudFZpZXc7Ci0JCisg
ICAgQ29udHJvbFJlZiBjb250ZW50VmlldzsKKwogICAgIC8vIFNpbXBsZS4KICAgICAvLyBJdCdz
IHZlcnkgd2VhayB0byBoYXZlIHRvIHB1dCB0aGlzIGJlZm9yZSB0aGUgaW52b2NhdGlvbiBvZiBb
c3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDouLi5dLCBidXQgLXNldENvbnRlbnRWaWV3OiBpcyBp
bnZva2VkIGZyb20gd2l0aGluIHRoYXQgaW5pdGlhbGl6ZXIuICBJdCB0dXJucyBvdXQgdGhhdCB0
aGUgY29tbW9uIGFkbW9uaXRpb24gYWJvdXQgbm90IGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMg
ZnJvbSB3aXRoaW4gQysrIGNvbnN0cnVjdG9ycyBtYWtlcyBzZW5zZSBpbiBPYmplY3RpdmUtQyB0
b28uICBNLlAuIE5vdGljZSAtIDEwLzEwLzAwCiAgICAgX3dpbmRvd1JlZiA9IGluV2luZG93UmVm
OwogICAgIC8vX2F1eGlsaWFyeVN0b3JhZ2UtPl93aW5kb3dSZWYgPSBpbldpbmRvd1JlZjsKICAg
ICBfd2luZG93UmVmSXNPd25lZCA9IGluV2luZG93UmVmSXNPd25lZDsKLQlfY2FyYm9uID0gaW5D
YXJib247CisgICAgX2NhcmJvbiA9IGluQ2FyYm9uOwogCiAgICAgLy8gRmluZCBvdXQgdGhlIHdp
bmRvdydzIENvcmVHcmFwaGljcyB3aW5kb3cgcmVmZXJlbmNlLgogICAgIG5hdGl2ZVdpbmRvdyA9
ICh2b2lkKilHZXROYXRpdmVXaW5kb3dGcm9tV2luZG93UmVmKGluV2luZG93UmVmKTsKQEAgLTE3
MSw5ICsxNzYsOSBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAK
ICAgICAvLyBGaWd1cmUgb3V0IHRoZSB3aW5kb3cncyBiYWNraW5nIHN0b3JlIHR5cGUuCiAgICAg
Ly8gQXQgb25lIHRpbWUsIHRoaXMgaGFkIGNvZGUgc3RvbGVuIGZyb20gQ3JlYXRlUGxhdGZvcm1X
aW5kb3cgaW4gSElUb29sYm94L1dpbmRvd3MvUGxhdGZvcm0vQ0dTUGxhdGZvcm0uYwotCS8vIEJ1
dCBub3cgdGhlIG5vbi1yZXRhaW5lZCB3aW5kb3cgY2xhc3MgaXMgYSBDYXJib24gc2VjcmV0IHRo
YXQncyBub3QgZXZlbiBpbgotCS8vIFdpbmRvd3NQcml2Lmg7IG1heWJlIHdlJ2xsIGhhdmUgdG8g
cmV2aXNpdCB0aGlzIGlmIHNvbWVvbmUgbmVlZHMgdG8gdXNlIFdlYktpdAotCS8vIGluIGEgbm9u
LXJldGFpbmVkIHdpbmRvdy4KKyAgICAvLyBCdXQgbm93IHRoZSBub24tcmV0YWluZWQgd2luZG93
IGNsYXNzIGlzIGEgQ2FyYm9uIHNlY3JldCB0aGF0J3Mgbm90IGV2ZW4gaW4KKyAgICAvLyBXaW5k
b3dzUHJpdi5oOyBtYXliZSB3ZSdsbCBoYXZlIHRvIHJldmlzaXQgdGhpcyBpZiBzb21lb25lIG5l
ZWRzIHRvIHVzZSBXZWJLaXQKKyAgICAvLyBpbiBhIG5vbi1yZXRhaW5lZCB3aW5kb3cuCiAjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgYmFja2luZ1N0b3JlVHlwZSA9IE5T
QmFja2luZ1N0b3JlUmV0YWluZWQ7CkBAIC0xOTAsNyArMTk1LDcgQEAgLSAoaWQpaW5pdFdpdGhD
YXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZgogICAgIGlmICh3aW5kb3dGZWF0dXJlcyAmIGtXaW5k
b3dIYXNUaXRsZUJhcikKICAgICAgICAgc3R5bGVNYXNrIHw9IE5TV2luZG93U3R5bGVNYXNrVGl0
bGVkOwogCi0gICAgb3NTdGF0dXMgPSBHZXRXaW5kb3dNb2RhbGl0eShfd2luZG93UmVmLCAmd2lu
ZG93TW9kYWxpdHksIE5VTEwpOworICAgIG9zU3RhdHVzID0gR2V0V2luZG93TW9kYWxpdHkoX3dp
bmRvd1JlZiwgJndpbmRvd01vZGFsaXR5LCBudWxscHRyKTsKICAgICBpZiAob3NTdGF0dXMgIT0g
bm9FcnIpIHsKICAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBnZXQgd2luZG93IG1vZGFsaXR5OiBl
cnJvcj0lbGQiLCBvc1N0YXR1cyk7CiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0yMDAsNyArMjA1
LDcgQEAgLSAoaWQpaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZgogICAgIGNhcmJv
bldpbmRvd0NvbnRlbnRWaWV3ID0gW1tbQ2FyYm9uV2luZG93Q29udGVudFZpZXcgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKIAogICAgIC8vIERvIHNvbWUgc3RhbmRhcmQgQ29jb2EgaW5pdGlh
bGl6YXRpb24uICBUaGUgZGVmZXIgYXJndW1lbnQncyB2YWx1ZSBpcyBZRVMgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IC1bTlNXaW5kb3cgX2NvbW1vbkF3YWtlXSB0byBnZXQgY2FsbGVkLiAgSXQgZG9l
c24ndCBhcHBlYXIgdGhhdCBhbnkgcmVsZXZhbnQgTlNXaW5kb3cgY29kZSBjaGVja3MgX3dGbGFn
cy5kZWZlcnJlZCwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCB0aGUgbGll
LgotICAgIHNlbGYgPSAoQ2FyYm9uV2luZG93QWRhcHRlciopW3N1cGVyIF9pbml0Q29udGVudDpO
VUxMIHN0eWxlTWFzazpzdHlsZU1hc2sgYmFja2luZzpiYWNraW5nU3RvcmVUeXBlIGRlZmVyOllF
UyBjb250ZW50VmlldzpjYXJib25XaW5kb3dDb250ZW50Vmlld107CisgICAgc2VsZiA9IChDYXJi
b25XaW5kb3dBZGFwdGVyKilbc3VwZXIgX2luaXRDb250ZW50Om51bGxwdHIgc3R5bGVNYXNrOnN0
eWxlTWFzayBiYWNraW5nOmJhY2tpbmdTdG9yZVR5cGUgZGVmZXI6WUVTIGNvbnRlbnRWaWV3OmNh
cmJvbldpbmRvd0NvbnRlbnRWaWV3XTsKICAgICBpZiAoIXNlbGYpIHJldHVybiBuaWw7CiAgICAg
YXNzZXJ0KF9jb250ZW50Vmlldyk7CiAKQEAgLTIxNiwxMSArMjIxLDExIEBAIC0gKGlkKWluaXRX
aXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYKIAogICAgIC8vIEluc3RhbGwgYW4gZXZlbnQg
aGFuZGxlciBmb3IgdGhlIENhcmJvbiB3aW5kb3cgZXZlbnRzIGluIHdoaWNoIHdlJ3JlIGludGVy
ZXN0ZWQuCiAgICAgY29uc3QgRXZlbnRUeXBlU3BlYyBrRXZlbnRzW10gPSB7Ci0gICAgICAgICAg
ICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dBY3RpdmF0ZWQgfSwKLSAgICAgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkIH0sCi0gICAg
ICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dCb3VuZHNDaGFuZ2VkIH0s
Ci0gICAgICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dTaG93biB9LAot
ICAgICAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93SGlkZGVuIH0KKyAg
ICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93QWN0aXZhdGVkIH0sCisgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkIH0sCisgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0JvdW5kc0NoYW5nZWQgfSwKKyAg
ICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93U2hvd24gfSwKKyAgICAgICAg
eyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93SGlkZGVuIH0KICAgICB9OwogICAgIAog
ICAgIGNvbnN0IEV2ZW50VHlwZVNwZWMga0NvbnRyb2xCb3VuZHNDaGFuZ2VkRXZlbnQgPSB7IGtF
dmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQgfTsKQEAgLTI0Myw3
ICsyNDgsNyBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAgICAg
ICAgICAgICBbc2VsZiByZWxlYXNlXTsKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQot
CQorCiAgICAgLy8gUHV0IGEgcG9pbnRlciB0byB0aGlzIENvY29hIE5TV2luZG93IGluIGEgQ2Fy
Ym9uIHdpbmRvdyBwcm9wZXJ0eSB0YWcuCiAgICAgLy8gUmlnaHQgbm93LCB0aGlzIGlzIGp1c3Qg
dXNlZCBieSBOU1ZpZXdDYXJib25Db250cm9sLiAgTS5QLiBOb3RpY2UgLSAxMC85LzAwCiAgICAg
d2luZG93QXNQcm9wZXJ0eSA9IHNlbGY7CkBAIC0yNjQsMjAgKzI2OSwyMCBAQCAtIChpZClpbml0
V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAKIH0KIAotLSAodm9pZClzZXRWaWV3c05l
ZWREaXNwbGF5OihCT09MKXdlbGxEb1RoZXkgewotCS8vIE1ha2Ugc3VyZSB3ZSBjYW4gZmx1c2gg
YW55dGhpbmcgdGhhdCBuZWVkcyBpdC4KKy0gKHZvaWQpc2V0Vmlld3NOZWVkRGlzcGxheTooQk9P
TCl3ZWxsRG9UaGV5Cit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiBmbHVzaCBhbnl0aGluZyB0
aGF0IG5lZWRzIGl0LgogCi0JLy8gV2UgbmVlZCB0byBzeW5jIHRoZSBjb250ZXh0IGhlcmUuIEkg
d2FzIGhvcGluZyBJIGRpZG4ndCBuZWVkIHRvIGRvIHRoaXMsCi0JLy8gYnV0IGFwcGFyZW50bHkg
d2hlbiBzY3JvbGxpbmcsIHRoZSBBcHBLaXQgdmlldyBzeXN0ZW0gZHJhd3MgZGlyZWN0bHkuCi0J
Ly8gV2hlbiB0aGlzIG9jY3VycywgSSBjYW5ub3QgaW50ZXJjZXB0IGl0IHRvIG1ha2UgaXQgZHJh
dyBpbiBteSBISVZpZXcKLQkvLyBjb250ZXh0LiBXaGF0IGVuZHMgdXAgaGFwcGVuaW5nIGlzIHRo
YXQgaXQgZHJhd3MsIGJ1dCBub3RoaW5nIGV2ZXIKLQkvLyBmbHVzaGVzIGl0LgotCi0JaWYgKCBb
c2VsZiB3aW5kb3dOdW1iZXJdICE9IC0xICkKLQl7Ci0JCUNHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSAoQ0dDb250ZXh0UmVmKVtbc2VsZiBfdGhyZWFkQ29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKLQkJ
Q0dDb250ZXh0U3luY2hyb25pemUoIGNnQ29udGV4dCApOwotCX0KKyAgICAvLyBXZSBuZWVkIHRv
IHN5bmMgdGhlIGNvbnRleHQgaGVyZS4gSSB3YXMgaG9waW5nIEkgZGlkbid0IG5lZWQgdG8gZG8g
dGhpcywKKyAgICAvLyBidXQgYXBwYXJlbnRseSB3aGVuIHNjcm9sbGluZywgdGhlIEFwcEtpdCB2
aWV3IHN5c3RlbSBkcmF3cyBkaXJlY3RseS4KKyAgICAvLyBXaGVuIHRoaXMgb2NjdXJzLCBJIGNh
bm5vdCBpbnRlcmNlcHQgaXQgdG8gbWFrZSBpdCBkcmF3IGluIG15IEhJVmlldworICAgIC8vIGNv
bnRleHQuIFdoYXQgZW5kcyB1cCBoYXBwZW5pbmcgaXMgdGhhdCBpdCBkcmF3cywgYnV0IG5vdGhp
bmcgZXZlcgorICAgIC8vIGZsdXNoZXMgaXQuCisKKyAgICBpZiAoW3NlbGYgd2luZG93TnVtYmVy
XSAhPSAtMSkgeworICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gKENHQ29udGV4dFJl
ZilbW3NlbGYgX3RocmVhZENvbnRleHRdIGdyYXBoaWNzUG9ydF07CisgICAgICAgIENHQ29udGV4
dFN5bmNocm9uaXplKGNnQ29udGV4dCk7CisgICAgfQogfQogCiArICh2b2lkKWluaXRpYWxpemUK
QEAgLTI4OCwxNCArMjkzLDE2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogfQogCiAvLyBHaXZlbiBh
IHJlZmVyZW5jZSB0byBhIENhcmJvbiB3aW5kb3cgdGhhdCBpcyB0byBiZSBlbmNhcHN1bGF0ZWQs
IGFuZCBhbiBpbmRpY2F0b3Igb2Ygd2hldGhlciBvciBub3QgdGhpcyBvYmplY3Qgc2hvdWxkIHRh
a2UgcmVzcG9uc2liaWxpdHkgZm9yIGRpc3Bvc2luZyBvZiB0aGUgQ2FyYm9uIHdpbmRvdywgaW5p
dGlhbGl6ZS4KLS0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYpaW5XaW5k
b3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNPd25lZCB7CistIChpZClp
bml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVy
c2hpcDooQk9PTClpbldpbmRvd1JlZklzT3duZWQKK3sKICAgICAvLyBmb3Igbm93LCBzZXQgZGlz
YWJsZU9yZGVyaW5nIHRvIFlFUyBiZWNhdXNlIHRoYXQgaXMgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5n
IGFuZCBpcyB0aGVyZWZvcmUgbG93ZXIgcmlzay4gSG93ZXZlciwgSSB0aGluayBpdCB3b3VsZCBi
ZSBjb3JyZWN0IHRvIHNldCBpdCB0byBOTy4KICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhDYXJi
b25XaW5kb3dSZWY6aW5XaW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOmluV2luZG93UmVmSXNPd25l
ZCBkaXNhYmxlT3JkZXJpbmc6WUVTIGNhcmJvbjpOT107CiB9CiAKIAogLy8gQ2xlYW4gdXAuCi0t
ICh2b2lkKWRlYWxsb2MgeworLSAodm9pZClkZWFsbG9jCit7CiAgICAgaWYgKFdlYkNvcmVPYmpD
U2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtDYXJib25XaW5kb3dBZGFwdGVyIGNsYXNz
XSwgc2VsZikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzA3LDcgKzMxNCw4IEBAIC0gKHZvaWQp
ZGVhbGxvYyB7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi0tIChXaW5kb3dSZWYpd2luZG93
UmVmIHsKKy0gKFdpbmRvd1JlZil3aW5kb3dSZWYKK3sKIAogICAgIC8vIFNpbXBsZS4KICAgICBy
ZXR1cm4gX3dpbmRvd1JlZjsKQEAgLTMxNSwyNyArMzIzLDMxIEBAIC0gKFdpbmRvd1JlZil3aW5k
b3dSZWYgewogfQogCiAvLyBzaG91bGQgYWx3YXlzIGJlIFlFUywgYnV0IGNoZWNrIGluIG9yZGVy
IHRvIGF2b2lkIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiBzdXJwcmlzZXMKLS0gKEJP
T0wpX2hhc1dpbmRvd1JlZiB7Ci0gICAgcmV0dXJuIChfd2luZG93UmVmICE9IE5VTEwpOworLSAo
Qk9PTClfaGFzV2luZG93UmVmCit7CisgICAgcmV0dXJuIChfd2luZG93UmVmICE9IG51bGxwdHIp
OwogfQogCiAvLyBhbiBOU0NhcmJvbldpbmRvdyBkb2VzIG5vdCBtYW5hZ2UgdGhlIHdpbmRvd1Jl
Zi4gIFRoZSB3aW5kb3dSZWYgbWFuYWdlcyB0aGUgTlNDYXJib25XaW5kb3cKLS0gKEJPT0wpX21h
bmFnZXNXaW5kb3dSZWYgeworLSAoQk9PTClfbWFuYWdlc1dpbmRvd1JlZgorewogICAgIHJldHVy
biBOTzsKIH0KIAotLSAodm9pZClfcmVtb3ZlV2luZG93UmVmIHsKLSAgICBfd2luZG93UmVmID0g
TlVMTDsKLQkKKy0gKHZvaWQpX3JlbW92ZVdpbmRvd1JlZgoreworICAgIF93aW5kb3dSZWYgPSBu
dWxscHRyOworCiAgICAgaWYgKF9ldmVudEhhbmRsZXIpIFJlbW92ZUV2ZW50SGFuZGxlcihfZXZl
bnRIYW5kbGVyKTsKLQkKLQlfZXZlbnRIYW5kbGVyID0gTlVMTDsKKworICAgIF9ldmVudEhhbmRs
ZXIgPSBudWxscHRyOwogfQogCi0tIChXaW5kb3dDbGFzcylfY2FyYm9uV2luZG93Q2xhc3Mgewor
LSAoV2luZG93Q2xhc3MpX2NhcmJvbldpbmRvd0NsYXNzCit7CiAgICAgV2luZG93Q2xhc3Mgd2lu
ZG93Q2xhc3MgPSBrRG9jdW1lbnRXaW5kb3dDbGFzczsKICAgICBPU1N0YXR1cyBvc1N0YXR1czsK
LSAgICAKKwogICAgIGlmIChbc2VsZiBfaGFzV2luZG93UmVmXSkgewogICAgICAgICBvc1N0YXR1
cyA9IEdldFdpbmRvd0NsYXNzKFtzZWxmIHdpbmRvd1JlZl0sICZ3aW5kb3dDbGFzcyk7CiAgICAg
ICAgIGlmIChvc1N0YXR1cyAhPSBub0VycikgewpAQCAtMzQ2LDggKzM1OCw4IEBAIC0gKFdpbmRv
d0NsYXNzKV9jYXJib25XaW5kb3dDbGFzcyB7CiB9CiAKIC8vIFVwZGF0ZSB0aGlzIHdpbmRvdydz
IGZyYW1lIGFuZCBjb250ZW50IGZyYW1lIHJlY3RhbmdsZXMgdG8gbWF0Y2ggdGhlIENhcmJvbiB3
aW5kb3cncyBzdHJ1Y3R1cmUgYm91bmRzIGFuZCBjb250ZW50IGJvdW5kcyByZWN0YW5nbGVzLiAg
UmV0dXJuIHllcyBpZiB0aGUgdXBkYXRlIHdhcyByZWFsbHkgbmVjZXNzYXJ5LCBubyBvdGhlcndp
c2UuCi0tIChCT09MKXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzIHsKLQorLSAoQk9PTCly
ZWNvbmNpbGVUb0NhcmJvbldpbmRvd0JvdW5kcworewogICAgIE9TU3RhdHVzIG9zU3RhdHVzOwog
ICAgIE5TUmVjdCBuZXdDb250ZW50RnJhbWVSZWN0OwogICAgIE5TUmVjdCBuZXdXaW5kb3dGcmFt
ZVJlY3Q7CkBAIC0zNjMsOSArMzc1LDExIEBAIC0gKEJPT0wpcmVjb25jaWxlVG9DYXJib25XaW5k
b3dCb3VuZHMgewogCiAgICAgLy8gR2V0IHRoZSBDYXJib24gd2luZG93J3MgYm91bmRzLCB3aGlj
aCBhcmUgZXhwcmVzc2VkIGluIGdsb2JhbCBzY3JlZW4gY29vcmRpbmF0ZXMsIHdpdGggKDAsMCkg
YXQgdGhlIHRvcC1sZWZ0IG9mIHRoZSBtYWluIHNjcmVlbi4KICAgICBvc1N0YXR1cyA9IEdldFdp
bmRvd0JvdW5kcyhfd2luZG93UmVmLCBrV2luZG93U3RydWN0dXJlUmduLCAmd2luZG93U3RydWN0
dXJlQm91bmRzUmVjdCk7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgTlNMb2coQCJBIENhcmJv
biB3aW5kb3cncyBzdHJ1Y3R1cmUgYm91bmRzIGNvdWxkbid0IGJlIGdvdHRlbi4iKTsKKyAgICBp
ZiAob3NTdGF0dXMgIT0gbm9FcnIpCisgICAgICAgIE5TTG9nKEAiQSBDYXJib24gd2luZG93J3Mg
c3RydWN0dXJlIGJvdW5kcyBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7CiAgICAgb3NTdGF0dXMgPSBH
ZXRXaW5kb3dCb3VuZHMoX3dpbmRvd1JlZiwga1dpbmRvd0NvbnRlbnRSZ24sICZ3aW5kb3dDb250
ZW50Qm91bmRzUmVjdCk7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgTlNMb2coQCJBIENhcmJv
biB3aW5kb3cncyBjb250ZW50IGJvdW5kcyBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7CisgICAgaWYg
KG9zU3RhdHVzICE9IG5vRXJyKQorICAgICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGNv
bnRlbnQgYm91bmRzIGNvdWxkbid0IGJlIGdvdHRlbi4iKTsKIAogICAgIC8vIFNldCB0aGUgZnJh
bWUgcmVjdGFuZ2xlIG9mIHRoZSBib3JkZXIgdmlldyBhbmQgdGhpcyB3aW5kb3cgZnJvbSB0aGUg
Q2FyYm9uIHdpbmRvdydzIHN0cnVjdHVyZSByZWdpb24gYm91bmRzLgogICAgIG5ld1dpbmRvd0Zy
YW1lUmVjdC5vcmlnaW4ueCA9IHdpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3QubGVmdDsKQEAgLTM5
Niw3ICs0MTAsOCBAQCAtIChCT09MKXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzIHsKIAog
CiAvLyBIYW5kbGUgYW4gZXZlbnQganVzdCBsaWtlIGFuIE5TV2luZG93IHdvdWxkLgotLSAodm9p
ZClzZW5kU3VwZXJFdmVudDooTlNFdmVudCAqKWluRXZlbnQgeworLSAodm9pZClzZW5kU3VwZXJF
dmVudDooTlNFdmVudCAqKWluRXZlbnQKK3sKIAogICAgIC8vIEZpbHRlciBvdXQgYSBmZXcgZXZl
bnRzIHRoYXQganVzdCByZXN1bHQgaW4gY29tcGxhaW50cyBpbiB0aGUgbG9nLgogICAgIC8vIEln
bm9yZSBzb21lIHVua25vd24gZXZlbnQgdGhhdCBnZXRzIHNlbnQgd2hlbiBOU1RleHRWaWV3cyBp
biBwcmludGluZyBhY2Nlc3Nvcnkgdmlld3MgYXJlIGZvY3VzZWQuICBNLlAuIE5vdGljZSAtIDEy
LzcvMDAKQEAgLTQyNSw5ICs0NDAsOSBAQCAtICh2b2lkKXJlbGlucXVpc2hGb2N1cwogICAgIC8v
IENhcmJvbiB0aGlua3MgdGhhdCBhIGNvbnRyb2wgaGFzIHRoZSBrZXlib2FyZCBmb2N1cywKICAg
ICAvLyBvciB3ZSB3b3VsZG4ndCBiZSBiZWluZyBhc2tlZCB0byByZWxpbnF1aXNoIGZvY3VzLgog
Ci0JZmlyc3RSZXNwb25kZXIgPSBbc2VsZiBmaXJzdFJlc3BvbmRlcl07Ci0JaWYgKFtmaXJzdFJl
c3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSApewotCQkvLyBNYWtlIHRoZSB3
aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwgc28gdGhhdCBubyB2aWV3IGlzIHRoZSBrZXkgdmll
dy4KKyAgICBmaXJzdFJlc3BvbmRlciA9IFtzZWxmIGZpcnN0UmVzcG9uZGVyXTsKKyAgICBpZiAo
W2ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dKSB7CisgICAgICAg
IC8vIE1ha2UgdGhlIHdpbmRvdyB0aGUgZmlyc3QgcmVzcG9uZGVyLCBzbyB0aGF0IG5vIHZpZXcg
aXMgdGhlIGtleSB2aWV3LgogICAgICAgICBbc2VsZiBtYWtlRmlyc3RSZXNwb25kZXI6c2VsZl07
CiAgICAgfQogfQpAQCAtNDY4LDQwICs0ODMsMTUgQEAgLSAoQk9PTCltYWtlRmlyc3RSZXNwb25k
ZXI6KE5TUmVzcG9uZGVyIAogLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfYXV0b1Jlc2l6ZVN0
YXRlLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBvcGVyYXRlcyBvbiBfd2luZG93
TnVtLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93
cyBhcyBpcy4KIAogCi0vLyBEaXNhcHBvaW50aW5nbHksIC1fYmxvY2tIZWFydEJlYXQ6IGlzIG5v
dCBpbW1lZGlhdGVseSBpbnZva2VkIHRvIHR1cm4gb2ZmIGhlYXJ0YmVhdGluZy4gIEhlYXJ0YmVh
dGluZyBpcyB0dXJuZWQgb2ZmIGJ5IHNldHRpbmcgdGhlIGdEZWZhdWx0QnV0dG9uUGF1c2VkIGds
b2JhbCB2YXJpYWJsZSwgYW5kIHRoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCBsYXRlciwgaWYg
dGhhdCBnbG9iYWwgaXMgc2V0IChhdCBoZWFydGJlYXRpbmcgdGltZSBJIGd1ZXNzKS4gIFNvbWV0
aGluZyBoYXMgdG8gY2hhbmdlIGlmIHdlIHdhbnQgdG8gaG9vayB0aGlzIHVwIGluIENhcmJvbiB3
aW5kb3dzLiAgTS5QLiBXYXJuaW5nIC0gOS8xNy8wMQotLyoKLS8vIERvIHRoZSByaWdodCB0aGlu
ZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClfYmxvY2tIZWFydEJlYXQ6KEJPT0wpZmxh
ZyB7Ci0KLSAgICBDb250cm9sUmVmIGRlZmF1bHRCdXR0b247Ci0gICAgT1NTdGF0dXMgb3NTdGF0
dXM7Ci0KLSAgICAvLyBEbyB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCi0gICAgW3N1cGVyIF9i
bG9ja0hlYXJ0QmVhdDpmbGFnXTsKLQotICAgIC8vIElmIHRoZXJlJ3MgYSBkZWZhdWx0IENhcmJv
biBidXR0b24gaW4gdGhpcyBDYXJib24gd2luZG93LCBtYWtlIGl0IHN0b3AgcHVsc2luZywgdGhl
IENhcmJvbiB3YXkuCi0gICAgLy8gVGhpcyBpcyBpbnNwaXJlZCBieSBISVRvb2xib3gvQ29udHJv
bHMvRGVmaW5pdGlvbnMvQnV0dG9uQ0RFRi5jJ3MgQnV0dG9uRXZlbnRIYW5kbGVyKCkuICBNLlAu
IE5vdGljZSAtIDEyLzUvMDAKLSAgICBvc1N0YXR1cyA9IEdldFdpbmRvd0RlZmF1bHRCdXR0b24o
X3dpbmRvd1JlZiwgJmRlZmF1bHRCdXR0b24pOwotICAgIGlmIChvc1N0YXR1cz09bm9FcnIgJiYg
ZGVmYXVsdEJ1dHRvbikgewotICAgICAgICBCb29sZWFuIGFub3RoZXJCdXR0b25Jc1RyYWNraW5n
ID0gZmxhZyA/IFRSVUUgOiBGQUxTRTsKLSAgICAgICAgb3NTdGF0dXMgPSBTZXRDb250cm9sRGF0
YShkZWZhdWx0QnV0dG9uLCBrQ29udHJvbE5vUGFydCwga0NvbnRyb2xQdXNoQnV0dG9uQW5vdGhl
ckJ1dHRvblRyYWNraW5nVGFnLCBzaXplb2YoQm9vbGVhbiksICZhbm90aGVyQnV0dG9uSXNUcmFj
a2luZyk7Ci0gICAgICAgIGlmIChvc1N0YXR1cz09bm9FcnIpIERyYXdPbmVDb250cm9sKGRlZmF1
bHRCdXR0b24pOwotICAgICAgICBlbHNlIE5TTG9nKEAiU29tZSBkYXRhIGNvdWxkbid0IGJlIHNl
dCBpbiBhIENhcmJvbiBjb250cm9sLiIpOwotICAgIH0KLQotfQotKi8KLQotCiAvLyBEbyB0aGUg
cmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKHZvaWQpX2NhbmNlbEtleTooaWQp
c2VuZGVyIHsKLQorLSAodm9pZClfY2FuY2VsS2V5OihpZClzZW5kZXIKK3sKICAgICAvLyBNb3N0
IG9mIHRoZSB0aW1lIHRoZSBoYW5kbGluZyBvZiB0aGUgY2FuY2VsIGtleSB3aWxsIGJlIGRvbmUg
YnkgQ2FyYm9uLCBidXQgdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGlmIGFuIE5TQ2FyYm9u
V2luZG93IGlzIHdyYXBwaW5nIGEgQ2FyYm9uIHdpbmRvdyB0aGF0IGNvbnRhaW5zIGFuIE5TVmll
d0NhcmJvbkNvbnRyb2wsIGFuZCB0aGUgZXNjYXBlIGtleSBvciB3aGF0ZXZlciBpcyBwcmVzc2Vk
IHdpdGggYW4gTlNUZXh0VmlldyBmb2N1c2VkLiAgSnVzdCBkbyB3aGF0IENhcmJvbiB3b3VsZCBk
by4KICAgICBDb250cm9sUmVmIGNhbmNlbEJ1dHRvbjsKICAgICBHZXRXaW5kb3dDYW5jZWxCdXR0
b24oX3dpbmRvd1JlZiwgJmNhbmNlbEJ1dHRvbik7CiAgICAgaWYgKGNhbmNlbEJ1dHRvbikgewog
ICAgICAgICBpZiAoSXNDb250cm9sQWN0aXZlKGNhbmNlbEJ1dHRvbikpIHsKLSAgICAgICAgICAg
IEhJVmlld1NpbXVsYXRlQ2xpY2soY2FuY2VsQnV0dG9uLCBrQ29udHJvbEJ1dHRvblBhcnQsIDAs
IE5VTEwpOworICAgICAgICAgICAgSElWaWV3U2ltdWxhdGVDbGljayhjYW5jZWxCdXR0b24sIGtD
b250cm9sQnV0dG9uUGFydCwgMCwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUx
MCw4ICs1MDAsOCBAQCAtICh2b2lkKV9jYW5jZWxLZXk6KGlkKXNlbmRlciB7CiAKIAogLy8gRG8g
dGhlIHJpZ2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKV9jb21tb25Bd2Fr
ZSB7Ci0KKy0gKHZvaWQpX2NvbW1vbkF3YWtlCit7CiAgICAgLy8gQ29tcGxhaW4sIGJlY2F1c2Ug
dGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiAgV2UgaW5zaXN0IHRoYXQgLVtOU0NhcmJvbldp
bmRvdyBpbml0V2l0aENhcmJvbldpbmRvd1JlZl0gaXMgdGhlIG9ubHkgdmFsaWQgaW5pdGlhbGl6
ZXIgZm9yIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLCBhbmQgdGhhdCB0aGVyZSdzIG5vIHN1Y2gg
dGhpbmcgYXMgYSBvbmUtc2hvdCBOU0NhcmJvbldpbmRvdy4KICAgICBOU0xvZyhAIi1bTlNDYXJi
b25XaW5kb3cgX2NvbW1vbkF3YWtlXSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CiAKQEAgLTUyMiwx
MiArNTEyLDExIEBAIC0gKHZvaWQpX2NvbW1vbkF3YWtlIHsKIAogCiAvLyBEbyB0aGUgcmlnaHQg
dGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9P
TClvcmRlcmluZ091dCB7Ci0KKy0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9PTClvcmRlcmlu
Z091dAorewogICAgIC8vIENvbXBsYWluLCBiZWNhdXNlIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNh
bGxlZC4gIFdlIGRvbid0IHN1cHBvcnQgb25lLXNob3QgTlNDYXJib25XaW5kb3dzLgogICAgIE5T
TG9nKEAiLVtOU0NhcmJvbldpbmRvdyBfZGVzdHJveVJlYWxXaW5kb3c6XSBpcyBub3QgaW1wbGVt
ZW50ZWQuIik7CiAgICAgcmV0dXJuIHNlbGY7Ci0gICAgCiB9CiAKIApAQCAtNTUwLDggKzUzOSw4
IEBAIC0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9PTClvcmRlcmluZ08KIAogCiAvLyBEbyB3
aGF0IE5TV2luZG93IHdvdWxkIGRvLCBidXQgdGhlbiBzeWNocm9uaXplIHRoZSBDYXJib24gd2lu
ZG93IHN0cnVjdHVyZXMuCi0tICh2b2lkKV9vbGRQbGFjZVdpbmRvdzooTlNSZWN0KWZyYW1lUmVj
dCB7Ci0KKy0gKHZvaWQpX29sZFBsYWNlV2luZG93OihOU1JlY3QpZnJhbWVSZWN0Cit7CiAgICAg
T1NTdGF0dXMgb3NTdGF0dXM7CiAKICAgICAvLyBEbyB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcu
CkBAIC01NjAsOCArNTQ5LDggQEAgLSAodm9pZClfb2xkUGxhY2VXaW5kb3c6KE5TUmVjdClmcmFt
ZVJlYwogICAgIC8vIFRlbGwgQ2FyYm9uIHRvIHVwZGF0ZSBpdHMgdmFyaW91cyByZWdpb25zLgog
ICAgIC8vIERlc3BpdGUgaXRzIG5hbWUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBl
YXJseSBhbmQgb2Z0ZW4sIGV2ZW4gaWYgdGhlIHdpbmRvdyBpc24ndCB2aXNpYmxlIHlldC4gIDI3
MDI2NDguICBNLlAuIE5vdGljZSAtIDcvMjQvMDEKICAgICBvc1N0YXR1cyA9IF9TeW5jV2luZG93
V2l0aENHQWZ0ZXJNb3ZlKF93aW5kb3dSZWYpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIE5T
TG9nKEAiQSBDYXJib24gd2luZG93J3MgYm91bmRzIGNvdWxkbid0IGJlIHN5bmNocm9uaXplZCAo
JWkpLiIsIChpbnQpb3NTdGF0dXMpOwotCisgICAgaWYgKG9zU3RhdHVzICE9IG5vRXJyKQorICAg
ICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGJvdW5kcyBjb3VsZG4ndCBiZSBzeW5jaHJv
bml6ZWQgKCVpKS4iLCAoaW50KW9zU3RhdHVzKTsKIH0KIAogCkBAIC01OTEsMTAgKzU4MCwxMiBA
QCAtICh2b2lkKV9vbGRQbGFjZVdpbmRvdzooTlNSZWN0KWZyYW1lUmVjCiAKIC8vIERvIHdoYXQg
TlNXaW5kb3cgd291bGQgZG8sIGJ1dCBmb3IgYSBDYXJib24gd2luZG93LgogLy8gVGhpcyBmdW5j
dGlvbiBpcyBtb3N0bHkgY3V0LWFuZC1wYXN0ZWQgZnJvbSAtW05TV2luZG93IF90ZXJtV2luZG93
SWZPd25lcl0uICBNLlAuIE5vdGljZSAtIDgvNy8wMAotLSAodm9pZClfdGVybVdpbmRvd0lmT3du
ZXIgeworLSAodm9pZClfdGVybVdpbmRvd0lmT3duZXIKK3sKICAgICBbc2VsZiBfc2V0V2luZG93
TnVtYmVyOi0xXTsKICAgICBfd0ZsYWdzLmlzVGVybWluYXRpbmcgPSBZRVM7Ci0gICAgaWYgKF93
aW5kb3dSZWYgJiYgX3dpbmRvd1JlZklzT3duZWQpIERpc3Bvc2VXaW5kb3coX3dpbmRvd1JlZik7
CisgICAgaWYgKF93aW5kb3dSZWYgJiYgX3dpbmRvd1JlZklzT3duZWQpCisgICAgICAgIERpc3Bv
c2VXaW5kb3coX3dpbmRvd1JlZik7CiAgICAgLy8gS1cgLSBuZWVkIHRvIGNsZWFyIHdpbmRvdyBz
aGFkb3cgc3RhdGUgc28gaXQgZ2V0cyByZXNldCBjb3JyZWN0bHkgd2hlbiBuZXcgd2luZG93IGNy
ZWF0ZWQKIC8vICAgIGlmIChbX2JvcmRlclZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihzZXRTaGFkb3dTdGF0ZTopXSkgewogLy8gICAgICAgIFtfYm9yZGVyVmlldyBzZXRTaGFkb3dT
dGF0ZTprRnJhbWVTaGFkb3dOb25lXTsKQEAgLTYxMCw3ICs2MDEsOCBAQCAtICh2b2lkKV90ZXJt
V2luZG93SWZPd25lciB7CiAKIAogLy8gRG8gd2hhdCBOU1dpbmRvdyB3b3VsZCBkbywgYnV0IHRo
ZW4gc3ljaHJvbml6ZSB0aGUgQ2FyYm9uIHdpbmRvdyBzdHJ1Y3R1cmVzLgotLSAodm9pZClfd2lu
ZG93TW92ZWRUb1JlY3Q6KE5TUmVjdClhY3R1YWxGcmFtZSB7CistICh2b2lkKV93aW5kb3dNb3Zl
ZFRvUmVjdDooTlNSZWN0KWFjdHVhbEZyYW1lCit7CiAKICAgICBPU1N0YXR1cyBvc1N0YXR1czsK
IApAQCAtNjI1LDQ1ICs2MTcsMzggQEAgLSAodm9pZClfd2luZG93TW92ZWRUb1JlY3Q6KE5TUmVj
dClhY3R1YQogCiB9CiAKLS0gKE5TUmVjdCljb25zdHJhaW5GcmFtZVJlY3Q6KE5TUmVjdClhY3R1
YWxGcmFtZSB0b1NjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4geworLSAoTlNSZWN0KWNvbnN0cmFp
bkZyYW1lUmVjdDooTlNSZWN0KWFjdHVhbEZyYW1lIHRvU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVl
bgorewogICAgIC8vIGxldCBDYXJib24gZGVjaWRlIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlvbgog
ICAgIHJldHVybiBhY3R1YWxGcmFtZTsKIH0KIAotLSAodm9pZClzZWxlY3RLZXlWaWV3Rm9sbG93
aW5nVmlldzooTlNWaWV3ICopYVZpZXcgewotCUhJVmlld1JlZgl2aWV3ID0gTlVMTDsKLQkKLQl2
aWV3ID0gW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OmFWaWV3XTsKLQkKLQlpZiAo
IHZpZXcgKQotCXsJCi0JCUhJVmlld1JlZgljb250ZW50VmlldzsKLQkJCi0JCUdldFJvb3RDb250
cm9sKCBHZXRDb250cm9sT3duZXIoIHZpZXcgKSwgJmNvbnRlbnRWaWV3ICk7Ci0JCUhJVmlld0Fk
dmFuY2VGb2N1cyggY29udGVudFZpZXcsIDAgKTsKLQl9Ci0JZWxzZQotCXsKLQkJW3N1cGVyIHNl
bGVjdEtleVZpZXdGb2xsb3dpbmdWaWV3OmFWaWV3XTsKLQl9Ci19Ci0KLS0gKHZvaWQpc2VsZWN0
S2V5Vmlld1ByZWNlZGluZ1ZpZXc6KE5TVmlldyAqKWFWaWV3IHsKLQlISVZpZXdSZWYJdmlldyA9
IE5VTEw7Ci0JCi0JdmlldyA9IFtISVZpZXdBZGFwdGVyIGdldEhJVmlld0Zvck5TVmlldzphVmll
d107Ci0JCi0JaWYgKCB2aWV3ICkKLQl7CQotCQlISVZpZXdSZWYJY29udGVudFZpZXc7Ci0JCQot
CQlHZXRSb290Q29udHJvbCggR2V0Q29udHJvbE93bmVyKCB2aWV3ICksICZjb250ZW50VmlldyAp
OwotCQlISVZpZXdBZHZhbmNlRm9jdXMoIGNvbnRlbnRWaWV3LCBzaGlmdEtleSApOwotCX0KLQll
bHNlCi0JewotCQlbc3VwZXIgc2VsZWN0S2V5Vmlld1ByZWNlZGluZ1ZpZXc6YVZpZXddOwotCX0K
Ky0gKHZvaWQpc2VsZWN0S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6KE5TVmlldyAqKWFWaWV3Cit7Cisg
ICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOworICAgIHZpZXcgPSBbSElWaWV3QWRhcHRlciBn
ZXRISVZpZXdGb3JOU1ZpZXc6YVZpZXddOworCisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgSElW
aWV3UmVmIGNvbnRlbnRWaWV3OworICAgICAgICAKKyAgICAgICAgR2V0Um9vdENvbnRyb2woR2V0
Q29udHJvbE93bmVyKHZpZXcpLCAmY29udGVudFZpZXcpOworICAgICAgICBISVZpZXdBZHZhbmNl
Rm9jdXMoY29udGVudFZpZXcsIDApOworICAgIH0gZWxzZQorICAgICAgICBbc3VwZXIgc2VsZWN0
S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6YVZpZXddOworfQorCistICh2b2lkKXNlbGVjdEtleVZpZXdQ
cmVjZWRpbmdWaWV3OihOU1ZpZXcgKilhVmlldworeworICAgIEhJVmlld1JlZiB2aWV3ID0gbnVs
bHB0cjsKKyAgICB2aWV3ID0gW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OmFWaWV3
XTsKKworICAgIGlmICh2aWV3KSB7CisgICAgICAgIEhJVmlld1JlZiBjb250ZW50VmlldzsKKyAg
ICAgICAgCisgICAgICAgIEdldFJvb3RDb250cm9sKEdldENvbnRyb2xPd25lcih2aWV3KSwgJmNv
bnRlbnRWaWV3KTsKKyAgICAgICAgSElWaWV3QWR2YW5jZUZvY3VzKGNvbnRlbnRWaWV3LCBzaGlm
dEtleSk7CisgICAgfSBlbHNlCisgICAgICAgIFtzdXBlciBzZWxlY3RLZXlWaWV3UHJlY2VkaW5n
VmlldzphVmlld107CiB9CiAKIC0gKHZvaWQpbWFrZUtleVdpbmRvdwpAQCAtNjc0LDEzICs2NTks
MTUgQEAgLSAodm9pZCltYWtlS2V5V2luZG93CiB9CiAKIC8vIERvIHRoZSByaWdodCB0aGluZyBm
b3IgYSBDYXJib24gd2luZG93LgotLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cgeworLSAoQk9P
TCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKIAogICAgIHJldHVybiBZRVM7CiB9CiAKIC8vIERvIHRo
ZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAoQk9PTCljYW5CZWNvbWVNYWlu
V2luZG93IHsKKy0gKEJPT0wpY2FuQmVjb21lTWFpbldpbmRvdworewogICAgIE9TU3RhdHVzIG9z
U3RhdHVzOwogICAgIFdpbmRvd0NsYXNzIHdpbmRvd0NsYXNzOwogICAgIC8vIEJ5IGRlZmF1bHQs
IENhcmJvbiB3aW5kb3dzIGNhbm5vdCBiZWNvbWUgdGhlIG1haW4gd2luZG93LgpAQCAtNzA0LDcg
KzY5MSw4IEBAIC0gKEJPT0wpY2FuQmVjb21lTWFpbldpbmRvdyB7CiAKIAogLy8gRG8gdGhlIHJp
Z2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKWVuY29kZVdpdGhDb2Rlcjoo
TlNDb2RlciAqKWNvZGVyIHsKKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopY29k
ZXIKK3sKIAogICAgIC8vIEFjdHVhbGx5LCB0aGlzIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgaW1w
bGVtZW50ZWQuICBNLlAuIE5vdGljZSAtIDgvMi8wMAogICAgIE5TTG9nKEAiLVtOU0NhcmJvbldp
bmRvdyBlbmNvZGVXaXRoQ29kZXI6XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CkBAIC03MTYsNyAr
NzA0LDggQEAgLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgogCiAKIC8v
IERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAoaWQpaW5pdFdpdGhD
b2RlcjooTlNDb2RlciAqKWNvZGVyIHsKKy0gKGlkKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilj
b2RlcgorewogCiAgICAgLy8gQWN0dWFsbHksIHRoaXMgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBp
bXBsZW1lbnRlZC4gIE0uUC4gTm90aWNlIC0gOC8yLzAwCiAgICAgTlNMb2coQCItW05TQ2FyYm9u
V2luZG93IGluaXRXaXRoQ29kZXI6XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CkBAIC03MzUsMjEg
KzcyNCw2IEBAIC0gKGlkKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlciB7CiAvLyBUaGVy
ZSdzIG5vIG92ZXJyaWRlIG9mIHJlc2l6ZVRvU2NyZWVuV2l0aEV2ZW50OiwgZGVzcGl0ZSB0aGUg
ZmFjdCB0aGF0IE5TV2luZG93J3Mgb3BlcmF0ZXMgb24gX3dpbmRvd051bS4KIC8vIEl0IGxvb2tz
IGxpa2UgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGFuIF9OU0ZvcmNlUmVzaXplRXZlbnRUeXBlIGV2
ZW50IGlzIHBhc3NlZCBpbnRvIC1bTlNXaW5kb3cgc2VuZEV2ZW50Ol0sIGFuZCBJIGNhbid0IGZp
bmQgYW55IGluc3RhbmNlcyBvZiB0aGF0IGhhcHBlbmluZy4KIAotLyoKLS8vIERvIHRoZSByaWdo
dCB0aGluZyBmb3IgYSBDYXJib24gV2luZG93LgotLSAodm9pZClzZW5kRXZlbnQ6KE5TRXZlbnQg
Kil0aGVFdmVudCB7Ci0KLSAgICAvLyBOb3QgYWxsIGV2ZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUg
c2FtZSBtYW5uZXIuCi0gICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gW3RoZUV2ZW50IHR5cGVd
OwotICAgIGlmIChldmVudFR5cGU9PU5TQXBwS2l0RGVmaW5lZCkgewotCi0gICAgICAgIC8vIEhh
bmRsZSB0aGUgZXZlbnQgdGhlIENvY29hIHdheS4gIENhcmJvbiB3b24ndCB1bmRlcnN0YW5kIGl0
IGFueXdheS4KLSAgICAgICAgW3N1cGVyIHNlbmRFdmVudDp0aGVFdmVudF07Ci0KLSAgICB9IAot
fQotKi8KLQogLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2
ZW50czosIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2lu
ZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9u
IHdpbmRvd3MgYXMgaXMuCiAKIApAQCAtNzU3LDcgKzczMSw4IEBAIC0gKHZvaWQpc2VuZEV2ZW50
OihOU0V2ZW50ICopdGhlRXZlbnQgewogCiAKIC8vIERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8s
IGJ1dCBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3
ICopYVZpZXcgeworLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3ICopYVZpZXcKK3sKIAog
ICAgIE5TUmVjdCBjb250ZW50RnJhbWVSZWN0OwogICAgIE9TU3RhdHVzIG9zU3RhdHVzOwpAQCAt
Nzk5LDE2ICs3NzQsMTkgQEAgLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3ICopYVZpZXcg
ewogLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXREZXB0aExpbWl0OiwgZGVzcGl0ZSB0aGUg
ZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNl
IGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KIAog
Ci0tIChCT09MKXdvcmtzV2hlbk1vZGFsIHsKKy0gKEJPT0wpd29ya3NXaGVuTW9kYWwKK3sKICAg
ICBXaW5kb3dDbGFzcyB3aW5kb3dDbGFzcyA9IFtzZWxmIF9jYXJib25XaW5kb3dDbGFzc107CiAg
ICAgcmV0dXJuICh3aW5kb3dDbGFzcyA9PSBrRmxvYXRpbmdXaW5kb3dDbGFzcyB8fCB3aW5kb3dD
bGFzcyA9PSBrVXRpbGl0eVdpbmRvd0NsYXNzKTsKIH0KIAotLSAodm9pZClfc2V0TW9kYWxXaW5k
b3dMZXZlbCB7CistICh2b2lkKV9zZXRNb2RhbFdpbmRvd0xldmVsCit7CiAgICAgcmV0dXJuOwog
fQogCi0tIChpZClfY2xlYXJNb2RhbFdpbmRvd0xldmVsIHsKKy0gKGlkKV9jbGVhck1vZGFsV2lu
ZG93TGV2ZWwKK3sKICAgICByZXR1cm4gbmlsOwogfQogCkBAIC04MTksMTkgKzc5NywyNyBAQCAt
IChpZClfY2xlYXJNb2RhbFdpbmRvd0xldmVsIHsKIC8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2Yg
d2luZG93TnVtYmVyLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyByZXR1cm5zIF93
aW5kb3dOdW0sIGJlY2F1c2UgX3dpbmRvd051bSBpcyBvbmUgb2YgdGhlIGluc3RhbmNlIHZhcmlh
YmxlcyB3aG9zZSB2YWx1ZSB3ZSdyZSBrZWVwaW5nIHN5bmNocm9uaXplZCB3aXRoIHRoZSBDYXJi
b24gd2luZG93LgogCiAKLS0gKFVJbnQzMiljYXJib25ISUNvbW1hbmRJREZyb21BY3Rpb25TZWxl
Y3RvcjooU0VMKWluQWN0aW9uU2VsZWN0b3IgeworLSAoVUludDMyKWNhcmJvbkhJQ29tbWFuZElE
RnJvbUFjdGlvblNlbGVjdG9yOihTRUwpaW5BY3Rpb25TZWxlY3RvcgorewogCiAgICAgLy8gSW5p
dGlhbGl6ZSB3aXRoIHRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZS4KICAgICBVSW50MzIgaGlDb21t
YW5kSUQgPSAwOwogCiAgICAgLy8gUHJldHR5IHNpbXBsZSwgaWYgdGVkaW91cy4KLSAgICBpZiAo
aW5BY3Rpb25TZWxlY3Rvcj09QHNlbGVjdG9yKGNsZWFyOikpIGhpQ29tbWFuZElEID0ga0hJQ29t
bWFuZENsZWFyOwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3I9PUBzZWxlY3Rvcihjb3B5
OikpIGhpQ29tbWFuZElEID0ga0hJQ29tbWFuZENvcHk7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25T
ZWxlY3Rvcj09QHNlbGVjdG9yKGN1dDopKSBoaUNvbW1hbmRJRCA9IGtISUNvbW1hbmRDdXQ7Ci0g
ICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3Rvcj09QHNlbGVjdG9yKHBhc3RlOikpIGhpQ29tbWFu
ZElEID0ga0hJQ29tbWFuZFBhc3RlOwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3I9PUBz
ZWxlY3RvcihyZWRvOikpIGhpQ29tbWFuZElEID0ga0hJQ29tbWFuZFJlZG87Ci0gICAgZWxzZSBp
ZiAoaW5BY3Rpb25TZWxlY3Rvcj09QHNlbGVjdG9yKHNlbGVjdEFsbDopKSBoaUNvbW1hbmRJRCA9
IGtISUNvbW1hbmRTZWxlY3RBbGw7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3Rvcj09QHNl
bGVjdG9yKHVuZG86KSkgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kVW5kbzsKKyAgICBpZiAoaW5B
Y3Rpb25TZWxlY3RvciA9PSBAc2VsZWN0b3IoY2xlYXI6KSkKKyAgICAgICAgaGlDb21tYW5kSUQg
PSBrSElDb21tYW5kQ2xlYXI7CisgICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3RvciA9PSBAc2Vs
ZWN0b3IoY29weTopKQorICAgICAgICBoaUNvbW1hbmRJRCA9IGtISUNvbW1hbmRDb3B5OworICAg
IGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3IgID09IEBzZWxlY3RvcihjdXQ6KSkKKyAgICAgICAg
aGlDb21tYW5kSUQgPSBrSElDb21tYW5kQ3V0OworICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0
b3IgPT0gQHNlbGVjdG9yKHBhc3RlOikpCisgICAgICAgIGhpQ29tbWFuZElEID0ga0hJQ29tbWFu
ZFBhc3RlOworICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3IgPT0gQHNlbGVjdG9yKHJlZG86
KSkKKyAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kUmVkbzsKKyAgICBlbHNlIGlmIChp
bkFjdGlvblNlbGVjdG9yID09IEBzZWxlY3RvcihzZWxlY3RBbGw6KSkKKyAgICAgICAgaGlDb21t
YW5kSUQgPSBrSElDb21tYW5kU2VsZWN0QWxsOworICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0
b3IgPT0gQHNlbGVjdG9yKHVuZG86KSkKKyAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5k
VW5kbzsKIAogICAgIC8vIERvbmUuCiAgICAgcmV0dXJuIGhpQ29tbWFuZElEOwpAQCAtODM5LDIx
ICs4MjUsMjIgQEAgLSAoVUludDMyKWNhcmJvbkhJQ29tbWFuZElERnJvbUFjdGlvblNlbAogfQog
CiAKLS0gKHZvaWQpc2VuZENhcmJvblByb2Nlc3NISUNvbW1hbmRFdmVudDooVUludDMyKWluSElD
b21tYW5kSUQgeworLSAodm9pZClzZW5kQ2FyYm9uUHJvY2Vzc0hJQ29tbWFuZEV2ZW50OihVSW50
MzIpaW5ISUNvbW1hbmRJRAorewogCiAgICAgRXZlbnRUYXJnZXRSZWYgZXZlbnRUYXJnZXRSZWY7
CiAgICAgSElDb21tYW5kIGhpQ29tbWFuZDsKICAgICBPU1N0YXR1cyBvc1N0YXR1czsKIAogICAg
IC8vIEluaXRpYWxpemUgZm9yIHNhZmUgZXJyb3IgaGFuZGxpbmcuCi0gICAgRXZlbnRSZWYgZXZl
bnRSZWYgPSBOVUxMOworICAgIEV2ZW50UmVmIGV2ZW50UmVmID0gbnVsbHB0cjsKIAogICAgIC8v
IENyZWF0ZSBhIFByb2Nlc3MgQ29tbWFuZCBldmVudC4gIERvbid0IG1lbnRpb24gYW55dGhpbmcg
YWJvdXQgdGhlIG1lbnUgaXRlbSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBDYXJib24gRXZl
bnQgaGFuZGxlciBmaWRkbGluZyB3aXRoIGl0LgogICAgIGhpQ29tbWFuZC5hdHRyaWJ1dGVzID0g
MDsKICAgICBoaUNvbW1hbmQuY29tbWFuZElEID0gaW5ISUNvbW1hbmRJRDsKICAgICBoaUNvbW1h
bmQubWVudS5tZW51UmVmID0gMDsKICAgICBoaUNvbW1hbmQubWVudS5tZW51SXRlbUluZGV4ID0g
MDsKLSAgICBvc1N0YXR1cyA9IENyZWF0ZUV2ZW50KE5VTEwsIGtFdmVudENsYXNzQ29tbWFuZCwg
a0V2ZW50Q29tbWFuZFByb2Nlc3MsIEdldEN1cnJlbnRFdmVudFRpbWUoKSwga0V2ZW50QXR0cmli
dXRlTm9uZSwgJmV2ZW50UmVmKTsKKyAgICBvc1N0YXR1cyA9IENyZWF0ZUV2ZW50KG51bGxwdHIs
IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFByb2Nlc3MsIEdldEN1cnJlbnRFdmVu
dFRpbWUoKSwga0V2ZW50QXR0cmlidXRlTm9uZSwgJmV2ZW50UmVmKTsKICAgICBpZiAob3NTdGF0
dXMhPW5vRXJyKSB7CiAgICAgICAgIE5TTG9nKEAiQ3JlYXRlRXZlbnQoKSByZXR1cm5lZCAlaS4i
LCAoaW50KW9zU3RhdHVzKTsKICAgICAgICAgZ290byBDbGVhblVwOyAgCkBAIC04NzUsMTIgKzg2
MiwxMyBAQCAtICh2b2lkKXNlbmRDYXJib25Qcm9jZXNzSElDb21tYW5kRXZlbnQ6CiBDbGVhblVw
OgogCiAgICAgLy8gQ2xlYW4gdXAuCi0gICAgaWYgKGV2ZW50UmVmKSBSZWxlYXNlRXZlbnQoZXZl
bnRSZWYpOwotCisgICAgaWYgKGV2ZW50UmVmKQorICAgICAgICBSZWxlYXNlRXZlbnQoZXZlbnRS
ZWYpOwogfQogCiAKLS0gKEJvb2xlYW4pc2VuZENhcmJvblVwZGF0ZUhJQ29tbWFuZFN0YXR1c0V2
ZW50OihVSW50MzIpaW5ISUNvbW1hbmRJRCB3aXRoTWVudVJlZjooTWVudVJlZilpbk1lbnVSZWYg
YW5kTWVudUl0ZW1JbmRleDooVUludDE2KWluTWVudUl0ZW1JbmRleCB7CistIChCb29sZWFuKXNl
bmRDYXJib25VcGRhdGVISUNvbW1hbmRTdGF0dXNFdmVudDooVUludDMyKWluSElDb21tYW5kSUQg
d2l0aE1lbnVSZWY6KE1lbnVSZWYpaW5NZW51UmVmIGFuZE1lbnVJdGVtSW5kZXg6KFVJbnQxNilp
bk1lbnVJdGVtSW5kZXgKK3sKIAogICAgIEV2ZW50VGFyZ2V0UmVmIGV2ZW50VGFyZ2V0UmVmOwog
ICAgIEhJQ29tbWFuZCBoaUNvbW1hbmQ7CkBAIC04ODgsMTQgKzg3NiwxNCBAQCAtIChCb29sZWFu
KXNlbmRDYXJib25VcGRhdGVISUNvbW1hbmRTdGF0CiAKICAgICAvLyBJbml0aWFsaXplIGZvciBz
YWZlIGVycm9yIGhhbmRsaW5nIGFuZCBmbGFnIHJldHVybmluZy4KICAgICBCb29sZWFuIGV2ZW50
V2FzSGFuZGxlZCA9IEZBTFNFOwotICAgIEV2ZW50UmVmIGV2ZW50UmVmID0gTlVMTDsKKyAgICBF
dmVudFJlZiBldmVudFJlZiA9IG51bGxwdHI7CiAKICAgICAvLyBDcmVhdGUgYSBQcm9jZXNzIENv
bW1hbmQgZXZlbnQuICBEb24ndCBtZW50aW9uIGFueXRoaW5nIGFib3V0IHRoZSBtZW51IGl0ZW0s
IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgQ2FyYm9uIEV2ZW50IGhhbmRsZXIgZmlkZGxpbmcg
d2l0aCBpdC4KICAgICBoaUNvbW1hbmQuYXR0cmlidXRlcyA9IGtISUNvbW1hbmRGcm9tTWVudTsK
ICAgICBoaUNvbW1hbmQuY29tbWFuZElEID0gaW5ISUNvbW1hbmRJRDsKICAgICBoaUNvbW1hbmQu
bWVudS5tZW51UmVmID0gaW5NZW51UmVmOwogICAgIGhpQ29tbWFuZC5tZW51Lm1lbnVJdGVtSW5k
ZXggPSBpbk1lbnVJdGVtSW5kZXg7Ci0gICAgb3NTdGF0dXMgPSBDcmVhdGVFdmVudChOVUxMLCBr
RXZlbnRDbGFzc0NvbW1hbmQsIGtFdmVudENvbW1hbmRVcGRhdGVTdGF0dXMsIEdldEN1cnJlbnRF
dmVudFRpbWUoKSwga0V2ZW50QXR0cmlidXRlTm9uZSwgJmV2ZW50UmVmKTsKKyAgICBvc1N0YXR1
cyA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFu
ZFVwZGF0ZVN0YXR1cywgR2V0Q3VycmVudEV2ZW50VGltZSgpLCBrRXZlbnRBdHRyaWJ1dGVOb25l
LCAmZXZlbnRSZWYpOwogICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIHsKICAgICAgICAgTlNMb2co
QCJDcmVhdGVFdmVudCgpIHJldHVybmVkICVpLiIsIChpbnQpb3NTdGF0dXMpOwogICAgICAgICBn
b3RvIENsZWFuVXA7CkBAIC05MDksNyArODk3LDcgQEAgLSAoQm9vbGVhbilzZW5kQ2FyYm9uVXBk
YXRlSElDb21tYW5kU3RhdAogICAgIC8vIFNlbmQgYSBDYXJib24gZXZlbnQgdG8gd2hhdGV2ZXIg
aGFzIHRoZSBDYXJib24gdXNlciBmb2N1cy4KICAgICBldmVudFRhcmdldFJlZiA9IEdldFVzZXJG
b2N1c0V2ZW50VGFyZ2V0KCk7CiAgICAgb3NTdGF0dXMgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0
KGV2ZW50UmVmLCBldmVudFRhcmdldFJlZik7Ci0gICAgaWYgKG9zU3RhdHVzPT1ub0Vycikgewor
ICAgIGlmIChvc1N0YXR1cyA9PSBub0VycikgewogICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBU
UlVFOwogICAgIH0gZWxzZSBpZiAob3NTdGF0dXMhPWV2ZW50Tm90SGFuZGxlZEVycikgewogICAg
ICAgICBOU0xvZyhAIlNlbmRFdmVudFRvRXZlbnRUYXJnZXQoKSByZXR1cm5lZCAlaS4iLCAoaW50
KW9zU3RhdHVzKTsKQEAgLTkxOSwxMzUgKzkwNywxMzAgQEAgLSAoQm9vbGVhbilzZW5kQ2FyYm9u
VXBkYXRlSElDb21tYW5kU3RhdAogQ2xlYW5VcDoKIAogICAgIC8vIENsZWFuIHVwLgotICAgIGlm
IChldmVudFJlZikgUmVsZWFzZUV2ZW50KGV2ZW50UmVmKTsKKyAgICBpZiAoZXZlbnRSZWYpCisg
ICAgICAgIFJlbGVhc2VFdmVudChldmVudFJlZik7CiAKICAgICAvLyBEb25lLgogICAgIHJldHVy
biBldmVudFdhc0hhbmRsZWQ7Ci0KIH0KIAogLSAodm9pZClfaGFuZGxlUm9vdEJvdW5kc0NoYW5n
ZWQKIHsKLQlISVZpZXdSZWYJcm9vdCA9IEhJVmlld0dldFJvb3QoIF93aW5kb3dSZWYgKTsgCi0J
SElSZWN0CQlmcmFtZTsKKyAgICBISVZpZXdSZWYgcm9vdCA9IEhJVmlld0dldFJvb3QoX3dpbmRv
d1JlZik7IAorICAgIEhJUmVjdCBmcmFtZTsKIAotCUhJVmlld0dldEZyYW1lKCByb290LCAmZnJh
bWUgKTsKLQlbX2JvcmRlclZpZXcgc2V0RnJhbWVTaXplOiooTlNTaXplKikmZnJhbWUuc2l6ZV07
CisgICAgSElWaWV3R2V0RnJhbWUocm9vdCwgJmZyYW1lKTsKKyAgICBbX2JvcmRlclZpZXcgc2V0
RnJhbWVTaXplOiooTlNTaXplKikmZnJhbWUuc2l6ZV07CiB9CiAKIC0gKHZvaWQpX2hhbmRsZUNv
bnRlbnRCb3VuZHNDaGFuZ2VkCiB7Ci0JSElWaWV3UmVmCXJvb3QsIGNvbnRlbnRWaWV3OyAKLQlI
SVJlY3QJCXJvb3RCb3VuZHMsIGNvbnRlbnRGcmFtZTsKLQlOU1JlY3QJCW9sZENvbnRlbnRGcmFt
ZVJlY3Q7Ci0KLQlyb290ID0gSElWaWV3R2V0Um9vdCggX3dpbmRvd1JlZiApOwotCUhJVmlld0Zp
bmRCeUlEKCByb290LCBrSElWaWV3V2luZG93Q29udGVudElELCAmY29udGVudFZpZXcgKTsKLQlI
SVZpZXdHZXRGcmFtZSggY29udGVudFZpZXcsICZjb250ZW50RnJhbWUgKTsKLQlISVZpZXdHZXRC
b3VuZHMoIHJvb3QsICZyb290Qm91bmRzICk7Ci0JCisgICAgSElWaWV3UmVmIHJvb3QsIGNvbnRl
bnRWaWV3OyAKKyAgICBISVJlY3Qgcm9vdEJvdW5kcywgY29udGVudEZyYW1lOworICAgIE5TUmVj
dCBvbGRDb250ZW50RnJhbWVSZWN0OworCisgICAgcm9vdCA9IEhJVmlld0dldFJvb3QoX3dpbmRv
d1JlZik7CisgICAgSElWaWV3RmluZEJ5SUQocm9vdCwga0hJVmlld1dpbmRvd0NvbnRlbnRJRCwg
JmNvbnRlbnRWaWV3KTsKKyAgICBISVZpZXdHZXRGcmFtZShjb250ZW50VmlldywgJmNvbnRlbnRG
cmFtZSk7CisgICAgSElWaWV3R2V0Qm91bmRzKHJvb3QsICZyb290Qm91bmRzKTsKKwogICAgIC8v
IFNldCB0aGUgY29udGVudCB2aWV3J3MgZnJhbWUgcmVjdCBmcm9tIHRoZSBDYXJib24gd2luZG93
J3MgY29udGVudCByZWdpb24gYm91bmRzLgotICAgIGNvbnRlbnRGcmFtZS5vcmlnaW4ueSA9IHJv
b3RCb3VuZHMuc2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRNYXhZKCBjb250ZW50RnJhbWUgKTsKKyAg
ICBjb250ZW50RnJhbWUub3JpZ2luLnkgPSByb290Qm91bmRzLnNpemUuaGVpZ2h0IC0gQ0dSZWN0
R2V0TWF4WShjb250ZW50RnJhbWUpOwogCiAgICAgb2xkQ29udGVudEZyYW1lUmVjdCA9IFsoTlNW
aWV3ICopX2NvbnRlbnRWaWV3IGZyYW1lXTsKLSAgICBpZiAoICFOU0VxdWFsUmVjdHMoICooTlNS
ZWN0KikmY29udGVudEZyYW1lLCBvbGRDb250ZW50RnJhbWVSZWN0ICkgKSB7CisgICAgaWYgKCFO
U0VxdWFsUmVjdHMoKihOU1JlY3QqKSZjb250ZW50RnJhbWUsIG9sZENvbnRlbnRGcmFtZVJlY3Qp
KSB7CiAgICAgICAgIFsoTlNWaWV3ICopX2NvbnRlbnRWaWV3IHNldEZyYW1lOiooTlNSZWN0Kikm
Y29udGVudEZyYW1lXTsKICAgICB9CiB9CiAKLS0gKE9TU3RhdHVzKV9oYW5kbGVDYXJib25FdmVu
dDooRXZlbnRSZWYpaW5FdmVudCBjYWxsUmVmOihFdmVudEhhbmRsZXJDYWxsUmVmKWluQ2FsbFJl
ZiB7CistIChPU1N0YXR1cylfaGFuZGxlQ2FyYm9uRXZlbnQ6KEV2ZW50UmVmKWluRXZlbnQgY2Fs
bFJlZjooRXZlbnRIYW5kbGVyQ2FsbFJlZilpbkNhbGxSZWYKK3sKICAgICBPU1N0YXR1cyByZXN1
bHQgPSBldmVudE5vdEhhbmRsZWRFcnI7Ci0gICAgCi0gICAgc3dpdGNoICggR2V0RXZlbnRDbGFz
cyggaW5FdmVudCApICkKLSAgICB7Ci0JCWNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgotCQkJewot
CQkJCUNvbnRyb2xSZWYJCWNvbnRyb2w7Ci0JCQkJCi0JCQkJY2hlY2soIEdldEV2ZW50S2luZCgg
aW5FdmVudCApID09IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkICk7Ci0JCQkJCi0JCQkJR2V0
RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlQ29u
dHJvbFJlZiwgTlVMTCwKLQkJCQkJCXNpemVvZiggQ29udHJvbFJlZiApLCBOVUxMLCAmY29udHJv
bCApOwotCQkJCQotCQkJCWlmICggY29udHJvbCA9PSBISVZpZXdHZXRSb290KCBfd2luZG93UmVm
ICkgKQotCQkJCQlbc2VsZiBfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWRdOwotCQkJCWVsc2UKLQkJ
CQkJW3NlbGYgX2hhbmRsZUNvbnRlbnRCb3VuZHNDaGFuZ2VkXTsKLQkJCX0KLQkJCWJyZWFrOwot
CQkJCi0gICAgCWNhc2Uga0V2ZW50Q2xhc3NXaW5kb3c6Ci0gICAgCQlzd2l0Y2ggKCBHZXRFdmVu
dEtpbmQoIGluRXZlbnQgKSApCi0gICAgCQl7Ci0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dTaG93
bjoKLQkJCQkJW3NlbGYgX3NldFZpc2libGU6WUVTXTsKLSAgICAJCQkJYnJlYWs7Ci0gICAgCQkJ
Ci0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dIaWRkZW46Ci0JCQkJCVtzZWxmIF9zZXRWaXNpYmxl
Ok5PXTsKLSAgICAJCQkJYnJlYWs7Ci0gICAgCQkJCi0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dB
Y3RpdmF0ZWQ6Ci0JCQkJCVtzZWxmIG1ha2VLZXlXaW5kb3ddOwotCQkJCQlicmVhazsKLQkJCQkK
LSAgICAJCQljYXNlIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkOgotCQkJCQlbc2VsZiByZXNpZ25L
ZXlXaW5kb3ddOwotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudFdpbmRvd0JvdW5k
c0NoYW5nZWQ6Ci0JCQkJCVtzZWxmIHJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzXTsKLQkJ
CQkJYnJlYWs7Ci0JCQl9Ci0gICAgCQlicmVhazsKLSAgIAl9Ci0gICAJCisKKyAgICBzd2l0Y2gg
KEdldEV2ZW50Q2xhc3MoaW5FdmVudCkpIHsKKyAgICBjYXNlIGtFdmVudENsYXNzQ29udHJvbDoK
KyAgICAgICAgQ29udHJvbFJlZiBjb250cm9sOworCisgICAgICAgIEFTU0VSVChHZXRFdmVudEtp
bmQoaW5FdmVudCkgPT0ga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQpOworCisgICAgICAgIEdl
dEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlQ29u
dHJvbFJlZiwgbnVsbHB0ciwgc2l6ZW9mKENvbnRyb2xSZWYpLCBudWxscHRyLCAmY29udHJvbCk7
CisKKyAgICAgICAgaWYgKGNvbnRyb2wgPT0gSElWaWV3R2V0Um9vdChfd2luZG93UmVmKSkKKyAg
ICAgICAgICAgIFtzZWxmIF9oYW5kbGVSb290Qm91bmRzQ2hhbmdlZF07CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFtzZWxmIF9oYW5kbGVDb250ZW50Qm91bmRzQ2hhbmdlZF07CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBrRXZlbnRDbGFzc1dpbmRvdzoKKyAgICAgICAgc3dpdGNoIChH
ZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKKyAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dTaG93bjoK
KyAgICAgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOllFU107CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIGtFdmVudFdpbmRvd0hpZGRlbjoKKyAgICAgICAgICAgIFtzZWxmIF9z
ZXRWaXNpYmxlOk5PXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0V2ZW50
V2luZG93QWN0aXZhdGVkOgorICAgICAgICAgICAgW3NlbGYgbWFrZUtleVdpbmRvd107CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkOgor
ICAgICAgICAgICAgW3NlbGYgcmVzaWduS2V5V2luZG93XTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2Uga0V2ZW50V2luZG93Qm91bmRzQ2hhbmdlZDoKKyAgICAgICAgICAgIFtz
ZWxmIHJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIC8vIEhhbmRsZSB2YXJpb3VzIGV2ZW50cyB0aGF0IENhcmJvbiBpcyBzZW5kaW5nIHRvIG91
ciB3aW5kb3cuCi1zdGF0aWMgT1NTdGF0dXMgTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudChFdmVu
dEhhbmRsZXJDYWxsUmVmIGluRXZlbnRIYW5kbGVyQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudFJl
Ziwgdm9pZCAqaW5Vc2VyRGF0YSkgewotCitzdGF0aWMgT1NTdGF0dXMgTlNDYXJib25XaW5kb3dI
YW5kbGVFdmVudChFdmVudEhhbmRsZXJDYWxsUmVmIGluRXZlbnRIYW5kbGVyQ2FsbFJlZiwgRXZl
bnRSZWYgaW5FdmVudFJlZiwgdm9pZCAqaW5Vc2VyRGF0YSkKK3sKICAgICAvLyBkZWZhdWx0IGFj
dGlvbiBpcyB0byBzZW5kIGV2ZW50IHRvIG5leHQgaGFuZGxlci4gIFdlIG1vZGlmeSBvc1N0YXR1
cyBhcyBuZWNlc3Nhcnkgd2hlcmUgd2UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yCiAgICAgT1NT
dGF0dXMgb3NTdGF0dXMgPSBldmVudE5vdEhhbmRsZWRFcnI7CiAKICAgICAvLyBXZSBkbyBkaWZm
ZXJlbnQgdGhpbmdzIGZvciBkaWZmZXJlbnQgZXZlbnQgdHlwZXMuCiAgICAgQ2FyYm9uV2luZG93
QWRhcHRlciAqY2FyYm9uV2luZG93ID0gKENhcmJvbldpbmRvd0FkYXB0ZXIgKilpblVzZXJEYXRh
OwogCi0Jb3NTdGF0dXMgPSBbY2FyYm9uV2luZG93IF9oYW5kbGVDYXJib25FdmVudDogaW5FdmVu
dFJlZiBjYWxsUmVmOiBpbkV2ZW50SGFuZGxlckNhbGxSZWZdOwotCQorICAgIG9zU3RhdHVzID0g
W2NhcmJvbldpbmRvdyBfaGFuZGxlQ2FyYm9uRXZlbnQ6IGluRXZlbnRSZWYgY2FsbFJlZjogaW5F
dmVudEhhbmRsZXJDYWxsUmVmXTsKKwogICAgIC8vIERvbmUuICBJZiB3ZSB3YW50IHRvIHByb3Bh
Z2F0ZSB0aGUgZXZlbnQsIHdlIHJldHVybiBldmVudE5vdEhhbmRsZWRFcnIgdG8gc2VuZCBpdCB0
byB0aGUgbmV4dCBoYW5kbGVyCiAgICAgcmV0dXJuIG9zU3RhdHVzOwotICAgIAogfQogCiAvLyBb
MzM2NDExN10gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzIG5vdCBmYWxsIHRocm91Z2gg
dG8gdGhlIEFwcEtpdCBpbXBsZW1lbnRhdGlvbiEgYmFkIHRoaW5ncyBoYXBwZW4uCi0tICh2b2lk
KV9yZWFsbHlEb09yZGVyV2luZG93OihOU1dpbmRvd09yZGVyaW5nTW9kZSlwbGFjZSByZWxhdGl2
ZVRvOihpbnQpb3RoZXJXaW4gZmluZEtleTooQk9PTClkb0tleUNhbGMgZm9yQ291bnRlcjooQk9P
TClpc0FDb3VudGVyIGZvcmNlOihCT09MKWRvRm9yY2UgaXNNb2RhbDooQk9PTClpc01vZGFsIHsK
Ky0gKHZvaWQpX3JlYWxseURvT3JkZXJXaW5kb3c6KE5TV2luZG93T3JkZXJpbmdNb2RlKXBsYWNl
IHJlbGF0aXZlVG86KGludClvdGhlcldpbiBmaW5kS2V5OihCT09MKWRvS2V5Q2FsYyBmb3JDb3Vu
dGVyOihCT09MKWlzQUNvdW50ZXIgZm9yY2U6KEJPT0wpZG9Gb3JjZSBpc01vZGFsOihCT09MKWlz
TW9kYWwKK3sKIH0KIAogLSAoTlNSZWN0KSBfZ3Jvd0JveFJlY3QKIHsKLSAgICAgIFdpbmRvd0F0
dHJpYnV0ZXMgICAgICAgICAgICAgICAgYXR0cnM7Ci0gICAgICBOU1JlY3QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0UmVjdCA9IE5TWmVyb1JlY3Q7CisgICAgV2luZG93QXR0
cmlidXRlcyBhdHRyczsKKyAgICBOU1JlY3QgcmV0UmVjdCA9IE5TWmVyb1JlY3Q7CiAKLSAgICAg
IEdldFdpbmRvd0F0dHJpYnV0ZXMoIF93aW5kb3dSZWYsICZhdHRycyApOworICAgIEdldFdpbmRv
d0F0dHJpYnV0ZXMoX3dpbmRvd1JlZiwgJmF0dHJzKTsKIAotICAgICAgaWYgKCBhdHRycyAmIGtX
aW5kb3dSZXNpemFibGVBdHRyaWJ1dGUgKQotICAgICAgewotICAgICAgICAgICAgICBISVJlY3Qg
ICAgICAgICAgYm91bmRzLCByZWN0OwotICAgICAgICAgICAgICBISVZpZXdSZWYgICB2aWV3Owor
ICAgIGlmIChhdHRycyAmIGtXaW5kb3dSZXNpemFibGVBdHRyaWJ1dGUpIHsKKyAgICAgICAgSElS
ZWN0IGJvdW5kcywgcmVjdDsKKyAgICAgICAgSElWaWV3UmVmIHZpZXc7CiAKLSAgICAgICAgICAg
ICAgSElWaWV3R2V0Qm91bmRzKCBISVZpZXdHZXRSb290KCBfd2luZG93UmVmICksICZib3VuZHMg
KTsKLSAgICAgICAgICAgICAgSElWaWV3RmluZEJ5SUQoIEhJVmlld0dldFJvb3QoIF93aW5kb3dS
ZWYgKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwgJnZpZXcgKTsKLSAgICAgICAgICAgICAgSElW
aWV3R2V0RnJhbWUoIHZpZXcsICZyZWN0ICk7CisgICAgICAgIEhJVmlld0dldEJvdW5kcyhISVZp
ZXdHZXRSb290KF93aW5kb3dSZWYpLCAmYm91bmRzKTsKKyAgICAgICAgSElWaWV3RmluZEJ5SUQo
SElWaWV3R2V0Um9vdChfd2luZG93UmVmKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwgJnZpZXcp
OworICAgICAgICBISVZpZXdHZXRGcmFtZSh2aWV3LCAmcmVjdCk7CiAKLSAgICAgICAgICAgICAg
cmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdldE1heFkoIHJlY3Qg
KSAtIDE7Ci0gICAgICAgICAgICAgIHJlY3Qub3JpZ2luLngrKzsKKyAgICAgICAgcmVjdC5vcmln
aW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdldE1heFkocmVjdCkgLSAxOworICAg
ICAgICByZWN0Lm9yaWdpbi54Kys7CiAKLSAgICAgICAgICAgICAgcmV0UmVjdCA9ICooTlNSZWN0
KikmcmVjdDsKLSAgICAgIH0KKyAgICAgICAgcmV0UmVjdCA9ICooTlNSZWN0KikmcmVjdDsKKyAg
ICB9CiAKLSAgICAgIHJldHVybiByZXRSZWN0OworICAgIHJldHVybiByZXRSZWN0OwogfQogCiBA
ZW5kIC8vIGltcGxlbWVudGF0aW9uIENhcmJvbldpbmRvd0FkYXB0ZXIKSW5kZXg6IFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVdlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5tbQkocmV2aXNpb24gMjIyNTUzKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNFdmVudFNQSS5o
PgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9tYWMvUXVpY2tEcmF3U1BJLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9y
dCA8d3RmL09iamNSdW50aW1lRXh0cmFzLmg+CiAKIEBpbnRlcmZhY2UgTlNXaW5kb3cgKEFwcEtp
dFNlY3JldHNISVdlYlZpZXdLbm93cykKQEAgLTEwMywxMyArMTA0LDEzIEBAIC0gKHZvaWQpX3dl
Yl9zZXRHcmFwaGljc1BvcnQ6KENHQ29udGV4dFIKIAogc3RydWN0IEhJV2ViVmlldwogewotICAg
IEhJVmlld1JlZgkJCQkJCQlmVmlld1JlZjsKKyAgICBISVZpZXdSZWYgZlZpZXdSZWY7CiAKLSAg
ICBXZWJWaWV3KgkJCQkJCQlmV2ViVmlldzsKLSAgICBOU1ZpZXcqCQkJCQkJCQlmRmlyc3RSZXNw
b25kZXI7Ci0gICAgQ2FyYm9uV2luZG93QWRhcHRlcgkqCQkJCWZLaXRXaW5kb3c7Ci0gICAgYm9v
bAkJCQkJCQkJZklzQ29tcG9zaXRlZDsKLSAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZgkJCQlmVXBk
YXRlT2JzZXJ2ZXI7CisgICAgV2ViVmlldyogZldlYlZpZXc7CisgICAgTlNWaWV3KiBmRmlyc3RS
ZXNwb25kZXI7CisgICAgQ2FyYm9uV2luZG93QWRhcHRlciogZktpdFdpbmRvdzsKKyAgICBib29s
IGZJc0NvbXBvc2l0ZWQ7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgZlVwZGF0ZU9ic2VydmVy
OwogfTsKIHR5cGVkZWYgc3RydWN0IEhJV2ViVmlldyBISVdlYlZpZXc7CiAKQEAgLTEyMywxMTYg
KzEyNCw5OSBAQCBzdGF0aWMgY29uc3QgT1NUeXBlIE5TVmlld0NhcmJvbkNvbnRyb2xGCiBzdGF0
aWMgY29uc3QgT1NUeXBlIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcgPSAnd2luICc7CiAKIAot
c3RhdGljIFNFTCBfTlNTZWxlY3RvckZvckhJQ29tbWFuZCggY29uc3QgSElDb21tYW5kKiBoaUNv
bW1hbmQgKTsKK3N0YXRpYyBTRUwgX05TU2VsZWN0b3JGb3JISUNvbW1hbmQoY29uc3QgSElDb21t
YW5kKik7CiAKIHN0YXRpYyBjb25zdCBFdmVudFR5cGVTcGVjIGtFdmVudHNbXSA9IHsgCi0JeyBr
RXZlbnRDbGFzc0hJT2JqZWN0LCBrRXZlbnRISU9iamVjdENvbnN0cnVjdCB9LAotCXsga0V2ZW50
Q2xhc3NISU9iamVjdCwga0V2ZW50SElPYmplY3REZXN0cnVjdCB9LAotCQotCXsga0V2ZW50Q2xh
c3NNb3VzZSwga0V2ZW50TW91c2VVcCB9LAotCXsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91
c2VNb3ZlZCB9LAotCXsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VEcmFnZ2VkIH0sCi0J
eyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZVdoZWVsTW92ZWQgfSwKLQotCXsga0V2ZW50
Q2xhc3NLZXlib2FyZCwga0V2ZW50UmF3S2V5RG93biB9LAotCXsga0V2ZW50Q2xhc3NLZXlib2Fy
ZCwga0V2ZW50UmF3S2V5UmVwZWF0IH0sCi0KLQl7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50
Q29tbWFuZFByb2Nlc3MgfSwKLQl7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFVw
ZGF0ZVN0YXR1cyB9LAotCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xJbml0
aWFsaXplIH0sCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEcmF3IH0sCi0J
eyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xIaXRUZXN0IH0sCi0JeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXRQYXJ0UmVnaW9uIH0sCi0JeyBrRXZlbnRDbGFz
c0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXREYXRhIH0sCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2ws
IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkIH0sCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtF
dmVudENvbnRyb2xBY3RpdmF0ZSB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250
cm9sRGVhY3RpdmF0ZSB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sT3du
aW5nV2luZG93Q2hhbmdlZCB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9s
Q2xpY2sgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbENvbnRleHR1YWxN
ZW51Q2xpY2sgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbFNldEZvY3Vz
UGFydCB9CisgICAgeyBrRXZlbnRDbGFzc0hJT2JqZWN0LCBrRXZlbnRISU9iamVjdENvbnN0cnVj
dCB9LAorICAgIHsga0V2ZW50Q2xhc3NISU9iamVjdCwga0V2ZW50SElPYmplY3REZXN0cnVjdCB9
LAorICAgIAorICAgIHsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VVcCB9LAorICAgIHsg
a0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VNb3ZlZCB9LAorICAgIHsga0V2ZW50Q2xhc3NN
b3VzZSwga0V2ZW50TW91c2VEcmFnZ2VkIH0sCisgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZl
bnRNb3VzZVdoZWVsTW92ZWQgfSwKKworICAgIHsga0V2ZW50Q2xhc3NLZXlib2FyZCwga0V2ZW50
UmF3S2V5RG93biB9LAorICAgIHsga0V2ZW50Q2xhc3NLZXlib2FyZCwga0V2ZW50UmF3S2V5UmVw
ZWF0IH0sCisKKyAgICB7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFByb2Nlc3Mg
fSwKKyAgICB7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFVwZGF0ZVN0YXR1cyB9
LAorCisgICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xJbml0aWFsaXplIH0s
CisgICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEcmF3IH0sCisgICAgeyBr
RXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xIaXRUZXN0IH0sCisgICAgeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXRQYXJ0UmVnaW9uIH0sCisgICAgeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXREYXRhIH0sCisgICAgeyBrRXZlbnRDbGFzc0Nv
bnRyb2wsIGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkIH0sCisgICAgeyBrRXZlbnRDbGFzc0Nv
bnRyb2wsIGtFdmVudENvbnRyb2xBY3RpdmF0ZSB9LAorICAgIHsga0V2ZW50Q2xhc3NDb250cm9s
LCBrRXZlbnRDb250cm9sRGVhY3RpdmF0ZSB9LAorICAgIHsga0V2ZW50Q2xhc3NDb250cm9sLCBr
RXZlbnRDb250cm9sT3duaW5nV2luZG93Q2hhbmdlZCB9LAorICAgIHsga0V2ZW50Q2xhc3NDb250
cm9sLCBrRXZlbnRDb250cm9sQ2xpY2sgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2
ZW50Q29udHJvbENvbnRleHR1YWxNZW51Q2xpY2sgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJv
bCwga0V2ZW50Q29udHJvbFNldEZvY3VzUGFydCB9CiB9OwogCi0jZGVmaW5lIGtISVZpZXdCYXNl
Q2xhc3NJRAkJQ0ZTVFIoICJjb20uYXBwbGUuaGl2aWV3IiApCi0jZGVmaW5lIGtISVdlYlZpZXdD
bGFzc0lECQlDRlNUUiggImNvbS5hcHBsZS5ISVdlYlZpZXciICkKKyNkZWZpbmUga0hJVmlld0Jh
c2VDbGFzc0lEIENGU1RSKCJjb20uYXBwbGUuaGl2aWV3IikKKyNkZWZpbmUga0hJV2ViVmlld0Ns
YXNzSUQgQ0ZTVFIoImNvbS5hcHBsZS5ISVdlYlZpZXciKQorCitzdGF0aWMgSElXZWJWaWV3KiBI
SVdlYlZpZXdDb25zdHJ1Y3RvcihISVZpZXdSZWYgaW5WaWV3KTsKK3N0YXRpYyB2b2lkIEhJV2Vi
Vmlld0Rlc3RydWN0b3IoSElXZWJWaWV3Kik7CiAKLXN0YXRpYyBISVdlYlZpZXcqCQlISVdlYlZp
ZXdDb25zdHJ1Y3RvciggSElWaWV3UmVmIGluVmlldyApOwotc3RhdGljIHZvaWQJCQkJSElXZWJW
aWV3RGVzdHJ1Y3RvciggSElXZWJWaWV3KiB2aWV3ICk7CitzdGF0aWMgT1NTdGF0dXMgSElXZWJW
aWV3RXZlbnRIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBp
bkV2ZW50LCB2b2lkICppblVzZXJEYXRhKTsKIAotc3RhdGljIE9TU3RhdHVzCQkJSElXZWJWaWV3
RXZlbnRIYW5kbGVyKAotCQkJCQkJCQlFdmVudEhhbmRsZXJDYWxsUmVmCWluQ2FsbFJlZiwKLQkJ
CQkJCQkJRXZlbnRSZWYJCQlpbkV2ZW50LAotCQkJCQkJCQl2b2lkICoJCQkJaW5Vc2VyRGF0YSAp
OwotCi1zdGF0aWMgVUludDMyCQkJR2V0QmVoYXZpb3JzKCk7Ci1zdGF0aWMgQ29udHJvbEtpbmQJ
CUdldEtpbmQoKTsKLXN0YXRpYyB2b2lkCQkJCURyYXcoIEhJV2ViVmlldyogaW5WaWV3LCBSZ25I
YW5kbGUgbGltaXRSZ24sIENHQ29udGV4dFJlZiBpbkNvbnRleHQgKTsKLXN0YXRpYyBDb250cm9s
UGFydENvZGUJSGl0VGVzdCggSElXZWJWaWV3KiB2aWV3LCBjb25zdCBISVBvaW50KiB3aGVyZSAp
Owotc3RhdGljIE9TU3RhdHVzCQkJR2V0UmVnaW9uKCBISVdlYlZpZXcqIHZpZXcsIENvbnRyb2xQ
YXJ0Q29kZSBpblBhcnQsIFJnbkhhbmRsZSBvdXRSZ24gKTsKLXN0YXRpYyB2b2lkCQkJCUJvdW5k
c0NoYW5nZWQoCi0JCQkJCQkJCUhJV2ViVmlldyoJCQlpblZpZXcsCi0JCQkJCQkJCVVJbnQzMgkJ
CQlpbk9wdGlvbnMsCi0JCQkJCQkJCWNvbnN0IEhJUmVjdCoJCWluT3JpZ2luYWxCb3VuZHMsCi0J
CQkJCQkJCWNvbnN0IEhJUmVjdCoJCWluQ3VycmVudEJvdW5kcyApOwotc3RhdGljIHZvaWQJCQkJ
T3duaW5nV2luZG93Q2hhbmdlZCgKLQkJCQkJCQkJSElXZWJWaWV3KgkJCXZpZXcsCi0JCQkJCQkJ
CVdpbmRvd1JlZgkJCW9sZFdpbmRvdywKLQkJCQkJCQkJV2luZG93UmVmCQkJbmV3V2luZG93ICk7
Ci1zdGF0aWMgdm9pZAkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIEhJV2ViVmlldyogdmlldyApOwot
Ci1zdGF0aWMgT1NTdGF0dXMJCQlDbGljayggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGlu
RXZlbnQgKTsKLXN0YXRpYyBPU1N0YXR1cwkJCUNvbnRleHRNZW51Q2xpY2soIEhJV2ViVmlldyog
aW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50ICk7Ci1zdGF0aWMgT1NTdGF0dXMJCQlNb3VzZVVwKCBI
SVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApOwotc3RhdGljIE9TU3RhdHVzCQkJ
TW91c2VNb3ZlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKTsKLXN0YXRp
YyBPU1N0YXR1cwkJCU1vdXNlRHJhZ2dlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGlu
RXZlbnQgKTsKLXN0YXRpYyBPU1N0YXR1cwkJCU1vdXNlV2hlZWxNb3ZlZCggSElXZWJWaWV3KiBp
blZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKTsKLQotc3RhdGljIE9TU3RhdHVzCQkJUHJvY2Vzc0Nv
bW1hbmQoIEhJV2ViVmlldyogaW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCApOwot
c3RhdGljIE9TU3RhdHVzCQkJVXBkYXRlQ29tbWFuZFN0YXR1cyggSElXZWJWaWV3KiBpblZpZXcs
IGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kICk7Ci0KLXN0YXRpYyBPU1N0YXR1cwkJCVNldEZv
Y3VzUGFydCgKLQkJCQkJCQkJSElXZWJWaWV3KgkJCQl2aWV3LAotCQkJCQkJCQlDb250cm9sUGFy
dENvZGUgCQlkZXNpcmVkRm9jdXMsCi0JCQkJCQkJCVJnbkhhbmRsZSAJCQkJaW52YWxpZFJnbiwK
LQkJCQkJCQkJQm9vbGVhbiAJCQkJZm9jdXNFdmVyeXRoaW5nLAotCQkJCQkJCQlDb250cm9sUGFy
dENvZGUqIAkJYWN0dWFsRm9jdXMgKTsKLXN0YXRpYyBOU1ZpZXcqCQkJQWR2YW5jZUZvY3VzKCBI
SVdlYlZpZXcqIHZpZXcsIGJvb2wgZm9yd2FyZCApOwotc3RhdGljIHZvaWQJCQkJUmVsaW5xdWlz
aEZvY3VzKCBISVdlYlZpZXcqIHZpZXcsIGJvb2wgaW5BdXRvZGlzcGxheSApOworc3RhdGljIFVJ
bnQzMiBHZXRCZWhhdmlvcnMoKTsKK3N0YXRpYyBDb250cm9sS2luZCBHZXRLaW5kKCk7CitzdGF0
aWMgdm9pZCBEcmF3KEhJV2ViVmlldyogaW5WaWV3LCBSZ25IYW5kbGUgbGltaXRSZ24sIENHQ29u
dGV4dFJlZiBpbkNvbnRleHQpOworc3RhdGljIENvbnRyb2xQYXJ0Q29kZSBIaXRUZXN0KEhJV2Vi
VmlldyosIGNvbnN0IEhJUG9pbnQqIHdoZXJlKTsKK3N0YXRpYyBPU1N0YXR1cyBHZXRSZWdpb24o
SElXZWJWaWV3KiwgQ29udHJvbFBhcnRDb2RlIGluUGFydCwgUmduSGFuZGxlIG91dFJnbik7Citz
dGF0aWMgdm9pZCBCb3VuZHNDaGFuZ2VkKEhJV2ViVmlldyogaW5WaWV3LCBVSW50MzIgaW5PcHRp
b25zLCBjb25zdCBISVJlY3QqIGluT3JpZ2luYWxCb3VuZHMsIGNvbnN0IEhJUmVjdCogaW5DdXJy
ZW50Qm91bmRzKTsKK3N0YXRpYyB2b2lkIE93bmluZ1dpbmRvd0NoYW5nZWQoSElXZWJWaWV3Kiwg
V2luZG93UmVmIG9sZFdpbmRvdywgV2luZG93UmVmIG5ld1dpbmRvdyk7CitzdGF0aWMgdm9pZCBB
Y3RpdmVTdGF0ZUNoYW5nZWQoSElXZWJWaWV3Kik7CisKK3N0YXRpYyBPU1N0YXR1cyBDbGljayhI
SVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7CitzdGF0aWMgT1NTdGF0dXMgQ29u
dGV4dE1lbnVDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7CitzdGF0
aWMgT1NTdGF0dXMgTW91c2VVcChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7
CitzdGF0aWMgT1NTdGF0dXMgTW91c2VNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYg
aW5FdmVudCk7CitzdGF0aWMgT1NTdGF0dXMgTW91c2VEcmFnZ2VkKEhJV2ViVmlldyogaW5WaWV3
LCBFdmVudFJlZiBpbkV2ZW50KTsKK3N0YXRpYyBPU1N0YXR1cyBNb3VzZVdoZWVsTW92ZWQoSElX
ZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpOworCitzdGF0aWMgT1NTdGF0dXMgUHJv
Y2Vzc0NvbW1hbmQoSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5k
KTsKK3N0YXRpYyBPU1N0YXR1cyBVcGRhdGVDb21tYW5kU3RhdHVzKEhJV2ViVmlldyogaW5WaWV3
LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCk7CisKK3N0YXRpYyBPU1N0YXR1cyBTZXRGb2N1
c1BhcnQoSElXZWJWaWV3KiwgQ29udHJvbFBhcnRDb2RlIGRlc2lyZWRGb2N1cywgUmduSGFuZGxl
IGludmFsaWRSZ24sIEJvb2xlYW4gZm9jdXNFdmVyeXRoaW5nLCBDb250cm9sUGFydENvZGUqIGFj
dHVhbEZvY3VzKTsKK3N0YXRpYyBOU1ZpZXcqIEFkdmFuY2VGb2N1cyhISVdlYlZpZXcqLCBib29s
IGZvcndhcmQpOworc3RhdGljIHZvaWQgUmVsaW5xdWlzaEZvY3VzKEhJV2ViVmlldyosIGJvb2wg
aW5BdXRvZGlzcGxheSk7CiAKLXN0YXRpYyBXaW5kb3dSZWYJCUdldFdpbmRvd1JlZiggSElXZWJW
aWV3KiBpblZpZXcgKTsKLXN0YXRpYyB2b2lkCQkJCVN5bmNGcmFtZSggSElXZWJWaWV3KiBpblZp
ZXcgKTsKK3N0YXRpYyBXaW5kb3dSZWYgR2V0V2luZG93UmVmKEhJV2ViVmlldyogaW5WaWV3KTsK
K3N0YXRpYyB2b2lkIFN5bmNGcmFtZShISVdlYlZpZXcqIGluVmlldyk7CiAKLXN0YXRpYyBPU1N0
YXR1cwkJCVdpbmRvd0hhbmRsZXIoIEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVu
dFJlZiBpbkV2ZW50LCB2b2lkKiBpblVzZXJEYXRhICk7CitzdGF0aWMgT1NTdGF0dXMgV2luZG93
SGFuZGxlcihFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudCwg
dm9pZCogaW5Vc2VyRGF0YSk7CiAKLXN0YXRpYyB2b2lkCQkJCVN0YXJ0VXBkYXRlT2JzZXJ2ZXIo
IEhJV2ViVmlldyogdmlldyApOwotc3RhdGljIHZvaWQJCQkJU3RvcFVwZGF0ZU9ic2VydmVyKCBI
SVdlYlZpZXcqIHZpZXcgKTsKK3N0YXRpYyB2b2lkIFN0YXJ0VXBkYXRlT2JzZXJ2ZXIoSElXZWJW
aWV3Kik7CitzdGF0aWMgdm9pZCBTdG9wVXBkYXRlT2JzZXJ2ZXIoSElXZWJWaWV3Kik7CiAKIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gSElXZWJWaWV3Q3JlYXRlCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1PU1N0YXR1cwotSElXZWJWaWV3Q3JlYXRlKEhJVmlld1Jl
Ziogb3V0Q29udHJvbCkKK09TU3RhdHVzIEhJV2ViVmlld0NyZWF0ZShISVZpZXdSZWYqIG91dENv
bnRyb2wpCiB7CiAgICAgSElXZWJWaWV3UmVnaXN0ZXJDbGFzcygpOwotICAgIHJldHVybiBISU9i
amVjdENyZWF0ZShrSElXZWJWaWV3Q2xhc3NJRCwgTlVMTCwgKEhJT2JqZWN0UmVmKilvdXRDb250
cm9sKTsKKyAgICByZXR1cm4gSElPYmplY3RDcmVhdGUoa0hJV2ViVmlld0NsYXNzSUQsIG51bGxw
dHIsIChISU9iamVjdFJlZiopb3V0Q29udHJvbCk7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogLy8gSElXZWJWaWV3R2V0V2ViVmlldwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAvLwotV2ViVmlldyoKLUhJV2ViVmlld0dldFdlYlZpZXcoIEhJVmlld1JlZiBpblZpZXcg
KQorV2ViVmlldyogSElXZWJWaWV3R2V0V2ViVmlldyhISVZpZXdSZWYgaW5WaWV3KQogewotCUhJ
V2ViVmlldyogCXZpZXcgPSAoSElXZWJWaWV3KilISU9iamVjdER5bmFtaWNDYXN0KCAoSElPYmpl
Y3RSZWYpaW5WaWV3LCBrSElXZWJWaWV3Q2xhc3NJRCApOwotCVdlYlZpZXcqCQkJcmVzdWx0ID0g
TlVMTDsKLQkKLQlpZiAoIHZpZXcgKQotCQlyZXN1bHQgPSB2aWV3LT5mV2ViVmlldzsKLQkKLQly
ZXR1cm4gcmVzdWx0OworICAgIEhJV2ViVmlldyogdmlldyA9IChISVdlYlZpZXcqKUhJT2JqZWN0
RHluYW1pY0Nhc3QoKEhJT2JqZWN0UmVmKWluVmlldywga0hJV2ViVmlld0NsYXNzSUQpOworICAg
IFdlYlZpZXcqIHJlc3VsdCA9IG51bGxwdHI7CisKKyAgICBpZiAodmlldykKKyAgICAgICAgcmVz
dWx0ID0gdmlldy0+ZldlYlZpZXc7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0MCwzOCArMjI0LDM1IEBAIEhJV2ViVmlld0dldFdl
YlZpZXcoIEhJVmlld1JlZiBpblZpZXcgKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAv
LwogCi1zdGF0aWMgSElXZWJWaWV3KgotSElXZWJWaWV3Q29uc3RydWN0b3IoIEhJVmlld1JlZiBp
blZpZXcgKQorc3RhdGljIEhJV2ViVmlldyogSElXZWJWaWV3Q29uc3RydWN0b3IoSElWaWV3UmVm
IGluVmlldykKIHsKLQlISVdlYlZpZXcqCQl2aWV3ID0gKEhJV2ViVmlldyopbWFsbG9jKCBzaXpl
b2YoIEhJV2ViVmlldyApICk7Ci0JCi0JaWYgKCB2aWV3ICkKLQl7Ci0JCU5TUmVjdAkJZnJhbWUg
PSB7IHsgMCwgMCB9LCB7IDQwMCwgNDAwICB9IH07Ci0JCi0JCXZpZXctPmZWaWV3UmVmID0gaW5W
aWV3OwotCi0gICAgICAgICAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtbV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTogZnJhbWVdOwotICAgICAgICAgICAgICAgIENGUmV0YWluKHdlYlZp
ZXcpOwotICAgICAgICAgICAgICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwotCQl2aWV3LT5mV2ViVmll
dyA9IHdlYlZpZXc7Ci0JCVtISVZpZXdBZGFwdGVyIGJpbmRISVZpZXdUb05TVmlldzppblZpZXcg
bnNWaWV3OnZpZXctPmZXZWJWaWV3XTsKLQkJCi0JCXZpZXctPmZGaXJzdFJlc3BvbmRlciA9IE5V
TEw7Ci0JCXZpZXctPmZLaXRXaW5kb3cgPSBOVUxMOworICAgIEhJV2ViVmlldyogdmlldyA9IChI
SVdlYlZpZXcqKW1hbGxvYyhzaXplb2YoSElXZWJWaWV3KSk7CisKKyAgICBpZiAodmlldykgewor
ICAgICAgICBOU1JlY3QgZnJhbWUgPSB7IHsgMCwgMCB9LCB7IDQwMCwgNDAwICB9IH07CisKKyAg
ICAgICAgdmlldy0+ZlZpZXdSZWYgPSBpblZpZXc7CisKKyAgICAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTogZnJhbWVdOworICAgICAgICBDRlJl
dGFpbih3ZWJWaWV3KTsKKyAgICAgICAgW3dlYlZpZXcgcmVsZWFzZV07CisgICAgICAgIHZpZXct
PmZXZWJWaWV3ID0gd2ViVmlldzsKKyAgICAgICAgW0hJVmlld0FkYXB0ZXIgYmluZEhJVmlld1Rv
TlNWaWV3OmluVmlldyBuc1ZpZXc6dmlldy0+ZldlYlZpZXddOworCisgICAgICAgIHZpZXctPmZG
aXJzdFJlc3BvbmRlciA9IG51bGxwdHI7CisgICAgICAgIHZpZXctPmZLaXRXaW5kb3cgPSBudWxs
cHRyOwogICAgICAgICB2aWV3LT5mSXNDb21wb3NpdGVkID0gZmFsc2U7Ci0gICAgICAgIHZpZXct
PmZVcGRhdGVPYnNlcnZlciA9IE5VTEw7Ci0JfQotCQotCXJldHVybiB2aWV3OworICAgICAgICB2
aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiB2aWV3
OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEhJV2ViVmlld0Rlc3RydWN0
b3IKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1ISVdlYlZp
ZXdEZXN0cnVjdG9yKCBISVdlYlZpZXcqIGluVmlldyApCitzdGF0aWMgdm9pZCBISVdlYlZpZXdE
ZXN0cnVjdG9yKEhJV2ViVmlldyogaW5WaWV3KQogewogICAgIFtISVZpZXdBZGFwdGVyIHVuYmlu
ZE5TVmlldzppblZpZXctPmZXZWJWaWV3XTsKICAgICBDRlJlbGVhc2UoaW5WaWV3LT5mV2ViVmll
dyk7CkBAIC0yODMsMjcgKzI2NCwyNCBAQCBISVdlYlZpZXdEZXN0cnVjdG9yKCBISVdlYlZpZXcq
IGluVmlldyApCiAvLyBISVdlYlZpZXdSZWdpc3RlckNsYXNzCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIC8vCi12b2lkCi1ISVdlYlZpZXdSZWdpc3RlckNsYXNzKCkKK3ZvaWQgSElXZWJW
aWV3UmVnaXN0ZXJDbGFzcygpCiB7Ci0Jc3RhdGljIGJvb2wgc1JlZ2lzdGVyZWQ7Ci0JCi0JaWYg
KCAhc1JlZ2lzdGVyZWQgKQotCXsKLQkJSElPYmplY3RSZWdpc3RlclN1YmNsYXNzKCBrSElXZWJW
aWV3Q2xhc3NJRCwga0hJVmlld0Jhc2VDbGFzc0lELCAwLCBISVdlYlZpZXdFdmVudEhhbmRsZXIs
Ci0JCQlHZXRFdmVudFR5cGVDb3VudCgga0V2ZW50cyApLCBrRXZlbnRzLCAwLCBOVUxMICk7Ci0J
CXNSZWdpc3RlcmVkID0gdHJ1ZTsKLQl9CisgICAgc3RhdGljIGJvb2wgc1JlZ2lzdGVyZWQ7CisK
KyAgICBpZiAoIXNSZWdpc3RlcmVkKSB7CisgICAgICAgIEhJT2JqZWN0UmVnaXN0ZXJTdWJjbGFz
cyhrSElXZWJWaWV3Q2xhc3NJRCwga0hJVmlld0Jhc2VDbGFzc0lELCAwLCBISVdlYlZpZXdFdmVu
dEhhbmRsZXIsCisgICAgICAgICAgICBHZXRFdmVudFR5cGVDb3VudChrRXZlbnRzKSwga0V2ZW50
cywgMCwgbnVsbHB0cik7CisgICAgICAgIHNSZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICB9CiB9CiAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gR2V0QmVoYXZpb3JzCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgVUludDMyCi1HZXRCZWhhdmlvcnMoKQorc3Rh
dGljIFVJbnQzMiBHZXRCZWhhdmlvcnMoKQogewotCXJldHVybiBrQ29udHJvbFN1cHBvcnRzRGF0
YUFjY2VzcyB8IGtDb250cm9sU3VwcG9ydHNHZXRSZWdpb24gfCBrQ29udHJvbEdldHNGb2N1c09u
Q2xpY2s7CisgICAgcmV0dXJuIGtDb250cm9sU3VwcG9ydHNEYXRhQWNjZXNzIHwga0NvbnRyb2xT
dXBwb3J0c0dldFJlZ2lvbiB8IGtDb250cm9sR2V0c0ZvY3VzT25DbGljazsKIH0KIAogc3RhdGlj
IENHQ29udGV4dFJlZiBvdmVycmlkZUNHQ29udGV4dChOU1dpbmRvdyAqd2luZG93LCBDR0NvbnRl
eHRSZWYgY29udGV4dCkKQEAgLTMyNiw0OCArMzA0LDQ2IEBAIHN0YXRpYyB2b2lkIHJlc3RvcmVD
R0NvbnRleHQoTlNXaW5kb3cgKncKIC8vIERyYXcKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogLy8KLXN0YXRpYyB2b2lkCi1EcmF3KCBISVdlYlZpZXcqIGluVmlldywgUmduSGFuZGxlIGxp
bWl0UmduLCBDR0NvbnRleHRSZWYgaW5Db250ZXh0ICkKK3N0YXRpYyB2b2lkIERyYXcoSElXZWJW
aWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdFJnbiwgQ0dDb250ZXh0UmVmIGluQ29udGV4dCkK
IHsKLQlISVJlY3QJCQkJYm91bmRzOwotCVJlY3QJCQkJZHJhd1JlY3Q7Ci0JSElSZWN0CQkJCWhp
UmVjdDsKLQlib29sCQkJCWNyZWF0ZWRDb250ZXh0ID0gZmFsc2U7CisgICAgSElSZWN0IGJvdW5k
czsKKyAgICBSZWN0IGRyYXdSZWN0OworICAgIEhJUmVjdCBoaVJlY3Q7CisgICAgYm9vbCBjcmVh
dGVkQ29udGV4dCA9IGZhbHNlOwogCi0gICAgaWYgKCFpblZpZXctPmZJc0NvbXBvc2l0ZWQpCi0g
ICAgeworICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVkKSB7CiAgICAgICAgIEdyYWZQdHIg
cG9ydDsKICAgICAgICAgUmVjdCBwb3J0UmVjdDsKIAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVj
bGFyYXRpb25zIgotICAgICAgICBHZXRQb3J0KCAmcG9ydCApOwotICAgICAgICBHZXRQb3J0Qm91
bmRzKCBwb3J0LCAmcG9ydFJlY3QgKTsKLSAgICAgICAgQ3JlYXRlQ0dDb250ZXh0Rm9yUG9ydCgg
cG9ydCwgJmluQ29udGV4dCApOworICAgICAgICBHZXRQb3J0KCZwb3J0KTsKKyAgICAgICAgR2V0
UG9ydEJvdW5kcyhwb3J0LCAmcG9ydFJlY3QpOworICAgICAgICBDcmVhdGVDR0NvbnRleHRGb3JQ
b3J0KHBvcnQsICZpbkNvbnRleHQpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSAg
ICAgICAgU3luY0NHQ29udGV4dE9yaWdpbldpdGhQb3J0KCBpbkNvbnRleHQsIHBvcnQgKTsKLSAg
ICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKCBpbkNvbnRleHQsIDAsIChwb3J0UmVjdC5ib3R0
b20gLSBwb3J0UmVjdC50b3ApICk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKCBpbkNvbnRl
eHQsIDEsIC0xICk7CisgICAgICAgIFN5bmNDR0NvbnRleHRPcmlnaW5XaXRoUG9ydChpbkNvbnRl
eHQsIHBvcnQpOworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oaW5Db250ZXh0LCAwLCAo
cG9ydFJlY3QuYm90dG9tIC0gcG9ydFJlY3QudG9wKSk7CisgICAgICAgIENHQ29udGV4dFNjYWxl
Q1RNKGluQ29udGV4dCwgMSwgLTEpOwogICAgICAgICBjcmVhdGVkQ29udGV4dCA9IHRydWU7CiAg
ICAgfQogCi0JSElWaWV3R2V0Qm91bmRzKCBpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7Cisg
ICAgSElWaWV3R2V0Qm91bmRzKGluVmlldy0+ZlZpZXdSZWYsICZib3VuZHMpOwogCiAgICAgQ0dD
b250ZXh0UmVmIHNhdmVkQ29udGV4dCA9IG92ZXJyaWRlQ0dDb250ZXh0KGluVmlldy0+ZktpdFdp
bmRvdywgaW5Db250ZXh0KTsKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRl
eHQ6W2luVmlldy0+ZktpdFdpbmRvdyBncmFwaGljc0NvbnRleHRdXTsKIAotCUdldFJlZ2lvbkJv
dW5kcyggbGltaXRSZ24sICZkcmF3UmVjdCApOworICAgIEdldFJlZ2lvbkJvdW5kcyhsaW1pdFJn
biwgJmRyYXdSZWN0KTsKIAotICAgIGlmICggIWluVmlldy0+ZklzQ29tcG9zaXRlZCApCi0gICAg
ICAgIE9mZnNldFJlY3QoICZkcmF3UmVjdCwgKFNJbnQxNiktYm91bmRzLm9yaWdpbi54LCAoU0lu
dDE2KS1ib3VuZHMub3JpZ2luLnkgKTsKKyAgICBpZiAoIWluVmlldy0+ZklzQ29tcG9zaXRlZCkK
KyAgICAgICAgT2Zmc2V0UmVjdCgmZHJhd1JlY3QsIChTSW50MTYpLWJvdW5kcy5vcmlnaW4ueCwg
KFNJbnQxNiktYm91bmRzLm9yaWdpbi55KTsKICAgICAKLQloaVJlY3Qub3JpZ2luLnggPSBkcmF3
UmVjdC5sZWZ0OwotCWhpUmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIGRyYXdS
ZWN0LmJvdHRvbTsgLy8gZmxpcCB5Ci0JaGlSZWN0LnNpemUud2lkdGggPSBkcmF3UmVjdC5yaWdo
dCAtIGRyYXdSZWN0LmxlZnQ7Ci0JaGlSZWN0LnNpemUuaGVpZ2h0ID0gZHJhd1JlY3QuYm90dG9t
IC0gZHJhd1JlY3QudG9wOworICAgIGhpUmVjdC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7Cisg
ICAgaGlSZWN0Lm9yaWdpbi55ID0gYm91bmRzLnNpemUuaGVpZ2h0IC0gZHJhd1JlY3QuYm90dG9t
OyAvLyBmbGlwIHkKKyAgICBoaVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0LnJpZ2h0IC0gZHJh
d1JlY3QubGVmdDsKKyAgICBoaVJlY3Quc2l6ZS5oZWlnaHQgPSBkcmF3UmVjdC5ib3R0b20gLSBk
cmF3UmVjdC50b3A7CiAKLS8vICAgIHByaW50ZiggIkRyYXdpbmc6IGRyYXdSZWN0IGlzICglZyAl
ZykgKCVnICVnKVxuIiwgaGlSZWN0Lm9yaWdpbi54LCBoaVJlY3Qub3JpZ2luLnksCi0vLyAgICAg
ICAgICAgIGhpUmVjdC5zaXplLndpZHRoLCBoaVJlY3Quc2l6ZS5oZWlnaHQgKTsKKy8vICAgIHBy
aW50ZigiRHJhd2luZzogZHJhd1JlY3QgaXMgKCVnICVnKSAoJWcgJWcpXG4iLCBoaVJlY3Qub3Jp
Z2luLngsIGhpUmVjdC5vcmlnaW4ueSwKKy8vICAgICAgICAgICAgaGlSZWN0LnNpemUud2lkdGgs
IGhpUmVjdC5zaXplLmhlaWdodCk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyBsYXlv
dXQgYmVmb3JlIENhcmJvbiBoYXMgZGVjaWRlZCB3aGF0IHJlZ2lvbiBuZWVkcyBkcmF3bi4KICAg
ICAvLyBJbiBDb2NvYSB3ZSBtYWtlIHN1cmUgdG8gZG8gbGF5b3V0IGFuZCBpbnZhbGlkYXRlIGFu
eSBuZXcgcmVnaW9ucyBiZWZvcmUgZHJhdywgc28gZXZlcnl0aGluZwpAQCAtMzc4LDQwICszNTQs
NDAgQEAgRHJhdyggSElXZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdAogICAgIGlmIChb
ZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAgICAg
IFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3dlYl91cGRhdGVMYXlvdXRBbmRTdHlsZUlm
TmVlZGVkUmVjdXJzaXZlXTsKIAotICAgIGlmICggaW5WaWV3LT5mSXNDb21wb3NpdGVkICkKKyAg
ICBpZiAoaW5WaWV3LT5mSXNDb21wb3NpdGVkKQogICAgICAgICBbaW5WaWV3LT5mV2ViVmlldyBk
aXNwbGF5SWZOZWVkZWRJblJlY3Q6ICooTlNSZWN0KikmaGlSZWN0XTsKICAgICBlbHNlCiAgICAg
ICAgIFtpblZpZXctPmZXZWJWaWV3IGRpc3BsYXlSZWN0OiooTlNSZWN0KikmaGlSZWN0XTsKIAog
ICAgIHJlc3RvcmVDR0NvbnRleHQoaW5WaWV3LT5mS2l0V2luZG93LCBzYXZlZENvbnRleHQpOwog
Ci0gICAgaWYgKCAhaW5WaWV3LT5mSXNDb21wb3NpdGVkICkKKyAgICBpZiAoIWluVmlldy0+Zklz
Q29tcG9zaXRlZCkKICAgICB7CiAgICAgICAgIEhJVmlld1JlZiAgICAgIHZpZXc7Ci0gICAgICAg
IEhJVmlld0ZpbmRCeUlEKCBISVZpZXdHZXRSb290KCBHZXRDb250cm9sT3duZXIoIGluVmlldy0+
ZlZpZXdSZWYgKSApLCBrSElWaWV3V2luZG93R3Jvd0JveElELCAmdmlldyApOwotICAgICAgICBp
ZiAoIHZpZXcgKQorICAgICAgICBISVZpZXdGaW5kQnlJRChISVZpZXdHZXRSb290KEdldENvbnRy
b2xPd25lcihpblZpZXctPmZWaWV3UmVmKSksIGtISVZpZXdXaW5kb3dHcm93Qm94SUQsICZ2aWV3
KTsKKyAgICAgICAgaWYgKHZpZXcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEhJUmVjdCAgICAg
ZnJhbWU7CisgICAgICAgICAgICBISVJlY3QgZnJhbWU7CiAKLSAgICAgICAgICAgIEhJVmlld0dl
dEJvdW5kcyggdmlldywgJmZyYW1lICk7Ci0gICAgICAgICAgICBISVZpZXdDb252ZXJ0UmVjdCgg
JmZyYW1lLCB2aWV3LCBOVUxMICk7CisgICAgICAgICAgICBISVZpZXdHZXRCb3VuZHModmlldywg
JmZyYW1lKTsKKyAgICAgICAgICAgIEhJVmlld0NvbnZlcnRSZWN0KCZmcmFtZSwgdmlldywgbnVs
bHB0cik7CiAKICAgICAgICAgICAgIGhpUmVjdC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7CiAg
ICAgICAgICAgICBoaVJlY3Qub3JpZ2luLnkgPSBkcmF3UmVjdC50b3A7CiAgICAgICAgICAgICBo
aVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0LnJpZ2h0IC0gZHJhd1JlY3QubGVmdDsKICAgICAg
ICAgICAgIGhpUmVjdC5zaXplLmhlaWdodCA9IGRyYXdSZWN0LmJvdHRvbSAtIGRyYXdSZWN0LnRv
cDsKIAotICAgICAgICAgICAgSElWaWV3Q29udmVydFJlY3QoICZoaVJlY3QsIGluVmlldy0+ZlZp
ZXdSZWYsIE5VTEwgKTsKKyAgICAgICAgICAgIEhJVmlld0NvbnZlcnRSZWN0KCZoaVJlY3QsIGlu
Vmlldy0+ZlZpZXdSZWYsIG51bGxwdHIpOwogCi0gICAgICAgICAgICBpZiAoIENHUmVjdEludGVy
c2VjdHNSZWN0KCBmcmFtZSwgaGlSZWN0ICkgKQotICAgICAgICAgICAgICAgIEhJVmlld1NldE5l
ZWRzRGlzcGxheSggdmlldywgdHJ1ZSApOworICAgICAgICAgICAgaWYgKENHUmVjdEludGVyc2Vj
dHNSZWN0KGZyYW1lLCBoaVJlY3QpKQorICAgICAgICAgICAgICAgIEhJVmlld1NldE5lZWRzRGlz
cGxheSh2aWV3LCB0cnVlKTsKICAgICAgICAgfQotICAgICB9CisgICAgfQogCi0gICAgaWYgKCBj
cmVhdGVkQ29udGV4dCApCisgICAgaWYgKGNyZWF0ZWRDb250ZXh0KQogICAgIHsKLSAgICAgICAg
Q0dDb250ZXh0U3luY2hyb25pemUoIGluQ29udGV4dCApOwotICAgICAgICBDR0NvbnRleHRSZWxl
YXNlKCBpbkNvbnRleHQgKTsKKyAgICAgICAgQ0dDb250ZXh0U3luY2hyb25pemUoaW5Db250ZXh0
KTsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShpbkNvbnRleHQpOwogICAgIH0KIH0KIApAQCAt
NDE5LDYxICszOTUsNTAgQEAgRHJhdyggSElXZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1p
dAogLy8gSGl0VGVzdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIENv
bnRyb2xQYXJ0Q29kZQotSGl0VGVzdCggSElXZWJWaWV3KiB2aWV3LCBjb25zdCBISVBvaW50KiB3
aGVyZSApCitzdGF0aWMgQ29udHJvbFBhcnRDb2RlIEhpdFRlc3QoSElXZWJWaWV3KiB2aWV3LCBj
b25zdCBISVBvaW50KiB3aGVyZSkKIHsKLQlISVJlY3QJCWJvdW5kczsKLQkKLQlISVZpZXdHZXRC
b3VuZHMoIHZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7Ci0KLQlpZiAoIENHUmVjdENvbnRhaW5z
UG9pbnQoIGJvdW5kcywgKndoZXJlICkgKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBr
Q29udHJvbE5vUGFydDsKKyAgICBISVJlY3QgYm91bmRzOworCisgICAgSElWaWV3R2V0Qm91bmRz
KHZpZXctPmZWaWV3UmVmLCAmYm91bmRzKTsKKworICAgIGlmIChDR1JlY3RDb250YWluc1BvaW50
KGJvdW5kcywgKndoZXJlKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIGtDb250cm9s
Tm9QYXJ0OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEdldFJlZ2lvbgog
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9TU3RhdHVzCi1HZXRSZWdp
b24oCi0JSElXZWJWaWV3KgkJCWluVmlldywKLQlDb250cm9sUGFydENvZGUJCWluUGFydCwKLQlS
Z25IYW5kbGUJCQlvdXRSZ24gKQotewotCU9TU3RhdHVzCSBlcnIgPSBldmVudE5vdEhhbmRsZWRF
cnI7Ci0JCi0JaWYgKCBpblBhcnQgPT0gLTMgKSAvLyBrQ29udHJvbE9wYXF1ZU1ldGFQYXJ0Ogot
CXsKLQkJaWYgKCBbaW5WaWV3LT5mV2ViVmlldyBpc09wYXF1ZV0gKQotCQl7Ci0JCQlISVJlY3QJ
Ym91bmRzOwotCQkJUmVjdAl0ZW1wOwotCQkJCi0JCQlISVZpZXdHZXRCb3VuZHMoIGluVmlldy0+
ZlZpZXdSZWYsICZib3VuZHMgKTsKLQotCQkJdGVtcC50b3AgPSAoU0ludDE2KWJvdW5kcy5vcmln
aW4ueTsKLQkJCXRlbXAubGVmdCA9IChTSW50MTYpYm91bmRzLm9yaWdpbi54OwotCQkJdGVtcC5i
b3R0b20gPSAoU0ludDE2KUNHUmVjdEdldE1heFkoIGJvdW5kcyApOwotCQkJdGVtcC5yaWdodCA9
IChTSW50MTYpQ0dSZWN0R2V0TWF4WCggYm91bmRzICk7Ci0KLQkJCVJlY3RSZ24oIG91dFJnbiwg
JnRlbXAgKTsKLQkJCWVyciA9IG5vRXJyOwotCQl9Ci0JfQotCQotCXJldHVybiBlcnI7CitzdGF0
aWMgT1NTdGF0dXMgR2V0UmVnaW9uKEhJV2ViVmlldyogaW5WaWV3LCBDb250cm9sUGFydENvZGUg
aW5QYXJ0LCBSZ25IYW5kbGUgb3V0UmduKQoreworICAgIE9TU3RhdHVzIGVyciA9IGV2ZW50Tm90
SGFuZGxlZEVycjsKKworICAgIGlmIChpblBhcnQgPT0gLTMgJiYgW2luVmlldy0+ZldlYlZpZXcg
aXNPcGFxdWVdKSB7CisgICAgICAgIC8vIGtDb250cm9sT3BhcXVlTWV0YVBhcnQ6CisgICAgICAg
IEhJUmVjdCBib3VuZHM7CisgICAgICAgIFJlY3QgdGVtcDsKKworICAgICAgICBISVZpZXdHZXRC
b3VuZHMoaW5WaWV3LT5mVmlld1JlZiwgJmJvdW5kcyk7CisKKyAgICAgICAgdGVtcC50b3AgPSAo
U0ludDE2KWJvdW5kcy5vcmlnaW4ueTsKKyAgICAgICAgdGVtcC5sZWZ0ID0gKFNJbnQxNilib3Vu
ZHMub3JpZ2luLng7CisgICAgICAgIHRlbXAuYm90dG9tID0gKFNJbnQxNilDR1JlY3RHZXRNYXhZ
KGJvdW5kcyk7CisgICAgICAgIHRlbXAucmlnaHQgPSAoU0ludDE2KUNHUmVjdEdldE1heFgoYm91
bmRzKTsKKworICAgICAgICBSZWN0UmduKG91dFJnbiwgJnRlbXApOworICAgICAgICBlcnIgPSBu
b0VycjsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgV2luZG93UmVmCi1H
ZXRXaW5kb3dSZWYoIEhJV2ViVmlldyogaW5WaWV3ICkKK3N0YXRpYyBXaW5kb3dSZWYgR2V0V2lu
ZG93UmVmKEhJV2ViVmlldyogaW5WaWV3KQogewotICAgICAgIHJldHVybiBHZXRDb250cm9sT3du
ZXIoIGluVmlldy0+ZlZpZXdSZWYgKTsKKyAgICByZXR1cm4gR2V0Q29udHJvbE93bmVyKGluVmll
dy0+ZlZpZXdSZWYpOwogfQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVOU0V2ZW50QWRvcHRp
bmdDR0V2ZW50KCBDR0V2ZW50UmVmIGNnRXZlbnQsIEV2ZW50UmVmIGV2ZW50UmVmICkKK3N0YXRp
YyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50QWRvcHRpbmdDR0V2ZW50KENHRXZlbnRSZWYgY2dFdmVu
dCwgRXZlbnRSZWYgZXZlbnRSZWYpCiB7CiAgICAgTlNFdmVudCAqcmVzdWx0ID0gW1tOU0V2ZW50
IGFsbG9jXSBfaW5pdFdpdGhDR0V2ZW50OmNnRXZlbnQgZXZlbnRSZWY6ZXZlbnRSZWZdOwogICAg
IENGUmVsZWFzZShjZ0V2ZW50KTsKQEAgLTQ4MSwxMSArNDQ2LDExIEBAIENyZWF0ZU5TRXZlbnRB
ZG9wdGluZ0NHRXZlbnQoIENHRXZlbnRSZWYKIH0KIAogc3RhdGljIEJvb2xlYW4KLUNvcHlFdmVu
dENHRXZlbnQoIEV2ZW50UmVmIGV2ZW50LCBDR0V2ZW50UmVmKiBjZ0V2ZW50ICkKK0NvcHlFdmVu
dENHRXZlbnQoRXZlbnRSZWYgZXZlbnQsIENHRXZlbnRSZWYqIGNnRXZlbnQpCiB7CiAgICAgaWYg
KCgqY2dFdmVudCA9IENvcHlFdmVudENHRXZlbnQoZXZlbnQpKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCisKICAgICAvLyBUaGlzIGV2ZW50IG1pZ2h0IG5vdCBoYXZlIGJlZW4gY3JlYXRl
ZCBkaXJlY3RseSBmcm9tIGEgQ0dTIGV2ZW50LCBhbmQgbWlnaHQgbm90CiAgICAgLy8gaGF2ZSBh
IENHRXZlbnRSZWYgYXNzb2NpYXRlZCB3aXRoIGl0LiBJbiB0aGF0IGNhc2UsIHRyeSB1c2luZyB0
aGUgZXZlbnQgbW9zdAogICAgIC8vIHJlY2VudGx5IGRpc3BhdGNoZWQgYnkgdGhlIGV2ZW50IGRp
c3BhdGNoZXIsIHdoaWNoIGlzIGxpa2VseSB0byBiZSB0aGUgb3JpZ2luYWwKQEAgLTQ5NiwzNyAr
NDYxLDM2IEBAIENvcHlFdmVudENHRXZlbnQoIEV2ZW50UmVmIGV2ZW50LCBDR0V2ZW4KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBOU0V2ZW50ICoKLUNyZWF0ZU5TRXZlbnRXaXRoQ2Fy
Ym9uQ2xpY2tFdmVudCggRXZlbnRSZWYgaW5FdmVudCwgV2luZG93UmVmIHdpbmRvd1JlZiApCitz
dGF0aWMgTlNFdmVudCAqQ3JlYXRlTlNFdmVudFdpdGhDYXJib25DbGlja0V2ZW50KEV2ZW50UmVm
IGluRXZlbnQsIFdpbmRvd1JlZiB3aW5kb3dSZWYpCiB7CiAgICAgRXZlbnRSZWYgbmV3RXZlbnQ7
CiAgICAgUG9pbnQgd2hlcmU7CiAgICAgT1NTdGF0dXMgZXJyOwogICAgIFVJbnQzMiBtb2RpZmll
cnM7CiAgICAgUmVjdCB3aW5kUmVjdDsKLSAgICAKLSAgICBDR0V2ZW50UmVmIGNnRXZlbnQgPSBO
VUxMOworCisgICAgQ0dFdmVudFJlZiBjZ0V2ZW50ID0gbnVsbHB0cjsKICAgICBpZiAoIUNvcHlF
dmVudENHRXZlbnQoaW5FdmVudCwgJmNnRXZlbnQpKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IAorCiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHRoZSBldmVudCBiZSBhIGtFdmVudE1vdXNlRG93
biBldmVudCwgb3IgdGhlIHdlYmtpdCBtaWdodCB0cmlwIHVwIHdoZW4KICAgICAvLyB3ZSBjbGlj
ayBvbiBhIE5ldHNjYXBlIHBsdWdpbi4gSXQgY2FsbHMgQ29udmVydEV2ZW50UmVmVG9FdmVudFJl
Y29yZCwgYXNzdW1pbmcKICAgICAvLyB0aGF0IG1vdXNlRG93biB3YXMgcGFzc2VkIGFuIGV2ZW50
IHdpdGggYSByZWFsIG1vdXNlIGRvd24gZXZlbnRSZWYuIFdlIGp1c3QgbmVlZCBhCiAgICAgLy8g
bWluaW1hbCBvbmUgaGVyZS4KLSAgICAKLSAgICBlcnIgPSBDcmVhdGVFdmVudChOVUxMLCBrRXZl
bnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZURvd24sIEdldEV2ZW50VGltZShpbkV2ZW50KSwgMCwg
Jm5ld0V2ZW50KTsKKworICAgIGVyciA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIGtFdmVudENsYXNz
TW91c2UsIGtFdmVudE1vdXNlRG93biwgR2V0RXZlbnRUaW1lKGluRXZlbnQpLCAwLCAmbmV3RXZl
bnQpOwogICAgIGlmIChlcnIgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5kb3dNb3VzZUxvY2F0
aW9uLCB0eXBlUURQb2ludCwgTlVMTCwgc2l6ZW9mKFBvaW50KSwgTlVMTCwgJndoZXJlKTsKKwor
ICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93TW91c2VMb2Nh
dGlvbiwgdHlwZVFEUG9pbnQsIG51bGxwdHIsIHNpemVvZihQb2ludCksIG51bGxwdHIsICZ3aGVy
ZSk7CiAgICAgR2V0V2luZG93Qm91bmRzKHdpbmRvd1JlZiwga1dpbmRvd1N0cnVjdHVyZVJnbiwg
JndpbmRSZWN0KTsKICAgICB3aGVyZS5oICs9IHdpbmRSZWN0LmxlZnQ7CiAgICAgd2hlcmUudiAr
PSB3aW5kUmVjdC50b3A7Ci0gICAgCi0gICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2
ZW50UGFyYW1LZXlNb2RpZmllcnMsIHR5cGVVSW50MzIsIE5VTEwsIHNpemVvZihVSW50MzIpLCBO
VUxMLCAmbW9kaWZpZXJzKTsKKworICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVu
dFBhcmFtS2V5TW9kaWZpZXJzLCB0eXBlVUludDMyLCBudWxscHRyLCBzaXplb2YoVUludDMyKSwg
bnVsbHB0ciwgJm1vZGlmaWVycyk7CiAgICAgU2V0RXZlbnRQYXJhbWV0ZXIobmV3RXZlbnQsIGtF
dmVudFBhcmFtTW91c2VMb2NhdGlvbiwgdHlwZVFEUG9pbnQsIHNpemVvZihQb2ludCksICZ3aGVy
ZSk7CiAgICAgU2V0RXZlbnRQYXJhbWV0ZXIobmV3RXZlbnQsIGtFdmVudFBhcmFtS2V5TW9kaWZp
ZXJzLCB0eXBlVUludDMyLCBzaXplb2YoVUludDMyKSwgJm1vZGlmaWVycyk7Ci0gICAgCisKICAg
ICByZXR1cm4gQ3JlYXRlTlNFdmVudEFkb3B0aW5nQ0dFdmVudChjZ0V2ZW50LCBuZXdFdmVudCk7
CiB9CiAKQEAgLTUzNCw4ICs0OTgsNyBAQCBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkNsaWNrRXZl
bnQoIEV2ZW50CiAvLyBDbGljawogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3Rh
dGljIE9TU3RhdHVzCi1DbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkK
K3N0YXRpYyBPU1N0YXR1cyBDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVu
dCkKIHsKICAgICBOU0V2ZW50ICpraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uQ2xp
Y2tFdmVudChpbkV2ZW50LCBHZXRXaW5kb3dSZWYoaW5WaWV3KSk7CiAKQEAgLTU1Miw4ICs1MTUs
NyBAQCBDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVuCiAgICAgcmV0dXJu
IG5vRXJyOwogfQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2
ZW50KCBFdmVudFJlZiBpbkV2ZW50ICkKK3N0YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50V2l0
aENhcmJvbkV2ZW50KEV2ZW50UmVmIGluRXZlbnQpCiB7CiAgICAgTlNFdmVudCAqZXZlbnQgPSBb
TlNFdmVudCBldmVudFdpdGhFdmVudFJlZjppbkV2ZW50XTsKICAgICBpZiAoIWV2ZW50KQpAQCAt
NTY2LDggKzUyOCw3IEBAIENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQoIEV2ZW50UmVmIGkK
IC8vIE1vdXNlVXAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBPU1N0
YXR1cwotTW91c2VVcCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKQorc3Rh
dGljIE9TU3RhdHVzIE1vdXNlVXAoSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQp
CiB7CiAgICAgTlNFdmVudCoga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50
KGluRXZlbnQpOwogCkBAIC01NzUsMTEgKzUzNiwxMCBAQCBNb3VzZVVwKCBISVdlYlZpZXcqIGlu
VmlldywgRXZlbnRSZWYgaW5FCiAKICAgICBba2l0RXZlbnQgcmVsZWFzZV07CiAKLQlyZXR1cm4g
bm9FcnI7CisgICAgcmV0dXJuIG5vRXJyOwogfQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVO
U0V2ZW50V2l0aENhcmJvbk1vdXNlTW92ZUV2ZW50KCBFdmVudFJlZiBpbkV2ZW50LCBOU1dpbmRv
dyAqd2luZG93ICkKK3N0YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50V2l0aENhcmJvbk1vdXNl
TW92ZUV2ZW50KEV2ZW50UmVmIGluRXZlbnQsIE5TV2luZG93ICp3aW5kb3cpCiB7CiAgICAgTlNF
dmVudCoga2l0RXZlbnQgPSBbTlNFdmVudCBldmVudFdpdGhFdmVudFJlZjppbkV2ZW50XTsKIApA
QCAtNTk5LDIyICs1NTksMjAgQEAgQ3JlYXRlTlNFdmVudFdpdGhDYXJib25Nb3VzZU1vdmVFdmVu
dCggRQogLy8gTW91c2VNb3ZlZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3Rh
dGljIE9TU3RhdHVzCi1Nb3VzZU1vdmVkKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5F
dmVudCApCitzdGF0aWMgT1NTdGF0dXMgTW91c2VNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZl
bnRSZWYgaW5FdmVudCkKIHsKICAgICBOU0V2ZW50ICpraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRX
aXRoQ2FyYm9uTW91c2VNb3ZlRXZlbnQoaW5FdmVudCwgaW5WaWV3LT5mS2l0V2luZG93KTsKICAg
ICBbaW5WaWV3LT5mS2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0JW2tpdEV2ZW50IHJl
bGVhc2VdOworICAgIFtraXRFdmVudCByZWxlYXNlXTsKIAotCXJldHVybiBub0VycjsKKyAgICBy
ZXR1cm4gbm9FcnI7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTW91c2VE
cmFnZ2VkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgT1NTdGF0dXMK
LU1vdXNlRHJhZ2dlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKQorc3Rh
dGljIE9TU3RhdHVzIE1vdXNlRHJhZ2dlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5F
dmVudCkKIHsKICAgICBOU0V2ZW50KiBraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9u
RXZlbnQoaW5FdmVudCk7CiAKQEAgLTYyMiwxNSArNTgwLDE0IEBAIE1vdXNlRHJhZ2dlZCggSElX
ZWJWaWV3KiBpblZpZXcsIEV2ZW50UmUKIAogICAgIFtraXRFdmVudCByZWxlYXNlXTsKIAotCXJl
dHVybiBub0VycjsKKyAgICByZXR1cm4gbm9FcnI7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogLy8gTW91c2VEcmFnZ2VkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
Ci1zdGF0aWMgT1NTdGF0dXMKLU1vdXNlV2hlZWxNb3ZlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2
ZW50UmVmIGluRXZlbnQgKQorc3RhdGljIE9TU3RhdHVzIE1vdXNlV2hlZWxNb3ZlZChISVdlYlZp
ZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkKIHsKICAgICBOU0V2ZW50KiBraXRFdmVudCA9
IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQoaW5FdmVudCk7CiAKQEAgLTYzOCwyMyArNTk1
LDIyIEBAIE1vdXNlV2hlZWxNb3ZlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW4KIAogICAgIFtr
aXRFdmVudCByZWxlYXNlXTsKIAotCXJldHVybiBub0VycjsKKyAgICByZXR1cm4gbm9FcnI7CiB9
CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ29udGV4dE1lbnVDbGljawogLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9TU3RhdHVzCi1Db250ZXh0TWVu
dUNsaWNrKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApCitzdGF0aWMgT1NT
dGF0dXMgQ29udGV4dE1lbnVDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVu
dCkKIHsKICAgICBOU1ZpZXcgKndlYlZpZXcgPSBpblZpZXctPmZXZWJWaWV3OwogICAgIE5TV2lu
ZG93ICp3aW5kb3cgPSBbd2ViVmlldyB3aW5kb3ddOwogCiAgICAgLy8gR2V0IHRoZSBwb2ludCBv
dXQgb2YgdGhlIGV2ZW50LgogICAgIEhJUG9pbnQgcG9pbnQ7Ci0gICAgR2V0RXZlbnRQYXJhbWV0
ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgTlVMTCwg
c2l6ZW9mKHBvaW50KSwgTlVMTCwgJnBvaW50KTsKLSAgICBISVZpZXdDb252ZXJ0UG9pbnQoJnBv
aW50LCBpblZpZXctPmZWaWV3UmVmLCBOVUxMKTsKKyAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2
ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVISVBvaW50LCBudWxscHRyLCBzaXpl
b2YocG9pbnQpLCBudWxscHRyLCAmcG9pbnQpOworICAgIEhJVmlld0NvbnZlcnRQb2ludCgmcG9p
bnQsIGluVmlldy0+ZlZpZXdSZWYsIG51bGxwdHIpOwogICAgIAogICAgIC8vIEZsaXAgdGhlIFkg
Y29vcmRpbmF0ZSwgc2luY2UgQ2FyYm9uIGlzIGZsaXBwZWQgcmVsYXRpdmUgdG8gdGhlIEFwcEtp
dC4KICAgICBOU1BvaW50IGxvY2F0aW9uID0gTlNNYWtlUG9pbnQocG9pbnQueCwgW3dpbmRvdyBm
cmFtZV0uc2l6ZS5oZWlnaHQgLSBwb2ludC55KTsKQEAgLTY3NywyOSArNjMzLDIxIEBAIENvbnRl
eHRNZW51Q2xpY2soIEhJV2ViVmlldyogaW5WaWV3LCBFdmUKIC8vIEdldEtpbmQKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBDb250cm9sS2luZAotR2V0S2luZCgpCitz
dGF0aWMgQ29udHJvbEtpbmQgR2V0S2luZCgpCiB7Ci0JY29uc3QgQ29udHJvbEtpbmQga015S2lu
ZCA9IHsgJ2FwcGwnLCAnd2J2dycgfTsKLQkKLQlyZXR1cm4ga015S2luZDsKKyAgICBjb25zdCBD
b250cm9sS2luZCBrTXlLaW5kID0geyAnYXBwbCcsICd3YnZ3JyB9OworICAgIAorICAgIHJldHVy
biBrTXlLaW5kOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEJvdW5kc0No
YW5nZWQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1Cb3Vu
ZHNDaGFuZ2VkKAotCUhJV2ViVmlldyoJCQlpblZpZXcsCi0JVUludDMyCQkJCWluT3B0aW9ucywK
LQljb25zdCBISVJlY3QqCQlpbk9yaWdpbmFsQm91bmRzLAotCWNvbnN0IEhJUmVjdCoJCWluQ3Vy
cmVudEJvdW5kcyApCi17Ci0JaWYgKCBpblZpZXctPmZXZWJWaWV3ICkKLQl7Ci0JCVN5bmNGcmFt
ZSggaW5WaWV3ICk7Ci0JfQorc3RhdGljIHZvaWQgQm91bmRzQ2hhbmdlZChISVdlYlZpZXcqIGlu
VmlldywgVUludDMyIGluT3B0aW9ucywgY29uc3QgSElSZWN0KiBpbk9yaWdpbmFsQm91bmRzLCBj
b25zdCBISVJlY3QqIGluQ3VycmVudEJvdW5kcykKK3sKKyAgICBpZiAoaW5WaWV3LT5mV2ViVmll
dykKKyAgICAgICAgU3luY0ZyYW1lKGluVmlldyk7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtNzA3LDE3ICs2NTUsMTMgQEAgQm91bmRzQ2hhbmdlZCgKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogLy8KIHN0YXRpYyB2b2lkCi1Pd25pbmdXaW5kb3dDaGFuZ2VkKAot
CUhJV2ViVmlldyoJCQl2aWV3LAotCVdpbmRvd1JlZgkJCW9sZFdpbmRvdywKLQlXaW5kb3dSZWYJ
CQluZXdXaW5kb3cgKQorT3duaW5nV2luZG93Q2hhbmdlZChISVdlYlZpZXcqIHZpZXcsIFdpbmRv
d1JlZiBvbGRXaW5kb3csIFdpbmRvd1JlZiBuZXdXaW5kb3cpCiB7Ci0gICAgaWYgKCBuZXdXaW5k
b3cgKXsKLSAgICAgICAgV2luZG93QXR0cmlidXRlcwlhdHRyczsKKyAgICBpZiAobmV3V2luZG93
KSB7CisgICAgICAgIFdpbmRvd0F0dHJpYnV0ZXMgYXR0cnM7CiAgICAgICAgIAotICAgICAgICBP
U1N0YXR1cyBlcnIgPSBHZXRXaW5kb3dQcm9wZXJ0eShuZXdXaW5kb3csIE5TQXBwS2l0UHJvcGVy
dHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiks
IE5VTEwsICZ2aWV3LT5mS2l0V2luZG93KTsKLSAgICAgICAgaWYgKCBlcnIgIT0gbm9FcnIgKQot
ICAgICAgICB7CisgICAgICAgIE9TU3RhdHVzIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KG5ld1dp
bmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcs
IHNpemVvZihOU1dpbmRvdyAqKSwgbnVsbHB0ciwgJnZpZXctPmZLaXRXaW5kb3cpOworICAgICAg
ICBpZiAoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudFR5cGVTcGVjIGtX
aW5kb3dFdmVudHNbXSA9IHsKICAgICAgICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVu
dFdpbmRvd0Nsb3NlZCB9LAogICAgICAgICAgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRN
b3VzZU1vdmVkIH0sCkBAIC03MzMsMTUxICs2NzcsMTI0IEBAIE93bmluZ1dpbmRvd0NoYW5nZWQo
CiAgICAgICAgICAgICB2aWV3LT5mS2l0V2luZG93ID0gW1tDYXJib25XaW5kb3dBZGFwdGVyIGFs
bG9jXSBpbml0V2l0aENhcmJvbldpbmRvd1JlZjogbmV3V2luZG93IHRha2luZ093bmVyc2hpcDog
Tk8gZGlzYWJsZU9yZGVyaW5nOk5PIGNhcmJvbjpZRVNdOwogICAgICAgICAgICAgU2V0V2luZG93
UHJvcGVydHkobmV3V2luZG93LCBOU0FwcEtpdFByb3BlcnR5Q3JlYXRvciwgTlNDYXJib25XaW5k
b3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5TV2luZG93ICopLCAmdmlldy0+ZktpdFdpbmRvdyk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEluc3RhbGxXaW5kb3dFdmVudEhhbmRsZXIoIG5ld1dp
bmRvdywgV2luZG93SGFuZGxlciwgR2V0RXZlbnRUeXBlQ291bnQoIGtXaW5kb3dFdmVudHMgKSwg
a1dpbmRvd0V2ZW50cywgbmV3V2luZG93LCBOVUxMICk7CisgICAgICAgICAgICBJbnN0YWxsV2lu
ZG93RXZlbnRIYW5kbGVyKG5ld1dpbmRvdywgV2luZG93SGFuZGxlciwgR2V0RXZlbnRUeXBlQ291
bnQoa1dpbmRvd0V2ZW50cyksIGtXaW5kb3dFdmVudHMsIG5ld1dpbmRvdywgbnVsbHB0cik7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFtbdmlldy0+ZktpdFdpbmRvdyBjb250ZW50Vmll
d10gYWRkU3Vidmlldzp2aWV3LT5mV2ViVmlld107CiAgICAgICAgIAotICAgICAgICBHZXRXaW5k
b3dBdHRyaWJ1dGVzKCBuZXdXaW5kb3csICZhdHRycyApOwotICAgICAgICB2aWV3LT5mSXNDb21w
b3NpdGVkID0gKCAoIGF0dHJzICYga1dpbmRvd0NvbXBvc2l0aW5nQXR0cmlidXRlICkgIT0gMCAp
OworICAgICAgICBHZXRXaW5kb3dBdHRyaWJ1dGVzKG5ld1dpbmRvdywgJmF0dHJzKTsKKyAgICAg
ICAgdmlldy0+ZklzQ29tcG9zaXRlZCA9IGF0dHJzICYga1dpbmRvd0NvbXBvc2l0aW5nQXR0cmli
dXRlOwogICAgICAgICAKLSAgICAgICAgU3luY0ZyYW1lKCB2aWV3ICk7ICAgICAgICAKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKKyAgICAgICAgU3luY0ZyYW1lKHZpZXcpOyAgICAgICAgCisgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gQmUgc3VyZSB0byBkZXRhY2ggdGhlIGNvY29hIHZpZXcsIHRv
by4KLSAgICAgICAgaWYgKCB2aWV3LT5mV2ViVmlldyApCisgICAgICAgIGlmICh2aWV3LT5mV2Vi
VmlldykKICAgICAgICAgICAgIFt2aWV3LT5mV2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
ICAgICAgICAgCi0gICAgICAgIHZpZXctPmZLaXRXaW5kb3cgPSBOVUxMOyAvLyBicmVhayB0aGUg
dGllcyB0aGF0IGJpbmQKKyAgICAgICAgdmlldy0+ZktpdFdpbmRvdyA9IG51bGxwdHI7IC8vIGJy
ZWFrIHRoZSB0aWVzIHRoYXQgYmluZAogICAgIH0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLwlXaW5kb3dIYW5kbGVyCisvLyAgICBXaW5kb3dIYW5kbGVyCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCVJlZGlyZWN0IG1vdXNlIGV2ZW50cyB0byB0aGUg
dmlld3MgYmVuZWF0aCB0aGVtLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBXZWJLaXQgdG8gd29yawot
Ly8gCXByb3Blcmx5LiBXZSBpbnN0YWxsIGl0IG9uY2UgcGVyIHdpbmRvdy4gV2UgYWxzbyB0YXAg
aW50byB3aW5kb3cgY2xvc2UgdG8gcmVsZWFzZQotLy8JdGhlIE5TV2luZG93IHRoYXQgc2hhZG93
cyBvdXIgQ2FyYm9uIHdpbmRvdy4KLS8vCi1zdGF0aWMgT1NTdGF0dXMKLVdpbmRvd0hhbmRsZXIo
IEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBpbkV2ZW50LCB2b2lkKiBp
blVzZXJEYXRhICkKLXsKLQlXaW5kb3dSZWYJd2luZG93ID0gKFdpbmRvd1JlZilpblVzZXJEYXRh
OwotCU9TU3RhdHVzCXJlc3VsdCA9IGV2ZW50Tm90SGFuZGxlZEVycjsKKy8vICAgIFJlZGlyZWN0
IG1vdXNlIGV2ZW50cyB0byB0aGUgdmlld3MgYmVuZWF0aCB0aGVtLiBUaGlzIGlzIHJlcXVpcmVk
IGZvciBXZWJLaXQgdG8gd29yaworLy8gICAgcHJvcGVybHkuIFdlIGluc3RhbGwgaXQgb25jZSBw
ZXIgd2luZG93LiBXZSBhbHNvIHRhcCBpbnRvIHdpbmRvdyBjbG9zZSB0byByZWxlYXNlCisvLyAg
ICB0aGUgTlNXaW5kb3cgdGhhdCBzaGFkb3dzIG91ciBDYXJib24gd2luZG93LgorLy8KK3N0YXRp
YyBPU1N0YXR1cyBXaW5kb3dIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBF
dmVudFJlZiBpbkV2ZW50LCB2b2lkKiBpblVzZXJEYXRhKQoreworICAgIFdpbmRvd1JlZiB3aW5k
b3cgPSAoV2luZG93UmVmKWluVXNlckRhdGE7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gZXZlbnRO
b3RIYW5kbGVkRXJyOworCisgICAgTlNXaW5kb3cqIGtpdFdpbmRvdzsKKyAgICBPU1N0YXR1cyBl
cnIgPSBub0VycjsKKyAgICBOU0V2ZW50KiBraXRFdmVudDsKKworICAgIHN3aXRjaCAoR2V0RXZl
bnRDbGFzcyhpbkV2ZW50KSkgeworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgorICAgICAg
ICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAgICAgICBjYXNlIGtFdmVudENv
bnRyb2xDbGljazoKKyAgICAgICAgICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmtpdFdpbmRvdzsK
IAotICAgIHN3aXRjaCggR2V0RXZlbnRDbGFzcyggaW5FdmVudCApICkKLSAgICB7Ci0gICAgCWNh
c2Uga0V2ZW50Q2xhc3NDb250cm9sOgotICAgICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNo
KCBHZXRFdmVudEtpbmQoIGluRXZlbnQgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBrRXZlbnRDb250cm9sQ2xpY2s6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmtpdFdpbmRvdzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE9TU3RhdHVzIGVycjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkoIHdpbmRv
dywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNp
emVvZihOU1dpbmRvdyAqKSwgTlVMTCwgJmtpdFdpbmRvdyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYmUgb3V0c2lkZSB0aGUg
SElXZWJWaWV3LCByZWxpbnF1aXNoIGZvY3VzLgotICAgICAgICAgICAgICAgICAgICAgICAgW2tp
dFdpbmRvdyByZWxpbnF1aXNoRm9jdXNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KHdpbmRvdywgTlNBcHBLaXRQcm9wZXJ0
eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRvdyAqKSwg
bnVsbHB0ciwgJmtpdFdpbmRvdyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBX
ZSBtdXN0IGJlIG91dHNpZGUgdGhlIEhJV2ViVmlldywgcmVsaW5xdWlzaCBmb2N1cy4KKyAgICAg
ICAgICAgIFtraXRXaW5kb3cgcmVsaW5xdWlzaEZvY3VzXTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgCWNhc2Uga0V2ZW50
Q2xhc3NLZXlib2FyZDoKLSAgICAJCXsKLSAgICAgICAgICAgICAgICBOU1dpbmRvdyoJCWtpdFdp
bmRvdzsKLSAgICAgICAgICAgICAgICBPU1N0YXR1cwkJZXJyOwotICAgCQkJCU5TRXZlbnQqCQlr
aXRFdmVudDsKLSAgIAkJCQkKLSAgIAkJCQkvLyBpZiB0aGUgZmlyc3QgcmVzcG9uZGVyIGluIHRo
ZSBraXQgd2luZG93IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZQotICAgCQkJCS8vIHdpbmRv
dywgd2UgYXNzdW1lIGEgc3VidmlldyBvZiB0aGUgd2VidmlldyBpcyBmb2N1c2VkLiB3ZSBtdXN0
IHNlbmQKLSAgIAkJCQkvLyB0aGUgZXZlbnQgdG8gdGhlIHdpbmRvdyBzbyB0aGF0IGl0IGdvZXMg
dGhyb3VnaCB0aGUga2l0J3Mgbm9ybWFsIFRTTQotICAgCQkJCS8vIGxvZ2ljLCBhbmQgLS0gbW9y
ZSBpbXBvcnRhbnRseSAtLSBhbGxvd3MgYW55IGRlbGVnYXRlcyBhc3NvY2lhdGVkCi0gICAJCQkJ
Ly8gd2l0aCB0aGUgZmlyc3QgcmVzcG9uZGVyIHRvIGhhdmUgYSBjaGFuY2UgYXQgdGhlIGV2ZW50
LgotICAgCQkJCQotCQkJCWVyciA9IEdldFdpbmRvd1Byb3BlcnR5KCB3aW5kb3csIE5TQXBwS2l0
UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5k
b3cgKiksIE5VTEwsICZraXRXaW5kb3cpOwotCQkJCWlmICggZXJyID09IG5vRXJyICkKLQkJCQl7
Ci0JCQkJCU5TUmVzcG9uZGVyKiByZXNwb25kZXIgPSBba2l0V2luZG93IGZpcnN0UmVzcG9uZGVy
XTsKLQkJCQkJaWYgKCByZXNwb25kZXIgIT0ga2l0V2luZG93ICkKLQkJCQkJewotICAgICAgICAg
ICAgICAgICAgICAgICAga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGlu
RXZlbnQpOwotCQkJCQkJCi0JCQkJCQlba2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0J
CQkJCQlba2l0RXZlbnQgcmVsZWFzZV07Ci0JCQkJCQkKLQkJCQkJCXJlc3VsdCA9IG5vRXJyOwot
CQkJCQl9Ci0JCQkJfQotICAgIAkJfQotICAgIAkJYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZl
bnRDbGFzc1dpbmRvdzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOU1dpbmRvdyoJ
a2l0V2luZG93OwotICAgICAgICAgICAgICAgIE9TU3RhdHVzCWVycjsKKyAgICBjYXNlIGtFdmVu
dENsYXNzS2V5Ym9hcmQ6CisgICAgICAgIC8vIGlmIHRoZSBmaXJzdCByZXNwb25kZXIgaW4gdGhl
IGtpdCB3aW5kb3cgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlCisgICAgICAgIC8vIHdpbmRv
dywgd2UgYXNzdW1lIGEgc3VidmlldyBvZiB0aGUgd2VidmlldyBpcyBmb2N1c2VkLiB3ZSBtdXN0
IHNlbmQKKyAgICAgICAgLy8gdGhlIGV2ZW50IHRvIHRoZSB3aW5kb3cgc28gdGhhdCBpdCBnb2Vz
IHRocm91Z2ggdGhlIGtpdCdzIG5vcm1hbCBUU00KKyAgICAgICAgLy8gbG9naWMsIGFuZCAtLSBt
b3JlIGltcG9ydGFudGx5IC0tIGFsbG93cyBhbnkgZGVsZWdhdGVzIGFzc29jaWF0ZWQKKyAgICAg
ICAgLy8gd2l0aCB0aGUgZmlyc3QgcmVzcG9uZGVyIHRvIGhhdmUgYSBjaGFuY2UgYXQgdGhlIGV2
ZW50LgorCisgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KHdpbmRvdywgTlNBcHBLaXRQ
cm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRv
dyAqKSwgbnVsbHB0ciwgJmtpdFdpbmRvdyk7CisgICAgICAgIGlmIChlcnIgPT0gbm9FcnIpIHsK
KyAgICAgICAgICAgIE5TUmVzcG9uZGVyKiByZXNwb25kZXIgPSBba2l0V2luZG93IGZpcnN0UmVz
cG9uZGVyXTsKKyAgICAgICAgICAgIGlmIChyZXNwb25kZXIgIT0ga2l0V2luZG93KSB7CisgICAg
ICAgICAgICAgICAga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGluRXZl
bnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFtraXRXaW5kb3cgc2VuZEV2
ZW50OmtpdEV2ZW50XTsKKyAgICAgICAgICAgICAgICBba2l0RXZlbnQgcmVsZWFzZV07CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkoIHdp
bmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcs
IHNpemVvZihOU1dpbmRvdyAqKSwgTlVMTCwgJmtpdFdpbmRvdyk7Ci0gICAgICAgICAgICAgICAg
aWYgKCBlcnIgPT0gbm9FcnIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgW2tpdFdpbmRvdyBfcmVtb3ZlV2luZG93UmVmXTsKLSAgICAgICAgICAgICAgICAgICAgW2tp
dFdpbmRvdyBjbG9zZV07Ci0gICAgICAgICAgICAgICAgfQotCQogICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG5vRXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtFdmVudENsYXNzV2luZG93OgogICAgICAg
ICAKLSAgICAgICAgY2FzZSBrRXZlbnRDbGFzc01vdXNlOgotICAgICAgICAgICAgc3dpdGNoIChH
ZXRFdmVudEtpbmQoaW5FdmVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBrRXZlbnRNb3VzZU1vdmVkOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBQb2ludCB3aGVyZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEV2ZW50
UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtTW91c2VMb2NhdGlvbiwgdHlwZVFEUG9pbnQs
IE5VTEwsIHNpemVvZihQb2ludCksIE5VTEwsICZ3aGVyZSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFdpbmRvd1JlZiB0ZW1wOwotICAgICAgICAgICAgICAgICAgICAgICAgRmluZFdpbmRv
dyh3aGVyZSwgJnRlbXApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gd2lu
ZG93KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlY3QgYm91bmRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFdpbmRvd0Jv
dW5kcyh3aW5kb3csIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZib3VuZHMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdoZXJlLmggLT0gYm91bmRzLmxlZnQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hlcmUudiAtPSBib3VuZHMudG9wOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93UmVmLCB0
eXBlV2luZG93UmVmLCBzaXplb2YoV2luZG93UmVmKSwgJndpbmRvdyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5k
b3dNb3VzZUxvY2F0aW9uLCB0eXBlUURQb2ludCwgc2l6ZW9mKFBvaW50KSwgJndoZXJlKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TU3RhdHVzIGVyciA9IG5vRXJyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEhJVmlld1JlZiB2aWV3ID0gTlVMTDsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVyciA9IEhJVmlld0dldFZpZXdGb3JNb3VzZUV2ZW50KEhJVmll
d0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgdmlldyAmJiBISU9iamVjdElzT2ZDbGFzcygoSElP
YmplY3RSZWYpdmlldywga0hJV2ViVmlld0NsYXNzSUQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0V2l0aE9wdGlvbnMoaW5F
dmVudCwgSElPYmplY3RHZXRFdmVudFRhcmdldCgoSElPYmplY3RSZWYpdmlldyksIGtFdmVudFRh
cmdldERvbnRQcm9wYWdhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGNhc2Uga0V2ZW50TW91c2VVcDoKLSAgICAgICAgICAgICAgICBj
YXNlIGtFdmVudE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgICAgICAgICBjYXNlIGtFdmVudE1vdXNl
V2hlZWxNb3ZlZDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgT1NTdGF0dXMgZXJyID0gbm9FcnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBISVZpZXdS
ZWYgdmlldyA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEhJVmlld0dl
dFZpZXdGb3JNb3VzZUV2ZW50KEhJVmlld0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBub0VyciAmJiB2aWV3ICYmIEhJ
T2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3LCBrSElXZWJWaWV3Q2xhc3NJRCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VuZEV2ZW50VG9FdmVudFRhcmdl
dFdpdGhPcHRpb25zKGluRXZlbnQsIEhJT2JqZWN0R2V0RXZlbnRUYXJnZXQoKEhJT2JqZWN0UmVm
KXZpZXcpLCBrRXZlbnRUYXJnZXREb250UHJvcGFnYXRlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBlcnIgPSBHZXRXaW5kb3dQ
cm9wZXJ0eSh3aW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1By
b3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiksIG51bGxwdHIsICZraXRXaW5kb3cpOworICAg
ICAgICBpZiAoZXJyID09IG5vRXJyKSB7CisgICAgICAgICAgICBba2l0V2luZG93IF9yZW1vdmVX
aW5kb3dSZWZdOworICAgICAgICAgICAgW2tpdFdpbmRvdyBjbG9zZV07CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrRXZlbnRD
bGFzc01vdXNlOgorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAg
ICAgICBjYXNlIGtFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICBQb2ludCB3aGVyZTsKKyAg
ICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtTW91c2VMb2Nh
dGlvbiwgdHlwZVFEUG9pbnQsIG51bGxwdHIsIHNpemVvZihQb2ludCksIG51bGxwdHIsICZ3aGVy
ZSk7CisKKyAgICAgICAgICAgIFdpbmRvd1JlZiB0ZW1wOworICAgICAgICAgICAgRmluZFdpbmRv
dyh3aGVyZSwgJnRlbXApOworICAgICAgICAgICAgaWYgKHRlbXAgPT0gd2luZG93KSB7CisgICAg
ICAgICAgICAgICAgUmVjdCBib3VuZHM7CisgICAgICAgICAgICAgICAgR2V0V2luZG93Qm91bmRz
KHdpbmRvdywga1dpbmRvd1N0cnVjdHVyZVJnbiwgJmJvdW5kcyk7CisgICAgICAgICAgICAgICAg
d2hlcmUuaCAtPSBib3VuZHMubGVmdDsKKyAgICAgICAgICAgICAgICB3aGVyZS52IC09IGJvdW5k
cy50b3A7CisgICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50
UGFyYW1XaW5kb3dSZWYsIHR5cGVXaW5kb3dSZWYsIHNpemVvZihXaW5kb3dSZWYpLCAmd2luZG93
KTsKKyAgICAgICAgICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bVdpbmRvd01vdXNlTG9jYXRpb24sIHR5cGVRRFBvaW50LCBzaXplb2YoUG9pbnQpLCAmd2hlcmUp
OworCisgICAgICAgICAgICAgICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOworCisgICAgICAg
ICAgICAgICAgZXJyID0gSElWaWV3R2V0Vmlld0Zvck1vdXNlRXZlbnQoSElWaWV3R2V0Um9vdCh3
aW5kb3cpLCBpbkV2ZW50LCAmdmlldyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBub0Vy
ciAmJiB2aWV3ICYmIEhJT2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3LCBrSElXZWJW
aWV3Q2xhc3NJRCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNlbmRFdmVudFRvRXZl
bnRUYXJnZXRXaXRoT3B0aW9ucyhpbkV2ZW50LCBISU9iamVjdEdldEV2ZW50VGFyZ2V0KChISU9i
amVjdFJlZil2aWV3KSwga0V2ZW50VGFyZ2V0RG9udFByb3BhZ2F0ZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZl
bnRNb3VzZVVwOgorICAgICAgICBjYXNlIGtFdmVudE1vdXNlRHJhZ2dlZDoKKyAgICAgICAgY2Fz
ZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6CisgICAgICAgICAgICBISVZpZXdSZWYgdmlldyA9IG51
bGxwdHI7CisKKyAgICAgICAgICAgIGVyciA9IEhJVmlld0dldFZpZXdGb3JNb3VzZUV2ZW50KEhJ
Vmlld0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcpOworICAgICAgICAgICAgaWYgKGVy
ciA9PSBub0VyciAmJiB2aWV3ICYmIEhJT2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3
LCBrSElXZWJWaWV3Q2xhc3NJRCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VuZEV2ZW50
VG9FdmVudFRhcmdldFdpdGhPcHRpb25zKGluRXZlbnQsIEhJT2JqZWN0R2V0RXZlbnRUYXJnZXQo
KEhJT2JqZWN0UmVmKXZpZXcpLCBrRXZlbnRUYXJnZXREb250UHJvcGFnYXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotCXJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC04ODUsNTcgKzgwMiw1MiBAQCBX
aW5kb3dIYW5kbGVyKCBFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsCiAvLyBTeW5jRnJhbWUKIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1TeW5jRnJhbWUoIEhJ
V2ViVmlldyogaW5WaWV3ICkKK3N0YXRpYyB2b2lkIFN5bmNGcmFtZShISVdlYlZpZXcqIGluVmll
dykKIHsKLQlISVZpZXdSZWYJcGFyZW50ID0gSElWaWV3R2V0U3VwZXJ2aWV3KCBpblZpZXctPmZW
aWV3UmVmICk7Ci0JCi0JaWYgKCBwYXJlbnQgKQotCXsKLSAgICAgICAgaWYgKCBpblZpZXctPmZJ
c0NvbXBvc2l0ZWQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBISVJlY3QJCWZyYW1lOwotICAg
ICAgICAgICAgSElSZWN0CQlwYXJlbnRCb3VuZHM7Ci0gICAgICAgICAgICBOU1BvaW50CQlvcmln
aW47CisgICAgSElWaWV3UmVmIHBhcmVudCA9IEhJVmlld0dldFN1cGVydmlldyhpblZpZXctPmZW
aWV3UmVmKTsKKyAgICAKKyAgICBpZiAocGFyZW50KSB7CisgICAgICAgIGlmIChpblZpZXctPmZJ
c0NvbXBvc2l0ZWQpIHsKKyAgICAgICAgICAgIEhJUmVjdCBmcmFtZTsKKyAgICAgICAgICAgIEhJ
UmVjdCBwYXJlbnRCb3VuZHM7CisgICAgICAgICAgICBOU1BvaW50IG9yaWdpbjsKIAotICAgICAg
ICAgICAgSElWaWV3R2V0RnJhbWUoIGluVmlldy0+ZlZpZXdSZWYsICZmcmFtZSApOwotICAgICAg
ICAgICAgSElWaWV3R2V0Qm91bmRzKCBwYXJlbnQsICZwYXJlbnRCb3VuZHMgKTsKKyAgICAgICAg
ICAgIEhJVmlld0dldEZyYW1lKGluVmlldy0+ZlZpZXdSZWYsICZmcmFtZSk7CisgICAgICAgICAg
ICBISVZpZXdHZXRCb3VuZHMocGFyZW50LCAmcGFyZW50Qm91bmRzKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgb3JpZ2luLnggPSBmcmFtZS5vcmlnaW4ueDsKLSAgICAgICAgICAgIG9yaWdp
bi55ID0gcGFyZW50Qm91bmRzLnNpemUuaGVpZ2h0IC0gQ0dSZWN0R2V0TWF4WSggZnJhbWUgKTsK
LS8vICAgIHByaW50ZiggInN5bmNpbmcgdG8gKCVnICVnKSAoJWcgJWcpXG4iLCBvcmlnaW4ueCwg
b3JpZ2luLnksCi0vLyAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVp
Z2h0ICk7CisgICAgICAgICAgICBvcmlnaW4ueSA9IHBhcmVudEJvdW5kcy5zaXplLmhlaWdodCAt
IENHUmVjdEdldE1heFkoZnJhbWUpOworLy8gICAgcHJpbnRmKCJzeW5jaW5nIHRvICglZyAlZykg
KCVnICVnKVxuIiwgb3JpZ2luLngsIG9yaWdpbi55LAorLy8gICAgICAgICAgICBmcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiAgICAgICAgICAgICBbaW5WaWV3LT5mV2ViVmll
dyBzZXRGcmFtZU9yaWdpbjogb3JpZ2luXTsKICAgICAgICAgICAgIFtpblZpZXctPmZXZWJWaWV3
IHNldEZyYW1lU2l6ZTogKihOU1NpemUqKSZmcmFtZS5zaXplXTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYWZQdHIJCQlwb3J0ID0gR2V0V2luZG93
UG9ydCggR2V0Q29udHJvbE93bmVyKCBpblZpZXctPmZWaWV3UmVmICkgKTsKLSAgICAgICAgICAg
IFBpeE1hcEhhbmRsZQlwb3J0UGl4ID0gR2V0UG9ydFBpeE1hcCggcG9ydCApOwotICAgICAgICAg
ICAgUmVjdAkJCWJvdW5kczsKLSAgICAgICAgICAgIEhJUmVjdAkJCXJvb3RGcmFtZTsKLSAgICAg
ICAgICAgIEhJUmVjdAkJCWZyYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR3Jh
ZlB0ciBwb3J0ID0gR2V0V2luZG93UG9ydChHZXRDb250cm9sT3duZXIoaW5WaWV3LT5mVmlld1Jl
ZikpOworICAgICAgICAgICAgUGl4TWFwSGFuZGxlIHBvcnRQaXggPSBHZXRQb3J0UGl4TWFwKHBv
cnQpOworICAgICAgICAgICAgUmVjdCBib3VuZHM7CisgICAgICAgICAgICBISVJlY3Qgcm9vdEZy
YW1lOworICAgICAgICAgICAgSElSZWN0IGZyYW1lOwogCi0gICAgICAgICAgICBHZXRDb250cm9s
Qm91bmRzKCBpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7Ci0gICAgICAgICAgICBPZmZzZXRS
ZWN0KCAmYm91bmRzLCAtKCoqcG9ydFBpeCkuYm91bmRzLmxlZnQsIC0oKipwb3J0UGl4KS5ib3Vu
ZHMudG9wICk7CisgICAgICAgICAgICBHZXRDb250cm9sQm91bmRzKGluVmlldy0+ZlZpZXdSZWYs
ICZib3VuZHMpOworICAgICAgICAgICAgT2Zmc2V0UmVjdCgmYm91bmRzLCAtKCoqcG9ydFBpeCku
Ym91bmRzLmxlZnQsIC0oKipwb3J0UGl4KS5ib3VuZHMudG9wKTsKIAotLy8gICAgICAgICAgICBw
cmludGYoICJjb250cm9sIGxpdmVzIGF0ICVkICVkICVkICVkIGluIHdpbmRvdy1jb29yZHNcbiIs
IGJvdW5kcy50b3AsIGJvdW5kcy5sZWZ0LAotLy8gICAgICAgICAgICAgICAgYm91bmRzLmJvdHRv
bSwgYm91bmRzLnJpZ2h0ICk7CisvLyAgICAgICAgICAgIHByaW50ZigiY29udHJvbCBsaXZlcyBh
dCAlZCAlZCAlZCAlZCBpbiB3aW5kb3ctY29vcmRzXG4iLCBib3VuZHMudG9wLCBib3VuZHMubGVm
dCwKKy8vICAgICAgICAgICAgICAgIGJvdW5kcy5ib3R0b20sIGJvdW5kcy5yaWdodCk7CiAgIAot
ICAgICAgICAgICAgSElWaWV3R2V0RnJhbWUoIEhJVmlld0dldFJvb3QoIEdldENvbnRyb2xPd25l
ciggaW5WaWV3LT5mVmlld1JlZiApICksICZyb290RnJhbWUgKTsKKyAgICAgICAgICAgIEhJVmll
d0dldEZyYW1lKEhJVmlld0dldFJvb3QoR2V0Q29udHJvbE93bmVyKGluVmlldy0+ZlZpZXdSZWYp
KSwgJnJvb3RGcmFtZSk7CiAKICAgICAgICAgICAgIGZyYW1lLm9yaWdpbi54ID0gYm91bmRzLmxl
ZnQ7CiAgICAgICAgICAgICBmcmFtZS5vcmlnaW4ueSA9IHJvb3RGcmFtZS5zaXplLmhlaWdodCAt
IGJvdW5kcy5ib3R0b207CiAgICAgICAgICAgICBmcmFtZS5zaXplLndpZHRoID0gYm91bmRzLnJp
Z2h0IC0gYm91bmRzLmxlZnQ7CiAgICAgICAgICAgICBmcmFtZS5zaXplLmhlaWdodCA9IGJvdW5k
cy5ib3R0b20gLSBib3VuZHMudG9wOwogCi0vLyAgICAgICAgICAgIHByaW50ZiggIiAgIGJlZm9y
ZSBmcmFtZSBjb252ZXJ0ICglZyAlZykgKCVnICVnKVxuIiwgZnJhbWUub3JpZ2luLngsIGZyYW1l
Lm9yaWdpbi55LAotLy8gICAgICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6
ZS5oZWlnaHQgKTsKKy8vICAgICAgICAgICAgcHJpbnRmKCIgICBiZWZvcmUgZnJhbWUgY29udmVy
dCAoJWcgJWcpICglZyAlZylcbiIsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwKKy8v
ICAgICAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgW2luVmlldy0+ZldlYlZpZXcgY29udmVydFJlY3Q6KihO
U1JlY3QqKSZmcmFtZSBmcm9tVmlldzpuaWxdOwogCi0vLyAgICAgICAgICAgIHByaW50ZiggIiAg
IG1vdmluZyB3ZWIgdmlldyB0byAoJWcgJWcpICglZyAlZylcbiIsIGZyYW1lLm9yaWdpbi54LCBm
cmFtZS5vcmlnaW4ueSwKLS8vICAgICAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZyYW1l
LnNpemUuaGVpZ2h0ICk7CisvLyAgICAgICAgICAgIHByaW50ZigiICAgbW92aW5nIHdlYiB2aWV3
IHRvICglZyAlZykgKCVnICVnKVxuIiwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LAor
Ly8gICAgICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwog
CiAgICAgICAgICAgICBbaW5WaWV3LT5mV2ViVmlldyBzZXRGcmFtZU9yaWdpbjogKihOU1BvaW50
KikmZnJhbWUub3JpZ2luXTsKICAgICAgICAgICAgIFtpblZpZXctPmZXZWJWaWV3IHNldEZyYW1l
U2l6ZTogKihOU1NpemUqKSZmcmFtZS5zaXplXTsKQEAgLTk0NywxODAgKzg1OSwxNTAgQEAgU3lu
Y0ZyYW1lKCBISVdlYlZpZXcqIGluVmlldyApCiAvLyBTZXRGb2N1c1BhcnQKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBPU1N0YXR1cwotU2V0Rm9jdXNQYXJ0KAotCUhJ
V2ViVmlldyoJCQkJdmlldywKLQlDb250cm9sUGFydENvZGUgCQlkZXNpcmVkRm9jdXMsCi0JUmdu
SGFuZGxlIAkJCQlpbnZhbGlkUmduLAotCUJvb2xlYW4gCQkJCWZvY3VzRXZlcnl0aGluZywKLQlD
b250cm9sUGFydENvZGUqIAkJYWN0dWFsRm9jdXMgKQorc3RhdGljIE9TU3RhdHVzIFNldEZvY3Vz
UGFydChISVdlYlZpZXcqIHZpZXcsIENvbnRyb2xQYXJ0Q29kZSBkZXNpcmVkRm9jdXMsIFJnbkhh
bmRsZSBpbnZhbGlkUmduLCBCb29sZWFuIGZvY3VzRXZlcnl0aGluZywgQ29udHJvbFBhcnRDb2Rl
KiBhY3R1YWxGb2N1cykKIHsKLSAgICBOU1ZpZXcgKglmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVy
VmlldzsKLSAgICBTSW50MzIgCQlwYXJ0Q29kZVRvUmV0dXJuOworICAgIE5TVmlldyAqZnJlc2hs
eU1hZGVGaXJzdFJlc3BvbmRlclZpZXc7CisgICAgU0ludDMyIHBhcnRDb2RlVG9SZXR1cm47CiAK
ICAgICAvLyBEbyB3aGF0IENhcmJvbiBpcyB0ZWxsaW5nIHVzIHRvIGRvLgotICAgIGlmICggZGVz
aXJlZEZvY3VzID09IGtDb250cm9sRm9jdXNOb1BhcnQgKQotCXsKKyAgICBpZiAoZGVzaXJlZEZv
Y3VzID09IGtDb250cm9sRm9jdXNOb1BhcnQpIHsKICAgICAgICAgLy8gUmVsaW5xdWlzaCB0aGUg
a2V5Ym9hcmQgZm9jdXMuCi0gICAgICAgIFJlbGlucXVpc2hGb2N1cyggdmlldywgdHJ1ZSApOyAv
LyhhdXRvZGlzcGxheSA/IFlFUyA6IE5PKSk7CisgICAgICAgIFJlbGlucXVpc2hGb2N1cyh2aWV3
LCB0cnVlKTsgLy8gKGF1dG9kaXNwbGF5ID8gWUVTIDogTk8pKTsKICAgICAgICAgZnJlc2hseU1h
ZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBuaWw7CiAgICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBr
Q29udHJvbEZvY3VzTm9QYXJ0OwotCQkvL05TTG9nKEAiUmVsaW5xdWlzaGVkIHRoZSBrZXkgZm9j
dXMgYmVjYXVzZSB3ZSBoYXZlIG5vIGNob2ljZS4iKTsKLSAgICB9Ci0JZWxzZSBpZiAoIGRlc2ly
ZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTmV4dFBhcnQgfHwgZGVzaXJlZEZvY3VzID09IGtDb250
cm9sRm9jdXNQcmV2UGFydCApCi0JewotICAgICAgICBCT09MIGdvRm9yd2FyZCA9IChkZXNpcmVk
Rm9jdXMgPT0ga0NvbnRyb2xGb2N1c05leHRQYXJ0ICk7CisgICAgICAgIC8vIE5TTG9nKEAiUmVs
aW5xdWlzaGVkIHRoZSBrZXkgZm9jdXMgYmVjYXVzZSB3ZSBoYXZlIG5vIGNob2ljZS4iKTsKKyAg
ICB9IGVsc2UgaWYgKGRlc2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTmV4dFBhcnQgfHwgZGVz
aXJlZEZvY3VzID09IGtDb250cm9sRm9jdXNQcmV2UGFydCkgeworICAgICAgICBCT09MIGdvRm9y
d2FyZCA9IChkZXNpcmVkRm9jdXMgPT0ga0NvbnRyb2xGb2N1c05leHRQYXJ0KTsKIAogICAgICAg
ICAvLyBBZHZhbmNlIHRoZSBrZXlib2FyZCBmb2N1cywgbWF5YmUgcmlnaHQgb2ZmIG9mIHRoaXMg
dmlldy4gIE1heWJlIGEgc3VidmlldyBvZiB0aGlzIG9uZSBhbHJlYWR5IGhhcyB0aGUga2V5Ym9h
cmQgZm9jdXMsIG1heWJlIG5vdC4KLSAgICAgICAgZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZp
ZXcgPSBBZHZhbmNlRm9jdXMoIHZpZXcsIGdvRm9yd2FyZCApOworICAgICAgICBmcmVzaGx5TWFk
ZUZpcnN0UmVzcG9uZGVyVmlldyA9IEFkdmFuY2VGb2N1cyh2aWV3LCBnb0ZvcndhcmQpOwogICAg
ICAgICBpZiAoZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcpCiAgICAgICAgICAgICBwYXJ0
Q29kZVRvUmV0dXJuID0gZGVzaXJlZEZvY3VzOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
YXJ0Q29kZVRvUmV0dXJuID0ga0NvbnRyb2xGb2N1c05vUGFydDsKLSAgICAgICAgLy9OU0xvZyhm
cmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA/IEAiQWR2YW5jZWQgdGhlIGtleSBmb2N1cy4i
IDogQCJSZWxpbnF1aXNoZWQgdGhlIGtleSBmb2N1cy4iKTsKLSAgICB9Ci0JZWxzZQotCXsKLQkJ
Ly8gV2hhdCdzIHRoaXM/Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRGb2N1cyAhPSBrQ29u
dHJvbEluZGljYXRvclBhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2soZmFsc2UpOwot
ICAgICAgICAgICAgICAgIH0KLQkJZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBuaWw7
Ci0JCXBhcnRDb2RlVG9SZXR1cm4gPSBkZXNpcmVkRm9jdXM7CisgICAgICAgIC8vIE5TTG9nKGZy
ZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3ID8gQCJBZHZhbmNlZCB0aGUga2V5IGZvY3VzLiIg
OiBAIlJlbGlucXVpc2hlZCB0aGUga2V5IGZvY3VzLiIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFdoYXQncyB0aGlzPworICAgICAgICBpZiAoZGVzaXJlZEZvY3VzICE9IGtDb250cm9sSW5k
aWNhdG9yUGFydCkKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBm
cmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA9IG5pbDsKKyAgICAgICAgcGFydENvZGVUb1Jl
dHVybiA9IGRlc2lyZWRGb2N1czsKICAgICB9CiAKLQl2aWV3LT5mRmlyc3RSZXNwb25kZXIgPSBm
cmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldzsKKyAgICB2aWV3LT5mRmlyc3RSZXNwb25kZXIg
PSBmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldzsKIAotCSphY3R1YWxGb2N1cyA9IHBhcnRD
b2RlVG9SZXR1cm47CisgICAgKmFjdHVhbEZvY3VzID0gcGFydENvZGVUb1JldHVybjsKIAotCS8v
IERvbmUuCi0JcmV0dXJuIG5vRXJyOworICAgIC8vIERvbmUuCisgICAgcmV0dXJuIG5vRXJyOwog
fQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEFkdmFuY2VGb2N1cwogLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE5TVmlldyoKLUFkdmFuY2VGb2N1cygg
SElXZWJWaWV3KiB2aWV3LCBib29sIGZvcndhcmQgKQorc3RhdGljIE5TVmlldyogQWR2YW5jZUZv
Y3VzKEhJV2ViVmlldyogdmlldywgYm9vbCBmb3J3YXJkKQogewotICAgIE5TUmVzcG9uZGVyKgkJ
b2xkRmlyc3RSZXNwb25kZXI7Ci0gICAgTlNWaWV3KgkJCQljdXJyZW50S2V5VmlldzsKLSAgICBO
U1ZpZXcqCQkJCXZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlcjsKKyAgICBOU1Jlc3BvbmRlciogb2xk
Rmlyc3RSZXNwb25kZXI7CisgICAgTlNWaWV3KiBjdXJyZW50S2V5VmlldzsKKyAgICBOU1ZpZXcq
IHZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlcjsKKyAgICAKKyAgICAvLyBGb2N1cyBvbiBzb21lIHBh
cnQgKHN1YnZpZXcpIG9mIHRoaXMgY29udHJvbCAodmlldykuCisgICAgLy8gTWF5YmUgYSBzdWJ2
aWV3IG9mIHRoaXMgb25lIGFscmVhZHkgaGFzIHRoZSBrZXlib2FyZCBmb2N1cywgbWF5YmUgbm90
LgorICAgIAorICAgIG9sZEZpcnN0UmVzcG9uZGVyID0gW3ZpZXctPmZLaXRXaW5kb3cgZmlyc3RS
ZXNwb25kZXJdOworCisgICAgLy8gSWYgd2UgdGFiIG91dCBvZiBvdXIgTlNWaWV3LCBpdCB3aWxs
IG5vIGxvbmdlciBiZSB0aGUgcmVzcG9uZGVyCisgICAgLy8gd2hlbiB3ZSBnZXQgaGVyZS4gV2Un
bGwgdHJ5IHRoaXMgdHJpY2sgZm9yIG5vdy4gV2UgbWlnaHQgbmVlZCB0bworICAgIC8vIHRhZyB0
aGUgdmlldyBhcHByb3ByaWF0ZWx5LgorCisgICAgaWYgKHZpZXctPmZGaXJzdFJlc3BvbmRlciAm
JiAoKE5TUmVzcG9uZGVyKil2aWV3LT5mRmlyc3RSZXNwb25kZXIgIT0gb2xkRmlyc3RSZXNwb25k
ZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICAvLwlGb2N1cyBvbiBzb21l
IHBhcnQgKHN1YnZpZXcpIG9mIHRoaXMgY29udHJvbCAodmlldykuICBNYXliZQotCS8vCWEgc3Vi
dmlldyBvZiB0aGlzIG9uZSBhbHJlYWR5IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMsIG1heWJlIG5v
dC4KLQkKLQlvbGRGaXJzdFJlc3BvbmRlciA9IFt2aWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9u
ZGVyXTsKLQotCS8vIElmIHdlIHRhYiBvdXQgb2Ygb3VyIE5TVmlldywgaXQgd2lsbCBubyBsb25n
ZXIgYmUgdGhlIHJlc3BvbmRlcgotCS8vIHdoZW4gd2UgZ2V0IGhlcmUuIFdlJ2xsIHRyeSB0aGlz
IHRyaWNrIGZvciBub3cuIFdlIG1pZ2h0IG5lZWQgdG8KLQkvLyB0YWcgdGhlIHZpZXcgYXBwcm9w
cmlhdGVseS4KLQotCWlmICggdmlldy0+ZkZpcnN0UmVzcG9uZGVyICYmICggKE5TUmVzcG9uZGVy
Kil2aWV3LT5mRmlyc3RSZXNwb25kZXIgIT0gb2xkRmlyc3RSZXNwb25kZXIgKSApCi0JewotCQly
ZXR1cm4gTlVMTDsKLQl9Ci0JCi0JaWYgKCBbb2xkRmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFz
czpbTlNWaWV3IGNsYXNzXV0gKQotCXsKLQkJTlNWaWV3KgkJdGVudGF0aXZlTmV3S2V5VmlldzsK
KyAgICBpZiAoW29sZEZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11d
KSB7CisgICAgICAgIE5TVmlldyogdGVudGF0aXZlTmV3S2V5VmlldzsKIAogICAgICAgICAvLyBT
b21lIHZpZXcgaW4gdGhpcyB3aW5kb3cgYWxyZWFkeSBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLiAg
SXQgYmV0dGVyIGF0IGxlYXN0IGJlIGEgc3VidmlldyBvZiB0aGlzIG9uZS4KLSAgICAgICAgTlNW
aWV3KglvbGRGaXJzdFJlc3BvbmRlclZpZXcgPSAoTlNWaWV3ICopb2xkRmlyc3RSZXNwb25kZXI7
Ci0gICAgICAgIGNoZWNrKCBbb2xkRmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9mOnZp
ZXctPmZXZWJWaWV3XSApOworICAgICAgICBOU1ZpZXcqIG9sZEZpcnN0UmVzcG9uZGVyVmlldyA9
IChOU1ZpZXcgKilvbGRGaXJzdFJlc3BvbmRlcjsKKyAgICAgICAgQVNTRVJUKFtvbGRGaXJzdFJl
c3BvbmRlclZpZXcgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKTsKKworICAgICAgICBp
ZiAob2xkRmlyc3RSZXNwb25kZXJWaWV3ICE9IHZpZXctPmZGaXJzdFJlc3BvbmRlciAmJiAhW29s
ZEZpcnN0UmVzcG9uZGVyVmlldyBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5mRmlyc3RSZXNwb25kZXJd
KSB7CisgICAgICAgICAgICAvKiBEZXNwaXRlIG91ciBlZmZvcnRzIHRvIHJlY29yZCB3aGF0IHZp
ZXcgd2UgbWFkZSB0aGUgZmlyc3QgcmVzcG9uZGVyCisgICAgICAgICAgICAgKiAoZm9yIHVzZSBp
biB0aGUgbmV4dCBwYXJhZ3JhcGgpIHdlIGNvdWxkbid0IGtlZXAgdXAgYmVjYXVzZSB0aGUgdXNl
cgorICAgICAgICAgICAgICogaGFzIGNsaWNrZWQgaW4gYSB0ZXh0IGZpZWxkIHRvIG1ha2UgaXQg
dGhlIGtleSBmb2N1cywgaW5zdGVhZCBvZiB1c2luZworICAgICAgICAgICAgICogdGhlIHRhYiBr
ZXkuICBGaW5kIGEgY29udHJvbCBvbiB3aGljaCBpdCdzIHJlYXNvbmFibGUgdG8gaW52b2tlCisg
ICAgICAgICAgICAgKiAtW05TVmlldyBuZXh0VmFsaWRLZXlWaWV3XSwgdGFraW5nIGludG8gYWNj
b3VudCB0aGUgZmFjdCB0aGF0CisgICAgICAgICAgICAgKiBOU1RleHRGaWVsZHMgYWx3YXlzIHBh
c3Mgb24gZmlyc3QtcmVzcG9uZGVyc2hpcCB0byBhIHRlbXBvcmFyaWx5LQorICAgICAgICAgICAg
ICogY29udGFpbmVkIE5TVGV4dFZpZXcuCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAg
TlNWaWV3ICp2aWV3QmVpbmdUZXN0ZWQ7CisgICAgICAgICAgICBjdXJyZW50S2V5VmlldyA9IG9s
ZEZpcnN0UmVzcG9uZGVyVmlldzsKKyAgICAgICAgICAgIHZpZXdCZWluZ1Rlc3RlZCA9IGN1cnJl
bnRLZXlWaWV3OworICAgICAgICAgICAgd2hpbGUgKHZpZXdCZWluZ1Rlc3RlZCAhPSB2aWV3LT5m
V2ViVmlldykgeworICAgICAgICAgICAgICAgIGlmIChbdmlld0JlaW5nVGVzdGVkIGlzS2luZE9m
Q2xhc3M6W05TVGV4dEZpZWxkIGNsYXNzXV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dEtleVZpZXcgPSB2aWV3QmVpbmdUZXN0ZWQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aWV3QmVpbmdUZXN0ZWQgPSBbdmll
d0JlaW5nVGVzdGVkIHN1cGVydmlld107CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvKiBXZSByZWNvcmRlZCB3aGljaCB2aWV3IHdlIG1hZGUgaW50byB0aGUg
Zmlyc3QgcmVzcG9uZGVyIHRoZQorICAgICAgICAgICAgICogbGFzdCB0aW1lIHRoZSB1c2VyIGhp
dCB0aGUgdGFiIGtleSwgYW5kIG5vdGhpbmcgaGFzIGludmFsaWRhdGVkCisgICAgICAgICAgICAg
KiBvdXIgcmVjb3JkZWQgdmFsdWUgc2luY2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgY3VycmVudEtleVZpZXcgPSB2aWV3LT5mRmlyc3RSZXNwb25kZXI7Cisg
ICAgICAgIH0KIAotCQlpZiAoIG9sZEZpcnN0UmVzcG9uZGVyVmlldyAhPSB2aWV3LT5mRmlyc3RS
ZXNwb25kZXIKLQkJCSYmICFbb2xkRmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9mOnZp
ZXctPmZGaXJzdFJlc3BvbmRlcl0gKQotCQl7Ci0gICAgICAgICAgICAvLyBEZXNwaXRlIG91ciBl
ZmZvcnRzIHRvIHJlY29yZCB3aGF0IHZpZXcgd2UgbWFkZSB0aGUgZmlyc3QgcmVzcG9uZGVyCi0J
CQkvLyAoZm9yIHVzZSBpbiB0aGUgbmV4dCBwYXJhZ3JhcGgpIHdlIGNvdWxkbid0IGtlZXAgdXAg
YmVjYXVzZSB0aGUgdXNlcgotCQkJLy8gaGFzIGNsaWNrZWQgaW4gYSB0ZXh0IGZpZWxkIHRvIG1h
a2UgaXQgdGhlIGtleSBmb2N1cywgaW5zdGVhZCBvZiB1c2luZwotCQkJLy8gdGhlIHRhYiBrZXku
ICBGaW5kIGEgY29udHJvbCBvbiB3aGljaCBpdCdzIHJlYXNvbmFibGUgdG8gaW52b2tlCi0JCQkv
LyAtW05TVmlldyBuZXh0VmFsaWRLZXlWaWV3XSwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZmFj
dCB0aGF0Ci0JCQkvLyBOU1RleHRGaWVsZHMgYWx3YXlzIHBhc3Mgb24gZmlyc3QtcmVzcG9uZGVy
c2hpcCB0byBhIHRlbXBvcmFyaWx5LQotCQkJLy8gY29udGFpbmVkIE5TVGV4dFZpZXcuCi0KLQkJ
CU5TVmlldyAqdmlld0JlaW5nVGVzdGVkOwotCQkJY3VycmVudEtleVZpZXcgPSBvbGRGaXJzdFJl
c3BvbmRlclZpZXc7Ci0JCQl2aWV3QmVpbmdUZXN0ZWQgPSBjdXJyZW50S2V5VmlldzsKLQkJCXdo
aWxlICggdmlld0JlaW5nVGVzdGVkICE9IHZpZXctPmZXZWJWaWV3ICkKLQkJCXsKLQkJCQlpZiAo
IFt2aWV3QmVpbmdUZXN0ZWQgaXNLaW5kT2ZDbGFzczpbTlNUZXh0RmllbGQgY2xhc3NdXSApCi0J
CQkJewotCQkJCQljdXJyZW50S2V5VmlldyA9IHZpZXdCZWluZ1Rlc3RlZDsKLQkJCQkJYnJlYWs7
Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXZpZXdCZWluZ1Rlc3RlZCA9IFt2aWV3QmVp
bmdUZXN0ZWQgc3VwZXJ2aWV3XTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSAKLQkJewotCQkJ
Ly8gV2UgcmVjb3JkZWQgd2hpY2ggdmlldyB3ZSBtYWRlIGludG8gdGhlIGZpcnN0IHJlc3BvbmRl
ciB0aGUKLQkJCS8vIGxhc3QgdGltZSB0aGUgdXNlciBoaXQgdGhlIHRhYiBrZXksIGFuZCBub3Ro
aW5nIGhhcyBpbnZhbGlkYXRlZAotCQkJLy8gb3VyIHJlY29yZGVkIHZhbHVlIHNpbmNlLgotCQkJ
Ci0JCQljdXJyZW50S2V5VmlldyA9IHZpZXctPmZGaXJzdFJlc3BvbmRlcjsKLQkJfQotCi0gICAg
ICAgIC8vIFRyeSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGtleSB2aWV3LiAg
V2UgdXNlIHRoZSBsYWJvcmlvdXNseQotCQkvLyByZWNvcmRlZC9maWd1cmVkIGN1cnJlbnRLZXlW
aWV3IGluc3RlYWQgb2YganVzdCBvbGRGaXJzdFJlc3BvbmRlciBhcyB0aGUKLQkJLy8ganVtcGlu
Zy1vZmYtcG9pbnQgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBuZXh0IHZhbGlkIGtleSB2aWV3LiAg
VGhpcyBpcyBzbwotCQkvLyB3ZSBkb24ndCBnZXQgZm9vbGVkIGlmIHdlIHJlY2VudGx5IG1hZGUg
c29tZSB2aWV3IHRoZSBmaXJzdCByZXNwb25kZXIsIGJ1dAotCQkvLyBpdCBwYXNzZWQgb24gZmly
c3QtcmVzcG9uZGVyLW5lc3MgdG8gc29tZSB0ZW1wb3Jhcnkgc3Vidmlldy4KLQkJCi0gICAgICAg
IC8vIFlvdSBjYW4ndCBwdXQgbm9ybWFsIHZpZXdzIGluIGEgd2luZG93IHdpdGggQ2FyYm9uLWNv
bnRyb2wtd3JhcHBlZCB2aWV3cy4KLQkJLy8gU3R1ZmYgbGlrZSB0aGlzIHdvdWxkIGJyZWFrLiAg
TS5QLiBOb3RpY2UgLSAxMi8yLzAwCisgICAgICAgIC8qIFRyeSB0byBtb3ZlIG9uIHRvIHRoZSBu
ZXh0IG9yIHByZXZpb3VzIGtleSB2aWV3LiAgV2UgdXNlIHRoZSBsYWJvcmlvdXNseQorICAgICAg
ICAgKiByZWNvcmRlZC9maWd1cmVkIGN1cnJlbnRLZXlWaWV3IGluc3RlYWQgb2YganVzdCBvbGRG
aXJzdFJlc3BvbmRlciBhcyB0aGUKKyAgICAgICAgICoganVtcGluZy1vZmYtcG9pbnQgd2hlbiBz
ZWFyY2hpbmcgZm9yIHRoZSBuZXh0IHZhbGlkIGtleSB2aWV3LiAgVGhpcyBpcyBzbworICAgICAg
ICAgKiB3ZSBkb24ndCBnZXQgZm9vbGVkIGlmIHdlIHJlY2VudGx5IG1hZGUgc29tZSB2aWV3IHRo
ZSBmaXJzdCByZXNwb25kZXIsIGJ1dAorICAgICAgICAgKiBpdCBwYXNzZWQgb24gZmlyc3QtcmVz
cG9uZGVyLW5lc3MgdG8gc29tZSB0ZW1wb3Jhcnkgc3Vidmlldy4KKyAgICAgICAgICoKKyAgICAg
ICAgICogWW91IGNhbid0IHB1dCBub3JtYWwgdmlld3MgaW4gYSB3aW5kb3cgd2l0aCBDYXJib24t
Y29udHJvbC13cmFwcGVkIHZpZXdzLgorICAgICAgICAgKiBTdHVmZiBsaWtlIHRoaXMgd291bGQg
YnJlYWsuICBNLlAuIE5vdGljZSAtIDEyLzIvMDAKKyAgICAgICAgICovCiAKICAgICAgICAgdGVu
dGF0aXZlTmV3S2V5VmlldyA9IGZvcndhcmQgPyBbY3VycmVudEtleVZpZXcgbmV4dFZhbGlkS2V5
Vmlld10gOiBbY3VycmVudEtleVZpZXcgcHJldmlvdXNWYWxpZEtleVZpZXddOwotICAgICAgICBp
ZiAoIHRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW3RlbnRhdGl2ZU5ld0tleVZpZXcgaXNEZXNjZW5k
YW50T2Y6dmlldy0+ZldlYlZpZXddICkKLQkJeworICAgICAgICBpZiAodGVudGF0aXZlTmV3S2V5
VmlldyAmJiBbdGVudGF0aXZlTmV3S2V5VmlldyBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5mV2ViVmll
d10pIHsKICAgICAgICAgICAgIC8vIFRoZSB1c2VyIGhhcyB0YWJiZWQgdG8gYW5vdGhlciBzdWJ2
aWV3IG9mIHRoaXMgY29udHJvbCB2aWV3LiAgQ2hhbmdlIHRoZSBrZXlib2FyZCBmb2N1cy4KICAg
ICAgICAgICAgIC8vTlNMb2coQCJUYWJiZWQgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMga2V5IHZp
ZXcuIik7CiAKICAgICAgICAgICAgIFt2aWV3LT5mS2l0V2luZG93IG1ha2VGaXJzdFJlc3BvbmRl
cjp0ZW50YXRpdmVOZXdLZXlWaWV3XTsKICAgICAgICAgICAgIHZpZXdXZU1hZGVGaXJzdFJlc3Bv
bmRlciA9IHRlbnRhdGl2ZU5ld0tleVZpZXc7Ci0gICAgICAgIH0KLQkJZWxzZQotCQl7CisgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGUgdXNlciBoYXMgdGFiYmVkIHBhc3QgdGhl
IHN1YnZpZXdzIG9mIHRoaXMgY29udHJvbCB2aWV3LiAgVGhlIHdpbmRvdyBpcyB0aGUgZmlyc3Qg
cmVzcG9uZGVyIG5vdy4KICAgICAgICAgICAgIC8vTlNMb2coQCJUYWJiZWQgcGFzdCB0aGUgZmly
c3Qgb3IgbGFzdCBrZXkgdmlldy4iKTsKICAgICAgICAgICAgIFt2aWV3LT5mS2l0V2luZG93IG1h
a2VGaXJzdFJlc3BvbmRlcjp2aWV3LT5mS2l0V2luZG93XTsKICAgICAgICAgICAgIHZpZXdXZU1h
ZGVGaXJzdFJlc3BvbmRlciA9IG5pbDsKICAgICAgICAgfQotICAgIH0KLQllbHNlCi0JewotICAg
ICAgICAvLyBObyB2aWV3IGluIHRoaXMgd2luZG93IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMuICBU
aGlzIHZpZXcgc2hvdWxkCi0JCS8vIHRyeSB0byBzZWxlY3Qgb25lIG9mIGl0cyBrZXkgc3Vidmll
d3MuICBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbgotCQkvLyB0aGUgc3Vidmlld3Mgb2Ygc2libGlu
ZyB2aWV3cyBoZXJlLgotCi0JCS8vTlNMb2coQCJObyBrZXlib2FyZCBmb2N1cyBpbiB3aW5kb3cu
IEF0dGVtcHRpbmcgdG8gc2V0Li4uIik7Ci0KLQkJTlNWaWV3ICp0ZW50YXRpdmVOZXdLZXlWaWV3
OwotCQljaGVjayhvbGRGaXJzdFJlc3BvbmRlcj09ZktpdFdpbmRvdyk7Ci0JCWlmICggW3ZpZXct
PmZXZWJWaWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRlcl0gKQotCQkJdGVudGF0aXZlTmV3S2V5Vmll
dyA9IHZpZXctPmZXZWJWaWV3OwotCQllbHNlCi0JCQl0ZW50YXRpdmVOZXdLZXlWaWV3ID0gW3Zp
ZXctPmZXZWJWaWV3IG5leHRWYWxpZEtleVZpZXddOwotICAgICAgICBpZiAoIHRlbnRhdGl2ZU5l
d0tleVZpZXcgJiYgW3RlbnRhdGl2ZU5ld0tleVZpZXcgaXNEZXNjZW5kYW50T2Y6dmlldy0+Zldl
YlZpZXddICkKLQkJeworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIE5vIHZpZXcgaW4gdGhpcyB3
aW5kb3cgaGFzIHRoZSBrZXlib2FyZCBmb2N1cy4gIFRoaXMgdmlldyBzaG91bGQKKyAgICAgICAg
ICogdHJ5IHRvIHNlbGVjdCBvbmUgb2YgaXRzIGtleSBzdWJ2aWV3cy4gIFdlJ3JlIG5vdCBpbnRl
cmVzdGVkIGluCisgICAgICAgICAqIHRoZSBzdWJ2aWV3cyBvZiBzaWJsaW5nIHZpZXdzIGhlcmUu
CisgICAgICAgICAqLworCisgICAgICAgIC8vIE5TTG9nKEAiTm8ga2V5Ym9hcmQgZm9jdXMgaW4g
d2luZG93LiBBdHRlbXB0aW5nIHRvIHNldC4uLiIpOworCisgICAgICAgIE5TVmlldyAqdGVudGF0
aXZlTmV3S2V5VmlldzsKKyAgICAgICAgQVNTRVJUKG9sZEZpcnN0UmVzcG9uZGVyID09IGZLaXRX
aW5kb3cpOworICAgICAgICBpZiAoW3ZpZXctPmZXZWJWaWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRl
cl0pCisgICAgICAgICAgICB0ZW50YXRpdmVOZXdLZXlWaWV3ID0gdmlldy0+ZldlYlZpZXc7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlbnRhdGl2ZU5ld0tleVZpZXcgPSBbdmlldy0+Zldl
YlZpZXcgbmV4dFZhbGlkS2V5Vmlld107CisgICAgICAgIGlmICh0ZW50YXRpdmVOZXdLZXlWaWV3
ICYmIFt0ZW50YXRpdmVOZXdLZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSkg
ewogICAgICAgICAgICAgLy8gVGhpcyBjb250cm9sIHZpZXcgaGFzIGF0IGxlYXN0IG9uZSBzdWJ2
aWV3IHRoYXQgY2FuIHRha2UgdGhlIGtleWJvYXJkIGZvY3VzLgotICAgICAgICAgICAgaWYgKCAh
Zm9yd2FyZCApCi0JCQl7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgaGFzIHRhYmJlZCBp
bnRvIHRoaXMgY29udHJvbCB2aWV3IGJhY2t3YXJkcy4gIEZpbmQKLQkJCQkvLyBhbmQgc2VsZWN0
IHRoZSBsYXN0IHN1YnZpZXcgb2YgdGhpcyBvbmUgdGhhdCBjYW4gdGFrZSB0aGUKLQkJCQkvLyBr
ZXlib2FyZCBmb2N1cy4gIFdhdGNoIG91dCBmb3IgbG9vcHMgb2YgdmFsaWQga2V5IHZpZXdzLgor
ICAgICAgICAgICAgaWYgKCFmb3J3YXJkKSB7CisgICAgICAgICAgICAgICAgLyogVGhlIHVzZXIg
aGFzIHRhYmJlZCBpbnRvIHRoaXMgY29udHJvbCB2aWV3IGJhY2t3YXJkcy4gIEZpbmQKKyAgICAg
ICAgICAgICAgICAgKiBhbmQgc2VsZWN0IHRoZSBsYXN0IHN1YnZpZXcgb2YgdGhpcyBvbmUgdGhh
dCBjYW4gdGFrZSB0aGUKKyAgICAgICAgICAgICAgICAgKiBrZXlib2FyZCBmb2N1cy4gIFdhdGNo
IG91dCBmb3IgbG9vcHMgb2YgdmFsaWQga2V5IHZpZXdzLgorICAgICAgICAgICAgICAgICAqLwog
CiAgICAgICAgICAgICAgICAgTlNWaWV3ICpmaXJzdFRlbnRhdGl2ZU5ld0tleVZpZXcgPSB0ZW50
YXRpdmVOZXdLZXlWaWV3OwogICAgICAgICAgICAgICAgIE5TVmlldyAqbmV4dFRlbnRhdGl2ZU5l
d0tleVZpZXcgPSBbdGVudGF0aXZlTmV3S2V5VmlldyBuZXh0VmFsaWRLZXlWaWV3XTsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAoIG5leHRUZW50YXRpdmVOZXdLZXlWaWV3IAotCQkJCQkJJiYgW25l
eHRUZW50YXRpdmVOZXdLZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSAKLQkJ
CQkJCSYmIG5leHRUZW50YXRpdmVOZXdLZXlWaWV3IT1maXJzdFRlbnRhdGl2ZU5ld0tleVZpZXcp
Ci0JCQkJeworICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0VGVudGF0aXZlTmV3S2V5VmlldyAm
JiBbbmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXdd
ICYmIG5leHRUZW50YXRpdmVOZXdLZXlWaWV3ICE9IGZpcnN0VGVudGF0aXZlTmV3S2V5Vmlldykg
ewogICAgICAgICAgICAgICAgICAgICB0ZW50YXRpdmVOZXdLZXlWaWV3ID0gbmV4dFRlbnRhdGl2
ZU5ld0tleVZpZXc7CiAgICAgICAgICAgICAgICAgICAgIG5leHRUZW50YXRpdmVOZXdLZXlWaWV3
ID0gW3RlbnRhdGl2ZU5ld0tleVZpZXcgbmV4dFZhbGlkS2V5Vmlld107CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTEzMSw5ICsxMDEzLDcgQEAgQWR2YW5jZUZvY3VzKCBISVdlYlZpZXcqIHZpZXcs
IGJvb2wgZm9ydwogICAgICAgICAgICAgLy9OU0xvZyhAIlRhYmJlZCBpbnRvIHRoZSBmaXJzdCBv
ciBsYXN0IGtleSB2aWV3LiIpOwogICAgICAgICAgICAgW3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZp
cnN0UmVzcG9uZGVyOnRlbnRhdGl2ZU5ld0tleVZpZXddOwogICAgICAgICAgICAgdmlld1dlTWFk
ZUZpcnN0UmVzcG9uZGVyID0gdGVudGF0aXZlTmV3S2V5VmlldzsKLSAgICAgICAgfQotCQllbHNl
Ci0JCXsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgY29udHJvbCB2aWV3
IGhhcyBubyBzdWJ2aWV3cyB0aGF0IGNhbiB0YWtlIHRoZSBrZXlib2FyZCBmb2N1cy4KICAgICAg
ICAgICAgIC8vTlNMb2coQCJDYW4ndCB0YWIgaW50byB0aGlzIHZpZXcuIik7CiAgICAgICAgICAg
ICB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXIgPSBuaWw7CkBAIC0xMTQ5LDU5ICsxMDI5LDU1IEBA
IEFkdmFuY2VGb2N1cyggSElXZWJWaWV3KiB2aWV3LCBib29sIGZvcncKIC8vIFJlbGlucXVpc2hG
b2N1cwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIHZvaWQKLVJlbGlu
cXVpc2hGb2N1cyggSElXZWJWaWV3KiB2aWV3LCBib29sIGluQXV0b2Rpc3BsYXkgKQorc3RhdGlj
IHZvaWQgUmVsaW5xdWlzaEZvY3VzKEhJV2ViVmlldyogdmlldywgYm9vbCBpbkF1dG9kaXNwbGF5
KQogewotICAgIE5TUmVzcG9uZGVyKiAgZmlyc3RSZXNwb25kZXI7CisgICAgTlNSZXNwb25kZXIq
IGZpcnN0UmVzcG9uZGVyOwogCiAgICAgLy8gQXBwYXJlbnRseSBDYXJib24gdGhpbmtzIHRoYXQg
c29tZSBzdWJ2aWV3IG9mIHRoaXMgY29udHJvbCB2aWV3IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMs
Ci0JLy8gb3Igd2Ugd291bGRuJ3QgYmUgYmVpbmcgYXNrZWQgdG8gcmVsaW5xdWlzaCBmb2N1cy4K
KyAgICAvLyBvciB3ZSB3b3VsZG4ndCBiZSBiZWluZyBhc2tlZCB0byByZWxpbnF1aXNoIGZvY3Vz
LgogCi0JZmlyc3RSZXNwb25kZXIgPSBbdmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07
Ci0JaWYgKCBbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gKQot
CXsKLQkJLy8gU29tZSBzdWJ2aWV3IG9mIHRoaXMgY29udHJvbCB2aWV3IHJlYWxseSBpcyB0aGUg
Zmlyc3QgcmVzcG9uZGVyIHJpZ2h0IG5vdy4KLQkJY2hlY2soIFsoTlNWaWV3ICopZmlyc3RSZXNw
b25kZXIgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddICk7CisgICAgZmlyc3RSZXNwb25k
ZXIgPSBbdmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07CisgICAgaWYgKFtmaXJzdFJl
c3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgeworICAgICAgICAvLyBTb21l
IHN1YnZpZXcgb2YgdGhpcyBjb250cm9sIHZpZXcgcmVhbGx5IGlzIHRoZSBmaXJzdCByZXNwb25k
ZXIgcmlnaHQgbm93LgorICAgICAgICBBU1NFUlQoWyhOU1ZpZXcgKilmaXJzdFJlc3BvbmRlciBp
c0Rlc2NlbmRhbnRPZjp2aWV3LT5mV2ViVmlld10pOwogCi0JCS8vIE1ha2UgdGhlIHdpbmRvdyB0
aGUgZmlyc3QgcmVzcG9uZGVyLCBzbyB0aGF0IG5vIHZpZXcgaXMgdGhlIGtleSB2aWV3LgorICAg
ICAgICAvLyBNYWtlIHRoZSB3aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwgc28gdGhhdCBubyB2
aWV3IGlzIHRoZSBrZXkgdmlldy4KICAgICAgICAgW3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZpcnN0
UmVzcG9uZGVyOnZpZXctPmZLaXRXaW5kb3ddOwogCi0JCS8vIAlJZiB0aGlzIGNvbnRyb2wgaXMg
bm90IGFsbG93ZWQgdG8gZG8gYXV0b2Rpc3BsYXksIGRvbid0IGxldAotCQkvLwlpdCBhdXRvZGlz
cGxheSBhbnkganVzdC1jaGFuZ2VkIGZvY3VzIHJpbmdzIG9yIHRleHQgb24gdGhlCi0JCS8vCW5l
eHQgZ28gYXJvdW5kIHRoZSBldmVudCBsb29wLiBJJ20gcHJvYmFibHkgY2xlYXJpbmcgbW9yZQot
CQkvLwlkaXJ0eSByZWN0cyB0aGFuIEkgaGF2ZSB0bywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBo
dXJ0IGluCi0JCS8vCXRoZSBwcmludCBwYW5lbCBhY2Nlc3NvcnkgdmlldyBjYXNlLCBhbmQgSSBk
b24ndCBoYXZlIHRpbWUKLQkJLy8JdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgLVtOU0NlbGwg
X3NldEtleWJvYXJkRm9jdXNSaW5nTmVlZHNEaXNwbGF5XQotCQkvLwlpcyBkb2luZyB3aGVuIGlu
dm9rZWQgaW5kaXJlY3RseSBmcm9tIC1tYWtlRmlyc3RSZXNwb25kZXIgdXAgYWJvdmUuICBNLlAu
IE5vdGljZSAtIDEyLzQvMDAKKyAgICAgICAgLyogICAgIElmIHRoaXMgY29udHJvbCBpcyBub3Qg
YWxsb3dlZCB0byBkbyBhdXRvZGlzcGxheSwgZG9uJ3QgbGV0CisgICAgICAgICAqICAgIGl0IGF1
dG9kaXNwbGF5IGFueSBqdXN0LWNoYW5nZWQgZm9jdXMgcmluZ3Mgb3IgdGV4dCBvbiB0aGUKKyAg
ICAgICAgICogICAgbmV4dCBnbyBhcm91bmQgdGhlIGV2ZW50IGxvb3AuIEknbSBwcm9iYWJseSBj
bGVhcmluZyBtb3JlCisgICAgICAgICAqICAgIGRpcnR5IHJlY3RzIHRoYW4gSSBoYXZlIHRvLCBi
dXQgaXQgZG9lc24ndCBzZWVtIHRvIGh1cnQgaW4KKyAgICAgICAgICogICAgdGhlIHByaW50IHBh
bmVsIGFjY2Vzc29yeSB2aWV3IGNhc2UsIGFuZCBJIGRvbid0IGhhdmUgdGltZQorICAgICAgICAg
KiAgICB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCAtW05TQ2VsbCBfc2V0S2V5Ym9hcmRGb2N1
c1JpbmdOZWVkc0Rpc3BsYXldCisgICAgICAgICAqICAgIGlzIGRvaW5nIHdoZW4gaW52b2tlZCBp
bmRpcmVjdGx5IGZyb20gLW1ha2VGaXJzdFJlc3BvbmRlciB1cCBhYm92ZS4gIE0uUC4gTm90aWNl
IC0gMTIvNC8wMAorICAgICAgICAgKi8KKworICAgICAgICBpZiAoIWluQXV0b2Rpc3BsYXkpCisg
ICAgICAgICAgICBbW3ZpZXctPmZXZWJWaWV3IG9wYXF1ZUFuY2VzdG9yXSBfY2xlYXJEaXJ0eVJl
Y3RzRm9yVHJlZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogIFRoZSBDb2NvYSBmaXJzdCBy
ZXNwb25kZXIgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgQ2FyYm9uCisgICAgICAgICAqICAg
IGNvbnRyb2wgdGhhdCBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLiAgVGhpcyBjYW4gaGFwcGVuIHdo
ZW4KKyAgICAgICAgICogICAgeW91J3ZlIGNsb3NlZCBhIGRpYWxvZyBieSBoaXR0aW5nIHJldHVy
biBpbiBhbiBOU1RleHRWaWV3CisgICAgICAgICAqICAgIHRoYXQncyBhIHN1YnZpZXcgb2YgdGhp
cyBvbmU7IENvY29hIGNsb3NlZCB0aGUgd2luZG93LCBhbmQKKyAgICAgICAgICogICAgbm93IENh
cmJvbiBpcyB0ZWxsaW5nIHRoaXMgY29udHJvbCB0byByZWxpbnF1aXNoIHRoZSBmb2N1cworICAg
ICAgICAgKiAgICBhcyBpdCdzIGJlaW5nIGRpc3Bvc2VkLiAgVGhlcmUncyBub3RoaW5nIHRvIGRv
LgorICAgICAgICAgKi8KIAotCQlpZiAoICFpbkF1dG9kaXNwbGF5ICkKLQkJCVtbdmlldy0+Zldl
YlZpZXcgb3BhcXVlQW5jZXN0b3JdIF9jbGVhckRpcnR5UmVjdHNGb3JUcmVlXTsKKyAgICAgICAg
QVNTRVJUKGZpcnN0UmVzcG9uZGVyID09IHdpbmRvdyk7CiAgICAgfQotCWVsc2UKLQl7Ci0JCS8v
ICBUaGUgQ29jb2EgZmlyc3QgcmVzcG9uZGVyIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gdGhlIENh
cmJvbgotCQkvLwljb250cm9sIHRoYXQgaGFzIHRoZSBrZXlib2FyZCBmb2N1cy4gIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuCi0JCS8vCXlvdSd2ZSBjbG9zZWQgYSBkaWFsb2cgYnkgaGl0dGluZyByZXR1
cm4gaW4gYW4gTlNUZXh0VmlldwotCQkvLwl0aGF0J3MgYSBzdWJ2aWV3IG9mIHRoaXMgb25lOyBD
b2NvYSBjbG9zZWQgdGhlIHdpbmRvdywgYW5kCi0JCS8vCW5vdyBDYXJib24gaXMgdGVsbGluZyB0
aGlzIGNvbnRyb2wgdG8gcmVsaW5xdWlzaCB0aGUgZm9jdXMKLQkJLy8JYXMgaXQncyBiZWluZyBk
aXNwb3NlZC4gIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KLQotCQljaGVjayhmaXJzdFJlc3BvbmRl
cj09d2luZG93KTsKLQl9CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQWN0
aXZlU3RhdGVDaGFuZ2VkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMg
dm9pZAotQWN0aXZlU3RhdGVDaGFuZ2VkKCBISVdlYlZpZXcqIHZpZXcgKQorc3RhdGljIHZvaWQg
QWN0aXZlU3RhdGVDaGFuZ2VkKEhJV2ViVmlldyogdmlldykKIHsKLQlpZiAoIFt2aWV3LT5mV2Vi
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldEVuYWJsZWQpXSApCi0JewotCQlb
KE5TQ29udHJvbCopdmlldy0+ZldlYlZpZXcgc2V0RW5hYmxlZDogSXNDb250cm9sRW5hYmxlZCgg
dmlldy0+ZlZpZXdSZWYgKV07Ci0JCUhJVmlld1NldE5lZWRzRGlzcGxheSggdmlldy0+ZlZpZXdS
ZWYsIHRydWUgKTsKLQl9CisgICAgaWYgKFt2aWV3LT5mV2ViVmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHNldEVuYWJsZWQpXSkgeworICAgICAgICBbKE5TQ29udHJvbCopdmlldy0+
ZldlYlZpZXcgc2V0RW5hYmxlZDogSXNDb250cm9sRW5hYmxlZCh2aWV3LT5mVmlld1JlZildOwor
ICAgICAgICBISVZpZXdTZXROZWVkc0Rpc3BsYXkodmlldy0+ZlZpZXdSZWYsIHRydWUpOworICAg
IH0KIH0KIAogCkBAIC0xMjA5LDQyICsxMDg1LDM0IEBAIEFjdGl2ZVN0YXRlQ2hhbmdlZCggSElX
ZWJWaWV3KiB2aWV3ICkKIC8vIFByb2Nlc3NDb21tYW5kCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIC8vCi1zdGF0aWMgT1NTdGF0dXMKLVByb2Nlc3NDb21tYW5kKCBISVdlYlZpZXcqIGlu
VmlldywgY29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQgKQorc3RhdGljIE9TU3RhdHVzIFByb2Nl
c3NDb21tYW5kKEhJV2ViVmlldyogaW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCkK
IHsKLQlPU1N0YXR1cwkJcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOwotCU5TUmVzcG9uZGVy
KglyZXNwOwotCQotCXJlc3AgPSBbaW5WaWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9uZGVyXTsK
LQotCWlmICggW3Jlc3AgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gKQotCXsKLQkJTlNW
aWV3KglyZXNwVmlldyA9IChOU1ZpZXcqKXJlc3A7Ci0KLQkJaWYgKCByZXNwVmlldyA9PSBpblZp
ZXctPmZXZWJWaWV3Ci0JCQl8fCBbcmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+Zldl
YlZpZXddICkKLQkJewotCQkJc3dpdGNoICggaW5Db21tYW5kLT5jb21tYW5kSUQgKQotCQkJewot
CQkJCWNhc2Uga0hJQ29tbWFuZEN1dDoKLQkJCQljYXNlIGtISUNvbW1hbmRDb3B5OgotCQkJCWNh
c2Uga0hJQ29tbWFuZFBhc3RlOgotCQkJCWNhc2Uga0hJQ29tbWFuZENsZWFyOgotCQkJCWNhc2Ug
a0hJQ29tbWFuZFNlbGVjdEFsbDoKLQkJCQkJewotCQkJCQkJU0VMIHNlbGVjdG9yID0gX05TU2Vs
ZWN0b3JGb3JISUNvbW1hbmQoIGluQ29tbWFuZCApOwotCQkJCQkJaWYgKCBbcmVzcFZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSApCi0JCQkJCQl7Ci0JCQkJCQkJW3Jlc3BWaWV3IHBl
cmZvcm1TZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0Om5pbF07Ci0JCQkJCQkJcmVzdWx0ID0g
bm9FcnI7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0J
cmV0dXJuIHJlc3VsdDsKKyAgICBPU1N0YXR1cyByZXN1bHQgPSBldmVudE5vdEhhbmRsZWRFcnI7
CisgICAgTlNSZXNwb25kZXIqIHJlc3A7CisgICAgCisgICAgcmVzcCA9IFtpblZpZXctPmZLaXRX
aW5kb3cgZmlyc3RSZXNwb25kZXJdOworCisgICAgaWYgKFtyZXNwIGlzS2luZE9mQ2xhc3M6W05T
VmlldyBjbGFzc11dKSB7CisgICAgICAgIE5TVmlldyogcmVzcFZpZXcgPSAoTlNWaWV3KilyZXNw
OworCisgICAgICAgIGlmIChyZXNwVmlldyA9PSBpblZpZXctPmZXZWJWaWV3IHx8IFtyZXNwVmll
dyBpc0Rlc2NlbmRhbnRPZjogaW5WaWV3LT5mV2ViVmlld10pIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoaW5Db21tYW5kLT5jb21tYW5kSUQpIHsKKyAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFuZEN1
dDoKKyAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFuZENvcHk6CisgICAgICAgICAgICBjYXNlIGtI
SUNvbW1hbmRQYXN0ZToKKyAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFuZENsZWFyOgorICAgICAg
ICAgICAgY2FzZSBrSElDb21tYW5kU2VsZWN0QWxsOgorICAgICAgICAgICAgICAgIFNFTCBzZWxl
Y3RvciA9IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKGluQ29tbWFuZCk7CisgICAgICAgICAgICAg
ICAgaWYgKFtyZXNwVmlldyByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7CisgICAgICAg
ICAgICAgICAgICAgIFtyZXNwVmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVj
dDpuaWxdOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMjUyLDQ5ICsxMTIwLDM5IEBAIFByb2Nlc3NDb21tYW5kKCBISVdlYlZp
ZXcqIGluVmlldywgY29uc3QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIHN0YXRp
YyBPU1N0YXR1cwotVXBkYXRlQ29tbWFuZFN0YXR1cyggSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0
IEhJQ29tbWFuZCogaW5Db21tYW5kICkKK1VwZGF0ZUNvbW1hbmRTdGF0dXMoSElXZWJWaWV3KiBp
blZpZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kKQogewotCU9TU3RhdHVzCQlyZXN1bHQg
PSBldmVudE5vdEhhbmRsZWRFcnI7Ci0JTWVudUl0ZW1Qcm94eSogCXByb3h5ID0gTlVMTDsKLQlO
U1Jlc3BvbmRlcioJcmVzcDsKLQkKLQlyZXNwID0gW2luVmlldy0+ZktpdFdpbmRvdyBmaXJzdFJl
c3BvbmRlcl07Ci0JCi0JaWYgKCBbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSAp
Ci0JewotCQlOU1ZpZXcqCXJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKLQotCQlpZiAoIHJlc3BW
aWV3ID09IGluVmlldy0+ZldlYlZpZXcKLQkJCXx8IFtyZXNwVmlldyBpc0Rlc2NlbmRhbnRPZjog
aW5WaWV3LT5mV2ViVmlld10gKQotCQl7Ci0JCQlpZiAoIGluQ29tbWFuZC0+YXR0cmlidXRlcyAm
IGtISUNvbW1hbmRGcm9tTWVudSApCi0JCQl7Ci0JCQkJU0VMIHNlbGVjdG9yID0gX05TU2VsZWN0
b3JGb3JISUNvbW1hbmQoIGluQ29tbWFuZCApOwotCQotCQkJCWlmICggc2VsZWN0b3IgKQotCQkJ
CXsKLQkJCQkJaWYgKCBbcmVzcCByZXNwb25kc1RvU2VsZWN0b3I6IHNlbGVjdG9yXSApCi0JCQkJ
CXsKLQkJCQkJCXByb3h5ID0gW1tNZW51SXRlbVByb3h5IGFsbG9jXSBpbml0V2l0aEFjdGlvbjog
c2VsZWN0b3JdOwotCQkJCQkJCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2Ug
LXBlcmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0OiBoZXJlIGJlY2F1c2UgdGhlIG1ldGhvZCB3ZSdy
ZSBjYWxsaW5nIHJldHVybnMgQk9PTCwgd2hpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IC1wZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDoncyByZXR1cm4gdmFsdWUgaXMgYXNzdW1lZCB0
byBiZSBhbiBpZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3dGZPYmpjTXNnU2VuZDxC
T09MPihyZXNwLCBAc2VsZWN0b3IodmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTopLCBwcm94eSkp
Ci0JCQkJCQkJRW5hYmxlTWVudUl0ZW0oIGluQ29tbWFuZC0+bWVudS5tZW51UmVmLCBpbkNvbW1h
bmQtPm1lbnUubWVudUl0ZW1JbmRleCApOwotCQkJCQkJZWxzZQotCQkJCQkJCURpc2FibGVNZW51
SXRlbSggaW5Db21tYW5kLT5tZW51Lm1lbnVSZWYsIGluQ29tbWFuZC0+bWVudS5tZW51SXRlbUlu
ZGV4ICk7Ci0JCQkJCQkKLQkJCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQl9Ci0JCQkJfQotCQkJ
fQotCQl9Ci0JfQotCQotCWlmICggcHJveHkgKQotCQlbcHJveHkgcmVsZWFzZV07CisgICAgT1NT
dGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIE1lbnVJdGVtUHJveHkqIHBy
b3h5ID0gbnVsbHB0cjsKKyAgICBOU1Jlc3BvbmRlciogcmVzcDsKKyAgICAKKyAgICByZXNwID0g
W2luVmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07CisgICAgCisgICAgaWYgKFtyZXNw
IGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dKSB7CisgICAgICAgIE5TVmlldyogcmVzcFZp
ZXcgPSAoTlNWaWV3KilyZXNwOwogCi0JcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKChyZXNw
VmlldyA9PSBpblZpZXctPmZXZWJWaWV3IHx8IFtyZXNwVmlldyBpc0Rlc2NlbmRhbnRPZjogaW5W
aWV3LT5mV2ViVmlld10pICYmIGluQ29tbWFuZC0+YXR0cmlidXRlcyAmIGtISUNvbW1hbmRGcm9t
TWVudSkgeworICAgICAgICAgICAgU0VMIHNlbGVjdG9yID0gX05TU2VsZWN0b3JGb3JISUNvbW1h
bmQoaW5Db21tYW5kKTsKKyAgICAKKyAgICAgICAgICAgIGlmIChzZWxlY3RvciAmJiBbcmVzcCBy
ZXNwb25kc1RvU2VsZWN0b3I6IHNlbGVjdG9yXSkgeworICAgICAgICAgICAgICAgIHByb3h5ID0g
W1tNZW51SXRlbVByb3h5IGFsbG9jXSBpbml0V2l0aEFjdGlvbjogc2VsZWN0b3JdOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgLXBlcmZvcm1TZWxl
Y3Rvcjp3aXRoT2JqZWN0OiBoZXJlIGJlY2F1c2UgdGhlIG1ldGhvZCB3ZSdyZSBjYWxsaW5nIHJl
dHVybnMgQk9PTCwgd2hpbGUKKyAgICAgICAgICAgICAgICAvLyAtcGVyZm9ybVNlbGVjdG9yOndp
dGhPYmplY3Q6J3MgcmV0dXJuIHZhbHVlIGlzIGFzc3VtZWQgdG8gYmUgYW4gaWQuCisgICAgICAg
ICAgICAgICAgaWYgKHd0Zk9iamNNc2dTZW5kPEJPT0w+KHJlc3AsIEBzZWxlY3Rvcih2YWxpZGF0
ZVVzZXJJbnRlcmZhY2VJdGVtOiksIHByb3h5KSkKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxl
TWVudUl0ZW0oaW5Db21tYW5kLT5tZW51Lm1lbnVSZWYsIGluQ29tbWFuZC0+bWVudS5tZW51SXRl
bUluZGV4KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIERpc2Fi
bGVNZW51SXRlbShpbkNvbW1hbmQtPm1lbnUubWVudVJlZiwgaW5Db21tYW5kLT5tZW51Lm1lbnVJ
dGVtSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBub0VycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
cHJveHkpCisgICAgICAgIFtwcm94eSByZWxlYXNlXTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIC8vIEJsYXRhbnRseSBzdG9sZW4gZnJvbSBBcHBLaXQgYW5kIGNyb3BwZWQgYSBiaXQKQEAg
LTEzMDMsNDIxICsxMTYxLDM3OSBAQCBVcGRhdGVDb21tYW5kU3RhdHVzKCBISVdlYlZpZXcqIGlu
VmlldywgCiAvLyBfTlNTZWxlY3RvckZvckhJQ29tbWFuZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAvLwotc3RhdGljIFNFTAotX05TU2VsZWN0b3JGb3JISUNvbW1hbmQoIGNvbnN0IEhJ
Q29tbWFuZCogaW5Db21tYW5kICkKK3N0YXRpYyBTRUwgX05TU2VsZWN0b3JGb3JISUNvbW1hbmQo
Y29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQpCiB7Ci0gICAgc3dpdGNoICggaW5Db21tYW5kLT5j
b21tYW5kSUQgKQotCXsKLSAgICAgICAgY2FzZSBrSElDb21tYW5kVW5kbzogcmV0dXJuIEBzZWxl
Y3Rvcih1bmRvOik7Ci0gICAgICAgIGNhc2Uga0hJQ29tbWFuZFJlZG86IHJldHVybiBAc2VsZWN0
b3IocmVkbzopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRDdXQgIDogcmV0dXJuIEBzZWxlY3Rv
cihjdXQ6KTsKLSAgICAgICAgY2FzZSBrSElDb21tYW5kQ29weSA6IHJldHVybiBAc2VsZWN0b3Io
Y29weTopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRQYXN0ZTogcmV0dXJuIEBzZWxlY3Rvcihw
YXN0ZTopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRDbGVhcjogcmV0dXJuIEBzZWxlY3Rvcihk
ZWxldGU6KTsKLSAgICAgICAgY2FzZSBrSElDb21tYW5kU2VsZWN0QWxsOiByZXR1cm4gQHNlbGVj
dG9yKHNlbGVjdEFsbDopOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICBzd2l0
Y2ggKGluQ29tbWFuZC0+Y29tbWFuZElEKSB7CisgICAgY2FzZSBrSElDb21tYW5kVW5kbzogcmV0
dXJuIEBzZWxlY3Rvcih1bmRvOik7CisgICAgY2FzZSBrSElDb21tYW5kUmVkbzogcmV0dXJuIEBz
ZWxlY3RvcihyZWRvOik7CisgICAgY2FzZSBrSElDb21tYW5kQ3V0ICA6IHJldHVybiBAc2VsZWN0
b3IoY3V0Oik7CisgICAgY2FzZSBrSElDb21tYW5kQ29weSA6IHJldHVybiBAc2VsZWN0b3IoY29w
eTopOworICAgIGNhc2Uga0hJQ29tbWFuZFBhc3RlOiByZXR1cm4gQHNlbGVjdG9yKHBhc3RlOik7
CisgICAgY2FzZSBrSElDb21tYW5kQ2xlYXI6IHJldHVybiBAc2VsZWN0b3IoZGVsZXRlOik7Cisg
ICAgY2FzZSBrSElDb21tYW5kU2VsZWN0QWxsOiByZXR1cm4gQHNlbGVjdG9yKHNlbGVjdEFsbDop
OworICAgIGRlZmF1bHQ6IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBOVUxM
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vCUhJV2ViVmlld0V2ZW50SGFuZGxlcgorLy8gICAgSElXZWJWaWV3RXZlbnRIYW5kbGVy
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwlPdXIgb2JqZWN0J3MgdmlydHVhbCBl
dmVudCBoYW5kbGVyIG1ldGhvZC4gSSdtIG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhpcyB0aGVzZSBk
YXlzLgotLy8JV2UgdXNlZCB0byBkbyB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBidXQgdGhvc2Ug
ZGF5cyBhcmUgbG9uZyBnb25lLi4uCisvLyAgICBPdXIgb2JqZWN0J3MgdmlydHVhbCBldmVudCBo
YW5kbGVyIG1ldGhvZC4gSSdtIG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhpcyB0aGVzZSBkYXlzLgor
Ly8gICAgV2UgdXNlZCB0byBkbyB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBidXQgdGhvc2UgZGF5
cyBhcmUgbG9uZyBnb25lLi4uCiAvLwogc3RhdGljIE9TU3RhdHVzCi1ISVdlYlZpZXdFdmVudEhh
bmRsZXIoCi0JRXZlbnRIYW5kbGVyQ2FsbFJlZglpbkNhbGxSZWYsCi0JRXZlbnRSZWYJCQlpbkV2
ZW50LAotCXZvaWQgKgkJCQlpblVzZXJEYXRhICkKLXsKLQlPU1N0YXR1cwkJCXJlc3VsdCA9IGV2
ZW50Tm90SGFuZGxlZEVycjsKLQlISVBvaW50CQkJCXdoZXJlOwotCU9TVHlwZQkJCQl0YWc7Ci0J
dm9pZCAqCQkJCXB0cjsKLQlTaXplCQkJCXNpemU7Ci0JVUludDMyCQkJCWZlYXR1cmVzOwotCVJn
bkhhbmRsZQkJCXJlZ2lvbiA9IE5VTEw7Ci0JQ29udHJvbFBhcnRDb2RlCQlwYXJ0OwotCUhJV2Vi
VmlldyoJCQl2aWV3ID0gKEhJV2ViVmlldyopaW5Vc2VyRGF0YTsKLQotICAgICAgICAvLyBbTlNB
cHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZXZlbnRz
IHNvIHRoYXQgQWN0aXZhdGVUU01Eb2N1bWVudCBpcyBjYWxsZWQgdG8gc2V0IGFuIGFjdGl2ZSBk
b2N1bWVudC4gCi0gICAgICAgIC8vIFdpdGhvdXQgYW4gYWN0aXZlIGRvY3VtZW50LCBUU00gd2ls
bCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVzZXMgYSBib3R0b20tbGluZSBpbnB1dCB3
aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KLSAgICAgICAgW05TQXBwIHNldFdpbmRvd3NOZWVk
VXBkYXRlOllFU107CitISVdlYlZpZXdFdmVudEhhbmRsZXIoRXZlbnRIYW5kbGVyQ2FsbFJlZiBp
bkNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnQsIHZvaWQgKmluVXNlckRhdGEpCit7CisgICAgT1NT
dGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIEhJUG9pbnQgd2hlcmU7Cisg
ICAgT1NUeXBlIHRhZzsKKyAgICB2b2lkICpwdHI7CisgICAgU2l6ZSBzaXplOworICAgIFVJbnQz
MiBmZWF0dXJlczsKKyAgICBSZ25IYW5kbGUgcmVnaW9uID0gbnVsbHB0cjsKKyAgICBDb250cm9s
UGFydENvZGUgcGFydDsKKyAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElXZWJWaWV3KilpblVzZXJE
YXRhOworCisgICAgLy8gW05TQXBwIHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU10gbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGV2ZW50cyBzbyB0aGF0IEFjdGl2YXRlVFNNRG9jdW1lbnQgaXMgY2FsbGVk
IHRvIHNldCBhbiBhY3RpdmUgZG9jdW1lbnQuIAorICAgIC8vIFdpdGhvdXQgYW4gYWN0aXZlIGRv
Y3VtZW50LCBUU00gd2lsbCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVzZXMgYSBib3R0
b20tbGluZSBpbnB1dCB3aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KKyAgICBbTlNBcHAgc2V0
V2luZG93c05lZWRVcGRhdGU6WUVTXTsKICAgICAgICAgCi0Jc3dpdGNoICggR2V0RXZlbnRDbGFz
cyggaW5FdmVudCApICkKLQl7Ci0JCWNhc2Uga0V2ZW50Q2xhc3NISU9iamVjdDoKLQkJCXN3aXRj
aCAoIEdldEV2ZW50S2luZCggaW5FdmVudCApICkKLQkJCXsKLQkJCQljYXNlIGtFdmVudEhJT2Jq
ZWN0Q29uc3RydWN0OgotCQkJCQl7Ci0JCQkJCQlISU9iamVjdFJlZgkJb2JqZWN0OwotCi0JCQkJ
CQlyZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1ISU9iamVj
dEluc3RhbmNlLAotCQkJCQkJCQl0eXBlSElPYmplY3RSZWYsIE5VTEwsIHNpemVvZiggSElPYmpl
Y3RSZWYgKSwgTlVMTCwgJm9iamVjdCApOwotCQkJCQkJcmVxdWlyZV9ub2VyciggcmVzdWx0LCBN
aXNzaW5nUGFyYW1ldGVyICk7Ci0JCQkJCQkKLQkJCQkJCS8vIG9uIGVudHJ5IGZvciBvdXIgY29u
c3RydWN0IGV2ZW50LCB3ZSdyZSBwYXNzZWQgdGhlCi0JCQkJCQkvLyBjcmVhdGlvbiBwcm9jIHdl
IHJlZ2lzdGVyZWQgd2l0aCBmb3IgdGhpcyBjbGFzcy4KLQkJCQkJCS8vIHdlIHVzZSBpdCBub3cg
dG8gY3JlYXRlIHRoZSBpbnN0YW5jZSwgYW5kIHRoZW4gd2UKLQkJCQkJCS8vIHJlcGxhY2UgdGhl
IGluc3RhbmNlIHBhcmFtZXRlciBkYXRhIHdpdGggc2FpZCBpbnN0YW5jZQotCQkJCQkJLy8gYXMg
dHlwZSB2b2lkLgotCi0JCQkJCQl2aWV3ID0gSElXZWJWaWV3Q29uc3RydWN0b3IoIChISVZpZXdS
ZWYpb2JqZWN0ICk7Ci0KLQkJCQkJCWlmICggdmlldyApCi0JCQkJCQl7Ci0JCQkJCQkJU2V0RXZl
bnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtSElPYmplY3RJbnN0YW5jZSwKLQkJCQkJ
CQkJCXR5cGVWb2lkUHRyLCBzaXplb2YoIHZvaWQgKiApLCAmdmlldyApOyAKLQkJCQkJCX0KLQkJ
CQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudEhJT2JqZWN0RGVzdHJ1Y3Q6
Ci0JCQkJCUhJV2ViVmlld0Rlc3RydWN0b3IoIHZpZXcgKTsKLQkJCQkJLy8gcmVzdWx0IGlzIHVu
aW1wb3J0YW50Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBrRXZlbnRD
bGFzc0tleWJvYXJkOgotCQkJewotICAgICAgICAgICAgICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0g
Q3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLQkJCQlbdmlldy0+ZktpdFdp
bmRvdyBzZW5kU3VwZXJFdmVudDpraXRFdmVudF07Ci0JCQkJW2tpdEV2ZW50IHJlbGVhc2VdOwot
CQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBrRXZlbnRDbGFz
c01vdXNlOgotCQkJc3dpdGNoICggR2V0RXZlbnRLaW5kKCBpbkV2ZW50ICkgKQotCQkJewotCQkJ
CWNhc2Uga0V2ZW50TW91c2VVcDoKLQkJCQkJcmVzdWx0ID0gTW91c2VVcCggdmlldywgaW5FdmVu
dCApOwotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudE1vdXNlV2hlZWxNb3ZlZDoK
LQkJCQkJcmVzdWx0ID0gTW91c2VXaGVlbE1vdmVkKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJy
ZWFrOwotCi0JCQkJY2FzZSBrRXZlbnRNb3VzZU1vdmVkOgotCQkJCQlyZXN1bHQgPSBNb3VzZU1v
dmVkKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBrRXZlbnRNb3Vz
ZURyYWdnZWQ6Ci0JCQkJCXJlc3VsdCA9IE1vdXNlRHJhZ2dlZCggdmlldywgaW5FdmVudCApOwot
CQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2Uga0V2ZW50Q2xhc3NDb21tYW5k
OgotCQkJewotCQkJCUhJQ29tbWFuZAkJY29tbWFuZDsKLQkJCQkKLQkJCQlyZXN1bHQgPSBHZXRF
dmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1EaXJlY3RPYmplY3QsIHR5cGVISUNv
bW1hbmQsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggSElDb21tYW5kICksIE5VTEwsICZjb21tYW5k
ICk7Ci0JCQkJcmVxdWlyZV9ub2VyciggcmVzdWx0LCBNaXNzaW5nUGFyYW1ldGVyICk7Ci0JCQkJ
Ci0JCQkJc3dpdGNoICggR2V0RXZlbnRLaW5kKCBpbkV2ZW50ICkgKQotCQkJCXsKLQkJCQkJY2Fz
ZSBrRXZlbnRDb21tYW5kUHJvY2VzczoKLQkJCQkJCXJlc3VsdCA9IFByb2Nlc3NDb21tYW5kKCB2
aWV3LCAmY29tbWFuZCApOwotCQkJCQkJYnJlYWs7Ci0JCQkJCQotCQkJCQljYXNlIGtFdmVudENv
bW1hbmRVcGRhdGVTdGF0dXM6Ci0JCQkJCQlyZXN1bHQgPSBVcGRhdGVDb21tYW5kU3RhdHVzKCB2
aWV3LCAmY29tbWFuZCApOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0K
LQkJY2FzZSBrRXZlbnRDbGFzc0NvbnRyb2w6Ci0JCQlzd2l0Y2ggKCBHZXRFdmVudEtpbmQoIGlu
RXZlbnQgKSApCi0JCQl7Ci0JCQkJY2FzZSBrRXZlbnRDb250cm9sSW5pdGlhbGl6ZToKLQkJCQkJ
ZmVhdHVyZXMgPSBHZXRCZWhhdmlvcnMoKTsKLQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZl
bnQsIGtFdmVudFBhcmFtQ29udHJvbEZlYXR1cmVzLCB0eXBlVUludDMyLAotCQkJCQkJCXNpemVv
ZiggVUludDMyICksICZmZWF0dXJlcyApOwotCQkJCQlyZXN1bHQgPSBub0VycjsKLQkJCQkJYnJl
YWs7Ci0JCQkJCQotCQkJCWNhc2Uga0V2ZW50Q29udHJvbERyYXc6Ci0JCQkJCXsKLQkJCQkJCUNH
Q29udGV4dFJlZgkJY29udGV4dCA9IE5VTEw7Ci0JCQkJCQkKLQkJCQkJCUdldEV2ZW50UGFyYW1l
dGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbVJnbkhhbmRsZSwgdHlwZVFEUmduSGFuZGxlLCBOVUxM
LAotCQkJCQkJCQlzaXplb2YoIFJnbkhhbmRsZSApLCBOVUxMLCAmcmVnaW9uICk7Ci0JCQkJCQlH
ZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1DR0NvbnRleHRSZWYsIHR5cGVD
R0NvbnRleHRSZWYsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggQ0dDb250ZXh0UmVmICksIE5VTEws
ICZjb250ZXh0ICk7Ci0KLQkJCQkJCURyYXcoIHZpZXcsIHJlZ2lvbiwgY29udGV4dCApOwotCi0J
CQkJCQlyZXN1bHQgPSBub0VycjsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNl
IGtFdmVudENvbnRyb2xIaXRUZXN0OgotCQkJCQlHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwg
a0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgTlVMTCwKLQkJCQkJCQlzaXpl
b2YoIEhJUG9pbnQgKSwgTlVMTCwgJndoZXJlICk7Ci0JCQkJCXBhcnQgPSBIaXRUZXN0KCB2aWV3
LCAmd2hlcmUgKTsKLQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFt
Q29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIHNpemVvZiggQ29udHJvbFBhcnRDb2Rl
ICksICZwYXJ0ICk7Ci0JCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQlicmVhazsKLQkJCQkJCi0J
CQkJY2FzZSBrRXZlbnRDb250cm9sR2V0UGFydFJlZ2lvbjoKLQkJCQkJR2V0RXZlbnRQYXJhbWV0
ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUs
IE5VTEwsCi0JCQkJCQkJc2l6ZW9mKCBDb250cm9sUGFydENvZGUgKSwgTlVMTCwgJnBhcnQgKTsK
LQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFJlZ2lv
biwgdHlwZVFEUmduSGFuZGxlLCBOVUxMLAotCQkJCQkJCXNpemVvZiggUmduSGFuZGxlICksIE5V
TEwsICZyZWdpb24gKTsKLQkJCQkJcmVzdWx0ID0gR2V0UmVnaW9uKCB2aWV3LCBwYXJ0LCByZWdp
b24gKTsKLQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9sR2V0RGF0YToK
LQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwg
dHlwZUNvbnRyb2xQYXJ0Q29kZSwgTlVMTCwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksIE5VTEws
ICZwYXJ0KTsKLQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250
cm9sRGF0YVRhZywgdHlwZUVudW1lcmF0aW9uLCBOVUxMLCBzaXplb2YoT1NUeXBlKSwgTlVMTCwg
JnRhZyk7Ci0JCQkJCUdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJv
bERhdGFCdWZmZXIsIHR5cGVQdHIsIE5VTEwsIHNpemVvZihQdHIpLCBOVUxMLCAmcHRyKTsKLQkJ
CQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZl
clNpemUsIHR5cGVCeXRlQ291bnQsIE5VTEwsIHNpemVvZihTaXplKSwgTlVMTCwgJnNpemUpOwot
Ci0JCQkJCWlmICh0YWcgPT0ga0NvbnRyb2xLaW5kVGFnKSB7Ci0JCQkJCQlTaXplIG91dFNpemU7
Ci0JCQkJCQlyZXN1bHQgPSBub0VycjsKLQotCQkJCQkJaWYgKHB0cikgewotCQkJCQkJCWlmIChz
aXplICE9IHNpemVvZihDb250cm9sS2luZCkpCi0JCQkJCQkJCXJlc3VsdCA9IGVyckRhdGFTaXpl
TWlzbWF0Y2g7Ci0JCQkJCQkJZWxzZQotCQkJCQkJCQkoKihDb250cm9sS2luZCAqKXB0cikgPSBH
ZXRLaW5kKCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCW91dFNpemUgPSBzaXplb2YoQ29udHJvbEtpbmQp
OwotCQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0
YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIHNpemVvZihTaXplKSwgJm91dFNpemUpOwotCQkJ
CQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9sQm91bmRzQ2hh
bmdlZDoKLQkJCQkJewotCQkJCQkJSElSZWN0CQlwcmV2UmVjdCwgY3VyclJlY3Q7Ci0JCQkJCQlV
SW50MzIJCWF0dHJzOwotCQkJCQkJCi0JCQkJCQlHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwg
a0V2ZW50UGFyYW1BdHRyaWJ1dGVzLCB0eXBlVUludDMyLCBOVUxMLAotCQkJCQkJCQlzaXplb2Yo
IFVJbnQzMiApLCBOVUxMLCAmYXR0cnMgKTsKLQkJCQkJCUdldEV2ZW50UGFyYW1ldGVyKCBpbkV2
ZW50LCBrRXZlbnRQYXJhbU9yaWdpbmFsQm91bmRzLCB0eXBlSElSZWN0LCBOVUxMLAotCQkJCQkJ
CQlzaXplb2YoIEhJUmVjdCApLCBOVUxMLCAmcHJldlJlY3QgKTsKLQkJCQkJCUdldEV2ZW50UGFy
YW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbUN1cnJlbnRCb3VuZHMsIHR5cGVISVJlY3QsIE5V
TEwsCi0JCQkJCQkJCXNpemVvZiggSElSZWN0ICksIE5VTEwsICZjdXJyUmVjdCApOwotCi0JCQkJ
CQlCb3VuZHNDaGFuZ2VkKCB2aWV3LCBhdHRycywgJnByZXZSZWN0LCAmY3VyclJlY3QgKTsKLQkJ
CQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCQotCQkJCWNhc2Ug
a0V2ZW50Q29udHJvbEFjdGl2YXRlOgotCQkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIHZpZXcgKTsK
LQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCWJyZWFrOwotCQkJCQkKLQkJCQljYXNlIGtFdmVu
dENvbnRyb2xEZWFjdGl2YXRlOgotCQkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIHZpZXcgKTsKLQkJ
CQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCWJyZWFrOwotCQkJCQkJCQkJCQkJCQkJCi0JCQkJY2Fz
ZSBrRXZlbnRDb250cm9sT3duaW5nV2luZG93Q2hhbmdlZDoKLQkJCQkJewotCQkJCQkJV2luZG93
UmVmCQlmcm9tV2luZG93LCB0b1dpbmRvdzsKLQkJCQkJCQotCQkJCQkJcmVzdWx0ID0gR2V0RXZl
bnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbE9yaWdpbmFsT3duaW5nV2lu
ZG93LCB0eXBlV2luZG93UmVmLCBOVUxMLAotCQkJCQkJCQkJCXNpemVvZiggV2luZG93UmVmICks
IE5VTEwsICZmcm9tV2luZG93ICk7Ci0JCQkJCQlyZXF1aXJlX25vZXJyKCByZXN1bHQsIE1pc3Np
bmdQYXJhbWV0ZXIgKTsKLQotCQkJCQkJcmVzdWx0ID0gR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZl
bnQsIGtFdmVudFBhcmFtQ29udHJvbEN1cnJlbnRPd25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYs
IE5VTEwsCi0JCQkJCQkJCQkJc2l6ZW9mKCBXaW5kb3dSZWYgKSwgTlVMTCwgJnRvV2luZG93ICk7
Ci0JCQkJCQlyZXF1aXJlX25vZXJyKCByZXN1bHQsIE1pc3NpbmdQYXJhbWV0ZXIgKTsKLQotCQkJ
CQkJT3duaW5nV2luZG93Q2hhbmdlZCggdmlldywgZnJvbVdpbmRvdywgdG9XaW5kb3cgKTsKLQkJ
CQkJCQotCQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQljYXNlIGtFdmVudENvbnRyb2xDbGlj
azoKLQkJCQkJcmVzdWx0ID0gQ2xpY2soIHZpZXcsIGluRXZlbnQgKTsKLQkJCQkJYnJlYWs7Cisg
ICAgc3dpdGNoIChHZXRFdmVudENsYXNzKGluRXZlbnQpKSB7CisgICAgY2FzZSBrRXZlbnRDbGFz
c0hJT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAg
ICAgICBjYXNlIGtFdmVudEhJT2JqZWN0Q29uc3RydWN0OgorICAgICAgICAgICAgSElPYmplY3RS
ZWYgb2JqZWN0OworCisgICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlcihpbkV2
ZW50LCBrRXZlbnRQYXJhbUhJT2JqZWN0SW5zdGFuY2UsCisgICAgICAgICAgICB0eXBlSElPYmpl
Y3RSZWYsIG51bGxwdHIsIHNpemVvZihISU9iamVjdFJlZiksIG51bGxwdHIsICZvYmplY3QpOwor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAvLyBvbiBlbnRyeSBm
b3Igb3VyIGNvbnN0cnVjdCBldmVudCwgd2UncmUgcGFzc2VkIHRoZQorICAgICAgICAgICAgLy8g
Y3JlYXRpb24gcHJvYyB3ZSByZWdpc3RlcmVkIHdpdGggZm9yIHRoaXMgY2xhc3MuCisgICAgICAg
ICAgICAvLyB3ZSB1c2UgaXQgbm93IHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UsIGFuZCB0aGVuIHdl
CisgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXIgZGF0YSB3aXRo
IHNhaWQgaW5zdGFuY2UKKyAgICAgICAgICAgIC8vIGFzIHR5cGUgdm9pZC4KKworICAgICAgICAg
ICAgdmlldyA9IEhJV2ViVmlld0NvbnN0cnVjdG9yKChISVZpZXdSZWYpb2JqZWN0KTsKKworICAg
ICAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5F
dmVudCwga0V2ZW50UGFyYW1ISU9iamVjdEluc3RhbmNlLCB0eXBlVm9pZFB0ciwgc2l6ZW9mKHZv
aWQgKiksICZ2aWV3KTsgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBrRXZlbnRISU9iamVjdERlc3RydWN0OgorICAgICAgICAgICAgSElXZWJWaWV3
RGVzdHJ1Y3Rvcih2aWV3KTsKKyAgICAgICAgICAgIC8vIHJlc3VsdCBpcyB1bmltcG9ydGFudAor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IGtFdmVudENsYXNzS2V5Ym9hcmQ6IHsKKyAgICAgICAgTlNFdmVudCoga2l0RXZlbnQgPSBDcmVh
dGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGluRXZlbnQpOworICAgICAgICBbdmlldy0+ZktpdFdp
bmRvdyBzZW5kU3VwZXJFdmVudDpraXRFdmVudF07CisgICAgICAgIFtraXRFdmVudCByZWxlYXNl
XTsKKyAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2Uga0V2ZW50Q2xhc3NNb3VzZToKKyAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5F
dmVudCkpIHsKKyAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVVwOgorICAgICAgICAgICAgcmVzdWx0
ID0gTW91c2VVcCh2aWV3LCBpbkV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6CisgICAgICAgICAgICByZXN1bHQg
PSBNb3VzZVdoZWVsTW92ZWQodmlldywgaW5FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIGtFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBNb3Vz
ZU1vdmVkKHZpZXcsIGluRXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBrRXZlbnRNb3VzZURyYWdnZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBNb3VzZURyYWdnZWQo
dmlldywgaW5FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb21tYW5kOgorICAgICAgICBISUNvbW1hbmQg
Y29tbWFuZDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKGlu
RXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlSElDb21tYW5kLCBudWxscHRyLCBz
aXplb2YoSElDb21tYW5kKSwgbnVsbHB0ciwgJmNvbW1hbmQpOworICAgICAgICBBU1NFUlQoIXJl
c3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgIHN3aXRjaCAoR2V0RXZlbnRLaW5kKGluRXZlbnQpKSB7CisgICAgICAgIGNhc2Ug
a0V2ZW50Q29tbWFuZFByb2Nlc3M6CisgICAgICAgICAgICByZXN1bHQgPSBQcm9jZXNzQ29tbWFu
ZCh2aWV3LCAmY29tbWFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAKKyAgICAgICAgY2Fz
ZSBrRXZlbnRDb21tYW5kVXBkYXRlU3RhdHVzOgorICAgICAgICAgICAgcmVzdWx0ID0gVXBkYXRl
Q29tbWFuZFN0YXR1cyh2aWV3LCAmY29tbWFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgorICAg
ICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAgICAgICBjYXNlIGtFdmVu
dENvbnRyb2xJbml0aWFsaXplOgorICAgICAgICAgICAgZmVhdHVyZXMgPSBHZXRCZWhhdmlvcnMo
KTsKKyAgICAgICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29u
dHJvbEZlYXR1cmVzLCB0eXBlVUludDMyLCBzaXplb2YoVUludDMyKSwgJmZlYXR1cmVzKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBrRXZlbnRDb250cm9sRHJhdzogeworICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBudWxscHRyOworCisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBr
RXZlbnRQYXJhbVJnbkhhbmRsZSwgdHlwZVFEUmduSGFuZGxlLCBudWxscHRyLCBzaXplb2YoUmdu
SGFuZGxlKSwgbnVsbHB0ciwgJnJlZ2lvbik7CisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRl
cihpbkV2ZW50LCBrRXZlbnRQYXJhbUNHQ29udGV4dFJlZiwgdHlwZUNHQ29udGV4dFJlZiwgbnVs
bHB0ciwgc2l6ZW9mKENHQ29udGV4dFJlZiksIG51bGxwdHIsICZjb250ZXh0KTsKKworICAgICAg
ICAgICAgRHJhdyh2aWV3LCByZWdpb24sIGNvbnRleHQpOworICAgICAgICAgICAgcmVzdWx0ID0g
bm9FcnI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Uga0V2
ZW50Q29udHJvbEhpdFRlc3Q6CisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50
LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVISVBvaW50LCBudWxscHRyLCBzaXplb2Yo
SElQb2ludCksIG51bGxwdHIsICZ3aGVyZSk7CisgICAgICAgICAgICBwYXJ0ID0gSGl0VGVzdCh2
aWV3LCAmd2hlcmUpOworICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2
ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwgc2l6ZW9mKENvbnRyb2xQ
YXJ0Q29kZSksICZwYXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sR2V0UGFydFJlZ2lvbjoKKyAg
ICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBh
cnQsIHR5cGVDb250cm9sUGFydENvZGUsIG51bGxwdHIsIHNpemVvZihDb250cm9sUGFydENvZGUp
LCBudWxscHRyLCAmcGFydCk7CisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50
LCBrRXZlbnRQYXJhbUNvbnRyb2xSZWdpb24sIHR5cGVRRFJnbkhhbmRsZSwgbnVsbHB0ciwgc2l6
ZW9mKFJnbkhhbmRsZSksIG51bGxwdHIsICZyZWdpb24pOworICAgICAgICAgICAgcmVzdWx0ID0g
R2V0UmVnaW9uKHZpZXcsIHBhcnQsIHJlZ2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sR2V0RGF0YTogeworICAgICAg
ICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwg
dHlwZUNvbnRyb2xQYXJ0Q29kZSwgbnVsbHB0ciwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksIG51
bGxwdHIsICZwYXJ0KTsKKyAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtF
dmVudFBhcmFtQ29udHJvbERhdGFUYWcsIHR5cGVFbnVtZXJhdGlvbiwgbnVsbHB0ciwgc2l6ZW9m
KE9TVHlwZSksIG51bGxwdHIsICZ0YWcpOworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIo
aW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZlciwgdHlwZVB0ciwgbnVsbHB0ciwg
c2l6ZW9mKFB0ciksIG51bGxwdHIsICZwdHIpOworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0
ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291
bnQsIG51bGxwdHIsIHNpemVvZihTaXplKSwgbnVsbHB0ciwgJnNpemUpOworCisgICAgICAgICAg
ICBpZiAodGFnID09IGtDb250cm9sS2luZFRhZykgeworICAgICAgICAgICAgICAgIFNpemUgb3V0
U2l6ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKworICAgICAgICAgICAgICAg
IGlmIChwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gc2l6ZW9mKENvbnRy
b2xLaW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVyckRhdGFTaXplTWlz
bWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICgqKENvbnRyb2xLaW5kICopcHRyKSA9IEdldEtpbmQoKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBvdXRTaXplID0gc2l6ZW9mKENvbnRyb2xLaW5kKTsKKyAgICAgICAg
ICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xEYXRh
QnVmZmVyU2l6ZSwgdHlwZUJ5dGVDb3VudCwgc2l6ZW9mKFNpemUpLCAmb3V0U2l6ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
a0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQ6IHsKKyAgICAgICAgICAgIEhJUmVjdCBwcmV2UmVj
dCwgY3VyclJlY3Q7CisgICAgICAgICAgICBVSW50MzIgYXR0cnM7CisgICAgICAgIAorICAgICAg
ICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1BdHRyaWJ1dGVzLCB0
eXBlVUludDMyLCBudWxscHRyLCBzaXplb2YoVUludDMyKSwgbnVsbHB0ciwgJmF0dHJzKTsKKyAg
ICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtT3JpZ2luYWxC
b3VuZHMsIHR5cGVISVJlY3QsIG51bGxwdHIsIHNpemVvZihISVJlY3QpLCBudWxscHRyLCAmcHJl
dlJlY3QpOworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFy
YW1DdXJyZW50Qm91bmRzLCB0eXBlSElSZWN0LCBudWxscHRyLCBzaXplb2YoSElSZWN0KSwgbnVs
bHB0ciwgJmN1cnJSZWN0KTsKKworICAgICAgICAgICAgQm91bmRzQ2hhbmdlZCh2aWV3LCBhdHRy
cywgJnByZXZSZWN0LCAmY3VyclJlY3QpOworICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Uga0V2ZW50Q29udHJv
bEFjdGl2YXRlOgorICAgICAgICAgICAgQWN0aXZlU3RhdGVDaGFuZ2VkKHZpZXcpOworICAgICAg
ICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IGtFdmVudENvbnRyb2xEZWFjdGl2YXRlOgorICAgICAgICAgICAgQWN0aXZlU3RhdGVDaGFuZ2Vk
KHZpZXcpOworICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbE93bmluZ1dpbmRvd0NoYW5nZWQ6
IHsKKyAgICAgICAgICAgIFdpbmRvd1JlZiBmcm9tV2luZG93LCB0b1dpbmRvdzsKKworICAgICAg
ICAgICAgcmVzdWx0ID0gR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250
cm9sT3JpZ2luYWxPd25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYsIG51bGxwdHIsIHNpemVvZihX
aW5kb3dSZWYpLCBudWxscHRyLCAmZnJvbVdpbmRvdyk7CisgICAgICAgICAgICBBU1NFUlQoIXJl
c3VsdCk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQs
IGtFdmVudFBhcmFtQ29udHJvbEN1cnJlbnRPd25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYsIG51
bGxwdHIsIHNpemVvZihXaW5kb3dSZWYpLCBudWxscHRyLCAmdG9XaW5kb3cpOworICAgICAgICAg
ICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBPd25pbmdXaW5kb3dDaGFuZ2VkKHZp
ZXcsIGZyb21XaW5kb3csIHRvV2luZG93KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIGtFdmVudENvbnRy
b2xDbGljazoKKyAgICAgICAgICAgIHJlc3VsdCA9IENsaWNrKHZpZXcsIGluRXZlbnQpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJ
CQljYXNlIGtFdmVudENvbnRyb2xDb250ZXh0dWFsTWVudUNsaWNrOgotCQkJCQlyZXN1bHQgPSBD
b250ZXh0TWVudUNsaWNrKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJyZWFrOworICAgICAgICBj
YXNlIGtFdmVudENvbnRyb2xDb250ZXh0dWFsTWVudUNsaWNrOgorICAgICAgICAgICAgcmVzdWx0
ID0gQ29udGV4dE1lbnVDbGljayh2aWV3LCBpbkV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkJY2FzZSBrRXZlbnRDb250
cm9sU2V0Rm9jdXNQYXJ0OgotCQkJCQl7Ci0JCQkJCQlDb250cm9sUGFydENvZGUJCWRlc2lyZWRG
b2N1czsKLQkJCQkJCVJnbkhhbmRsZQkJCWludmFsaWRSZ247Ci0JCQkJCQlCb29sZWFuCQkJCWZv
Y3VzRXZlcnl0aGluZzsKLQkJCQkJCUNvbnRyb2xQYXJ0Q29kZQkJYWN0dWFsRm9jdXM7Ci0JCQkJ
CQkKLQkJCQkJCXJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJh
bUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLCBOVUxMLAotCQkJCQkJCQkJCXNpemVv
ZiggQ29udHJvbFBhcnRDb2RlICksIE5VTEwsICZkZXNpcmVkRm9jdXMgKTsgCi0JCQkJCQlyZXF1
aXJlX25vZXJyKCByZXN1bHQsIE1pc3NpbmdQYXJhbWV0ZXIgKTsKLQkJCQkJCQotCQkJCQkJR2V0
RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbEludmFsUmduLCB0eXBl
UURSZ25IYW5kbGUsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggUmduSGFuZGxlICksIE5VTEwsICZp
bnZhbGlkUmduICk7Ci0KLQkJCQkJCWZvY3VzRXZlcnl0aGluZyA9IGZhbHNlOyAvLyBhIGdvb2Qg
ZGVmYXVsdCBpbiBjYXNlIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBleGlzdAotCi0JCQkJCQlHZXRF
dmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRm9jdXNFdmVyeXRoaW5n
LCB0eXBlQm9vbGVhbiwgTlVMTCwKLQkJCQkJCQkJc2l6ZW9mKCBCb29sZWFuICksIE5VTEwsICZm
b2N1c0V2ZXJ5dGhpbmcgKTsKLQotCQkJCQkJcmVzdWx0ID0gU2V0Rm9jdXNQYXJ0KCB2aWV3LCBk
ZXNpcmVkRm9jdXMsIGludmFsaWRSZ24sIGZvY3VzRXZlcnl0aGluZywgJmFjdHVhbEZvY3VzICk7
Ci0JCQkJCQkKLQkJCQkJCWlmICggcmVzdWx0ID09IG5vRXJyICkKLQkJCQkJCQl2ZXJpZnlfbm9l
cnIoIFNldEV2ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xQYXJ0LCB0
eXBlQ29udHJvbFBhcnRDb2RlLAotCQkJCQkJCQkJc2l6ZW9mKCBDb250cm9sUGFydENvZGUgKSwg
JmFjdHVhbEZvY3VzICkgKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJCQkvLyBzb21l
IG90aGVyIGtpbmQgb2YgQ29udHJvbCBldmVudAotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwot
CQkJfQotCQkJYnJlYWs7Ci0JCQkKLQkJLy8gc29tZSBvdGhlciBldmVudCBjbGFzcwotCQlkZWZh
dWx0OgotCQkJYnJlYWs7Ci0JfQorICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xTZXRGb2N1c1Bh
cnQ6IHsKKyAgICAgICAgICAgIENvbnRyb2xQYXJ0Q29kZSBkZXNpcmVkRm9jdXM7CisgICAgICAg
ICAgICBSZ25IYW5kbGUgaW52YWxpZFJnbjsKKyAgICAgICAgICAgIEJvb2xlYW4gZm9jdXNFdmVy
eXRoaW5nOworICAgICAgICAgICAgQ29udHJvbFBhcnRDb2RlIGFjdHVhbEZvY3VzOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBr
RXZlbnRQYXJhbUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLCBudWxscHRyLCBzaXpl
b2YoQ29udHJvbFBhcnRDb2RlKSwgbnVsbHB0ciwgJmRlc2lyZWRGb2N1cyk7IAorICAgICAgICAg
ICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2
ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xJbnZhbFJnbiwgdHlwZVFEUmduSGFuZGxlLCBudWxscHRy
LCBzaXplb2YoUmduSGFuZGxlKSwgbnVsbHB0ciwgJmludmFsaWRSZ24pOworICAgICAgICAgICAg
Zm9jdXNFdmVyeXRoaW5nID0gZmFsc2U7IC8vIGEgZ29vZCBkZWZhdWx0IGluIGNhc2UgdGhlIHBh
cmFtZXRlciBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2
ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xGb2N1c0V2ZXJ5dGhpbmcsIHR5cGVCb29sZWFuLCBudWxs
cHRyLCBzaXplb2YoQm9vbGVhbiksIG51bGxwdHIsICZmb2N1c0V2ZXJ5dGhpbmcpOworCisgICAg
ICAgICAgICByZXN1bHQgPSBTZXRGb2N1c1BhcnQodmlldywgZGVzaXJlZEZvY3VzLCBpbnZhbGlk
UmduLCBmb2N1c0V2ZXJ5dGhpbmcsICZhY3R1YWxGb2N1cyk7CisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IG5vRXJyKQorICAgICAgICAgICAgICAgIEFTU0VSVCghU2V0RXZlbnRQYXJhbWV0ZXIo
aW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwgc2l6
ZW9mKENvbnRyb2xQYXJ0Q29kZSksICZhY3R1YWxGb2N1cykpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvLyBzb21lIG90aGVyIGtpbmQgb2YgQ29udHJvbCBldmVu
dAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CiAKLU1pc3NpbmdQYXJhbWV0ZXI6Ci0JcmV0dXJuIHJlc3VsdDsKKyAgICAvLyBz
b21lIG90aGVyIGV2ZW50IGNsYXNzCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAogc3RhdGljIHZvaWQgVXBkYXRlT2JzZXJ2ZXIo
Q0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5IGFjdGl2aXR5
LCB2b2lkICppbmZvKTsKIAotc3RhdGljIHZvaWQKLVN0YXJ0VXBkYXRlT2JzZXJ2ZXIoIEhJV2Vi
VmlldyogdmlldyApCitzdGF0aWMgdm9pZCBTdGFydFVwZGF0ZU9ic2VydmVyKEhJV2ViVmlldyog
dmlldykKIHsKLQlDRlJ1bkxvb3BPYnNlcnZlckNvbnRleHQJY29udGV4dDsKLQlDRlJ1bkxvb3BP
YnNlcnZlclJlZgkJb2JzZXJ2ZXI7Ci0gICAgQ0ZSdW5Mb29wUmVmCQkJCW1haW5SdW5Mb29wOwor
ICAgIENGUnVuTG9vcE9ic2VydmVyQ29udGV4dCBjb250ZXh0OworICAgIENGUnVuTG9vcE9ic2Vy
dmVyUmVmIG9ic2VydmVyOworICAgIENGUnVuTG9vcFJlZiBtYWluUnVuTG9vcDsKICAgICAKLSAg
ICBjaGVjayggdmlldy0+ZklzQ29tcG9zaXRlZCA9PSBmYWxzZSApOwotICAgIGNoZWNrKCB2aWV3
LT5mVXBkYXRlT2JzZXJ2ZXIgPT0gTlVMTCApOworICAgIEFTU0VSVCghdmlldy0+ZklzQ29tcG9z
aXRlZCk7CisgICAgQVNTRVJUKCF2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIpOwogCi0JY29udGV4dC52
ZXJzaW9uID0gMDsKLQljb250ZXh0LmluZm8gPSB2aWV3OwotCWNvbnRleHQucmV0YWluID0gTlVM
TDsKLQljb250ZXh0LnJlbGVhc2UgPSBOVUxMOwotCWNvbnRleHQuY29weURlc2NyaXB0aW9uID0g
TlVMTDsKLQotICAgIG1haW5SdW5Mb29wID0gKENGUnVuTG9vcFJlZilHZXRDRlJ1bkxvb3BGcm9t
RXZlbnRMb29wKCBHZXRNYWluRXZlbnRMb29wKCkgKTsKLQlvYnNlcnZlciA9IENGUnVuTG9vcE9i
c2VydmVyQ3JlYXRlKCBOVUxMLCBrQ0ZSdW5Mb29wRW50cnkgfCBrQ0ZSdW5Mb29wQmVmb3JlV2Fp
dGluZywgdHJ1ZSwgMCwgVXBkYXRlT2JzZXJ2ZXIsICZjb250ZXh0ICk7Ci0JQ0ZSdW5Mb29wQWRk
T2JzZXJ2ZXIoIG1haW5SdW5Mb29wLCBvYnNlcnZlciwga0NGUnVuTG9vcENvbW1vbk1vZGVzICk7
IAorICAgIGNvbnRleHQudmVyc2lvbiA9IDA7CisgICAgY29udGV4dC5pbmZvID0gdmlldzsKKyAg
ICBjb250ZXh0LnJldGFpbiA9IG51bGxwdHI7CisgICAgY29udGV4dC5yZWxlYXNlID0gbnVsbHB0
cjsKKyAgICBjb250ZXh0LmNvcHlEZXNjcmlwdGlvbiA9IG51bGxwdHI7CisKKyAgICBtYWluUnVu
TG9vcCA9IChDRlJ1bkxvb3BSZWYpR2V0Q0ZSdW5Mb29wRnJvbUV2ZW50TG9vcChHZXRNYWluRXZl
bnRMb29wKCkpOworICAgIG9ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVhdGUobnVsbHB0
ciwga0NGUnVuTG9vcEVudHJ5IHwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcsIHRydWUsIDAsIFVw
ZGF0ZU9ic2VydmVyLCAmY29udGV4dCk7CisgICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2ZXIobWFpblJ1
bkxvb3AsIG9ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOyAKIAogICAgIHZpZXctPmZV
cGRhdGVPYnNlcnZlciA9IG9ic2VydmVyOwogICAgIAotLy8gICAgcHJpbnRmKCAiVXBkYXRlIG9i
c2VydmVyIHN0YXJ0ZWRcbiIgKTsKKy8vICAgIHByaW50ZigiVXBkYXRlIG9ic2VydmVyIHN0YXJ0
ZWRcbiIpOwogfQogCi1zdGF0aWMgdm9pZAotU3RvcFVwZGF0ZU9ic2VydmVyKCBISVdlYlZpZXcq
IHZpZXcgKQorc3RhdGljIHZvaWQgU3RvcFVwZGF0ZU9ic2VydmVyKEhJV2ViVmlldyogdmlldykK
IHsKLSAgICBjaGVjayggdmlldy0+ZklzQ29tcG9zaXRlZCA9PSBmYWxzZSApOwotICAgIGNoZWNr
KCB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgIT0gTlVMTCApOworICAgIEFTU0VSVCghdmlldy0+Zklz
Q29tcG9zaXRlZCk7CisgICAgQVNTRVJUKHZpZXctPmZVcGRhdGVPYnNlcnZlcik7CiAKLSAgICBD
RlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUoIHZpZXctPmZVcGRhdGVPYnNlcnZlciApOwotICAg
IENGUmVsZWFzZSggdmlldy0+ZlVwZGF0ZU9ic2VydmVyICk7Ci0gICAgdmlldy0+ZlVwZGF0ZU9i
c2VydmVyID0gTlVMTDsKKyAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUodmlldy0+ZlVw
ZGF0ZU9ic2VydmVyKTsKKyAgICBDRlJlbGVhc2Uodmlldy0+ZlVwZGF0ZU9ic2VydmVyKTsKKyAg
ICB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPSBudWxscHRyOwogCi0vLyAgICBwcmludGYoICJVcGRh
dGUgb2JzZXJ2ZXIgcmVtb3ZlZFxuIiApOworLy8gICAgcHJpbnRmKCJVcGRhdGUgb2JzZXJ2ZXIg
cmVtb3ZlZFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIAotVXBkYXRlT2JzZXJ2ZXIoIENGUnVuTG9v
cE9ic2VydmVyUmVmIG9ic2VydmVyLCBDRlJ1bkxvb3BBY3Rpdml0eSBhY3Rpdml0eSwgdm9pZCAq
aW5mbyApCitVcGRhdGVPYnNlcnZlcihDRlJ1bkxvb3BPYnNlcnZlclJlZiBvYnNlcnZlciwgQ0ZS
dW5Mb29wQWN0aXZpdHkgYWN0aXZpdHksIHZvaWQgKmluZm8pCiB7Ci0JSElXZWJWaWV3KgkJCXZp
ZXcgPSAoSElXZWJWaWV3KilpbmZvOwotICAgIFJnbkhhbmRsZQkJCXJlZ2lvbiA9IE5ld1Jnbigp
OworICAgIEhJV2ViVmlldyogdmlldyA9IChISVdlYlZpZXcqKWluZm87CisgICAgUmduSGFuZGxl
IHJlZ2lvbiA9IE5ld1JnbigpOwogICAgIAotLy8gICAgcHJpbnRmKCAiVXBkYXRlIG9ic2VydmVy
IGNhbGxlZFxuIiApOworLy8gICAgcHJpbnRmKCJVcGRhdGUgb2JzZXJ2ZXIgY2FsbGVkXG4iKTsK
IAotICAgIGlmICggcmVnaW9uICkKLSAgICB7Ci0gICAgICAgIEdldFdpbmRvd1JlZ2lvbiggR2V0
Q29udHJvbE93bmVyKCB2aWV3LT5mVmlld1JlZiApLCBrV2luZG93VXBkYXRlUmduLCByZWdpb24g
KTsKKyAgICBpZiAocmVnaW9uKSB7CisgICAgICAgIEdldFdpbmRvd1JlZ2lvbihHZXRDb250cm9s
T3duZXIodmlldy0+ZlZpZXdSZWYpLCBrV2luZG93VXBkYXRlUmduLCByZWdpb24pOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCAhRW1wdHlSZ24oIHJlZ2lvbiApICkKLSAgICAgICAgewotICAgICAg
ICAgICAgUmduSGFuZGxlCQlvdXJSZ24gPSBOZXdSZ24oKTsKLSAgICAgICAgICAgIFJlY3QJCQly
ZWN0OworICAgICAgICBpZiAoIUVtcHR5UmduKHJlZ2lvbikpIHsKKyAgICAgICAgICAgIFJnbkhh
bmRsZSBvdXJSZ24gPSBOZXdSZ24oKTsKKyAgICAgICAgICAgIFJlY3QgcmVjdDsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgR2V0V2luZG93Qm91bmRzKCBHZXRDb250cm9sT3duZXIoIHZpZXct
PmZWaWV3UmVmICksIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZyZWN0ICk7CisgICAgICAgICAgICBH
ZXRXaW5kb3dCb3VuZHMoR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSwga1dpbmRvd1N0
cnVjdHVyZVJnbiwgJnJlY3QpOwogICAgICAgICAgICAgCi0vLyAgICAgICAgICAgIHByaW50Zigg
IlVwZGF0ZSByZWdpb24gaXMgbm9uLWVtcHR5XG4iICk7CisvLyAgICAgICAgICAgIHByaW50Zigi
VXBkYXRlIHJlZ2lvbiBpcyBub24tZW1wdHlcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIG91clJnbiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVjdAkJcmVj
dDsKLSAgICAgICAgICAgICAgICBHcmFmUHRyCQlzYXZlUG9ydCwgcG9ydDsKLSAgICAgICAgICAg
ICAgICBQb2ludAkJb2Zmc2V0ID0geyAwLCAwIH07CisgICAgICAgICAgICBpZiAob3VyUmduKSB7
CisgICAgICAgICAgICAgICAgUmVjdCByZWN0OworICAgICAgICAgICAgICAgIEdyYWZQdHIgc2F2
ZVBvcnQsIHBvcnQ7CisgICAgICAgICAgICAgICAgUG9pbnQgb2Zmc2V0ID0geyAwLCAwIH07CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcG9ydCA9IEdldFdpbmRvd1BvcnQoIEdl
dENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSApOworICAgICAgICAgICAgICAgIHBvcnQg
PSBHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcih2aWV3LT5mVmlld1JlZikpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdldFBvcnQoICZzYXZlUG9ydCApOwotICAgICAg
ICAgICAgICAgIFNldFBvcnQoIHBvcnQgKTsKKyAgICAgICAgICAgICAgICBHZXRQb3J0KCZzYXZl
UG9ydCk7CisgICAgICAgICAgICAgICAgU2V0UG9ydChwb3J0KTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBHbG9iYWxUb0xvY2FsKCAmb2Zmc2V0ICk7Ci0gICAgICAgICAgICAg
ICAgT2Zmc2V0UmduKCByZWdpb24sIG9mZnNldC5oLCBvZmZzZXQudiApOworICAgICAgICAgICAg
ICAgIEdsb2JhbFRvTG9jYWwoJm9mZnNldCk7CisgICAgICAgICAgICAgICAgT2Zmc2V0UmduKHJl
Z2lvbiwgb2Zmc2V0LmgsIG9mZnNldC52KTsKIAotICAgICAgICAgICAgICAgIEdldENvbnRyb2xC
b3VuZHMoIHZpZXctPmZWaWV3UmVmLCAmcmVjdCApOwotICAgICAgICAgICAgICAgIFJlY3RSZ24o
IG91clJnbiwgJnJlY3QgKTsKKyAgICAgICAgICAgICAgICBHZXRDb250cm9sQm91bmRzKHZpZXct
PmZWaWV3UmVmLCAmcmVjdCk7CisgICAgICAgICAgICAgICAgUmVjdFJnbihvdXJSZ24sICZyZWN0
KTsKICAgICAgICAgICAgICAgICAKLS8vICAgICAgICAgICAgICAgIHByaW50ZiggIm91ciBjb250
cm9sIGlzIGF0ICVkICVkICVkICVkXG4iLAotLy8gICAgICAgICAgICAgICAgICAgICAgICByZWN0
LnRvcCwgcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5yaWdodCApOworLy8gICAgICAgICAg
ICAgICAgcHJpbnRmKCJvdXIgY29udHJvbCBpcyBhdCAlZCAlZCAlZCAlZFxuIiwKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVjdC5ib3R0b20sIHJlY3Qu
cmlnaHQpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdldFJlZ2lvbkJvdW5k
cyggcmVnaW9uLCAmcmVjdCApOwotLy8gICAgICAgICAgICAgICAgcHJpbnRmKCAicmVnaW9uIGlz
IGF0ICVkICVkICVkICVkXG4iLAotLy8gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCwg
cmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5yaWdodCApOworICAgICAgICAgICAgICAgIEdl
dFJlZ2lvbkJvdW5kcyhyZWdpb24sICZyZWN0KTsKKy8vICAgICAgICAgICAgICAgIHByaW50Zigi
cmVnaW9uIGlzIGF0ICVkICVkICVkICVkXG4iLAorLy8gICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LnRvcCwgcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5yaWdodCk7CiAKLSAgICAgICAg
ICAgICAgICBTZWN0UmduKCBvdXJSZ24sIHJlZ2lvbiwgb3VyUmduICk7CisgICAgICAgICAgICAg
ICAgU2VjdFJnbihvdXJSZ24sIHJlZ2lvbiwgb3VyUmduKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBHZXRSZWdpb25Cb3VuZHMoIG91clJnbiwgJnJlY3QgKTsKLS8vICAgICAg
ICAgICAgICAgIHByaW50ZiggImludGVyc2VjdGlvbiBpcyAgJWQgJWQgJWQgJWRcbiIsCi0vLyAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVjdC5ib3R0b20sIHJl
Y3QucmlnaHQgKTsKLSAgICAgICAgICAgICAgICBpZiAoICFFbXB0eVJnbiggb3VyUmduICkgKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUmduSGFuZGxlCXNhdmVWaXMg
PSBOZXdSZ24oKTsKKyAgICAgICAgICAgICAgICBHZXRSZWdpb25Cb3VuZHMob3VyUmduLCAmcmVj
dCk7CisvLyAgICAgICAgICAgICAgICBwcmludGYoImludGVyc2VjdGlvbiBpcyAgJWQgJWQgJWQg
JWRcbiIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVj
dC5ib3R0b20sIHJlY3QucmlnaHQpOworICAgICAgICAgICAgICAgIGlmICghRW1wdHlSZ24ob3Vy
UmduKSkgeworICAgICAgICAgICAgICAgICAgICBSZ25IYW5kbGUgc2F2ZVZpcyA9IE5ld1Jnbigp
OwogICAgICAgICAgICAgICAgICAgICAKLS8vICAgICAgICAgICAgICAgICAgICBwcmludGYoICJs
b29rcyBsaWtlIHdlIHNob3VsZCBkcmF3XG4iICk7CisvLyAgICAgICAgICAgICAgICAgICAgcHJp
bnRmKCJsb29rcyBsaWtlIHdlIHNob3VsZCBkcmF3XG4iKTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHNhdmVWaXMgKQotICAgICAgICAgICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAg
ICAgICAgICAgIFJHQkNvbG9yCWtSZWRDb2xvciA9IHsgMHhmZmZmLCAwLCAwIH07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzYXZlVmlzKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFJH
QkNvbG9yICAgIGtSZWRDb2xvciA9IHsgMHhmZmZmLCAwLCAwIH07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldFBvcnRWaXNpYmxlUmVnaW9uKCBH
ZXRXaW5kb3dQb3J0KCBHZXRDb250cm9sT3duZXIoIHZpZXctPmZWaWV3UmVmICkgKSwgc2F2ZVZp
cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgU2V0UG9ydFZpc2libGVSZWdpb24oIEdldFdp
bmRvd1BvcnQoIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSApLCBvdXJSZ24gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdldFBvcnRWaXNpYmxlUmVnaW9uKEdldFdpbmRvd1Bv
cnQoR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSksIHNhdmVWaXMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0UG9ydFZpc2libGVSZWdpb24oR2V0V2luZG93UG9ydChHZXRDb250
cm9sT3duZXIodmlldy0+ZlZpZXdSZWYpKSwgb3VyUmduKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAotLy8gICAgICAgICAgICAgICAgICAgICAgICBSR0JGb3JlQ29sb3IoICZrUmVkQ29sb3Ig
KTsKLS8vICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRSZ24oIG91clJnbiApOwotLy8gICAg
ICAgICAgICAgICAgICAgICAgICBRREZsdXNoUG9ydEJ1ZmZlciggcG9ydCwgTlVMTCApOwotLy8g
ICAgICAgICAgICAgICAgICAgICAgICBEZWxheSggMTUsIE5VTEwgKTsKKy8vICAgICAgICAgICAg
ICAgICAgICAgICAgUkdCRm9yZUNvbG9yKCZrUmVkQ29sb3IpOworLy8gICAgICAgICAgICAgICAg
ICAgICAgICBQYWludFJnbihvdXJSZ24pOworLy8gICAgICAgICAgICAgICAgICAgICAgICBRREZs
dXNoUG9ydEJ1ZmZlcihwb3J0LCBudWxscHRyKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
RGVsYXkoMTUsIG51bGxwdHIpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBEcmF3MUNvbnRy
b2woIHZpZXctPmZWaWV3UmVmICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZFdpbmRv
d1JnbiggR2V0Q29udHJvbE93bmVyKCB2aWV3LT5mVmlld1JlZiApLCBvdXJSZ24gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIERyYXcxQ29udHJvbCh2aWV3LT5mVmlld1JlZik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWYWxpZFdpbmRvd1JnbihHZXRDb250cm9sT3duZXIodmlldy0+ZlZp
ZXdSZWYpLCBvdXJSZ24pOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBTZXRQb3J0VmlzaWJsZVJlZ2lvbiggR2V0V2luZG93UG9ydCggR2V0Q29udHJv
bE93bmVyKCB2aWV3LT5mVmlld1JlZiApICksIHNhdmVWaXMgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIERpc3Bvc2VSZ24oIHNhdmVWaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNl
dFBvcnRWaXNpYmxlUmVnaW9uKEdldFdpbmRvd1BvcnQoR2V0Q29udHJvbE93bmVyKHZpZXctPmZW
aWV3UmVmKSksIHNhdmVWaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgRGlzcG9zZVJnbihz
YXZlVmlzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIFNldFBvcnQoIHNhdmVQb3J0ICk7CisgICAgICAgICAgICAgICAgU2V0UG9y
dChzYXZlUG9ydCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRGlzcG9zZVJn
biggb3VyUmduICk7CisgICAgICAgICAgICAgICAgRGlzcG9zZVJnbihvdXJSZ24pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBEaXNwb3NlUmduKCByZWdpb24g
KTsKKyAgICAgICAgRGlzcG9zZVJnbihyZWdpb24pOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322085</attachid>
            <date>2017-09-28 08:57:10 -0700</date>
            <delta_ts>2017-09-28 10:35:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177551-20170928085709.patch</filename>
            <type>text/plain</type>
            <size>129318</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjU1OCkKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDk0IEBACisyMDE3LTA5LTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
KworICAgICAgICBCdWlsZCBmaXggZm9yIEhpZ2ggU2llcnJhIDMyIGJpdCBNYWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzU1MQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzQ2OTAyODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFBy
b3NrdXJ5YWtvdi4KKworICAgICAgICBTb21lIGFzc2VydGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQg
ZnJvbSB0aGUgU0RLLiBSZXBsYWNlIHRoZXNlIGFzc2VydGlvbnMgd2l0aCBlcXVpdmFsZW50Cisg
ICAgICAgIFdURiBhc3NlcnQgY29kZS4gIFNpbmNlIHRoZSBmaWxlcyBpbiB0aGlzIHBhdGNoIGFy
ZSB1c2luZyB0YWJzLCBzb21lIHN0eWxlIGNoYW5nZXMgd2VyZQorICAgICAgICBhbHNvIG1hZGUu
CisKKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5tbToKKyAgICAgICAgKCtb
Q2FyYm9uV2luZG93QWRhcHRlciBmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazpdKToKKyAgICAg
ICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBpbml0V2l0aENvbnRlbnRSZWN0OnN0eWxlTWFzazpi
YWNraW5nOmRlZmVyOl0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGluaXRXaXRo
Q2FyYm9uV2luZG93UmVmOnRha2luZ093bmVyc2hpcDpkaXNhYmxlT3JkZXJpbmc6Y2FyYm9uOl0p
OgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIHNldFZpZXdzTmVlZERpc3BsYXk6XSk6
CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6
dGFraW5nT3duZXJzaGlwOl0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGRlYWxs
b2NdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciB3aW5kb3dSZWZdKToKKyAgICAg
ICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfaGFzV2luZG93UmVmXSk6CisgICAgICAgICgtW0Nh
cmJvbldpbmRvd0FkYXB0ZXIgX21hbmFnZXNXaW5kb3dSZWZdKToKKyAgICAgICAgKC1bQ2FyYm9u
V2luZG93QWRhcHRlciBfcmVtb3ZlV2luZG93UmVmXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRv
d0FkYXB0ZXIgX2NhcmJvbldpbmRvd0NsYXNzXSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0Fk
YXB0ZXIgcmVjb25jaWxlVG9DYXJib25XaW5kb3dCb3VuZHNdKToKKyAgICAgICAgKC1bQ2FyYm9u
V2luZG93QWRhcHRlciBzZW5kU3VwZXJFdmVudDpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93
QWRhcHRlciByZWxpbnF1aXNoRm9jdXNdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRl
ciBfY2FuY2VsS2V5Ol0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9jb21tb25B
d2FrZV0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9kZXN0cm95UmVhbFdpbmRv
dzpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBfb2xkUGxhY2VXaW5kb3c6XSk6
CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX3Rlcm1XaW5kb3dJZk93bmVyXSk6Cisg
ICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX3dpbmRvd01vdmVkVG9SZWN0Ol0pOgorICAg
ICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGNvbnN0cmFpbkZyYW1lUmVjdDp0b1NjcmVlbjpd
KToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZWxlY3RLZXlWaWV3Rm9sbG93aW5n
VmlldzpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZWxlY3RLZXlWaWV3UHJl
Y2VkaW5nVmlldzpdKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBjYW5CZWNvbWVL
ZXlXaW5kb3ddKToKKyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBjYW5CZWNvbWVNYWlu
V2luZG93XSk6CisgICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgZW5jb2RlV2l0aENvZGVy
Ol0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIGluaXRXaXRoQ29kZXI6XSk6Cisg
ICAgICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgc2V0Q29udGVudFZpZXc6XSk6CisgICAgICAg
ICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgd29ya3NXaGVuTW9kYWxdKToKKyAgICAgICAgKC1bQ2Fy
Ym9uV2luZG93QWRhcHRlciBfc2V0TW9kYWxXaW5kb3dMZXZlbF0pOgorICAgICAgICAoLVtDYXJi
b25XaW5kb3dBZGFwdGVyIF9jbGVhck1vZGFsV2luZG93TGV2ZWxdKToKKyAgICAgICAgKC1bQ2Fy
Ym9uV2luZG93QWRhcHRlciBjYXJib25ISUNvbW1hbmRJREZyb21BY3Rpb25TZWxlY3RvcjpdKToK
KyAgICAgICAgKC1bQ2FyYm9uV2luZG93QWRhcHRlciBzZW5kQ2FyYm9uUHJvY2Vzc0hJQ29tbWFu
ZEV2ZW50Ol0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIHNlbmRDYXJib25VcGRh
dGVISUNvbW1hbmRTdGF0dXNFdmVudDp3aXRoTWVudVJlZjphbmRNZW51SXRlbUluZGV4Ol0pOgor
ICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9oYW5kbGVSb290Qm91bmRzQ2hhbmdlZF0p
OgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9oYW5kbGVDb250ZW50Qm91bmRzQ2hh
bmdlZF0pOgorICAgICAgICAoLVtDYXJib25XaW5kb3dBZGFwdGVyIF9oYW5kbGVDYXJib25FdmVu
dDpjYWxsUmVmOl0pOgorICAgICAgICAoTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudCk6CisgICAg
ICAgICgtW0NhcmJvbldpbmRvd0FkYXB0ZXIgX3JlYWxseURvT3JkZXJXaW5kb3c6cmVsYXRpdmVU
bzpmaW5kS2V5OmZvckNvdW50ZXI6Zm9yY2U6aXNNb2RhbDpdKToKKyAgICAgICAgKC1bQ2FyYm9u
V2luZG93QWRhcHRlciBfZ3Jvd0JveFJlY3RdKToKKyAgICAgICAgKiBDYXJib24vSElXZWJWaWV3
Lm1tOgorICAgICAgICAoSElXZWJWaWV3R2V0V2ViVmlldyk6CisgICAgICAgIChISVdlYlZpZXdD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChISVdlYlZpZXdEZXN0cnVjdG9yKToKKyAgICAgICAgKEhJ
V2ViVmlld1JlZ2lzdGVyQ2xhc3MpOgorICAgICAgICAoR2V0QmVoYXZpb3JzKToKKyAgICAgICAg
KERyYXcpOgorICAgICAgICAoSGl0VGVzdCk6CisgICAgICAgIChHZXRSZWdpb24pOgorICAgICAg
ICAoR2V0V2luZG93UmVmKToKKyAgICAgICAgKENyZWF0ZU5TRXZlbnRBZG9wdGluZ0NHRXZlbnQp
OgorICAgICAgICAoQ29weUV2ZW50Q0dFdmVudCk6CisgICAgICAgIChDcmVhdGVOU0V2ZW50V2l0
aENhcmJvbkNsaWNrRXZlbnQpOgorICAgICAgICAoQ2xpY2spOgorICAgICAgICAoQ3JlYXRlTlNF
dmVudFdpdGhDYXJib25FdmVudCk6CisgICAgICAgIChNb3VzZVVwKToKKyAgICAgICAgKENyZWF0
ZU5TRXZlbnRXaXRoQ2FyYm9uTW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoTW91c2VNb3ZlZCk6
CisgICAgICAgIChNb3VzZURyYWdnZWQpOgorICAgICAgICAoTW91c2VXaGVlbE1vdmVkKToKKyAg
ICAgICAgKENvbnRleHRNZW51Q2xpY2spOgorICAgICAgICAoR2V0S2luZCk6CisgICAgICAgIChC
b3VuZHNDaGFuZ2VkKToKKyAgICAgICAgKE93bmluZ1dpbmRvd0NoYW5nZWQpOgorICAgICAgICAo
V2luZG93SGFuZGxlcik6CisgICAgICAgIChTeW5jRnJhbWUpOgorICAgICAgICAoU2V0Rm9jdXNQ
YXJ0KToKKyAgICAgICAgKEFkdmFuY2VGb2N1cyk6CisgICAgICAgIChSZWxpbnF1aXNoRm9jdXMp
OgorICAgICAgICAoQWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFByb2Nlc3NDb21tYW5k
KToKKyAgICAgICAgKFVwZGF0ZUNvbW1hbmRTdGF0dXMpOgorICAgICAgICAoX05TU2VsZWN0b3JG
b3JISUNvbW1hbmQpOgorICAgICAgICAoSElXZWJWaWV3RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KFN0YXJ0VXBkYXRlT2JzZXJ2ZXIpOgorICAgICAgICAoU3RvcFVwZGF0ZU9ic2VydmVyKToKKyAg
ICAgICAgKFVwZGF0ZU9ic2VydmVyKToKKwogMjAxNy0wOS0yNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgUG9saWN5QWN0aW9uIGFu
IGVuY29kYWJsZSBlbnVtIGNsYXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJi
b24vQ2FyYm9uV2luZG93QWRhcHRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5tbQkocmV2aXNpb24gMjIyNTUzKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIubW0J
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICNpbXBvcnQgPHBhbC9zcGkvbWFjL0hJ
VG9vbGJveFNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNXaW5kb3dTUEkuaD4KICNpbXBv
cnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5o
PgogCkBAIC0xMTMsNyArMTE0LDggQEAgc3RhdGljIE9TU3RhdHVzIE5TQ2FyYm9uV2luZG93SGFu
ZGxlRXZlbgogCiAKIC8vIFJldHVybiBhbiBhcHByb3ByaWF0ZSB3aW5kb3cgZnJhbWUgY2xhc3Mu
Ci0rIChDbGFzcylmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazoodW5zaWduZWQgaW50KXN0eWxl
IHsKKysgKENsYXNzKWZyYW1lVmlld0NsYXNzRm9yU3R5bGVNYXNrOih1bnNpZ25lZClzdHlsZQor
ewogCiAgICAgLy8gVGhlcmUncyBvbmx5IG9uZSBhcHByb3ByaWF0ZSB3aW5kb3cgc3R5bGUsIGFu
ZCBvbmx5IG9uZSBhcHByb3ByaWF0ZSB3aW5kb3cgZnJhbWUgY2xhc3MuCiAgICAgYXNzZXJ0KHN0
eWxlICYgX05TQ2FyYm9uV2luZG93TWFzayk7CkBAIC0xMjMsMTYgKzEyNSwxOCBAQCArIChDbGFz
cylmcmFtZVZpZXdDbGFzc0ZvclN0eWxlTWFzazoodW5zCiAKIAogLy8gT3ZlcnJpZGluZyBvZiB0
aGUgcGFyZW50IGNsYXNzJyBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBqdXN0IGZvciBzYWZldHkn
cyBzYWtlLgotLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0
eWxlTWFzazoodW5zaWduZWQgaW50KXN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSli
dWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcgeworLSAoaWQpaW5pdFdpdGhDb250ZW50UmVj
dDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazoodW5zaWduZWQpc3R5bGUgYmFja2luZzoo
TlNCYWNraW5nU3RvcmVUeXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworewogCiAg
ICAgLy8gRG8gdGhlIHN0YW5kYXJkIENvY29hIHRoaW5nLgogICAgIHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6c3R5bGUgYmFja2luZzpidWZm
ZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlmIChzZWxmPT1uaWwpIHJldHVybiBuaWw7Cisg
ICAgaWYgKHNlbGYgPT0gbmlsKQorICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gU2ltcGxl
LgotICAgIF93aW5kb3dSZWYgPSBOVUxMOworICAgIF93aW5kb3dSZWYgPSBudWxscHRyOwogICAg
IF93aW5kb3dSZWZJc093bmVkID0gTk87Ci0gICAgX2V2ZW50SGFuZGxlciA9IE5VTEw7CisgICAg
X2V2ZW50SGFuZGxlciA9IG51bGxwdHI7CiAgICAgCiAgICAgLy8gRG9uZS4KICAgICByZXR1cm4g
c2VsZjsKQEAgLTE0MCw3ICsxNDQsOCBAQCAtIChpZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1Jl
Y3QpY29udGVuCiB9CiAKIC8vIEdpdmVuIGEgcmVmZXJlbmNlIHRvIGEgQ2FyYm9uIHdpbmRvdyB0
aGF0IGlzIHRvIGJlIGVuY2Fwc3VsYXRlZCwgYW4gaW5kaWNhdG9yIG9mIHdoZXRoZXIgb3Igbm90
IHRoaXMgb2JqZWN0IHNob3VsZCB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciBkaXNwb3Npbmcgb2Yg
dGhlIENhcmJvbiB3aW5kb3csIGFuZCBhbiBpbmRpY2F0b3Igb2Ygd2hldGhlciB0byBkaXNhYmxl
IENhcmJvbiB3aW5kb3cgb3JkZXJpbmcsIGluaXRpYWxpemUuICBUaGlzIGlzIHRoZSBjbGFzcycg
ZGVzaWduYXRlZCBpbml0aWFsaXplci4KLS0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihX
aW5kb3dSZWYpaW5XaW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNP
d25lZCBkaXNhYmxlT3JkZXJpbmc6KEJPT0wpaW5EaXNhYmxlT3JkZXJpbmcgY2FyYm9uOihCT09M
KWluQ2FyYm9uIHsKKy0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYpaW5X
aW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNPd25lZCBkaXNhYmxl
T3JkZXJpbmc6KEJPT0wpaW5EaXNhYmxlT3JkZXJpbmcgY2FyYm9uOihCT09MKWluQ2FyYm9uCit7
CiAKICAgICBOU0JhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZTsKICAgICBDYXJib25X
aW5kb3dDb250ZW50VmlldyAqY2FyYm9uV2luZG93Q29udGVudFZpZXc7CkBAIC0xNTEsMTQgKzE1
NiwxNCBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAgICAgdW5z
aWduZWQgaW50IHN0eWxlTWFzazsKICAgICB2b2lkICpuYXRpdmVXaW5kb3c7CiAgICAgV2luZG93
TW9kYWxpdHkgd2luZG93TW9kYWxpdHk7Ci0JQ29udHJvbFJlZgkJY29udGVudFZpZXc7Ci0JCisg
ICAgQ29udHJvbFJlZiBjb250ZW50VmlldzsKKwogICAgIC8vIFNpbXBsZS4KICAgICAvLyBJdCdz
IHZlcnkgd2VhayB0byBoYXZlIHRvIHB1dCB0aGlzIGJlZm9yZSB0aGUgaW52b2NhdGlvbiBvZiBb
c3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDouLi5dLCBidXQgLXNldENvbnRlbnRWaWV3OiBpcyBp
bnZva2VkIGZyb20gd2l0aGluIHRoYXQgaW5pdGlhbGl6ZXIuICBJdCB0dXJucyBvdXQgdGhhdCB0
aGUgY29tbW9uIGFkbW9uaXRpb24gYWJvdXQgbm90IGNhbGxpbmcgdmlydHVhbCBmdW5jdGlvbnMg
ZnJvbSB3aXRoaW4gQysrIGNvbnN0cnVjdG9ycyBtYWtlcyBzZW5zZSBpbiBPYmplY3RpdmUtQyB0
b28uICBNLlAuIE5vdGljZSAtIDEwLzEwLzAwCiAgICAgX3dpbmRvd1JlZiA9IGluV2luZG93UmVm
OwogICAgIC8vX2F1eGlsaWFyeVN0b3JhZ2UtPl93aW5kb3dSZWYgPSBpbldpbmRvd1JlZjsKICAg
ICBfd2luZG93UmVmSXNPd25lZCA9IGluV2luZG93UmVmSXNPd25lZDsKLQlfY2FyYm9uID0gaW5D
YXJib247CisgICAgX2NhcmJvbiA9IGluQ2FyYm9uOwogCiAgICAgLy8gRmluZCBvdXQgdGhlIHdp
bmRvdydzIENvcmVHcmFwaGljcyB3aW5kb3cgcmVmZXJlbmNlLgogICAgIG5hdGl2ZVdpbmRvdyA9
ICh2b2lkKilHZXROYXRpdmVXaW5kb3dGcm9tV2luZG93UmVmKGluV2luZG93UmVmKTsKQEAgLTE3
MSw5ICsxNzYsOSBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAK
ICAgICAvLyBGaWd1cmUgb3V0IHRoZSB3aW5kb3cncyBiYWNraW5nIHN0b3JlIHR5cGUuCiAgICAg
Ly8gQXQgb25lIHRpbWUsIHRoaXMgaGFkIGNvZGUgc3RvbGVuIGZyb20gQ3JlYXRlUGxhdGZvcm1X
aW5kb3cgaW4gSElUb29sYm94L1dpbmRvd3MvUGxhdGZvcm0vQ0dTUGxhdGZvcm0uYwotCS8vIEJ1
dCBub3cgdGhlIG5vbi1yZXRhaW5lZCB3aW5kb3cgY2xhc3MgaXMgYSBDYXJib24gc2VjcmV0IHRo
YXQncyBub3QgZXZlbiBpbgotCS8vIFdpbmRvd3NQcml2Lmg7IG1heWJlIHdlJ2xsIGhhdmUgdG8g
cmV2aXNpdCB0aGlzIGlmIHNvbWVvbmUgbmVlZHMgdG8gdXNlIFdlYktpdAotCS8vIGluIGEgbm9u
LXJldGFpbmVkIHdpbmRvdy4KKyAgICAvLyBCdXQgbm93IHRoZSBub24tcmV0YWluZWQgd2luZG93
IGNsYXNzIGlzIGEgQ2FyYm9uIHNlY3JldCB0aGF0J3Mgbm90IGV2ZW4gaW4KKyAgICAvLyBXaW5k
b3dzUHJpdi5oOyBtYXliZSB3ZSdsbCBoYXZlIHRvIHJldmlzaXQgdGhpcyBpZiBzb21lb25lIG5l
ZWRzIHRvIHVzZSBXZWJLaXQKKyAgICAvLyBpbiBhIG5vbi1yZXRhaW5lZCB3aW5kb3cuCiAjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgYmFja2luZ1N0b3JlVHlwZSA9IE5T
QmFja2luZ1N0b3JlUmV0YWluZWQ7CkBAIC0xOTAsNyArMTk1LDcgQEAgLSAoaWQpaW5pdFdpdGhD
YXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZgogICAgIGlmICh3aW5kb3dGZWF0dXJlcyAmIGtXaW5k
b3dIYXNUaXRsZUJhcikKICAgICAgICAgc3R5bGVNYXNrIHw9IE5TV2luZG93U3R5bGVNYXNrVGl0
bGVkOwogCi0gICAgb3NTdGF0dXMgPSBHZXRXaW5kb3dNb2RhbGl0eShfd2luZG93UmVmLCAmd2lu
ZG93TW9kYWxpdHksIE5VTEwpOworICAgIG9zU3RhdHVzID0gR2V0V2luZG93TW9kYWxpdHkoX3dp
bmRvd1JlZiwgJndpbmRvd01vZGFsaXR5LCBudWxscHRyKTsKICAgICBpZiAob3NTdGF0dXMgIT0g
bm9FcnIpIHsKICAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBnZXQgd2luZG93IG1vZGFsaXR5OiBl
cnJvcj0lbGQiLCBvc1N0YXR1cyk7CiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0yMDAsNyArMjA1
LDcgQEAgLSAoaWQpaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZgogICAgIGNhcmJv
bldpbmRvd0NvbnRlbnRWaWV3ID0gW1tbQ2FyYm9uV2luZG93Q29udGVudFZpZXcgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKIAogICAgIC8vIERvIHNvbWUgc3RhbmRhcmQgQ29jb2EgaW5pdGlh
bGl6YXRpb24uICBUaGUgZGVmZXIgYXJndW1lbnQncyB2YWx1ZSBpcyBZRVMgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IC1bTlNXaW5kb3cgX2NvbW1vbkF3YWtlXSB0byBnZXQgY2FsbGVkLiAgSXQgZG9l
c24ndCBhcHBlYXIgdGhhdCBhbnkgcmVsZXZhbnQgTlNXaW5kb3cgY29kZSBjaGVja3MgX3dGbGFn
cy5kZWZlcnJlZCwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCB0aGUgbGll
LgotICAgIHNlbGYgPSAoQ2FyYm9uV2luZG93QWRhcHRlciopW3N1cGVyIF9pbml0Q29udGVudDpO
VUxMIHN0eWxlTWFzazpzdHlsZU1hc2sgYmFja2luZzpiYWNraW5nU3RvcmVUeXBlIGRlZmVyOllF
UyBjb250ZW50VmlldzpjYXJib25XaW5kb3dDb250ZW50Vmlld107CisgICAgc2VsZiA9IChDYXJi
b25XaW5kb3dBZGFwdGVyKilbc3VwZXIgX2luaXRDb250ZW50Om51bGxwdHIgc3R5bGVNYXNrOnN0
eWxlTWFzayBiYWNraW5nOmJhY2tpbmdTdG9yZVR5cGUgZGVmZXI6WUVTIGNvbnRlbnRWaWV3OmNh
cmJvbldpbmRvd0NvbnRlbnRWaWV3XTsKICAgICBpZiAoIXNlbGYpIHJldHVybiBuaWw7CiAgICAg
YXNzZXJ0KF9jb250ZW50Vmlldyk7CiAKQEAgLTIxNiwxMSArMjIxLDExIEBAIC0gKGlkKWluaXRX
aXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYKIAogICAgIC8vIEluc3RhbGwgYW4gZXZlbnQg
aGFuZGxlciBmb3IgdGhlIENhcmJvbiB3aW5kb3cgZXZlbnRzIGluIHdoaWNoIHdlJ3JlIGludGVy
ZXN0ZWQuCiAgICAgY29uc3QgRXZlbnRUeXBlU3BlYyBrRXZlbnRzW10gPSB7Ci0gICAgICAgICAg
ICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dBY3RpdmF0ZWQgfSwKLSAgICAgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkIH0sCi0gICAg
ICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dCb3VuZHNDaGFuZ2VkIH0s
Ci0gICAgICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dTaG93biB9LAot
ICAgICAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93SGlkZGVuIH0KKyAg
ICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93QWN0aXZhdGVkIH0sCisgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkIH0sCisgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0JvdW5kc0NoYW5nZWQgfSwKKyAg
ICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93U2hvd24gfSwKKyAgICAgICAg
eyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93SGlkZGVuIH0KICAgICB9OwogICAgIAog
ICAgIGNvbnN0IEV2ZW50VHlwZVNwZWMga0NvbnRyb2xCb3VuZHNDaGFuZ2VkRXZlbnQgPSB7IGtF
dmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQgfTsKQEAgLTI0Myw3
ICsyNDgsNyBAQCAtIChpZClpbml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAgICAg
ICAgICAgICBbc2VsZiByZWxlYXNlXTsKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQot
CQorCiAgICAgLy8gUHV0IGEgcG9pbnRlciB0byB0aGlzIENvY29hIE5TV2luZG93IGluIGEgQ2Fy
Ym9uIHdpbmRvdyBwcm9wZXJ0eSB0YWcuCiAgICAgLy8gUmlnaHQgbm93LCB0aGlzIGlzIGp1c3Qg
dXNlZCBieSBOU1ZpZXdDYXJib25Db250cm9sLiAgTS5QLiBOb3RpY2UgLSAxMC85LzAwCiAgICAg
d2luZG93QXNQcm9wZXJ0eSA9IHNlbGY7CkBAIC0yNjQsMjAgKzI2OSwyMCBAQCAtIChpZClpbml0
V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmCiAKIH0KIAotLSAodm9pZClzZXRWaWV3c05l
ZWREaXNwbGF5OihCT09MKXdlbGxEb1RoZXkgewotCS8vIE1ha2Ugc3VyZSB3ZSBjYW4gZmx1c2gg
YW55dGhpbmcgdGhhdCBuZWVkcyBpdC4KKy0gKHZvaWQpc2V0Vmlld3NOZWVkRGlzcGxheTooQk9P
TCl3ZWxsRG9UaGV5Cit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiBmbHVzaCBhbnl0aGluZyB0
aGF0IG5lZWRzIGl0LgogCi0JLy8gV2UgbmVlZCB0byBzeW5jIHRoZSBjb250ZXh0IGhlcmUuIEkg
d2FzIGhvcGluZyBJIGRpZG4ndCBuZWVkIHRvIGRvIHRoaXMsCi0JLy8gYnV0IGFwcGFyZW50bHkg
d2hlbiBzY3JvbGxpbmcsIHRoZSBBcHBLaXQgdmlldyBzeXN0ZW0gZHJhd3MgZGlyZWN0bHkuCi0J
Ly8gV2hlbiB0aGlzIG9jY3VycywgSSBjYW5ub3QgaW50ZXJjZXB0IGl0IHRvIG1ha2UgaXQgZHJh
dyBpbiBteSBISVZpZXcKLQkvLyBjb250ZXh0LiBXaGF0IGVuZHMgdXAgaGFwcGVuaW5nIGlzIHRo
YXQgaXQgZHJhd3MsIGJ1dCBub3RoaW5nIGV2ZXIKLQkvLyBmbHVzaGVzIGl0LgotCi0JaWYgKCBb
c2VsZiB3aW5kb3dOdW1iZXJdICE9IC0xICkKLQl7Ci0JCUNHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSAoQ0dDb250ZXh0UmVmKVtbc2VsZiBfdGhyZWFkQ29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKLQkJ
Q0dDb250ZXh0U3luY2hyb25pemUoIGNnQ29udGV4dCApOwotCX0KKyAgICAvLyBXZSBuZWVkIHRv
IHN5bmMgdGhlIGNvbnRleHQgaGVyZS4gSSB3YXMgaG9waW5nIEkgZGlkbid0IG5lZWQgdG8gZG8g
dGhpcywKKyAgICAvLyBidXQgYXBwYXJlbnRseSB3aGVuIHNjcm9sbGluZywgdGhlIEFwcEtpdCB2
aWV3IHN5c3RlbSBkcmF3cyBkaXJlY3RseS4KKyAgICAvLyBXaGVuIHRoaXMgb2NjdXJzLCBJIGNh
bm5vdCBpbnRlcmNlcHQgaXQgdG8gbWFrZSBpdCBkcmF3IGluIG15IEhJVmlldworICAgIC8vIGNv
bnRleHQuIFdoYXQgZW5kcyB1cCBoYXBwZW5pbmcgaXMgdGhhdCBpdCBkcmF3cywgYnV0IG5vdGhp
bmcgZXZlcgorICAgIC8vIGZsdXNoZXMgaXQuCisKKyAgICBpZiAoW3NlbGYgd2luZG93TnVtYmVy
XSAhPSAtMSkgeworICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gKENHQ29udGV4dFJl
ZilbW3NlbGYgX3RocmVhZENvbnRleHRdIGdyYXBoaWNzUG9ydF07CisgICAgICAgIENHQ29udGV4
dFN5bmNocm9uaXplKGNnQ29udGV4dCk7CisgICAgfQogfQogCiArICh2b2lkKWluaXRpYWxpemUK
QEAgLTI4OCwxNCArMjkzLDE2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogfQogCiAvLyBHaXZlbiBh
IHJlZmVyZW5jZSB0byBhIENhcmJvbiB3aW5kb3cgdGhhdCBpcyB0byBiZSBlbmNhcHN1bGF0ZWQs
IGFuZCBhbiBpbmRpY2F0b3Igb2Ygd2hldGhlciBvciBub3QgdGhpcyBvYmplY3Qgc2hvdWxkIHRh
a2UgcmVzcG9uc2liaWxpdHkgZm9yIGRpc3Bvc2luZyBvZiB0aGUgQ2FyYm9uIHdpbmRvdywgaW5p
dGlhbGl6ZS4KLS0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYpaW5XaW5k
b3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNPd25lZCB7CistIChpZClp
bml0V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVy
c2hpcDooQk9PTClpbldpbmRvd1JlZklzT3duZWQKK3sKICAgICAvLyBmb3Igbm93LCBzZXQgZGlz
YWJsZU9yZGVyaW5nIHRvIFlFUyBiZWNhdXNlIHRoYXQgaXMgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5n
IGFuZCBpcyB0aGVyZWZvcmUgbG93ZXIgcmlzay4gSG93ZXZlciwgSSB0aGluayBpdCB3b3VsZCBi
ZSBjb3JyZWN0IHRvIHNldCBpdCB0byBOTy4KICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhDYXJi
b25XaW5kb3dSZWY6aW5XaW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOmluV2luZG93UmVmSXNPd25l
ZCBkaXNhYmxlT3JkZXJpbmc6WUVTIGNhcmJvbjpOT107CiB9CiAKIAogLy8gQ2xlYW4gdXAuCi0t
ICh2b2lkKWRlYWxsb2MgeworLSAodm9pZClkZWFsbG9jCit7CiAgICAgaWYgKFdlYkNvcmVPYmpD
U2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtDYXJib25XaW5kb3dBZGFwdGVyIGNsYXNz
XSwgc2VsZikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzA3LDcgKzMxNCw4IEBAIC0gKHZvaWQp
ZGVhbGxvYyB7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi0tIChXaW5kb3dSZWYpd2luZG93
UmVmIHsKKy0gKFdpbmRvd1JlZil3aW5kb3dSZWYKK3sKIAogICAgIC8vIFNpbXBsZS4KICAgICBy
ZXR1cm4gX3dpbmRvd1JlZjsKQEAgLTMxNSwyNyArMzIzLDMxIEBAIC0gKFdpbmRvd1JlZil3aW5k
b3dSZWYgewogfQogCiAvLyBzaG91bGQgYWx3YXlzIGJlIFlFUywgYnV0IGNoZWNrIGluIG9yZGVy
IHRvIGF2b2lkIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiBzdXJwcmlzZXMKLS0gKEJP
T0wpX2hhc1dpbmRvd1JlZiB7Ci0gICAgcmV0dXJuIChfd2luZG93UmVmICE9IE5VTEwpOworLSAo
Qk9PTClfaGFzV2luZG93UmVmCit7CisgICAgcmV0dXJuIChfd2luZG93UmVmICE9IG51bGxwdHIp
OwogfQogCiAvLyBhbiBOU0NhcmJvbldpbmRvdyBkb2VzIG5vdCBtYW5hZ2UgdGhlIHdpbmRvd1Jl
Zi4gIFRoZSB3aW5kb3dSZWYgbWFuYWdlcyB0aGUgTlNDYXJib25XaW5kb3cKLS0gKEJPT0wpX21h
bmFnZXNXaW5kb3dSZWYgeworLSAoQk9PTClfbWFuYWdlc1dpbmRvd1JlZgorewogICAgIHJldHVy
biBOTzsKIH0KIAotLSAodm9pZClfcmVtb3ZlV2luZG93UmVmIHsKLSAgICBfd2luZG93UmVmID0g
TlVMTDsKLQkKKy0gKHZvaWQpX3JlbW92ZVdpbmRvd1JlZgoreworICAgIF93aW5kb3dSZWYgPSBu
dWxscHRyOworCiAgICAgaWYgKF9ldmVudEhhbmRsZXIpIFJlbW92ZUV2ZW50SGFuZGxlcihfZXZl
bnRIYW5kbGVyKTsKLQkKLQlfZXZlbnRIYW5kbGVyID0gTlVMTDsKKworICAgIF9ldmVudEhhbmRs
ZXIgPSBudWxscHRyOwogfQogCi0tIChXaW5kb3dDbGFzcylfY2FyYm9uV2luZG93Q2xhc3Mgewor
LSAoV2luZG93Q2xhc3MpX2NhcmJvbldpbmRvd0NsYXNzCit7CiAgICAgV2luZG93Q2xhc3Mgd2lu
ZG93Q2xhc3MgPSBrRG9jdW1lbnRXaW5kb3dDbGFzczsKICAgICBPU1N0YXR1cyBvc1N0YXR1czsK
LSAgICAKKwogICAgIGlmIChbc2VsZiBfaGFzV2luZG93UmVmXSkgewogICAgICAgICBvc1N0YXR1
cyA9IEdldFdpbmRvd0NsYXNzKFtzZWxmIHdpbmRvd1JlZl0sICZ3aW5kb3dDbGFzcyk7CiAgICAg
ICAgIGlmIChvc1N0YXR1cyAhPSBub0VycikgewpAQCAtMzQ2LDggKzM1OCw4IEBAIC0gKFdpbmRv
d0NsYXNzKV9jYXJib25XaW5kb3dDbGFzcyB7CiB9CiAKIC8vIFVwZGF0ZSB0aGlzIHdpbmRvdydz
IGZyYW1lIGFuZCBjb250ZW50IGZyYW1lIHJlY3RhbmdsZXMgdG8gbWF0Y2ggdGhlIENhcmJvbiB3
aW5kb3cncyBzdHJ1Y3R1cmUgYm91bmRzIGFuZCBjb250ZW50IGJvdW5kcyByZWN0YW5nbGVzLiAg
UmV0dXJuIHllcyBpZiB0aGUgdXBkYXRlIHdhcyByZWFsbHkgbmVjZXNzYXJ5LCBubyBvdGhlcndp
c2UuCi0tIChCT09MKXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzIHsKLQorLSAoQk9PTCly
ZWNvbmNpbGVUb0NhcmJvbldpbmRvd0JvdW5kcworewogICAgIE9TU3RhdHVzIG9zU3RhdHVzOwog
ICAgIE5TUmVjdCBuZXdDb250ZW50RnJhbWVSZWN0OwogICAgIE5TUmVjdCBuZXdXaW5kb3dGcmFt
ZVJlY3Q7CkBAIC0zNjMsOSArMzc1LDExIEBAIC0gKEJPT0wpcmVjb25jaWxlVG9DYXJib25XaW5k
b3dCb3VuZHMgewogCiAgICAgLy8gR2V0IHRoZSBDYXJib24gd2luZG93J3MgYm91bmRzLCB3aGlj
aCBhcmUgZXhwcmVzc2VkIGluIGdsb2JhbCBzY3JlZW4gY29vcmRpbmF0ZXMsIHdpdGggKDAsMCkg
YXQgdGhlIHRvcC1sZWZ0IG9mIHRoZSBtYWluIHNjcmVlbi4KICAgICBvc1N0YXR1cyA9IEdldFdp
bmRvd0JvdW5kcyhfd2luZG93UmVmLCBrV2luZG93U3RydWN0dXJlUmduLCAmd2luZG93U3RydWN0
dXJlQm91bmRzUmVjdCk7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgTlNMb2coQCJBIENhcmJv
biB3aW5kb3cncyBzdHJ1Y3R1cmUgYm91bmRzIGNvdWxkbid0IGJlIGdvdHRlbi4iKTsKKyAgICBp
ZiAob3NTdGF0dXMgIT0gbm9FcnIpCisgICAgICAgIE5TTG9nKEAiQSBDYXJib24gd2luZG93J3Mg
c3RydWN0dXJlIGJvdW5kcyBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7CiAgICAgb3NTdGF0dXMgPSBH
ZXRXaW5kb3dCb3VuZHMoX3dpbmRvd1JlZiwga1dpbmRvd0NvbnRlbnRSZ24sICZ3aW5kb3dDb250
ZW50Qm91bmRzUmVjdCk7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgTlNMb2coQCJBIENhcmJv
biB3aW5kb3cncyBjb250ZW50IGJvdW5kcyBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7CisgICAgaWYg
KG9zU3RhdHVzICE9IG5vRXJyKQorICAgICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGNv
bnRlbnQgYm91bmRzIGNvdWxkbid0IGJlIGdvdHRlbi4iKTsKIAogICAgIC8vIFNldCB0aGUgZnJh
bWUgcmVjdGFuZ2xlIG9mIHRoZSBib3JkZXIgdmlldyBhbmQgdGhpcyB3aW5kb3cgZnJvbSB0aGUg
Q2FyYm9uIHdpbmRvdydzIHN0cnVjdHVyZSByZWdpb24gYm91bmRzLgogICAgIG5ld1dpbmRvd0Zy
YW1lUmVjdC5vcmlnaW4ueCA9IHdpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3QubGVmdDsKQEAgLTM5
Niw3ICs0MTAsOCBAQCAtIChCT09MKXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzIHsKIAog
CiAvLyBIYW5kbGUgYW4gZXZlbnQganVzdCBsaWtlIGFuIE5TV2luZG93IHdvdWxkLgotLSAodm9p
ZClzZW5kU3VwZXJFdmVudDooTlNFdmVudCAqKWluRXZlbnQgeworLSAodm9pZClzZW5kU3VwZXJF
dmVudDooTlNFdmVudCAqKWluRXZlbnQKK3sKIAogICAgIC8vIEZpbHRlciBvdXQgYSBmZXcgZXZl
bnRzIHRoYXQganVzdCByZXN1bHQgaW4gY29tcGxhaW50cyBpbiB0aGUgbG9nLgogICAgIC8vIEln
bm9yZSBzb21lIHVua25vd24gZXZlbnQgdGhhdCBnZXRzIHNlbnQgd2hlbiBOU1RleHRWaWV3cyBp
biBwcmludGluZyBhY2Nlc3Nvcnkgdmlld3MgYXJlIGZvY3VzZWQuICBNLlAuIE5vdGljZSAtIDEy
LzcvMDAKQEAgLTQyNSw5ICs0NDAsOSBAQCAtICh2b2lkKXJlbGlucXVpc2hGb2N1cwogICAgIC8v
IENhcmJvbiB0aGlua3MgdGhhdCBhIGNvbnRyb2wgaGFzIHRoZSBrZXlib2FyZCBmb2N1cywKICAg
ICAvLyBvciB3ZSB3b3VsZG4ndCBiZSBiZWluZyBhc2tlZCB0byByZWxpbnF1aXNoIGZvY3VzLgog
Ci0JZmlyc3RSZXNwb25kZXIgPSBbc2VsZiBmaXJzdFJlc3BvbmRlcl07Ci0JaWYgKFtmaXJzdFJl
c3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSApewotCQkvLyBNYWtlIHRoZSB3
aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwgc28gdGhhdCBubyB2aWV3IGlzIHRoZSBrZXkgdmll
dy4KKyAgICBmaXJzdFJlc3BvbmRlciA9IFtzZWxmIGZpcnN0UmVzcG9uZGVyXTsKKyAgICBpZiAo
W2ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dKSB7CisgICAgICAg
IC8vIE1ha2UgdGhlIHdpbmRvdyB0aGUgZmlyc3QgcmVzcG9uZGVyLCBzbyB0aGF0IG5vIHZpZXcg
aXMgdGhlIGtleSB2aWV3LgogICAgICAgICBbc2VsZiBtYWtlRmlyc3RSZXNwb25kZXI6c2VsZl07
CiAgICAgfQogfQpAQCAtNDY4LDQwICs0ODMsMTUgQEAgLSAoQk9PTCltYWtlRmlyc3RSZXNwb25k
ZXI6KE5TUmVzcG9uZGVyIAogLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfYXV0b1Jlc2l6ZVN0
YXRlLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBvcGVyYXRlcyBvbiBfd2luZG93
TnVtLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93
cyBhcyBpcy4KIAogCi0vLyBEaXNhcHBvaW50aW5nbHksIC1fYmxvY2tIZWFydEJlYXQ6IGlzIG5v
dCBpbW1lZGlhdGVseSBpbnZva2VkIHRvIHR1cm4gb2ZmIGhlYXJ0YmVhdGluZy4gIEhlYXJ0YmVh
dGluZyBpcyB0dXJuZWQgb2ZmIGJ5IHNldHRpbmcgdGhlIGdEZWZhdWx0QnV0dG9uUGF1c2VkIGds
b2JhbCB2YXJpYWJsZSwgYW5kIHRoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCBsYXRlciwgaWYg
dGhhdCBnbG9iYWwgaXMgc2V0IChhdCBoZWFydGJlYXRpbmcgdGltZSBJIGd1ZXNzKS4gIFNvbWV0
aGluZyBoYXMgdG8gY2hhbmdlIGlmIHdlIHdhbnQgdG8gaG9vayB0aGlzIHVwIGluIENhcmJvbiB3
aW5kb3dzLiAgTS5QLiBXYXJuaW5nIC0gOS8xNy8wMQotLyoKLS8vIERvIHRoZSByaWdodCB0aGlu
ZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClfYmxvY2tIZWFydEJlYXQ6KEJPT0wpZmxh
ZyB7Ci0KLSAgICBDb250cm9sUmVmIGRlZmF1bHRCdXR0b247Ci0gICAgT1NTdGF0dXMgb3NTdGF0
dXM7Ci0KLSAgICAvLyBEbyB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCi0gICAgW3N1cGVyIF9i
bG9ja0hlYXJ0QmVhdDpmbGFnXTsKLQotICAgIC8vIElmIHRoZXJlJ3MgYSBkZWZhdWx0IENhcmJv
biBidXR0b24gaW4gdGhpcyBDYXJib24gd2luZG93LCBtYWtlIGl0IHN0b3AgcHVsc2luZywgdGhl
IENhcmJvbiB3YXkuCi0gICAgLy8gVGhpcyBpcyBpbnNwaXJlZCBieSBISVRvb2xib3gvQ29udHJv
bHMvRGVmaW5pdGlvbnMvQnV0dG9uQ0RFRi5jJ3MgQnV0dG9uRXZlbnRIYW5kbGVyKCkuICBNLlAu
IE5vdGljZSAtIDEyLzUvMDAKLSAgICBvc1N0YXR1cyA9IEdldFdpbmRvd0RlZmF1bHRCdXR0b24o
X3dpbmRvd1JlZiwgJmRlZmF1bHRCdXR0b24pOwotICAgIGlmIChvc1N0YXR1cz09bm9FcnIgJiYg
ZGVmYXVsdEJ1dHRvbikgewotICAgICAgICBCb29sZWFuIGFub3RoZXJCdXR0b25Jc1RyYWNraW5n
ID0gZmxhZyA/IFRSVUUgOiBGQUxTRTsKLSAgICAgICAgb3NTdGF0dXMgPSBTZXRDb250cm9sRGF0
YShkZWZhdWx0QnV0dG9uLCBrQ29udHJvbE5vUGFydCwga0NvbnRyb2xQdXNoQnV0dG9uQW5vdGhl
ckJ1dHRvblRyYWNraW5nVGFnLCBzaXplb2YoQm9vbGVhbiksICZhbm90aGVyQnV0dG9uSXNUcmFj
a2luZyk7Ci0gICAgICAgIGlmIChvc1N0YXR1cz09bm9FcnIpIERyYXdPbmVDb250cm9sKGRlZmF1
bHRCdXR0b24pOwotICAgICAgICBlbHNlIE5TTG9nKEAiU29tZSBkYXRhIGNvdWxkbid0IGJlIHNl
dCBpbiBhIENhcmJvbiBjb250cm9sLiIpOwotICAgIH0KLQotfQotKi8KLQotCiAvLyBEbyB0aGUg
cmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKHZvaWQpX2NhbmNlbEtleTooaWQp
c2VuZGVyIHsKLQorLSAodm9pZClfY2FuY2VsS2V5OihpZClzZW5kZXIKK3sKICAgICAvLyBNb3N0
IG9mIHRoZSB0aW1lIHRoZSBoYW5kbGluZyBvZiB0aGUgY2FuY2VsIGtleSB3aWxsIGJlIGRvbmUg
YnkgQ2FyYm9uLCBidXQgdGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGlmIGFuIE5TQ2FyYm9u
V2luZG93IGlzIHdyYXBwaW5nIGEgQ2FyYm9uIHdpbmRvdyB0aGF0IGNvbnRhaW5zIGFuIE5TVmll
d0NhcmJvbkNvbnRyb2wsIGFuZCB0aGUgZXNjYXBlIGtleSBvciB3aGF0ZXZlciBpcyBwcmVzc2Vk
IHdpdGggYW4gTlNUZXh0VmlldyBmb2N1c2VkLiAgSnVzdCBkbyB3aGF0IENhcmJvbiB3b3VsZCBk
by4KICAgICBDb250cm9sUmVmIGNhbmNlbEJ1dHRvbjsKICAgICBHZXRXaW5kb3dDYW5jZWxCdXR0
b24oX3dpbmRvd1JlZiwgJmNhbmNlbEJ1dHRvbik7CiAgICAgaWYgKGNhbmNlbEJ1dHRvbikgewog
ICAgICAgICBpZiAoSXNDb250cm9sQWN0aXZlKGNhbmNlbEJ1dHRvbikpIHsKLSAgICAgICAgICAg
IEhJVmlld1NpbXVsYXRlQ2xpY2soY2FuY2VsQnV0dG9uLCBrQ29udHJvbEJ1dHRvblBhcnQsIDAs
IE5VTEwpOworICAgICAgICAgICAgSElWaWV3U2ltdWxhdGVDbGljayhjYW5jZWxCdXR0b24sIGtD
b250cm9sQnV0dG9uUGFydCwgMCwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUx
MCw4ICs1MDAsOCBAQCAtICh2b2lkKV9jYW5jZWxLZXk6KGlkKXNlbmRlciB7CiAKIAogLy8gRG8g
dGhlIHJpZ2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKV9jb21tb25Bd2Fr
ZSB7Ci0KKy0gKHZvaWQpX2NvbW1vbkF3YWtlCit7CiAgICAgLy8gQ29tcGxhaW4sIGJlY2F1c2Ug
dGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiAgV2UgaW5zaXN0IHRoYXQgLVtOU0NhcmJvbldp
bmRvdyBpbml0V2l0aENhcmJvbldpbmRvd1JlZl0gaXMgdGhlIG9ubHkgdmFsaWQgaW5pdGlhbGl6
ZXIgZm9yIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLCBhbmQgdGhhdCB0aGVyZSdzIG5vIHN1Y2gg
dGhpbmcgYXMgYSBvbmUtc2hvdCBOU0NhcmJvbldpbmRvdy4KICAgICBOU0xvZyhAIi1bTlNDYXJi
b25XaW5kb3cgX2NvbW1vbkF3YWtlXSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CiAKQEAgLTUyMiwx
MiArNTEyLDExIEBAIC0gKHZvaWQpX2NvbW1vbkF3YWtlIHsKIAogCiAvLyBEbyB0aGUgcmlnaHQg
dGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9P
TClvcmRlcmluZ091dCB7Ci0KKy0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9PTClvcmRlcmlu
Z091dAorewogICAgIC8vIENvbXBsYWluLCBiZWNhdXNlIHRoaXMgc2hvdWxkIG5ldmVyIGJlIGNh
bGxlZC4gIFdlIGRvbid0IHN1cHBvcnQgb25lLXNob3QgTlNDYXJib25XaW5kb3dzLgogICAgIE5T
TG9nKEAiLVtOU0NhcmJvbldpbmRvdyBfZGVzdHJveVJlYWxXaW5kb3c6XSBpcyBub3QgaW1wbGVt
ZW50ZWQuIik7CiAgICAgcmV0dXJuIHNlbGY7Ci0gICAgCiB9CiAKIApAQCAtNTUwLDggKzUzOSw4
IEBAIC0gKGlkKV9kZXN0cm95UmVhbFdpbmRvdzooQk9PTClvcmRlcmluZ08KIAogCiAvLyBEbyB3
aGF0IE5TV2luZG93IHdvdWxkIGRvLCBidXQgdGhlbiBzeWNocm9uaXplIHRoZSBDYXJib24gd2lu
ZG93IHN0cnVjdHVyZXMuCi0tICh2b2lkKV9vbGRQbGFjZVdpbmRvdzooTlNSZWN0KWZyYW1lUmVj
dCB7Ci0KKy0gKHZvaWQpX29sZFBsYWNlV2luZG93OihOU1JlY3QpZnJhbWVSZWN0Cit7CiAgICAg
T1NTdGF0dXMgb3NTdGF0dXM7CiAKICAgICAvLyBEbyB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcu
CkBAIC01NjAsOCArNTQ5LDggQEAgLSAodm9pZClfb2xkUGxhY2VXaW5kb3c6KE5TUmVjdClmcmFt
ZVJlYwogICAgIC8vIFRlbGwgQ2FyYm9uIHRvIHVwZGF0ZSBpdHMgdmFyaW91cyByZWdpb25zLgog
ICAgIC8vIERlc3BpdGUgaXRzIG5hbWUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBl
YXJseSBhbmQgb2Z0ZW4sIGV2ZW4gaWYgdGhlIHdpbmRvdyBpc24ndCB2aXNpYmxlIHlldC4gIDI3
MDI2NDguICBNLlAuIE5vdGljZSAtIDcvMjQvMDEKICAgICBvc1N0YXR1cyA9IF9TeW5jV2luZG93
V2l0aENHQWZ0ZXJNb3ZlKF93aW5kb3dSZWYpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIE5T
TG9nKEAiQSBDYXJib24gd2luZG93J3MgYm91bmRzIGNvdWxkbid0IGJlIHN5bmNocm9uaXplZCAo
JWkpLiIsIChpbnQpb3NTdGF0dXMpOwotCisgICAgaWYgKG9zU3RhdHVzICE9IG5vRXJyKQorICAg
ICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGJvdW5kcyBjb3VsZG4ndCBiZSBzeW5jaHJv
bml6ZWQgKCVpKS4iLCAoaW50KW9zU3RhdHVzKTsKIH0KIAogCkBAIC01OTEsMTAgKzU4MCwxMiBA
QCAtICh2b2lkKV9vbGRQbGFjZVdpbmRvdzooTlNSZWN0KWZyYW1lUmVjCiAKIC8vIERvIHdoYXQg
TlNXaW5kb3cgd291bGQgZG8sIGJ1dCBmb3IgYSBDYXJib24gd2luZG93LgogLy8gVGhpcyBmdW5j
dGlvbiBpcyBtb3N0bHkgY3V0LWFuZC1wYXN0ZWQgZnJvbSAtW05TV2luZG93IF90ZXJtV2luZG93
SWZPd25lcl0uICBNLlAuIE5vdGljZSAtIDgvNy8wMAotLSAodm9pZClfdGVybVdpbmRvd0lmT3du
ZXIgeworLSAodm9pZClfdGVybVdpbmRvd0lmT3duZXIKK3sKICAgICBbc2VsZiBfc2V0V2luZG93
TnVtYmVyOi0xXTsKICAgICBfd0ZsYWdzLmlzVGVybWluYXRpbmcgPSBZRVM7Ci0gICAgaWYgKF93
aW5kb3dSZWYgJiYgX3dpbmRvd1JlZklzT3duZWQpIERpc3Bvc2VXaW5kb3coX3dpbmRvd1JlZik7
CisgICAgaWYgKF93aW5kb3dSZWYgJiYgX3dpbmRvd1JlZklzT3duZWQpCisgICAgICAgIERpc3Bv
c2VXaW5kb3coX3dpbmRvd1JlZik7CiAgICAgLy8gS1cgLSBuZWVkIHRvIGNsZWFyIHdpbmRvdyBz
aGFkb3cgc3RhdGUgc28gaXQgZ2V0cyByZXNldCBjb3JyZWN0bHkgd2hlbiBuZXcgd2luZG93IGNy
ZWF0ZWQKIC8vICAgIGlmIChbX2JvcmRlclZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihzZXRTaGFkb3dTdGF0ZTopXSkgewogLy8gICAgICAgIFtfYm9yZGVyVmlldyBzZXRTaGFkb3dT
dGF0ZTprRnJhbWVTaGFkb3dOb25lXTsKQEAgLTYxMCw3ICs2MDEsOCBAQCAtICh2b2lkKV90ZXJt
V2luZG93SWZPd25lciB7CiAKIAogLy8gRG8gd2hhdCBOU1dpbmRvdyB3b3VsZCBkbywgYnV0IHRo
ZW4gc3ljaHJvbml6ZSB0aGUgQ2FyYm9uIHdpbmRvdyBzdHJ1Y3R1cmVzLgotLSAodm9pZClfd2lu
ZG93TW92ZWRUb1JlY3Q6KE5TUmVjdClhY3R1YWxGcmFtZSB7CistICh2b2lkKV93aW5kb3dNb3Zl
ZFRvUmVjdDooTlNSZWN0KWFjdHVhbEZyYW1lCit7CiAKICAgICBPU1N0YXR1cyBvc1N0YXR1czsK
IApAQCAtNjI1LDQ1ICs2MTcsMzggQEAgLSAodm9pZClfd2luZG93TW92ZWRUb1JlY3Q6KE5TUmVj
dClhY3R1YQogCiB9CiAKLS0gKE5TUmVjdCljb25zdHJhaW5GcmFtZVJlY3Q6KE5TUmVjdClhY3R1
YWxGcmFtZSB0b1NjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4geworLSAoTlNSZWN0KWNvbnN0cmFp
bkZyYW1lUmVjdDooTlNSZWN0KWFjdHVhbEZyYW1lIHRvU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVl
bgorewogICAgIC8vIGxldCBDYXJib24gZGVjaWRlIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlvbgog
ICAgIHJldHVybiBhY3R1YWxGcmFtZTsKIH0KIAotLSAodm9pZClzZWxlY3RLZXlWaWV3Rm9sbG93
aW5nVmlldzooTlNWaWV3ICopYVZpZXcgewotCUhJVmlld1JlZgl2aWV3ID0gTlVMTDsKLQkKLQl2
aWV3ID0gW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OmFWaWV3XTsKLQkKLQlpZiAo
IHZpZXcgKQotCXsJCi0JCUhJVmlld1JlZgljb250ZW50VmlldzsKLQkJCi0JCUdldFJvb3RDb250
cm9sKCBHZXRDb250cm9sT3duZXIoIHZpZXcgKSwgJmNvbnRlbnRWaWV3ICk7Ci0JCUhJVmlld0Fk
dmFuY2VGb2N1cyggY29udGVudFZpZXcsIDAgKTsKLQl9Ci0JZWxzZQotCXsKLQkJW3N1cGVyIHNl
bGVjdEtleVZpZXdGb2xsb3dpbmdWaWV3OmFWaWV3XTsKLQl9Ci19Ci0KLS0gKHZvaWQpc2VsZWN0
S2V5Vmlld1ByZWNlZGluZ1ZpZXc6KE5TVmlldyAqKWFWaWV3IHsKLQlISVZpZXdSZWYJdmlldyA9
IE5VTEw7Ci0JCi0JdmlldyA9IFtISVZpZXdBZGFwdGVyIGdldEhJVmlld0Zvck5TVmlldzphVmll
d107Ci0JCi0JaWYgKCB2aWV3ICkKLQl7CQotCQlISVZpZXdSZWYJY29udGVudFZpZXc7Ci0JCQot
CQlHZXRSb290Q29udHJvbCggR2V0Q29udHJvbE93bmVyKCB2aWV3ICksICZjb250ZW50VmlldyAp
OwotCQlISVZpZXdBZHZhbmNlRm9jdXMoIGNvbnRlbnRWaWV3LCBzaGlmdEtleSApOwotCX0KLQll
bHNlCi0JewotCQlbc3VwZXIgc2VsZWN0S2V5Vmlld1ByZWNlZGluZ1ZpZXc6YVZpZXddOwotCX0K
Ky0gKHZvaWQpc2VsZWN0S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6KE5TVmlldyAqKWFWaWV3Cit7Cisg
ICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOworICAgIHZpZXcgPSBbSElWaWV3QWRhcHRlciBn
ZXRISVZpZXdGb3JOU1ZpZXc6YVZpZXddOworCisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgSElW
aWV3UmVmIGNvbnRlbnRWaWV3OworICAgICAgICAKKyAgICAgICAgR2V0Um9vdENvbnRyb2woR2V0
Q29udHJvbE93bmVyKHZpZXcpLCAmY29udGVudFZpZXcpOworICAgICAgICBISVZpZXdBZHZhbmNl
Rm9jdXMoY29udGVudFZpZXcsIDApOworICAgIH0gZWxzZQorICAgICAgICBbc3VwZXIgc2VsZWN0
S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6YVZpZXddOworfQorCistICh2b2lkKXNlbGVjdEtleVZpZXdQ
cmVjZWRpbmdWaWV3OihOU1ZpZXcgKilhVmlldworeworICAgIEhJVmlld1JlZiB2aWV3ID0gbnVs
bHB0cjsKKyAgICB2aWV3ID0gW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OmFWaWV3
XTsKKworICAgIGlmICh2aWV3KSB7CisgICAgICAgIEhJVmlld1JlZiBjb250ZW50VmlldzsKKyAg
ICAgICAgCisgICAgICAgIEdldFJvb3RDb250cm9sKEdldENvbnRyb2xPd25lcih2aWV3KSwgJmNv
bnRlbnRWaWV3KTsKKyAgICAgICAgSElWaWV3QWR2YW5jZUZvY3VzKGNvbnRlbnRWaWV3LCBzaGlm
dEtleSk7CisgICAgfSBlbHNlCisgICAgICAgIFtzdXBlciBzZWxlY3RLZXlWaWV3UHJlY2VkaW5n
VmlldzphVmlld107CiB9CiAKIC0gKHZvaWQpbWFrZUtleVdpbmRvdwpAQCAtNjc0LDEzICs2NTks
MTUgQEAgLSAodm9pZCltYWtlS2V5V2luZG93CiB9CiAKIC8vIERvIHRoZSByaWdodCB0aGluZyBm
b3IgYSBDYXJib24gd2luZG93LgotLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cgeworLSAoQk9P
TCljYW5CZWNvbWVLZXlXaW5kb3cKK3sKIAogICAgIHJldHVybiBZRVM7CiB9CiAKIC8vIERvIHRo
ZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAoQk9PTCljYW5CZWNvbWVNYWlu
V2luZG93IHsKKy0gKEJPT0wpY2FuQmVjb21lTWFpbldpbmRvdworewogICAgIE9TU3RhdHVzIG9z
U3RhdHVzOwogICAgIFdpbmRvd0NsYXNzIHdpbmRvd0NsYXNzOwogICAgIC8vIEJ5IGRlZmF1bHQs
IENhcmJvbiB3aW5kb3dzIGNhbm5vdCBiZWNvbWUgdGhlIG1haW4gd2luZG93LgpAQCAtNzA0LDcg
KzY5MSw4IEBAIC0gKEJPT0wpY2FuQmVjb21lTWFpbldpbmRvdyB7CiAKIAogLy8gRG8gdGhlIHJp
Z2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKWVuY29kZVdpdGhDb2Rlcjoo
TlNDb2RlciAqKWNvZGVyIHsKKy0gKHZvaWQpZW5jb2RlV2l0aENvZGVyOihOU0NvZGVyICopY29k
ZXIKK3sKIAogICAgIC8vIEFjdHVhbGx5LCB0aGlzIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgaW1w
bGVtZW50ZWQuICBNLlAuIE5vdGljZSAtIDgvMi8wMAogICAgIE5TTG9nKEAiLVtOU0NhcmJvbldp
bmRvdyBlbmNvZGVXaXRoQ29kZXI6XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CkBAIC03MTYsNyAr
NzA0LDggQEAgLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgogCiAKIC8v
IERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAoaWQpaW5pdFdpdGhD
b2RlcjooTlNDb2RlciAqKWNvZGVyIHsKKy0gKGlkKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKilj
b2RlcgorewogCiAgICAgLy8gQWN0dWFsbHksIHRoaXMgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBp
bXBsZW1lbnRlZC4gIE0uUC4gTm90aWNlIC0gOC8yLzAwCiAgICAgTlNMb2coQCItW05TQ2FyYm9u
V2luZG93IGluaXRXaXRoQ29kZXI6XSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CkBAIC03MzUsMjEg
KzcyNCw2IEBAIC0gKGlkKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlciB7CiAvLyBUaGVy
ZSdzIG5vIG92ZXJyaWRlIG9mIHJlc2l6ZVRvU2NyZWVuV2l0aEV2ZW50OiwgZGVzcGl0ZSB0aGUg
ZmFjdCB0aGF0IE5TV2luZG93J3Mgb3BlcmF0ZXMgb24gX3dpbmRvd051bS4KIC8vIEl0IGxvb2tz
IGxpa2UgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGFuIF9OU0ZvcmNlUmVzaXplRXZlbnRUeXBlIGV2
ZW50IGlzIHBhc3NlZCBpbnRvIC1bTlNXaW5kb3cgc2VuZEV2ZW50Ol0sIGFuZCBJIGNhbid0IGZp
bmQgYW55IGluc3RhbmNlcyBvZiB0aGF0IGhhcHBlbmluZy4KIAotLyoKLS8vIERvIHRoZSByaWdo
dCB0aGluZyBmb3IgYSBDYXJib24gV2luZG93LgotLSAodm9pZClzZW5kRXZlbnQ6KE5TRXZlbnQg
Kil0aGVFdmVudCB7Ci0KLSAgICAvLyBOb3QgYWxsIGV2ZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUg
c2FtZSBtYW5uZXIuCi0gICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gW3RoZUV2ZW50IHR5cGVd
OwotICAgIGlmIChldmVudFR5cGU9PU5TQXBwS2l0RGVmaW5lZCkgewotCi0gICAgICAgIC8vIEhh
bmRsZSB0aGUgZXZlbnQgdGhlIENvY29hIHdheS4gIENhcmJvbiB3b24ndCB1bmRlcnN0YW5kIGl0
IGFueXdheS4KLSAgICAgICAgW3N1cGVyIHNlbmRFdmVudDp0aGVFdmVudF07Ci0KLSAgICB9IAot
fQotKi8KLQogLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2
ZW50czosIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2lu
ZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9u
IHdpbmRvd3MgYXMgaXMuCiAKIApAQCAtNzU3LDcgKzczMSw4IEBAIC0gKHZvaWQpc2VuZEV2ZW50
OihOU0V2ZW50ICopdGhlRXZlbnQgewogCiAKIC8vIERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8s
IGJ1dCBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3
ICopYVZpZXcgeworLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3ICopYVZpZXcKK3sKIAog
ICAgIE5TUmVjdCBjb250ZW50RnJhbWVSZWN0OwogICAgIE9TU3RhdHVzIG9zU3RhdHVzOwpAQCAt
Nzk5LDE2ICs3NzQsMTkgQEAgLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3ICopYVZpZXcg
ewogLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXREZXB0aExpbWl0OiwgZGVzcGl0ZSB0aGUg
ZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNl
IGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KIAog
Ci0tIChCT09MKXdvcmtzV2hlbk1vZGFsIHsKKy0gKEJPT0wpd29ya3NXaGVuTW9kYWwKK3sKICAg
ICBXaW5kb3dDbGFzcyB3aW5kb3dDbGFzcyA9IFtzZWxmIF9jYXJib25XaW5kb3dDbGFzc107CiAg
ICAgcmV0dXJuICh3aW5kb3dDbGFzcyA9PSBrRmxvYXRpbmdXaW5kb3dDbGFzcyB8fCB3aW5kb3dD
bGFzcyA9PSBrVXRpbGl0eVdpbmRvd0NsYXNzKTsKIH0KIAotLSAodm9pZClfc2V0TW9kYWxXaW5k
b3dMZXZlbCB7CistICh2b2lkKV9zZXRNb2RhbFdpbmRvd0xldmVsCit7CiAgICAgcmV0dXJuOwog
fQogCi0tIChpZClfY2xlYXJNb2RhbFdpbmRvd0xldmVsIHsKKy0gKGlkKV9jbGVhck1vZGFsV2lu
ZG93TGV2ZWwKK3sKICAgICByZXR1cm4gbmlsOwogfQogCkBAIC04MTksMTkgKzc5NywyNyBAQCAt
IChpZClfY2xlYXJNb2RhbFdpbmRvd0xldmVsIHsKIC8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2Yg
d2luZG93TnVtYmVyLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyByZXR1cm5zIF93
aW5kb3dOdW0sIGJlY2F1c2UgX3dpbmRvd051bSBpcyBvbmUgb2YgdGhlIGluc3RhbmNlIHZhcmlh
YmxlcyB3aG9zZSB2YWx1ZSB3ZSdyZSBrZWVwaW5nIHN5bmNocm9uaXplZCB3aXRoIHRoZSBDYXJi
b24gd2luZG93LgogCiAKLS0gKFVJbnQzMiljYXJib25ISUNvbW1hbmRJREZyb21BY3Rpb25TZWxl
Y3RvcjooU0VMKWluQWN0aW9uU2VsZWN0b3IgeworLSAoVUludDMyKWNhcmJvbkhJQ29tbWFuZElE
RnJvbUFjdGlvblNlbGVjdG9yOihTRUwpaW5BY3Rpb25TZWxlY3RvcgorewogCiAgICAgLy8gSW5p
dGlhbGl6ZSB3aXRoIHRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZS4KICAgICBVSW50MzIgaGlDb21t
YW5kSUQgPSAwOwogCiAgICAgLy8gUHJldHR5IHNpbXBsZSwgaWYgdGVkaW91cy4KLSAgICBpZiAo
aW5BY3Rpb25TZWxlY3Rvcj09QHNlbGVjdG9yKGNsZWFyOikpIGhpQ29tbWFuZElEID0ga0hJQ29t
bWFuZENsZWFyOwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3I9PUBzZWxlY3Rvcihjb3B5
OikpIGhpQ29tbWFuZElEID0ga0hJQ29tbWFuZENvcHk7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25T
ZWxlY3Rvcj09QHNlbGVjdG9yKGN1dDopKSBoaUNvbW1hbmRJRCA9IGtISUNvbW1hbmRDdXQ7Ci0g
ICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3Rvcj09QHNlbGVjdG9yKHBhc3RlOikpIGhpQ29tbWFu
ZElEID0ga0hJQ29tbWFuZFBhc3RlOwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3I9PUBz
ZWxlY3RvcihyZWRvOikpIGhpQ29tbWFuZElEID0ga0hJQ29tbWFuZFJlZG87Ci0gICAgZWxzZSBp
ZiAoaW5BY3Rpb25TZWxlY3Rvcj09QHNlbGVjdG9yKHNlbGVjdEFsbDopKSBoaUNvbW1hbmRJRCA9
IGtISUNvbW1hbmRTZWxlY3RBbGw7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3Rvcj09QHNl
bGVjdG9yKHVuZG86KSkgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kVW5kbzsKKyAgICBpZiAoaW5B
Y3Rpb25TZWxlY3RvciA9PSBAc2VsZWN0b3IoY2xlYXI6KSkKKyAgICAgICAgaGlDb21tYW5kSUQg
PSBrSElDb21tYW5kQ2xlYXI7CisgICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3RvciA9PSBAc2Vs
ZWN0b3IoY29weTopKQorICAgICAgICBoaUNvbW1hbmRJRCA9IGtISUNvbW1hbmRDb3B5OworICAg
IGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3IgID09IEBzZWxlY3RvcihjdXQ6KSkKKyAgICAgICAg
aGlDb21tYW5kSUQgPSBrSElDb21tYW5kQ3V0OworICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0
b3IgPT0gQHNlbGVjdG9yKHBhc3RlOikpCisgICAgICAgIGhpQ29tbWFuZElEID0ga0hJQ29tbWFu
ZFBhc3RlOworICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3IgPT0gQHNlbGVjdG9yKHJlZG86
KSkKKyAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kUmVkbzsKKyAgICBlbHNlIGlmIChp
bkFjdGlvblNlbGVjdG9yID09IEBzZWxlY3RvcihzZWxlY3RBbGw6KSkKKyAgICAgICAgaGlDb21t
YW5kSUQgPSBrSElDb21tYW5kU2VsZWN0QWxsOworICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0
b3IgPT0gQHNlbGVjdG9yKHVuZG86KSkKKyAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5k
VW5kbzsKIAogICAgIC8vIERvbmUuCiAgICAgcmV0dXJuIGhpQ29tbWFuZElEOwpAQCAtODM5LDIx
ICs4MjUsMjIgQEAgLSAoVUludDMyKWNhcmJvbkhJQ29tbWFuZElERnJvbUFjdGlvblNlbAogfQog
CiAKLS0gKHZvaWQpc2VuZENhcmJvblByb2Nlc3NISUNvbW1hbmRFdmVudDooVUludDMyKWluSElD
b21tYW5kSUQgeworLSAodm9pZClzZW5kQ2FyYm9uUHJvY2Vzc0hJQ29tbWFuZEV2ZW50OihVSW50
MzIpaW5ISUNvbW1hbmRJRAorewogCiAgICAgRXZlbnRUYXJnZXRSZWYgZXZlbnRUYXJnZXRSZWY7
CiAgICAgSElDb21tYW5kIGhpQ29tbWFuZDsKICAgICBPU1N0YXR1cyBvc1N0YXR1czsKIAogICAg
IC8vIEluaXRpYWxpemUgZm9yIHNhZmUgZXJyb3IgaGFuZGxpbmcuCi0gICAgRXZlbnRSZWYgZXZl
bnRSZWYgPSBOVUxMOworICAgIEV2ZW50UmVmIGV2ZW50UmVmID0gbnVsbHB0cjsKIAogICAgIC8v
IENyZWF0ZSBhIFByb2Nlc3MgQ29tbWFuZCBldmVudC4gIERvbid0IG1lbnRpb24gYW55dGhpbmcg
YWJvdXQgdGhlIG1lbnUgaXRlbSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBDYXJib24gRXZl
bnQgaGFuZGxlciBmaWRkbGluZyB3aXRoIGl0LgogICAgIGhpQ29tbWFuZC5hdHRyaWJ1dGVzID0g
MDsKICAgICBoaUNvbW1hbmQuY29tbWFuZElEID0gaW5ISUNvbW1hbmRJRDsKICAgICBoaUNvbW1h
bmQubWVudS5tZW51UmVmID0gMDsKICAgICBoaUNvbW1hbmQubWVudS5tZW51SXRlbUluZGV4ID0g
MDsKLSAgICBvc1N0YXR1cyA9IENyZWF0ZUV2ZW50KE5VTEwsIGtFdmVudENsYXNzQ29tbWFuZCwg
a0V2ZW50Q29tbWFuZFByb2Nlc3MsIEdldEN1cnJlbnRFdmVudFRpbWUoKSwga0V2ZW50QXR0cmli
dXRlTm9uZSwgJmV2ZW50UmVmKTsKKyAgICBvc1N0YXR1cyA9IENyZWF0ZUV2ZW50KG51bGxwdHIs
IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFByb2Nlc3MsIEdldEN1cnJlbnRFdmVu
dFRpbWUoKSwga0V2ZW50QXR0cmlidXRlTm9uZSwgJmV2ZW50UmVmKTsKICAgICBpZiAob3NTdGF0
dXMhPW5vRXJyKSB7CiAgICAgICAgIE5TTG9nKEAiQ3JlYXRlRXZlbnQoKSByZXR1cm5lZCAlaS4i
LCAoaW50KW9zU3RhdHVzKTsKICAgICAgICAgZ290byBDbGVhblVwOyAgCkBAIC04NzUsMTIgKzg2
MiwxMyBAQCAtICh2b2lkKXNlbmRDYXJib25Qcm9jZXNzSElDb21tYW5kRXZlbnQ6CiBDbGVhblVw
OgogCiAgICAgLy8gQ2xlYW4gdXAuCi0gICAgaWYgKGV2ZW50UmVmKSBSZWxlYXNlRXZlbnQoZXZl
bnRSZWYpOwotCisgICAgaWYgKGV2ZW50UmVmKQorICAgICAgICBSZWxlYXNlRXZlbnQoZXZlbnRS
ZWYpOwogfQogCiAKLS0gKEJvb2xlYW4pc2VuZENhcmJvblVwZGF0ZUhJQ29tbWFuZFN0YXR1c0V2
ZW50OihVSW50MzIpaW5ISUNvbW1hbmRJRCB3aXRoTWVudVJlZjooTWVudVJlZilpbk1lbnVSZWYg
YW5kTWVudUl0ZW1JbmRleDooVUludDE2KWluTWVudUl0ZW1JbmRleCB7CistIChCb29sZWFuKXNl
bmRDYXJib25VcGRhdGVISUNvbW1hbmRTdGF0dXNFdmVudDooVUludDMyKWluSElDb21tYW5kSUQg
d2l0aE1lbnVSZWY6KE1lbnVSZWYpaW5NZW51UmVmIGFuZE1lbnVJdGVtSW5kZXg6KFVJbnQxNilp
bk1lbnVJdGVtSW5kZXgKK3sKIAogICAgIEV2ZW50VGFyZ2V0UmVmIGV2ZW50VGFyZ2V0UmVmOwog
ICAgIEhJQ29tbWFuZCBoaUNvbW1hbmQ7CkBAIC04ODgsMTQgKzg3NiwxNCBAQCAtIChCb29sZWFu
KXNlbmRDYXJib25VcGRhdGVISUNvbW1hbmRTdGF0CiAKICAgICAvLyBJbml0aWFsaXplIGZvciBz
YWZlIGVycm9yIGhhbmRsaW5nIGFuZCBmbGFnIHJldHVybmluZy4KICAgICBCb29sZWFuIGV2ZW50
V2FzSGFuZGxlZCA9IEZBTFNFOwotICAgIEV2ZW50UmVmIGV2ZW50UmVmID0gTlVMTDsKKyAgICBF
dmVudFJlZiBldmVudFJlZiA9IG51bGxwdHI7CiAKICAgICAvLyBDcmVhdGUgYSBQcm9jZXNzIENv
bW1hbmQgZXZlbnQuICBEb24ndCBtZW50aW9uIGFueXRoaW5nIGFib3V0IHRoZSBtZW51IGl0ZW0s
IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgQ2FyYm9uIEV2ZW50IGhhbmRsZXIgZmlkZGxpbmcg
d2l0aCBpdC4KICAgICBoaUNvbW1hbmQuYXR0cmlidXRlcyA9IGtISUNvbW1hbmRGcm9tTWVudTsK
ICAgICBoaUNvbW1hbmQuY29tbWFuZElEID0gaW5ISUNvbW1hbmRJRDsKICAgICBoaUNvbW1hbmQu
bWVudS5tZW51UmVmID0gaW5NZW51UmVmOwogICAgIGhpQ29tbWFuZC5tZW51Lm1lbnVJdGVtSW5k
ZXggPSBpbk1lbnVJdGVtSW5kZXg7Ci0gICAgb3NTdGF0dXMgPSBDcmVhdGVFdmVudChOVUxMLCBr
RXZlbnRDbGFzc0NvbW1hbmQsIGtFdmVudENvbW1hbmRVcGRhdGVTdGF0dXMsIEdldEN1cnJlbnRF
dmVudFRpbWUoKSwga0V2ZW50QXR0cmlidXRlTm9uZSwgJmV2ZW50UmVmKTsKKyAgICBvc1N0YXR1
cyA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFu
ZFVwZGF0ZVN0YXR1cywgR2V0Q3VycmVudEV2ZW50VGltZSgpLCBrRXZlbnRBdHRyaWJ1dGVOb25l
LCAmZXZlbnRSZWYpOwogICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIHsKICAgICAgICAgTlNMb2co
QCJDcmVhdGVFdmVudCgpIHJldHVybmVkICVpLiIsIChpbnQpb3NTdGF0dXMpOwogICAgICAgICBn
b3RvIENsZWFuVXA7CkBAIC05MDksNyArODk3LDcgQEAgLSAoQm9vbGVhbilzZW5kQ2FyYm9uVXBk
YXRlSElDb21tYW5kU3RhdAogICAgIC8vIFNlbmQgYSBDYXJib24gZXZlbnQgdG8gd2hhdGV2ZXIg
aGFzIHRoZSBDYXJib24gdXNlciBmb2N1cy4KICAgICBldmVudFRhcmdldFJlZiA9IEdldFVzZXJG
b2N1c0V2ZW50VGFyZ2V0KCk7CiAgICAgb3NTdGF0dXMgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0
KGV2ZW50UmVmLCBldmVudFRhcmdldFJlZik7Ci0gICAgaWYgKG9zU3RhdHVzPT1ub0Vycikgewor
ICAgIGlmIChvc1N0YXR1cyA9PSBub0VycikgewogICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBU
UlVFOwogICAgIH0gZWxzZSBpZiAob3NTdGF0dXMhPWV2ZW50Tm90SGFuZGxlZEVycikgewogICAg
ICAgICBOU0xvZyhAIlNlbmRFdmVudFRvRXZlbnRUYXJnZXQoKSByZXR1cm5lZCAlaS4iLCAoaW50
KW9zU3RhdHVzKTsKQEAgLTkxOSwxMzUgKzkwNywxMzAgQEAgLSAoQm9vbGVhbilzZW5kQ2FyYm9u
VXBkYXRlSElDb21tYW5kU3RhdAogQ2xlYW5VcDoKIAogICAgIC8vIENsZWFuIHVwLgotICAgIGlm
IChldmVudFJlZikgUmVsZWFzZUV2ZW50KGV2ZW50UmVmKTsKKyAgICBpZiAoZXZlbnRSZWYpCisg
ICAgICAgIFJlbGVhc2VFdmVudChldmVudFJlZik7CiAKICAgICAvLyBEb25lLgogICAgIHJldHVy
biBldmVudFdhc0hhbmRsZWQ7Ci0KIH0KIAogLSAodm9pZClfaGFuZGxlUm9vdEJvdW5kc0NoYW5n
ZWQKIHsKLQlISVZpZXdSZWYJcm9vdCA9IEhJVmlld0dldFJvb3QoIF93aW5kb3dSZWYgKTsgCi0J
SElSZWN0CQlmcmFtZTsKKyAgICBISVZpZXdSZWYgcm9vdCA9IEhJVmlld0dldFJvb3QoX3dpbmRv
d1JlZik7IAorICAgIEhJUmVjdCBmcmFtZTsKIAotCUhJVmlld0dldEZyYW1lKCByb290LCAmZnJh
bWUgKTsKLQlbX2JvcmRlclZpZXcgc2V0RnJhbWVTaXplOiooTlNTaXplKikmZnJhbWUuc2l6ZV07
CisgICAgSElWaWV3R2V0RnJhbWUocm9vdCwgJmZyYW1lKTsKKyAgICBbX2JvcmRlclZpZXcgc2V0
RnJhbWVTaXplOiooTlNTaXplKikmZnJhbWUuc2l6ZV07CiB9CiAKIC0gKHZvaWQpX2hhbmRsZUNv
bnRlbnRCb3VuZHNDaGFuZ2VkCiB7Ci0JSElWaWV3UmVmCXJvb3QsIGNvbnRlbnRWaWV3OyAKLQlI
SVJlY3QJCXJvb3RCb3VuZHMsIGNvbnRlbnRGcmFtZTsKLQlOU1JlY3QJCW9sZENvbnRlbnRGcmFt
ZVJlY3Q7Ci0KLQlyb290ID0gSElWaWV3R2V0Um9vdCggX3dpbmRvd1JlZiApOwotCUhJVmlld0Zp
bmRCeUlEKCByb290LCBrSElWaWV3V2luZG93Q29udGVudElELCAmY29udGVudFZpZXcgKTsKLQlI
SVZpZXdHZXRGcmFtZSggY29udGVudFZpZXcsICZjb250ZW50RnJhbWUgKTsKLQlISVZpZXdHZXRC
b3VuZHMoIHJvb3QsICZyb290Qm91bmRzICk7Ci0JCisgICAgSElWaWV3UmVmIHJvb3QsIGNvbnRl
bnRWaWV3OyAKKyAgICBISVJlY3Qgcm9vdEJvdW5kcywgY29udGVudEZyYW1lOworICAgIE5TUmVj
dCBvbGRDb250ZW50RnJhbWVSZWN0OworCisgICAgcm9vdCA9IEhJVmlld0dldFJvb3QoX3dpbmRv
d1JlZik7CisgICAgSElWaWV3RmluZEJ5SUQocm9vdCwga0hJVmlld1dpbmRvd0NvbnRlbnRJRCwg
JmNvbnRlbnRWaWV3KTsKKyAgICBISVZpZXdHZXRGcmFtZShjb250ZW50VmlldywgJmNvbnRlbnRG
cmFtZSk7CisgICAgSElWaWV3R2V0Qm91bmRzKHJvb3QsICZyb290Qm91bmRzKTsKKwogICAgIC8v
IFNldCB0aGUgY29udGVudCB2aWV3J3MgZnJhbWUgcmVjdCBmcm9tIHRoZSBDYXJib24gd2luZG93
J3MgY29udGVudCByZWdpb24gYm91bmRzLgotICAgIGNvbnRlbnRGcmFtZS5vcmlnaW4ueSA9IHJv
b3RCb3VuZHMuc2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRNYXhZKCBjb250ZW50RnJhbWUgKTsKKyAg
ICBjb250ZW50RnJhbWUub3JpZ2luLnkgPSByb290Qm91bmRzLnNpemUuaGVpZ2h0IC0gQ0dSZWN0
R2V0TWF4WShjb250ZW50RnJhbWUpOwogCiAgICAgb2xkQ29udGVudEZyYW1lUmVjdCA9IFsoTlNW
aWV3ICopX2NvbnRlbnRWaWV3IGZyYW1lXTsKLSAgICBpZiAoICFOU0VxdWFsUmVjdHMoICooTlNS
ZWN0KikmY29udGVudEZyYW1lLCBvbGRDb250ZW50RnJhbWVSZWN0ICkgKSB7CisgICAgaWYgKCFO
U0VxdWFsUmVjdHMoKihOU1JlY3QqKSZjb250ZW50RnJhbWUsIG9sZENvbnRlbnRGcmFtZVJlY3Qp
KSB7CiAgICAgICAgIFsoTlNWaWV3ICopX2NvbnRlbnRWaWV3IHNldEZyYW1lOiooTlNSZWN0Kikm
Y29udGVudEZyYW1lXTsKICAgICB9CiB9CiAKLS0gKE9TU3RhdHVzKV9oYW5kbGVDYXJib25FdmVu
dDooRXZlbnRSZWYpaW5FdmVudCBjYWxsUmVmOihFdmVudEhhbmRsZXJDYWxsUmVmKWluQ2FsbFJl
ZiB7CistIChPU1N0YXR1cylfaGFuZGxlQ2FyYm9uRXZlbnQ6KEV2ZW50UmVmKWluRXZlbnQgY2Fs
bFJlZjooRXZlbnRIYW5kbGVyQ2FsbFJlZilpbkNhbGxSZWYKK3sKICAgICBPU1N0YXR1cyByZXN1
bHQgPSBldmVudE5vdEhhbmRsZWRFcnI7Ci0gICAgCi0gICAgc3dpdGNoICggR2V0RXZlbnRDbGFz
cyggaW5FdmVudCApICkKLSAgICB7Ci0JCWNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgotCQkJewot
CQkJCUNvbnRyb2xSZWYJCWNvbnRyb2w7Ci0JCQkJCi0JCQkJY2hlY2soIEdldEV2ZW50S2luZCgg
aW5FdmVudCApID09IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkICk7Ci0JCQkJCi0JCQkJR2V0
RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlQ29u
dHJvbFJlZiwgTlVMTCwKLQkJCQkJCXNpemVvZiggQ29udHJvbFJlZiApLCBOVUxMLCAmY29udHJv
bCApOwotCQkJCQotCQkJCWlmICggY29udHJvbCA9PSBISVZpZXdHZXRSb290KCBfd2luZG93UmVm
ICkgKQotCQkJCQlbc2VsZiBfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWRdOwotCQkJCWVsc2UKLQkJ
CQkJW3NlbGYgX2hhbmRsZUNvbnRlbnRCb3VuZHNDaGFuZ2VkXTsKLQkJCX0KLQkJCWJyZWFrOwot
CQkJCi0gICAgCWNhc2Uga0V2ZW50Q2xhc3NXaW5kb3c6Ci0gICAgCQlzd2l0Y2ggKCBHZXRFdmVu
dEtpbmQoIGluRXZlbnQgKSApCi0gICAgCQl7Ci0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dTaG93
bjoKLQkJCQkJW3NlbGYgX3NldFZpc2libGU6WUVTXTsKLSAgICAJCQkJYnJlYWs7Ci0gICAgCQkJ
Ci0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dIaWRkZW46Ci0JCQkJCVtzZWxmIF9zZXRWaXNpYmxl
Ok5PXTsKLSAgICAJCQkJYnJlYWs7Ci0gICAgCQkJCi0gICAgCQkJY2FzZSBrRXZlbnRXaW5kb3dB
Y3RpdmF0ZWQ6Ci0JCQkJCVtzZWxmIG1ha2VLZXlXaW5kb3ddOwotCQkJCQlicmVhazsKLQkJCQkK
LSAgICAJCQljYXNlIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkOgotCQkJCQlbc2VsZiByZXNpZ25L
ZXlXaW5kb3ddOwotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudFdpbmRvd0JvdW5k
c0NoYW5nZWQ6Ci0JCQkJCVtzZWxmIHJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzXTsKLQkJ
CQkJYnJlYWs7Ci0JCQl9Ci0gICAgCQlicmVhazsKLSAgIAl9Ci0gICAJCisKKyAgICBzd2l0Y2gg
KEdldEV2ZW50Q2xhc3MoaW5FdmVudCkpIHsKKyAgICBjYXNlIGtFdmVudENsYXNzQ29udHJvbDoK
KyAgICAgICAgQ29udHJvbFJlZiBjb250cm9sOworCisgICAgICAgIEFTU0VSVChHZXRFdmVudEtp
bmQoaW5FdmVudCkgPT0ga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQpOworCisgICAgICAgIEdl
dEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlQ29u
dHJvbFJlZiwgbnVsbHB0ciwgc2l6ZW9mKENvbnRyb2xSZWYpLCBudWxscHRyLCAmY29udHJvbCk7
CisKKyAgICAgICAgaWYgKGNvbnRyb2wgPT0gSElWaWV3R2V0Um9vdChfd2luZG93UmVmKSkKKyAg
ICAgICAgICAgIFtzZWxmIF9oYW5kbGVSb290Qm91bmRzQ2hhbmdlZF07CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFtzZWxmIF9oYW5kbGVDb250ZW50Qm91bmRzQ2hhbmdlZF07CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBrRXZlbnRDbGFzc1dpbmRvdzoKKyAgICAgICAgc3dpdGNoIChH
ZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKKyAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dTaG93bjoK
KyAgICAgICAgICAgIFtzZWxmIF9zZXRWaXNpYmxlOllFU107CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIGtFdmVudFdpbmRvd0hpZGRlbjoKKyAgICAgICAgICAgIFtzZWxmIF9z
ZXRWaXNpYmxlOk5PXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0V2ZW50
V2luZG93QWN0aXZhdGVkOgorICAgICAgICAgICAgW3NlbGYgbWFrZUtleVdpbmRvd107CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVkOgor
ICAgICAgICAgICAgW3NlbGYgcmVzaWduS2V5V2luZG93XTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2Uga0V2ZW50V2luZG93Qm91bmRzQ2hhbmdlZDoKKyAgICAgICAgICAgIFtz
ZWxmIHJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIC8vIEhhbmRsZSB2YXJpb3VzIGV2ZW50cyB0aGF0IENhcmJvbiBpcyBzZW5kaW5nIHRvIG91
ciB3aW5kb3cuCi1zdGF0aWMgT1NTdGF0dXMgTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudChFdmVu
dEhhbmRsZXJDYWxsUmVmIGluRXZlbnRIYW5kbGVyQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudFJl
Ziwgdm9pZCAqaW5Vc2VyRGF0YSkgewotCitzdGF0aWMgT1NTdGF0dXMgTlNDYXJib25XaW5kb3dI
YW5kbGVFdmVudChFdmVudEhhbmRsZXJDYWxsUmVmIGluRXZlbnRIYW5kbGVyQ2FsbFJlZiwgRXZl
bnRSZWYgaW5FdmVudFJlZiwgdm9pZCAqaW5Vc2VyRGF0YSkKK3sKICAgICAvLyBkZWZhdWx0IGFj
dGlvbiBpcyB0byBzZW5kIGV2ZW50IHRvIG5leHQgaGFuZGxlci4gIFdlIG1vZGlmeSBvc1N0YXR1
cyBhcyBuZWNlc3Nhcnkgd2hlcmUgd2UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yCiAgICAgT1NT
dGF0dXMgb3NTdGF0dXMgPSBldmVudE5vdEhhbmRsZWRFcnI7CiAKICAgICAvLyBXZSBkbyBkaWZm
ZXJlbnQgdGhpbmdzIGZvciBkaWZmZXJlbnQgZXZlbnQgdHlwZXMuCiAgICAgQ2FyYm9uV2luZG93
QWRhcHRlciAqY2FyYm9uV2luZG93ID0gKENhcmJvbldpbmRvd0FkYXB0ZXIgKilpblVzZXJEYXRh
OwogCi0Jb3NTdGF0dXMgPSBbY2FyYm9uV2luZG93IF9oYW5kbGVDYXJib25FdmVudDogaW5FdmVu
dFJlZiBjYWxsUmVmOiBpbkV2ZW50SGFuZGxlckNhbGxSZWZdOwotCQorICAgIG9zU3RhdHVzID0g
W2NhcmJvbldpbmRvdyBfaGFuZGxlQ2FyYm9uRXZlbnQ6IGluRXZlbnRSZWYgY2FsbFJlZjogaW5F
dmVudEhhbmRsZXJDYWxsUmVmXTsKKwogICAgIC8vIERvbmUuICBJZiB3ZSB3YW50IHRvIHByb3Bh
Z2F0ZSB0aGUgZXZlbnQsIHdlIHJldHVybiBldmVudE5vdEhhbmRsZWRFcnIgdG8gc2VuZCBpdCB0
byB0aGUgbmV4dCBoYW5kbGVyCiAgICAgcmV0dXJuIG9zU3RhdHVzOwotICAgIAogfQogCiAvLyBb
MzM2NDExN10gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzIG5vdCBmYWxsIHRocm91Z2gg
dG8gdGhlIEFwcEtpdCBpbXBsZW1lbnRhdGlvbiEgYmFkIHRoaW5ncyBoYXBwZW4uCi0tICh2b2lk
KV9yZWFsbHlEb09yZGVyV2luZG93OihOU1dpbmRvd09yZGVyaW5nTW9kZSlwbGFjZSByZWxhdGl2
ZVRvOihpbnQpb3RoZXJXaW4gZmluZEtleTooQk9PTClkb0tleUNhbGMgZm9yQ291bnRlcjooQk9P
TClpc0FDb3VudGVyIGZvcmNlOihCT09MKWRvRm9yY2UgaXNNb2RhbDooQk9PTClpc01vZGFsIHsK
Ky0gKHZvaWQpX3JlYWxseURvT3JkZXJXaW5kb3c6KE5TV2luZG93T3JkZXJpbmdNb2RlKXBsYWNl
IHJlbGF0aXZlVG86KGludClvdGhlcldpbiBmaW5kS2V5OihCT09MKWRvS2V5Q2FsYyBmb3JDb3Vu
dGVyOihCT09MKWlzQUNvdW50ZXIgZm9yY2U6KEJPT0wpZG9Gb3JjZSBpc01vZGFsOihCT09MKWlz
TW9kYWwKK3sKIH0KIAogLSAoTlNSZWN0KSBfZ3Jvd0JveFJlY3QKIHsKLSAgICAgIFdpbmRvd0F0
dHJpYnV0ZXMgICAgICAgICAgICAgICAgYXR0cnM7Ci0gICAgICBOU1JlY3QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0UmVjdCA9IE5TWmVyb1JlY3Q7CisgICAgV2luZG93QXR0
cmlidXRlcyBhdHRyczsKKyAgICBOU1JlY3QgcmV0UmVjdCA9IE5TWmVyb1JlY3Q7CiAKLSAgICAg
IEdldFdpbmRvd0F0dHJpYnV0ZXMoIF93aW5kb3dSZWYsICZhdHRycyApOworICAgIEdldFdpbmRv
d0F0dHJpYnV0ZXMoX3dpbmRvd1JlZiwgJmF0dHJzKTsKIAotICAgICAgaWYgKCBhdHRycyAmIGtX
aW5kb3dSZXNpemFibGVBdHRyaWJ1dGUgKQotICAgICAgewotICAgICAgICAgICAgICBISVJlY3Qg
ICAgICAgICAgYm91bmRzLCByZWN0OwotICAgICAgICAgICAgICBISVZpZXdSZWYgICB2aWV3Owor
ICAgIGlmIChhdHRycyAmIGtXaW5kb3dSZXNpemFibGVBdHRyaWJ1dGUpIHsKKyAgICAgICAgSElS
ZWN0IGJvdW5kcywgcmVjdDsKKyAgICAgICAgSElWaWV3UmVmIHZpZXc7CiAKLSAgICAgICAgICAg
ICAgSElWaWV3R2V0Qm91bmRzKCBISVZpZXdHZXRSb290KCBfd2luZG93UmVmICksICZib3VuZHMg
KTsKLSAgICAgICAgICAgICAgSElWaWV3RmluZEJ5SUQoIEhJVmlld0dldFJvb3QoIF93aW5kb3dS
ZWYgKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwgJnZpZXcgKTsKLSAgICAgICAgICAgICAgSElW
aWV3R2V0RnJhbWUoIHZpZXcsICZyZWN0ICk7CisgICAgICAgIEhJVmlld0dldEJvdW5kcyhISVZp
ZXdHZXRSb290KF93aW5kb3dSZWYpLCAmYm91bmRzKTsKKyAgICAgICAgSElWaWV3RmluZEJ5SUQo
SElWaWV3R2V0Um9vdChfd2luZG93UmVmKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwgJnZpZXcp
OworICAgICAgICBISVZpZXdHZXRGcmFtZSh2aWV3LCAmcmVjdCk7CiAKLSAgICAgICAgICAgICAg
cmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdldE1heFkoIHJlY3Qg
KSAtIDE7Ci0gICAgICAgICAgICAgIHJlY3Qub3JpZ2luLngrKzsKKyAgICAgICAgcmVjdC5vcmln
aW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdldE1heFkocmVjdCkgLSAxOworICAg
ICAgICByZWN0Lm9yaWdpbi54Kys7CiAKLSAgICAgICAgICAgICAgcmV0UmVjdCA9ICooTlNSZWN0
KikmcmVjdDsKLSAgICAgIH0KKyAgICAgICAgcmV0UmVjdCA9ICooTlNSZWN0KikmcmVjdDsKKyAg
ICB9CiAKLSAgICAgIHJldHVybiByZXRSZWN0OworICAgIHJldHVybiByZXRSZWN0OwogfQogCiBA
ZW5kIC8vIGltcGxlbWVudGF0aW9uIENhcmJvbldpbmRvd0FkYXB0ZXIKSW5kZXg6IFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVdlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5tbQkocmV2aXNpb24gMjIyNTUzKQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNFdmVudFNQSS5o
PgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9tYWMvUXVpY2tEcmF3U1BJLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9y
dCA8d3RmL09iamNSdW50aW1lRXh0cmFzLmg+CiAKIEBpbnRlcmZhY2UgTlNXaW5kb3cgKEFwcEtp
dFNlY3JldHNISVdlYlZpZXdLbm93cykKQEAgLTEwMywxMyArMTA0LDEzIEBAIC0gKHZvaWQpX3dl
Yl9zZXRHcmFwaGljc1BvcnQ6KENHQ29udGV4dFIKIAogc3RydWN0IEhJV2ViVmlldwogewotICAg
IEhJVmlld1JlZgkJCQkJCQlmVmlld1JlZjsKKyAgICBISVZpZXdSZWYgZlZpZXdSZWY7CiAKLSAg
ICBXZWJWaWV3KgkJCQkJCQlmV2ViVmlldzsKLSAgICBOU1ZpZXcqCQkJCQkJCQlmRmlyc3RSZXNw
b25kZXI7Ci0gICAgQ2FyYm9uV2luZG93QWRhcHRlcgkqCQkJCWZLaXRXaW5kb3c7Ci0gICAgYm9v
bAkJCQkJCQkJZklzQ29tcG9zaXRlZDsKLSAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZgkJCQlmVXBk
YXRlT2JzZXJ2ZXI7CisgICAgV2ViVmlldyogZldlYlZpZXc7CisgICAgTlNWaWV3KiBmRmlyc3RS
ZXNwb25kZXI7CisgICAgQ2FyYm9uV2luZG93QWRhcHRlciogZktpdFdpbmRvdzsKKyAgICBib29s
IGZJc0NvbXBvc2l0ZWQ7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgZlVwZGF0ZU9ic2VydmVy
OwogfTsKIHR5cGVkZWYgc3RydWN0IEhJV2ViVmlldyBISVdlYlZpZXc7CiAKQEAgLTEyMywxMTYg
KzEyNCw5OSBAQCBzdGF0aWMgY29uc3QgT1NUeXBlIE5TVmlld0NhcmJvbkNvbnRyb2xGCiBzdGF0
aWMgY29uc3QgT1NUeXBlIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcgPSAnd2luICc7CiAKIAot
c3RhdGljIFNFTCBfTlNTZWxlY3RvckZvckhJQ29tbWFuZCggY29uc3QgSElDb21tYW5kKiBoaUNv
bW1hbmQgKTsKK3N0YXRpYyBTRUwgX05TU2VsZWN0b3JGb3JISUNvbW1hbmQoY29uc3QgSElDb21t
YW5kKik7CiAKIHN0YXRpYyBjb25zdCBFdmVudFR5cGVTcGVjIGtFdmVudHNbXSA9IHsgCi0JeyBr
RXZlbnRDbGFzc0hJT2JqZWN0LCBrRXZlbnRISU9iamVjdENvbnN0cnVjdCB9LAotCXsga0V2ZW50
Q2xhc3NISU9iamVjdCwga0V2ZW50SElPYmplY3REZXN0cnVjdCB9LAotCQotCXsga0V2ZW50Q2xh
c3NNb3VzZSwga0V2ZW50TW91c2VVcCB9LAotCXsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91
c2VNb3ZlZCB9LAotCXsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VEcmFnZ2VkIH0sCi0J
eyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZVdoZWVsTW92ZWQgfSwKLQotCXsga0V2ZW50
Q2xhc3NLZXlib2FyZCwga0V2ZW50UmF3S2V5RG93biB9LAotCXsga0V2ZW50Q2xhc3NLZXlib2Fy
ZCwga0V2ZW50UmF3S2V5UmVwZWF0IH0sCi0KLQl7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50
Q29tbWFuZFByb2Nlc3MgfSwKLQl7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFVw
ZGF0ZVN0YXR1cyB9LAotCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xJbml0
aWFsaXplIH0sCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEcmF3IH0sCi0J
eyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xIaXRUZXN0IH0sCi0JeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXRQYXJ0UmVnaW9uIH0sCi0JeyBrRXZlbnRDbGFz
c0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXREYXRhIH0sCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2ws
IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkIH0sCi0JeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtF
dmVudENvbnRyb2xBY3RpdmF0ZSB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250
cm9sRGVhY3RpdmF0ZSB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sT3du
aW5nV2luZG93Q2hhbmdlZCB9LAotCXsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9s
Q2xpY2sgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbENvbnRleHR1YWxN
ZW51Q2xpY2sgfSwKLQl7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbFNldEZvY3Vz
UGFydCB9CisgICAgeyBrRXZlbnRDbGFzc0hJT2JqZWN0LCBrRXZlbnRISU9iamVjdENvbnN0cnVj
dCB9LAorICAgIHsga0V2ZW50Q2xhc3NISU9iamVjdCwga0V2ZW50SElPYmplY3REZXN0cnVjdCB9
LAorICAgIAorICAgIHsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VVcCB9LAorICAgIHsg
a0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VNb3ZlZCB9LAorICAgIHsga0V2ZW50Q2xhc3NN
b3VzZSwga0V2ZW50TW91c2VEcmFnZ2VkIH0sCisgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZl
bnRNb3VzZVdoZWVsTW92ZWQgfSwKKworICAgIHsga0V2ZW50Q2xhc3NLZXlib2FyZCwga0V2ZW50
UmF3S2V5RG93biB9LAorICAgIHsga0V2ZW50Q2xhc3NLZXlib2FyZCwga0V2ZW50UmF3S2V5UmVw
ZWF0IH0sCisKKyAgICB7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFByb2Nlc3Mg
fSwKKyAgICB7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFVwZGF0ZVN0YXR1cyB9
LAorCisgICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xJbml0aWFsaXplIH0s
CisgICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEcmF3IH0sCisgICAgeyBr
RXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xIaXRUZXN0IH0sCisgICAgeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXRQYXJ0UmVnaW9uIH0sCisgICAgeyBrRXZlbnRD
bGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXREYXRhIH0sCisgICAgeyBrRXZlbnRDbGFzc0Nv
bnRyb2wsIGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkIH0sCisgICAgeyBrRXZlbnRDbGFzc0Nv
bnRyb2wsIGtFdmVudENvbnRyb2xBY3RpdmF0ZSB9LAorICAgIHsga0V2ZW50Q2xhc3NDb250cm9s
LCBrRXZlbnRDb250cm9sRGVhY3RpdmF0ZSB9LAorICAgIHsga0V2ZW50Q2xhc3NDb250cm9sLCBr
RXZlbnRDb250cm9sT3duaW5nV2luZG93Q2hhbmdlZCB9LAorICAgIHsga0V2ZW50Q2xhc3NDb250
cm9sLCBrRXZlbnRDb250cm9sQ2xpY2sgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2
ZW50Q29udHJvbENvbnRleHR1YWxNZW51Q2xpY2sgfSwKKyAgICB7IGtFdmVudENsYXNzQ29udHJv
bCwga0V2ZW50Q29udHJvbFNldEZvY3VzUGFydCB9CiB9OwogCi0jZGVmaW5lIGtISVZpZXdCYXNl
Q2xhc3NJRAkJQ0ZTVFIoICJjb20uYXBwbGUuaGl2aWV3IiApCi0jZGVmaW5lIGtISVdlYlZpZXdD
bGFzc0lECQlDRlNUUiggImNvbS5hcHBsZS5ISVdlYlZpZXciICkKKyNkZWZpbmUga0hJVmlld0Jh
c2VDbGFzc0lEIENGU1RSKCJjb20uYXBwbGUuaGl2aWV3IikKKyNkZWZpbmUga0hJV2ViVmlld0Ns
YXNzSUQgQ0ZTVFIoImNvbS5hcHBsZS5ISVdlYlZpZXciKQorCitzdGF0aWMgSElXZWJWaWV3KiBI
SVdlYlZpZXdDb25zdHJ1Y3RvcihISVZpZXdSZWYgaW5WaWV3KTsKK3N0YXRpYyB2b2lkIEhJV2Vi
Vmlld0Rlc3RydWN0b3IoSElXZWJWaWV3Kik7CiAKLXN0YXRpYyBISVdlYlZpZXcqCQlISVdlYlZp
ZXdDb25zdHJ1Y3RvciggSElWaWV3UmVmIGluVmlldyApOwotc3RhdGljIHZvaWQJCQkJSElXZWJW
aWV3RGVzdHJ1Y3RvciggSElXZWJWaWV3KiB2aWV3ICk7CitzdGF0aWMgT1NTdGF0dXMgSElXZWJW
aWV3RXZlbnRIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBp
bkV2ZW50LCB2b2lkICppblVzZXJEYXRhKTsKIAotc3RhdGljIE9TU3RhdHVzCQkJSElXZWJWaWV3
RXZlbnRIYW5kbGVyKAotCQkJCQkJCQlFdmVudEhhbmRsZXJDYWxsUmVmCWluQ2FsbFJlZiwKLQkJ
CQkJCQkJRXZlbnRSZWYJCQlpbkV2ZW50LAotCQkJCQkJCQl2b2lkICoJCQkJaW5Vc2VyRGF0YSAp
OwotCi1zdGF0aWMgVUludDMyCQkJR2V0QmVoYXZpb3JzKCk7Ci1zdGF0aWMgQ29udHJvbEtpbmQJ
CUdldEtpbmQoKTsKLXN0YXRpYyB2b2lkCQkJCURyYXcoIEhJV2ViVmlldyogaW5WaWV3LCBSZ25I
YW5kbGUgbGltaXRSZ24sIENHQ29udGV4dFJlZiBpbkNvbnRleHQgKTsKLXN0YXRpYyBDb250cm9s
UGFydENvZGUJSGl0VGVzdCggSElXZWJWaWV3KiB2aWV3LCBjb25zdCBISVBvaW50KiB3aGVyZSAp
Owotc3RhdGljIE9TU3RhdHVzCQkJR2V0UmVnaW9uKCBISVdlYlZpZXcqIHZpZXcsIENvbnRyb2xQ
YXJ0Q29kZSBpblBhcnQsIFJnbkhhbmRsZSBvdXRSZ24gKTsKLXN0YXRpYyB2b2lkCQkJCUJvdW5k
c0NoYW5nZWQoCi0JCQkJCQkJCUhJV2ViVmlldyoJCQlpblZpZXcsCi0JCQkJCQkJCVVJbnQzMgkJ
CQlpbk9wdGlvbnMsCi0JCQkJCQkJCWNvbnN0IEhJUmVjdCoJCWluT3JpZ2luYWxCb3VuZHMsCi0J
CQkJCQkJCWNvbnN0IEhJUmVjdCoJCWluQ3VycmVudEJvdW5kcyApOwotc3RhdGljIHZvaWQJCQkJ
T3duaW5nV2luZG93Q2hhbmdlZCgKLQkJCQkJCQkJSElXZWJWaWV3KgkJCXZpZXcsCi0JCQkJCQkJ
CVdpbmRvd1JlZgkJCW9sZFdpbmRvdywKLQkJCQkJCQkJV2luZG93UmVmCQkJbmV3V2luZG93ICk7
Ci1zdGF0aWMgdm9pZAkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIEhJV2ViVmlldyogdmlldyApOwot
Ci1zdGF0aWMgT1NTdGF0dXMJCQlDbGljayggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGlu
RXZlbnQgKTsKLXN0YXRpYyBPU1N0YXR1cwkJCUNvbnRleHRNZW51Q2xpY2soIEhJV2ViVmlldyog
aW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50ICk7Ci1zdGF0aWMgT1NTdGF0dXMJCQlNb3VzZVVwKCBI
SVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApOwotc3RhdGljIE9TU3RhdHVzCQkJ
TW91c2VNb3ZlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKTsKLXN0YXRp
YyBPU1N0YXR1cwkJCU1vdXNlRHJhZ2dlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGlu
RXZlbnQgKTsKLXN0YXRpYyBPU1N0YXR1cwkJCU1vdXNlV2hlZWxNb3ZlZCggSElXZWJWaWV3KiBp
blZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKTsKLQotc3RhdGljIE9TU3RhdHVzCQkJUHJvY2Vzc0Nv
bW1hbmQoIEhJV2ViVmlldyogaW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCApOwot
c3RhdGljIE9TU3RhdHVzCQkJVXBkYXRlQ29tbWFuZFN0YXR1cyggSElXZWJWaWV3KiBpblZpZXcs
IGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kICk7Ci0KLXN0YXRpYyBPU1N0YXR1cwkJCVNldEZv
Y3VzUGFydCgKLQkJCQkJCQkJSElXZWJWaWV3KgkJCQl2aWV3LAotCQkJCQkJCQlDb250cm9sUGFy
dENvZGUgCQlkZXNpcmVkRm9jdXMsCi0JCQkJCQkJCVJnbkhhbmRsZSAJCQkJaW52YWxpZFJnbiwK
LQkJCQkJCQkJQm9vbGVhbiAJCQkJZm9jdXNFdmVyeXRoaW5nLAotCQkJCQkJCQlDb250cm9sUGFy
dENvZGUqIAkJYWN0dWFsRm9jdXMgKTsKLXN0YXRpYyBOU1ZpZXcqCQkJQWR2YW5jZUZvY3VzKCBI
SVdlYlZpZXcqIHZpZXcsIGJvb2wgZm9yd2FyZCApOwotc3RhdGljIHZvaWQJCQkJUmVsaW5xdWlz
aEZvY3VzKCBISVdlYlZpZXcqIHZpZXcsIGJvb2wgaW5BdXRvZGlzcGxheSApOworc3RhdGljIFVJ
bnQzMiBHZXRCZWhhdmlvcnMoKTsKK3N0YXRpYyBDb250cm9sS2luZCBHZXRLaW5kKCk7CitzdGF0
aWMgdm9pZCBEcmF3KEhJV2ViVmlldyogaW5WaWV3LCBSZ25IYW5kbGUgbGltaXRSZ24sIENHQ29u
dGV4dFJlZiBpbkNvbnRleHQpOworc3RhdGljIENvbnRyb2xQYXJ0Q29kZSBIaXRUZXN0KEhJV2Vi
VmlldyosIGNvbnN0IEhJUG9pbnQqIHdoZXJlKTsKK3N0YXRpYyBPU1N0YXR1cyBHZXRSZWdpb24o
SElXZWJWaWV3KiwgQ29udHJvbFBhcnRDb2RlIGluUGFydCwgUmduSGFuZGxlIG91dFJnbik7Citz
dGF0aWMgdm9pZCBCb3VuZHNDaGFuZ2VkKEhJV2ViVmlldyogaW5WaWV3LCBVSW50MzIgaW5PcHRp
b25zLCBjb25zdCBISVJlY3QqIGluT3JpZ2luYWxCb3VuZHMsIGNvbnN0IEhJUmVjdCogaW5DdXJy
ZW50Qm91bmRzKTsKK3N0YXRpYyB2b2lkIE93bmluZ1dpbmRvd0NoYW5nZWQoSElXZWJWaWV3Kiwg
V2luZG93UmVmIG9sZFdpbmRvdywgV2luZG93UmVmIG5ld1dpbmRvdyk7CitzdGF0aWMgdm9pZCBB
Y3RpdmVTdGF0ZUNoYW5nZWQoSElXZWJWaWV3Kik7CisKK3N0YXRpYyBPU1N0YXR1cyBDbGljayhI
SVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7CitzdGF0aWMgT1NTdGF0dXMgQ29u
dGV4dE1lbnVDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7CitzdGF0
aWMgT1NTdGF0dXMgTW91c2VVcChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7
CitzdGF0aWMgT1NTdGF0dXMgTW91c2VNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYg
aW5FdmVudCk7CitzdGF0aWMgT1NTdGF0dXMgTW91c2VEcmFnZ2VkKEhJV2ViVmlldyogaW5WaWV3
LCBFdmVudFJlZiBpbkV2ZW50KTsKK3N0YXRpYyBPU1N0YXR1cyBNb3VzZVdoZWVsTW92ZWQoSElX
ZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpOworCitzdGF0aWMgT1NTdGF0dXMgUHJv
Y2Vzc0NvbW1hbmQoSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5k
KTsKK3N0YXRpYyBPU1N0YXR1cyBVcGRhdGVDb21tYW5kU3RhdHVzKEhJV2ViVmlldyogaW5WaWV3
LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCk7CisKK3N0YXRpYyBPU1N0YXR1cyBTZXRGb2N1
c1BhcnQoSElXZWJWaWV3KiwgQ29udHJvbFBhcnRDb2RlIGRlc2lyZWRGb2N1cywgUmduSGFuZGxl
IGludmFsaWRSZ24sIEJvb2xlYW4gZm9jdXNFdmVyeXRoaW5nLCBDb250cm9sUGFydENvZGUqIGFj
dHVhbEZvY3VzKTsKK3N0YXRpYyBOU1ZpZXcqIEFkdmFuY2VGb2N1cyhISVdlYlZpZXcqLCBib29s
IGZvcndhcmQpOworc3RhdGljIHZvaWQgUmVsaW5xdWlzaEZvY3VzKEhJV2ViVmlldyosIGJvb2wg
aW5BdXRvZGlzcGxheSk7CiAKLXN0YXRpYyBXaW5kb3dSZWYJCUdldFdpbmRvd1JlZiggSElXZWJW
aWV3KiBpblZpZXcgKTsKLXN0YXRpYyB2b2lkCQkJCVN5bmNGcmFtZSggSElXZWJWaWV3KiBpblZp
ZXcgKTsKK3N0YXRpYyBXaW5kb3dSZWYgR2V0V2luZG93UmVmKEhJV2ViVmlldyogaW5WaWV3KTsK
K3N0YXRpYyB2b2lkIFN5bmNGcmFtZShISVdlYlZpZXcqIGluVmlldyk7CiAKLXN0YXRpYyBPU1N0
YXR1cwkJCVdpbmRvd0hhbmRsZXIoIEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVu
dFJlZiBpbkV2ZW50LCB2b2lkKiBpblVzZXJEYXRhICk7CitzdGF0aWMgT1NTdGF0dXMgV2luZG93
SGFuZGxlcihFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudCwg
dm9pZCogaW5Vc2VyRGF0YSk7CiAKLXN0YXRpYyB2b2lkCQkJCVN0YXJ0VXBkYXRlT2JzZXJ2ZXIo
IEhJV2ViVmlldyogdmlldyApOwotc3RhdGljIHZvaWQJCQkJU3RvcFVwZGF0ZU9ic2VydmVyKCBI
SVdlYlZpZXcqIHZpZXcgKTsKK3N0YXRpYyB2b2lkIFN0YXJ0VXBkYXRlT2JzZXJ2ZXIoSElXZWJW
aWV3Kik7CitzdGF0aWMgdm9pZCBTdG9wVXBkYXRlT2JzZXJ2ZXIoSElXZWJWaWV3Kik7CiAKIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gSElXZWJWaWV3Q3JlYXRlCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1PU1N0YXR1cwotSElXZWJWaWV3Q3JlYXRlKEhJVmlld1Jl
Ziogb3V0Q29udHJvbCkKK09TU3RhdHVzIEhJV2ViVmlld0NyZWF0ZShISVZpZXdSZWYqIG91dENv
bnRyb2wpCiB7CiAgICAgSElXZWJWaWV3UmVnaXN0ZXJDbGFzcygpOwotICAgIHJldHVybiBISU9i
amVjdENyZWF0ZShrSElXZWJWaWV3Q2xhc3NJRCwgTlVMTCwgKEhJT2JqZWN0UmVmKilvdXRDb250
cm9sKTsKKyAgICByZXR1cm4gSElPYmplY3RDcmVhdGUoa0hJV2ViVmlld0NsYXNzSUQsIG51bGxw
dHIsIChISU9iamVjdFJlZiopb3V0Q29udHJvbCk7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogLy8gSElXZWJWaWV3R2V0V2ViVmlldwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAvLwotV2ViVmlldyoKLUhJV2ViVmlld0dldFdlYlZpZXcoIEhJVmlld1JlZiBpblZpZXcg
KQorV2ViVmlldyogSElXZWJWaWV3R2V0V2ViVmlldyhISVZpZXdSZWYgaW5WaWV3KQogewotCUhJ
V2ViVmlldyogCXZpZXcgPSAoSElXZWJWaWV3KilISU9iamVjdER5bmFtaWNDYXN0KCAoSElPYmpl
Y3RSZWYpaW5WaWV3LCBrSElXZWJWaWV3Q2xhc3NJRCApOwotCVdlYlZpZXcqCQkJcmVzdWx0ID0g
TlVMTDsKLQkKLQlpZiAoIHZpZXcgKQotCQlyZXN1bHQgPSB2aWV3LT5mV2ViVmlldzsKLQkKLQly
ZXR1cm4gcmVzdWx0OworICAgIEhJV2ViVmlldyogdmlldyA9IChISVdlYlZpZXcqKUhJT2JqZWN0
RHluYW1pY0Nhc3QoKEhJT2JqZWN0UmVmKWluVmlldywga0hJV2ViVmlld0NsYXNzSUQpOworICAg
IFdlYlZpZXcqIHJlc3VsdCA9IG51bGxwdHI7CisKKyAgICBpZiAodmlldykKKyAgICAgICAgcmVz
dWx0ID0gdmlldy0+ZldlYlZpZXc7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0MCwzOCArMjI0LDM1IEBAIEhJV2ViVmlld0dldFdl
YlZpZXcoIEhJVmlld1JlZiBpblZpZXcgKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAv
LwogCi1zdGF0aWMgSElXZWJWaWV3KgotSElXZWJWaWV3Q29uc3RydWN0b3IoIEhJVmlld1JlZiBp
blZpZXcgKQorc3RhdGljIEhJV2ViVmlldyogSElXZWJWaWV3Q29uc3RydWN0b3IoSElWaWV3UmVm
IGluVmlldykKIHsKLQlISVdlYlZpZXcqCQl2aWV3ID0gKEhJV2ViVmlldyopbWFsbG9jKCBzaXpl
b2YoIEhJV2ViVmlldyApICk7Ci0JCi0JaWYgKCB2aWV3ICkKLQl7Ci0JCU5TUmVjdAkJZnJhbWUg
PSB7IHsgMCwgMCB9LCB7IDQwMCwgNDAwICB9IH07Ci0JCi0JCXZpZXctPmZWaWV3UmVmID0gaW5W
aWV3OwotCi0gICAgICAgICAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtbV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTogZnJhbWVdOwotICAgICAgICAgICAgICAgIENGUmV0YWluKHdlYlZp
ZXcpOwotICAgICAgICAgICAgICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwotCQl2aWV3LT5mV2ViVmll
dyA9IHdlYlZpZXc7Ci0JCVtISVZpZXdBZGFwdGVyIGJpbmRISVZpZXdUb05TVmlldzppblZpZXcg
bnNWaWV3OnZpZXctPmZXZWJWaWV3XTsKLQkJCi0JCXZpZXctPmZGaXJzdFJlc3BvbmRlciA9IE5V
TEw7Ci0JCXZpZXctPmZLaXRXaW5kb3cgPSBOVUxMOworICAgIEhJV2ViVmlldyogdmlldyA9IChI
SVdlYlZpZXcqKW1hbGxvYyhzaXplb2YoSElXZWJWaWV3KSk7CisKKyAgICBpZiAodmlldykgewor
ICAgICAgICBOU1JlY3QgZnJhbWUgPSB7IHsgMCwgMCB9LCB7IDQwMCwgNDAwICB9IH07CisKKyAg
ICAgICAgdmlldy0+ZlZpZXdSZWYgPSBpblZpZXc7CisKKyAgICAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTogZnJhbWVdOworICAgICAgICBDRlJl
dGFpbih3ZWJWaWV3KTsKKyAgICAgICAgW3dlYlZpZXcgcmVsZWFzZV07CisgICAgICAgIHZpZXct
PmZXZWJWaWV3ID0gd2ViVmlldzsKKyAgICAgICAgW0hJVmlld0FkYXB0ZXIgYmluZEhJVmlld1Rv
TlNWaWV3OmluVmlldyBuc1ZpZXc6dmlldy0+ZldlYlZpZXddOworCisgICAgICAgIHZpZXctPmZG
aXJzdFJlc3BvbmRlciA9IG51bGxwdHI7CisgICAgICAgIHZpZXctPmZLaXRXaW5kb3cgPSBudWxs
cHRyOwogICAgICAgICB2aWV3LT5mSXNDb21wb3NpdGVkID0gZmFsc2U7Ci0gICAgICAgIHZpZXct
PmZVcGRhdGVPYnNlcnZlciA9IE5VTEw7Ci0JfQotCQotCXJldHVybiB2aWV3OworICAgICAgICB2
aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiB2aWV3
OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEhJV2ViVmlld0Rlc3RydWN0
b3IKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1ISVdlYlZp
ZXdEZXN0cnVjdG9yKCBISVdlYlZpZXcqIGluVmlldyApCitzdGF0aWMgdm9pZCBISVdlYlZpZXdE
ZXN0cnVjdG9yKEhJV2ViVmlldyogaW5WaWV3KQogewogICAgIFtISVZpZXdBZGFwdGVyIHVuYmlu
ZE5TVmlldzppblZpZXctPmZXZWJWaWV3XTsKICAgICBDRlJlbGVhc2UoaW5WaWV3LT5mV2ViVmll
dyk7CkBAIC0yODMsMjcgKzI2NCwyNCBAQCBISVdlYlZpZXdEZXN0cnVjdG9yKCBISVdlYlZpZXcq
IGluVmlldyApCiAvLyBISVdlYlZpZXdSZWdpc3RlckNsYXNzCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIC8vCi12b2lkCi1ISVdlYlZpZXdSZWdpc3RlckNsYXNzKCkKK3ZvaWQgSElXZWJW
aWV3UmVnaXN0ZXJDbGFzcygpCiB7Ci0Jc3RhdGljIGJvb2wgc1JlZ2lzdGVyZWQ7Ci0JCi0JaWYg
KCAhc1JlZ2lzdGVyZWQgKQotCXsKLQkJSElPYmplY3RSZWdpc3RlclN1YmNsYXNzKCBrSElXZWJW
aWV3Q2xhc3NJRCwga0hJVmlld0Jhc2VDbGFzc0lELCAwLCBISVdlYlZpZXdFdmVudEhhbmRsZXIs
Ci0JCQlHZXRFdmVudFR5cGVDb3VudCgga0V2ZW50cyApLCBrRXZlbnRzLCAwLCBOVUxMICk7Ci0J
CXNSZWdpc3RlcmVkID0gdHJ1ZTsKLQl9CisgICAgc3RhdGljIGJvb2wgc1JlZ2lzdGVyZWQ7CisK
KyAgICBpZiAoIXNSZWdpc3RlcmVkKSB7CisgICAgICAgIEhJT2JqZWN0UmVnaXN0ZXJTdWJjbGFz
cyhrSElXZWJWaWV3Q2xhc3NJRCwga0hJVmlld0Jhc2VDbGFzc0lELCAwLCBISVdlYlZpZXdFdmVu
dEhhbmRsZXIsCisgICAgICAgICAgICBHZXRFdmVudFR5cGVDb3VudChrRXZlbnRzKSwga0V2ZW50
cywgMCwgbnVsbHB0cik7CisgICAgICAgIHNSZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICB9CiB9CiAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gR2V0QmVoYXZpb3JzCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgVUludDMyCi1HZXRCZWhhdmlvcnMoKQorc3Rh
dGljIFVJbnQzMiBHZXRCZWhhdmlvcnMoKQogewotCXJldHVybiBrQ29udHJvbFN1cHBvcnRzRGF0
YUFjY2VzcyB8IGtDb250cm9sU3VwcG9ydHNHZXRSZWdpb24gfCBrQ29udHJvbEdldHNGb2N1c09u
Q2xpY2s7CisgICAgcmV0dXJuIGtDb250cm9sU3VwcG9ydHNEYXRhQWNjZXNzIHwga0NvbnRyb2xT
dXBwb3J0c0dldFJlZ2lvbiB8IGtDb250cm9sR2V0c0ZvY3VzT25DbGljazsKIH0KIAogc3RhdGlj
IENHQ29udGV4dFJlZiBvdmVycmlkZUNHQ29udGV4dChOU1dpbmRvdyAqd2luZG93LCBDR0NvbnRl
eHRSZWYgY29udGV4dCkKQEAgLTMyNiw0OCArMzA0LDQ2IEBAIHN0YXRpYyB2b2lkIHJlc3RvcmVD
R0NvbnRleHQoTlNXaW5kb3cgKncKIC8vIERyYXcKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogLy8KLXN0YXRpYyB2b2lkCi1EcmF3KCBISVdlYlZpZXcqIGluVmlldywgUmduSGFuZGxlIGxp
bWl0UmduLCBDR0NvbnRleHRSZWYgaW5Db250ZXh0ICkKK3N0YXRpYyB2b2lkIERyYXcoSElXZWJW
aWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdFJnbiwgQ0dDb250ZXh0UmVmIGluQ29udGV4dCkK
IHsKLQlISVJlY3QJCQkJYm91bmRzOwotCVJlY3QJCQkJZHJhd1JlY3Q7Ci0JSElSZWN0CQkJCWhp
UmVjdDsKLQlib29sCQkJCWNyZWF0ZWRDb250ZXh0ID0gZmFsc2U7CisgICAgSElSZWN0IGJvdW5k
czsKKyAgICBSZWN0IGRyYXdSZWN0OworICAgIEhJUmVjdCBoaVJlY3Q7CisgICAgYm9vbCBjcmVh
dGVkQ29udGV4dCA9IGZhbHNlOwogCi0gICAgaWYgKCFpblZpZXctPmZJc0NvbXBvc2l0ZWQpCi0g
ICAgeworICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVkKSB7CiAgICAgICAgIEdyYWZQdHIg
cG9ydDsKICAgICAgICAgUmVjdCBwb3J0UmVjdDsKIAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVj
bGFyYXRpb25zIgotICAgICAgICBHZXRQb3J0KCAmcG9ydCApOwotICAgICAgICBHZXRQb3J0Qm91
bmRzKCBwb3J0LCAmcG9ydFJlY3QgKTsKLSAgICAgICAgQ3JlYXRlQ0dDb250ZXh0Rm9yUG9ydCgg
cG9ydCwgJmluQ29udGV4dCApOworICAgICAgICBHZXRQb3J0KCZwb3J0KTsKKyAgICAgICAgR2V0
UG9ydEJvdW5kcyhwb3J0LCAmcG9ydFJlY3QpOworICAgICAgICBDcmVhdGVDR0NvbnRleHRGb3JQ
b3J0KHBvcnQsICZpbkNvbnRleHQpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSAg
ICAgICAgU3luY0NHQ29udGV4dE9yaWdpbldpdGhQb3J0KCBpbkNvbnRleHQsIHBvcnQgKTsKLSAg
ICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKCBpbkNvbnRleHQsIDAsIChwb3J0UmVjdC5ib3R0
b20gLSBwb3J0UmVjdC50b3ApICk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKCBpbkNvbnRl
eHQsIDEsIC0xICk7CisgICAgICAgIFN5bmNDR0NvbnRleHRPcmlnaW5XaXRoUG9ydChpbkNvbnRl
eHQsIHBvcnQpOworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oaW5Db250ZXh0LCAwLCAo
cG9ydFJlY3QuYm90dG9tIC0gcG9ydFJlY3QudG9wKSk7CisgICAgICAgIENHQ29udGV4dFNjYWxl
Q1RNKGluQ29udGV4dCwgMSwgLTEpOwogICAgICAgICBjcmVhdGVkQ29udGV4dCA9IHRydWU7CiAg
ICAgfQogCi0JSElWaWV3R2V0Qm91bmRzKCBpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7Cisg
ICAgSElWaWV3R2V0Qm91bmRzKGluVmlldy0+ZlZpZXdSZWYsICZib3VuZHMpOwogCiAgICAgQ0dD
b250ZXh0UmVmIHNhdmVkQ29udGV4dCA9IG92ZXJyaWRlQ0dDb250ZXh0KGluVmlldy0+ZktpdFdp
bmRvdywgaW5Db250ZXh0KTsKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRl
eHQ6W2luVmlldy0+ZktpdFdpbmRvdyBncmFwaGljc0NvbnRleHRdXTsKIAotCUdldFJlZ2lvbkJv
dW5kcyggbGltaXRSZ24sICZkcmF3UmVjdCApOworICAgIEdldFJlZ2lvbkJvdW5kcyhsaW1pdFJn
biwgJmRyYXdSZWN0KTsKIAotICAgIGlmICggIWluVmlldy0+ZklzQ29tcG9zaXRlZCApCi0gICAg
ICAgIE9mZnNldFJlY3QoICZkcmF3UmVjdCwgKFNJbnQxNiktYm91bmRzLm9yaWdpbi54LCAoU0lu
dDE2KS1ib3VuZHMub3JpZ2luLnkgKTsKKyAgICBpZiAoIWluVmlldy0+ZklzQ29tcG9zaXRlZCkK
KyAgICAgICAgT2Zmc2V0UmVjdCgmZHJhd1JlY3QsIChTSW50MTYpLWJvdW5kcy5vcmlnaW4ueCwg
KFNJbnQxNiktYm91bmRzLm9yaWdpbi55KTsKICAgICAKLQloaVJlY3Qub3JpZ2luLnggPSBkcmF3
UmVjdC5sZWZ0OwotCWhpUmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIGRyYXdS
ZWN0LmJvdHRvbTsgLy8gZmxpcCB5Ci0JaGlSZWN0LnNpemUud2lkdGggPSBkcmF3UmVjdC5yaWdo
dCAtIGRyYXdSZWN0LmxlZnQ7Ci0JaGlSZWN0LnNpemUuaGVpZ2h0ID0gZHJhd1JlY3QuYm90dG9t
IC0gZHJhd1JlY3QudG9wOworICAgIGhpUmVjdC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7Cisg
ICAgaGlSZWN0Lm9yaWdpbi55ID0gYm91bmRzLnNpemUuaGVpZ2h0IC0gZHJhd1JlY3QuYm90dG9t
OyAvLyBmbGlwIHkKKyAgICBoaVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0LnJpZ2h0IC0gZHJh
d1JlY3QubGVmdDsKKyAgICBoaVJlY3Quc2l6ZS5oZWlnaHQgPSBkcmF3UmVjdC5ib3R0b20gLSBk
cmF3UmVjdC50b3A7CiAKLS8vICAgIHByaW50ZiggIkRyYXdpbmc6IGRyYXdSZWN0IGlzICglZyAl
ZykgKCVnICVnKVxuIiwgaGlSZWN0Lm9yaWdpbi54LCBoaVJlY3Qub3JpZ2luLnksCi0vLyAgICAg
ICAgICAgIGhpUmVjdC5zaXplLndpZHRoLCBoaVJlY3Quc2l6ZS5oZWlnaHQgKTsKKy8vICAgIHBy
aW50ZigiRHJhd2luZzogZHJhd1JlY3QgaXMgKCVnICVnKSAoJWcgJWcpXG4iLCBoaVJlY3Qub3Jp
Z2luLngsIGhpUmVjdC5vcmlnaW4ueSwKKy8vICAgICAgICAgICAgaGlSZWN0LnNpemUud2lkdGgs
IGhpUmVjdC5zaXplLmhlaWdodCk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyBsYXlv
dXQgYmVmb3JlIENhcmJvbiBoYXMgZGVjaWRlZCB3aGF0IHJlZ2lvbiBuZWVkcyBkcmF3bi4KICAg
ICAvLyBJbiBDb2NvYSB3ZSBtYWtlIHN1cmUgdG8gZG8gbGF5b3V0IGFuZCBpbnZhbGlkYXRlIGFu
eSBuZXcgcmVnaW9ucyBiZWZvcmUgZHJhdywgc28gZXZlcnl0aGluZwpAQCAtMzc4LDQwICszNTQs
NDAgQEAgRHJhdyggSElXZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1pdAogICAgIGlmIChb
ZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAgICAg
IFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX3dlYl91cGRhdGVMYXlvdXRBbmRTdHlsZUlm
TmVlZGVkUmVjdXJzaXZlXTsKIAotICAgIGlmICggaW5WaWV3LT5mSXNDb21wb3NpdGVkICkKKyAg
ICBpZiAoaW5WaWV3LT5mSXNDb21wb3NpdGVkKQogICAgICAgICBbaW5WaWV3LT5mV2ViVmlldyBk
aXNwbGF5SWZOZWVkZWRJblJlY3Q6ICooTlNSZWN0KikmaGlSZWN0XTsKICAgICBlbHNlCiAgICAg
ICAgIFtpblZpZXctPmZXZWJWaWV3IGRpc3BsYXlSZWN0OiooTlNSZWN0KikmaGlSZWN0XTsKIAog
ICAgIHJlc3RvcmVDR0NvbnRleHQoaW5WaWV3LT5mS2l0V2luZG93LCBzYXZlZENvbnRleHQpOwog
Ci0gICAgaWYgKCAhaW5WaWV3LT5mSXNDb21wb3NpdGVkICkKKyAgICBpZiAoIWluVmlldy0+Zklz
Q29tcG9zaXRlZCkKICAgICB7CiAgICAgICAgIEhJVmlld1JlZiAgICAgIHZpZXc7Ci0gICAgICAg
IEhJVmlld0ZpbmRCeUlEKCBISVZpZXdHZXRSb290KCBHZXRDb250cm9sT3duZXIoIGluVmlldy0+
ZlZpZXdSZWYgKSApLCBrSElWaWV3V2luZG93R3Jvd0JveElELCAmdmlldyApOwotICAgICAgICBp
ZiAoIHZpZXcgKQorICAgICAgICBISVZpZXdGaW5kQnlJRChISVZpZXdHZXRSb290KEdldENvbnRy
b2xPd25lcihpblZpZXctPmZWaWV3UmVmKSksIGtISVZpZXdXaW5kb3dHcm93Qm94SUQsICZ2aWV3
KTsKKyAgICAgICAgaWYgKHZpZXcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEhJUmVjdCAgICAg
ZnJhbWU7CisgICAgICAgICAgICBISVJlY3QgZnJhbWU7CiAKLSAgICAgICAgICAgIEhJVmlld0dl
dEJvdW5kcyggdmlldywgJmZyYW1lICk7Ci0gICAgICAgICAgICBISVZpZXdDb252ZXJ0UmVjdCgg
JmZyYW1lLCB2aWV3LCBOVUxMICk7CisgICAgICAgICAgICBISVZpZXdHZXRCb3VuZHModmlldywg
JmZyYW1lKTsKKyAgICAgICAgICAgIEhJVmlld0NvbnZlcnRSZWN0KCZmcmFtZSwgdmlldywgbnVs
bHB0cik7CiAKICAgICAgICAgICAgIGhpUmVjdC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7CiAg
ICAgICAgICAgICBoaVJlY3Qub3JpZ2luLnkgPSBkcmF3UmVjdC50b3A7CiAgICAgICAgICAgICBo
aVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0LnJpZ2h0IC0gZHJhd1JlY3QubGVmdDsKICAgICAg
ICAgICAgIGhpUmVjdC5zaXplLmhlaWdodCA9IGRyYXdSZWN0LmJvdHRvbSAtIGRyYXdSZWN0LnRv
cDsKIAotICAgICAgICAgICAgSElWaWV3Q29udmVydFJlY3QoICZoaVJlY3QsIGluVmlldy0+ZlZp
ZXdSZWYsIE5VTEwgKTsKKyAgICAgICAgICAgIEhJVmlld0NvbnZlcnRSZWN0KCZoaVJlY3QsIGlu
Vmlldy0+ZlZpZXdSZWYsIG51bGxwdHIpOwogCi0gICAgICAgICAgICBpZiAoIENHUmVjdEludGVy
c2VjdHNSZWN0KCBmcmFtZSwgaGlSZWN0ICkgKQotICAgICAgICAgICAgICAgIEhJVmlld1NldE5l
ZWRzRGlzcGxheSggdmlldywgdHJ1ZSApOworICAgICAgICAgICAgaWYgKENHUmVjdEludGVyc2Vj
dHNSZWN0KGZyYW1lLCBoaVJlY3QpKQorICAgICAgICAgICAgICAgIEhJVmlld1NldE5lZWRzRGlz
cGxheSh2aWV3LCB0cnVlKTsKICAgICAgICAgfQotICAgICB9CisgICAgfQogCi0gICAgaWYgKCBj
cmVhdGVkQ29udGV4dCApCisgICAgaWYgKGNyZWF0ZWRDb250ZXh0KQogICAgIHsKLSAgICAgICAg
Q0dDb250ZXh0U3luY2hyb25pemUoIGluQ29udGV4dCApOwotICAgICAgICBDR0NvbnRleHRSZWxl
YXNlKCBpbkNvbnRleHQgKTsKKyAgICAgICAgQ0dDb250ZXh0U3luY2hyb25pemUoaW5Db250ZXh0
KTsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShpbkNvbnRleHQpOwogICAgIH0KIH0KIApAQCAt
NDE5LDYxICszOTUsNTAgQEAgRHJhdyggSElXZWJWaWV3KiBpblZpZXcsIFJnbkhhbmRsZSBsaW1p
dAogLy8gSGl0VGVzdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIENv
bnRyb2xQYXJ0Q29kZQotSGl0VGVzdCggSElXZWJWaWV3KiB2aWV3LCBjb25zdCBISVBvaW50KiB3
aGVyZSApCitzdGF0aWMgQ29udHJvbFBhcnRDb2RlIEhpdFRlc3QoSElXZWJWaWV3KiB2aWV3LCBj
b25zdCBISVBvaW50KiB3aGVyZSkKIHsKLQlISVJlY3QJCWJvdW5kczsKLQkKLQlISVZpZXdHZXRC
b3VuZHMoIHZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7Ci0KLQlpZiAoIENHUmVjdENvbnRhaW5z
UG9pbnQoIGJvdW5kcywgKndoZXJlICkgKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBr
Q29udHJvbE5vUGFydDsKKyAgICBISVJlY3QgYm91bmRzOworCisgICAgSElWaWV3R2V0Qm91bmRz
KHZpZXctPmZWaWV3UmVmLCAmYm91bmRzKTsKKworICAgIGlmIChDR1JlY3RDb250YWluc1BvaW50
KGJvdW5kcywgKndoZXJlKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIGtDb250cm9s
Tm9QYXJ0OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEdldFJlZ2lvbgog
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9TU3RhdHVzCi1HZXRSZWdp
b24oCi0JSElXZWJWaWV3KgkJCWluVmlldywKLQlDb250cm9sUGFydENvZGUJCWluUGFydCwKLQlS
Z25IYW5kbGUJCQlvdXRSZ24gKQotewotCU9TU3RhdHVzCSBlcnIgPSBldmVudE5vdEhhbmRsZWRF
cnI7Ci0JCi0JaWYgKCBpblBhcnQgPT0gLTMgKSAvLyBrQ29udHJvbE9wYXF1ZU1ldGFQYXJ0Ogot
CXsKLQkJaWYgKCBbaW5WaWV3LT5mV2ViVmlldyBpc09wYXF1ZV0gKQotCQl7Ci0JCQlISVJlY3QJ
Ym91bmRzOwotCQkJUmVjdAl0ZW1wOwotCQkJCi0JCQlISVZpZXdHZXRCb3VuZHMoIGluVmlldy0+
ZlZpZXdSZWYsICZib3VuZHMgKTsKLQotCQkJdGVtcC50b3AgPSAoU0ludDE2KWJvdW5kcy5vcmln
aW4ueTsKLQkJCXRlbXAubGVmdCA9IChTSW50MTYpYm91bmRzLm9yaWdpbi54OwotCQkJdGVtcC5i
b3R0b20gPSAoU0ludDE2KUNHUmVjdEdldE1heFkoIGJvdW5kcyApOwotCQkJdGVtcC5yaWdodCA9
IChTSW50MTYpQ0dSZWN0R2V0TWF4WCggYm91bmRzICk7Ci0KLQkJCVJlY3RSZ24oIG91dFJnbiwg
JnRlbXAgKTsKLQkJCWVyciA9IG5vRXJyOwotCQl9Ci0JfQotCQotCXJldHVybiBlcnI7CitzdGF0
aWMgT1NTdGF0dXMgR2V0UmVnaW9uKEhJV2ViVmlldyogaW5WaWV3LCBDb250cm9sUGFydENvZGUg
aW5QYXJ0LCBSZ25IYW5kbGUgb3V0UmduKQoreworICAgIE9TU3RhdHVzIGVyciA9IGV2ZW50Tm90
SGFuZGxlZEVycjsKKworICAgIGlmIChpblBhcnQgPT0gLTMgJiYgW2luVmlldy0+ZldlYlZpZXcg
aXNPcGFxdWVdKSB7CisgICAgICAgIC8vIGtDb250cm9sT3BhcXVlTWV0YVBhcnQ6CisgICAgICAg
IEhJUmVjdCBib3VuZHM7CisgICAgICAgIFJlY3QgdGVtcDsKKworICAgICAgICBISVZpZXdHZXRC
b3VuZHMoaW5WaWV3LT5mVmlld1JlZiwgJmJvdW5kcyk7CisKKyAgICAgICAgdGVtcC50b3AgPSAo
U0ludDE2KWJvdW5kcy5vcmlnaW4ueTsKKyAgICAgICAgdGVtcC5sZWZ0ID0gKFNJbnQxNilib3Vu
ZHMub3JpZ2luLng7CisgICAgICAgIHRlbXAuYm90dG9tID0gKFNJbnQxNilDR1JlY3RHZXRNYXhZ
KGJvdW5kcyk7CisgICAgICAgIHRlbXAucmlnaHQgPSAoU0ludDE2KUNHUmVjdEdldE1heFgoYm91
bmRzKTsKKworICAgICAgICBSZWN0UmduKG91dFJnbiwgJnRlbXApOworICAgICAgICBlcnIgPSBu
b0VycjsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgV2luZG93UmVmCi1H
ZXRXaW5kb3dSZWYoIEhJV2ViVmlldyogaW5WaWV3ICkKK3N0YXRpYyBXaW5kb3dSZWYgR2V0V2lu
ZG93UmVmKEhJV2ViVmlldyogaW5WaWV3KQogewotICAgICAgIHJldHVybiBHZXRDb250cm9sT3du
ZXIoIGluVmlldy0+ZlZpZXdSZWYgKTsKKyAgICByZXR1cm4gR2V0Q29udHJvbE93bmVyKGluVmll
dy0+ZlZpZXdSZWYpOwogfQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVOU0V2ZW50QWRvcHRp
bmdDR0V2ZW50KCBDR0V2ZW50UmVmIGNnRXZlbnQsIEV2ZW50UmVmIGV2ZW50UmVmICkKK3N0YXRp
YyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50QWRvcHRpbmdDR0V2ZW50KENHRXZlbnRSZWYgY2dFdmVu
dCwgRXZlbnRSZWYgZXZlbnRSZWYpCiB7CiAgICAgTlNFdmVudCAqcmVzdWx0ID0gW1tOU0V2ZW50
IGFsbG9jXSBfaW5pdFdpdGhDR0V2ZW50OmNnRXZlbnQgZXZlbnRSZWY6ZXZlbnRSZWZdOwogICAg
IENGUmVsZWFzZShjZ0V2ZW50KTsKQEAgLTQ4MSwxMSArNDQ2LDExIEBAIENyZWF0ZU5TRXZlbnRB
ZG9wdGluZ0NHRXZlbnQoIENHRXZlbnRSZWYKIH0KIAogc3RhdGljIEJvb2xlYW4KLUNvcHlFdmVu
dENHRXZlbnQoIEV2ZW50UmVmIGV2ZW50LCBDR0V2ZW50UmVmKiBjZ0V2ZW50ICkKK0NvcHlFdmVu
dENHRXZlbnQoRXZlbnRSZWYgZXZlbnQsIENHRXZlbnRSZWYqIGNnRXZlbnQpCiB7CiAgICAgaWYg
KCgqY2dFdmVudCA9IENvcHlFdmVudENHRXZlbnQoZXZlbnQpKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCisKICAgICAvLyBUaGlzIGV2ZW50IG1pZ2h0IG5vdCBoYXZlIGJlZW4gY3JlYXRl
ZCBkaXJlY3RseSBmcm9tIGEgQ0dTIGV2ZW50LCBhbmQgbWlnaHQgbm90CiAgICAgLy8gaGF2ZSBh
IENHRXZlbnRSZWYgYXNzb2NpYXRlZCB3aXRoIGl0LiBJbiB0aGF0IGNhc2UsIHRyeSB1c2luZyB0
aGUgZXZlbnQgbW9zdAogICAgIC8vIHJlY2VudGx5IGRpc3BhdGNoZWQgYnkgdGhlIGV2ZW50IGRp
c3BhdGNoZXIsIHdoaWNoIGlzIGxpa2VseSB0byBiZSB0aGUgb3JpZ2luYWwKQEAgLTQ5NiwzNyAr
NDYxLDM2IEBAIENvcHlFdmVudENHRXZlbnQoIEV2ZW50UmVmIGV2ZW50LCBDR0V2ZW4KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBOU0V2ZW50ICoKLUNyZWF0ZU5TRXZlbnRXaXRoQ2Fy
Ym9uQ2xpY2tFdmVudCggRXZlbnRSZWYgaW5FdmVudCwgV2luZG93UmVmIHdpbmRvd1JlZiApCitz
dGF0aWMgTlNFdmVudCAqQ3JlYXRlTlNFdmVudFdpdGhDYXJib25DbGlja0V2ZW50KEV2ZW50UmVm
IGluRXZlbnQsIFdpbmRvd1JlZiB3aW5kb3dSZWYpCiB7CiAgICAgRXZlbnRSZWYgbmV3RXZlbnQ7
CiAgICAgUG9pbnQgd2hlcmU7CiAgICAgT1NTdGF0dXMgZXJyOwogICAgIFVJbnQzMiBtb2RpZmll
cnM7CiAgICAgUmVjdCB3aW5kUmVjdDsKLSAgICAKLSAgICBDR0V2ZW50UmVmIGNnRXZlbnQgPSBO
VUxMOworCisgICAgQ0dFdmVudFJlZiBjZ0V2ZW50ID0gbnVsbHB0cjsKICAgICBpZiAoIUNvcHlF
dmVudENHRXZlbnQoaW5FdmVudCwgJmNnRXZlbnQpKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IAorCiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHRoZSBldmVudCBiZSBhIGtFdmVudE1vdXNlRG93
biBldmVudCwgb3IgdGhlIHdlYmtpdCBtaWdodCB0cmlwIHVwIHdoZW4KICAgICAvLyB3ZSBjbGlj
ayBvbiBhIE5ldHNjYXBlIHBsdWdpbi4gSXQgY2FsbHMgQ29udmVydEV2ZW50UmVmVG9FdmVudFJl
Y29yZCwgYXNzdW1pbmcKICAgICAvLyB0aGF0IG1vdXNlRG93biB3YXMgcGFzc2VkIGFuIGV2ZW50
IHdpdGggYSByZWFsIG1vdXNlIGRvd24gZXZlbnRSZWYuIFdlIGp1c3QgbmVlZCBhCiAgICAgLy8g
bWluaW1hbCBvbmUgaGVyZS4KLSAgICAKLSAgICBlcnIgPSBDcmVhdGVFdmVudChOVUxMLCBrRXZl
bnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZURvd24sIEdldEV2ZW50VGltZShpbkV2ZW50KSwgMCwg
Jm5ld0V2ZW50KTsKKworICAgIGVyciA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIGtFdmVudENsYXNz
TW91c2UsIGtFdmVudE1vdXNlRG93biwgR2V0RXZlbnRUaW1lKGluRXZlbnQpLCAwLCAmbmV3RXZl
bnQpOwogICAgIGlmIChlcnIgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5kb3dNb3VzZUxvY2F0
aW9uLCB0eXBlUURQb2ludCwgTlVMTCwgc2l6ZW9mKFBvaW50KSwgTlVMTCwgJndoZXJlKTsKKwor
ICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93TW91c2VMb2Nh
dGlvbiwgdHlwZVFEUG9pbnQsIG51bGxwdHIsIHNpemVvZihQb2ludCksIG51bGxwdHIsICZ3aGVy
ZSk7CiAgICAgR2V0V2luZG93Qm91bmRzKHdpbmRvd1JlZiwga1dpbmRvd1N0cnVjdHVyZVJnbiwg
JndpbmRSZWN0KTsKICAgICB3aGVyZS5oICs9IHdpbmRSZWN0LmxlZnQ7CiAgICAgd2hlcmUudiAr
PSB3aW5kUmVjdC50b3A7Ci0gICAgCi0gICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2
ZW50UGFyYW1LZXlNb2RpZmllcnMsIHR5cGVVSW50MzIsIE5VTEwsIHNpemVvZihVSW50MzIpLCBO
VUxMLCAmbW9kaWZpZXJzKTsKKworICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVu
dFBhcmFtS2V5TW9kaWZpZXJzLCB0eXBlVUludDMyLCBudWxscHRyLCBzaXplb2YoVUludDMyKSwg
bnVsbHB0ciwgJm1vZGlmaWVycyk7CiAgICAgU2V0RXZlbnRQYXJhbWV0ZXIobmV3RXZlbnQsIGtF
dmVudFBhcmFtTW91c2VMb2NhdGlvbiwgdHlwZVFEUG9pbnQsIHNpemVvZihQb2ludCksICZ3aGVy
ZSk7CiAgICAgU2V0RXZlbnRQYXJhbWV0ZXIobmV3RXZlbnQsIGtFdmVudFBhcmFtS2V5TW9kaWZp
ZXJzLCB0eXBlVUludDMyLCBzaXplb2YoVUludDMyKSwgJm1vZGlmaWVycyk7Ci0gICAgCisKICAg
ICByZXR1cm4gQ3JlYXRlTlNFdmVudEFkb3B0aW5nQ0dFdmVudChjZ0V2ZW50LCBuZXdFdmVudCk7
CiB9CiAKQEAgLTUzNCw4ICs0OTgsNyBAQCBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkNsaWNrRXZl
bnQoIEV2ZW50CiAvLyBDbGljawogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3Rh
dGljIE9TU3RhdHVzCi1DbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkK
K3N0YXRpYyBPU1N0YXR1cyBDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVu
dCkKIHsKICAgICBOU0V2ZW50ICpraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uQ2xp
Y2tFdmVudChpbkV2ZW50LCBHZXRXaW5kb3dSZWYoaW5WaWV3KSk7CiAKQEAgLTU1Miw4ICs1MTUs
NyBAQCBDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVuCiAgICAgcmV0dXJu
IG5vRXJyOwogfQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2
ZW50KCBFdmVudFJlZiBpbkV2ZW50ICkKK3N0YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50V2l0
aENhcmJvbkV2ZW50KEV2ZW50UmVmIGluRXZlbnQpCiB7CiAgICAgTlNFdmVudCAqZXZlbnQgPSBb
TlNFdmVudCBldmVudFdpdGhFdmVudFJlZjppbkV2ZW50XTsKICAgICBpZiAoIWV2ZW50KQpAQCAt
NTY2LDggKzUyOCw3IEBAIENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQoIEV2ZW50UmVmIGkK
IC8vIE1vdXNlVXAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBPU1N0
YXR1cwotTW91c2VVcCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKQorc3Rh
dGljIE9TU3RhdHVzIE1vdXNlVXAoSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQp
CiB7CiAgICAgTlNFdmVudCoga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50
KGluRXZlbnQpOwogCkBAIC01NzUsMTEgKzUzNiwxMCBAQCBNb3VzZVVwKCBISVdlYlZpZXcqIGlu
VmlldywgRXZlbnRSZWYgaW5FCiAKICAgICBba2l0RXZlbnQgcmVsZWFzZV07CiAKLQlyZXR1cm4g
bm9FcnI7CisgICAgcmV0dXJuIG5vRXJyOwogfQogCi1zdGF0aWMgTlNFdmVudCAqCi1DcmVhdGVO
U0V2ZW50V2l0aENhcmJvbk1vdXNlTW92ZUV2ZW50KCBFdmVudFJlZiBpbkV2ZW50LCBOU1dpbmRv
dyAqd2luZG93ICkKK3N0YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50V2l0aENhcmJvbk1vdXNl
TW92ZUV2ZW50KEV2ZW50UmVmIGluRXZlbnQsIE5TV2luZG93ICp3aW5kb3cpCiB7CiAgICAgTlNF
dmVudCoga2l0RXZlbnQgPSBbTlNFdmVudCBldmVudFdpdGhFdmVudFJlZjppbkV2ZW50XTsKIApA
QCAtNTk5LDIyICs1NTksMjAgQEAgQ3JlYXRlTlNFdmVudFdpdGhDYXJib25Nb3VzZU1vdmVFdmVu
dCggRQogLy8gTW91c2VNb3ZlZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3Rh
dGljIE9TU3RhdHVzCi1Nb3VzZU1vdmVkKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5F
dmVudCApCitzdGF0aWMgT1NTdGF0dXMgTW91c2VNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZl
bnRSZWYgaW5FdmVudCkKIHsKICAgICBOU0V2ZW50ICpraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRX
aXRoQ2FyYm9uTW91c2VNb3ZlRXZlbnQoaW5FdmVudCwgaW5WaWV3LT5mS2l0V2luZG93KTsKICAg
ICBbaW5WaWV3LT5mS2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0JW2tpdEV2ZW50IHJl
bGVhc2VdOworICAgIFtraXRFdmVudCByZWxlYXNlXTsKIAotCXJldHVybiBub0VycjsKKyAgICBy
ZXR1cm4gbm9FcnI7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTW91c2VE
cmFnZ2VkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCi1zdGF0aWMgT1NTdGF0dXMK
LU1vdXNlRHJhZ2dlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQgKQorc3Rh
dGljIE9TU3RhdHVzIE1vdXNlRHJhZ2dlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5F
dmVudCkKIHsKICAgICBOU0V2ZW50KiBraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9u
RXZlbnQoaW5FdmVudCk7CiAKQEAgLTYyMiwxNSArNTgwLDE0IEBAIE1vdXNlRHJhZ2dlZCggSElX
ZWJWaWV3KiBpblZpZXcsIEV2ZW50UmUKIAogICAgIFtraXRFdmVudCByZWxlYXNlXTsKIAotCXJl
dHVybiBub0VycjsKKyAgICByZXR1cm4gbm9FcnI7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogLy8gTW91c2VEcmFnZ2VkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
Ci1zdGF0aWMgT1NTdGF0dXMKLU1vdXNlV2hlZWxNb3ZlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2
ZW50UmVmIGluRXZlbnQgKQorc3RhdGljIE9TU3RhdHVzIE1vdXNlV2hlZWxNb3ZlZChISVdlYlZp
ZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkKIHsKICAgICBOU0V2ZW50KiBraXRFdmVudCA9
IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQoaW5FdmVudCk7CiAKQEAgLTYzOCwyMyArNTk1
LDIyIEBAIE1vdXNlV2hlZWxNb3ZlZCggSElXZWJWaWV3KiBpblZpZXcsIEV2ZW4KIAogICAgIFtr
aXRFdmVudCByZWxlYXNlXTsKIAotCXJldHVybiBub0VycjsKKyAgICByZXR1cm4gbm9FcnI7CiB9
CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ29udGV4dE1lbnVDbGljawogLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9TU3RhdHVzCi1Db250ZXh0TWVu
dUNsaWNrKCBISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCApCitzdGF0aWMgT1NT
dGF0dXMgQ29udGV4dE1lbnVDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVu
dCkKIHsKICAgICBOU1ZpZXcgKndlYlZpZXcgPSBpblZpZXctPmZXZWJWaWV3OwogICAgIE5TV2lu
ZG93ICp3aW5kb3cgPSBbd2ViVmlldyB3aW5kb3ddOwogCiAgICAgLy8gR2V0IHRoZSBwb2ludCBv
dXQgb2YgdGhlIGV2ZW50LgogICAgIEhJUG9pbnQgcG9pbnQ7Ci0gICAgR2V0RXZlbnRQYXJhbWV0
ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgTlVMTCwg
c2l6ZW9mKHBvaW50KSwgTlVMTCwgJnBvaW50KTsKLSAgICBISVZpZXdDb252ZXJ0UG9pbnQoJnBv
aW50LCBpblZpZXctPmZWaWV3UmVmLCBOVUxMKTsKKyAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2
ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVISVBvaW50LCBudWxscHRyLCBzaXpl
b2YocG9pbnQpLCBudWxscHRyLCAmcG9pbnQpOworICAgIEhJVmlld0NvbnZlcnRQb2ludCgmcG9p
bnQsIGluVmlldy0+ZlZpZXdSZWYsIG51bGxwdHIpOwogICAgIAogICAgIC8vIEZsaXAgdGhlIFkg
Y29vcmRpbmF0ZSwgc2luY2UgQ2FyYm9uIGlzIGZsaXBwZWQgcmVsYXRpdmUgdG8gdGhlIEFwcEtp
dC4KICAgICBOU1BvaW50IGxvY2F0aW9uID0gTlNNYWtlUG9pbnQocG9pbnQueCwgW3dpbmRvdyBm
cmFtZV0uc2l6ZS5oZWlnaHQgLSBwb2ludC55KTsKQEAgLTY3NywyOSArNjMzLDIxIEBAIENvbnRl
eHRNZW51Q2xpY2soIEhJV2ViVmlldyogaW5WaWV3LCBFdmUKIC8vIEdldEtpbmQKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBDb250cm9sS2luZAotR2V0S2luZCgpCitz
dGF0aWMgQ29udHJvbEtpbmQgR2V0S2luZCgpCiB7Ci0JY29uc3QgQ29udHJvbEtpbmQga015S2lu
ZCA9IHsgJ2FwcGwnLCAnd2J2dycgfTsKLQkKLQlyZXR1cm4ga015S2luZDsKKyAgICBjb25zdCBD
b250cm9sS2luZCBrTXlLaW5kID0geyAnYXBwbCcsICd3YnZ3JyB9OworICAgIAorICAgIHJldHVy
biBrTXlLaW5kOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEJvdW5kc0No
YW5nZWQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1Cb3Vu
ZHNDaGFuZ2VkKAotCUhJV2ViVmlldyoJCQlpblZpZXcsCi0JVUludDMyCQkJCWluT3B0aW9ucywK
LQljb25zdCBISVJlY3QqCQlpbk9yaWdpbmFsQm91bmRzLAotCWNvbnN0IEhJUmVjdCoJCWluQ3Vy
cmVudEJvdW5kcyApCi17Ci0JaWYgKCBpblZpZXctPmZXZWJWaWV3ICkKLQl7Ci0JCVN5bmNGcmFt
ZSggaW5WaWV3ICk7Ci0JfQorc3RhdGljIHZvaWQgQm91bmRzQ2hhbmdlZChISVdlYlZpZXcqIGlu
VmlldywgVUludDMyIGluT3B0aW9ucywgY29uc3QgSElSZWN0KiBpbk9yaWdpbmFsQm91bmRzLCBj
b25zdCBISVJlY3QqIGluQ3VycmVudEJvdW5kcykKK3sKKyAgICBpZiAoaW5WaWV3LT5mV2ViVmll
dykKKyAgICAgICAgU3luY0ZyYW1lKGluVmlldyk7CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtNzA3LDE3ICs2NTUsMTMgQEAgQm91bmRzQ2hhbmdlZCgKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogLy8KIHN0YXRpYyB2b2lkCi1Pd25pbmdXaW5kb3dDaGFuZ2VkKAot
CUhJV2ViVmlldyoJCQl2aWV3LAotCVdpbmRvd1JlZgkJCW9sZFdpbmRvdywKLQlXaW5kb3dSZWYJ
CQluZXdXaW5kb3cgKQorT3duaW5nV2luZG93Q2hhbmdlZChISVdlYlZpZXcqIHZpZXcsIFdpbmRv
d1JlZiBvbGRXaW5kb3csIFdpbmRvd1JlZiBuZXdXaW5kb3cpCiB7Ci0gICAgaWYgKCBuZXdXaW5k
b3cgKXsKLSAgICAgICAgV2luZG93QXR0cmlidXRlcwlhdHRyczsKKyAgICBpZiAobmV3V2luZG93
KSB7CisgICAgICAgIFdpbmRvd0F0dHJpYnV0ZXMgYXR0cnM7CiAgICAgICAgIAotICAgICAgICBP
U1N0YXR1cyBlcnIgPSBHZXRXaW5kb3dQcm9wZXJ0eShuZXdXaW5kb3csIE5TQXBwS2l0UHJvcGVy
dHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiks
IE5VTEwsICZ2aWV3LT5mS2l0V2luZG93KTsKLSAgICAgICAgaWYgKCBlcnIgIT0gbm9FcnIgKQot
ICAgICAgICB7CisgICAgICAgIE9TU3RhdHVzIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KG5ld1dp
bmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcs
IHNpemVvZihOU1dpbmRvdyAqKSwgbnVsbHB0ciwgJnZpZXctPmZLaXRXaW5kb3cpOworICAgICAg
ICBpZiAoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgICAgICBjb25zdCBFdmVudFR5cGVTcGVjIGtX
aW5kb3dFdmVudHNbXSA9IHsKICAgICAgICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVu
dFdpbmRvd0Nsb3NlZCB9LAogICAgICAgICAgICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRN
b3VzZU1vdmVkIH0sCkBAIC03MzMsMTUxICs2NzcsMTI0IEBAIE93bmluZ1dpbmRvd0NoYW5nZWQo
CiAgICAgICAgICAgICB2aWV3LT5mS2l0V2luZG93ID0gW1tDYXJib25XaW5kb3dBZGFwdGVyIGFs
bG9jXSBpbml0V2l0aENhcmJvbldpbmRvd1JlZjogbmV3V2luZG93IHRha2luZ093bmVyc2hpcDog
Tk8gZGlzYWJsZU9yZGVyaW5nOk5PIGNhcmJvbjpZRVNdOwogICAgICAgICAgICAgU2V0V2luZG93
UHJvcGVydHkobmV3V2luZG93LCBOU0FwcEtpdFByb3BlcnR5Q3JlYXRvciwgTlNDYXJib25XaW5k
b3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5TV2luZG93ICopLCAmdmlldy0+ZktpdFdpbmRvdyk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEluc3RhbGxXaW5kb3dFdmVudEhhbmRsZXIoIG5ld1dp
bmRvdywgV2luZG93SGFuZGxlciwgR2V0RXZlbnRUeXBlQ291bnQoIGtXaW5kb3dFdmVudHMgKSwg
a1dpbmRvd0V2ZW50cywgbmV3V2luZG93LCBOVUxMICk7CisgICAgICAgICAgICBJbnN0YWxsV2lu
ZG93RXZlbnRIYW5kbGVyKG5ld1dpbmRvdywgV2luZG93SGFuZGxlciwgR2V0RXZlbnRUeXBlQ291
bnQoa1dpbmRvd0V2ZW50cyksIGtXaW5kb3dFdmVudHMsIG5ld1dpbmRvdywgbnVsbHB0cik7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFtbdmlldy0+ZktpdFdpbmRvdyBjb250ZW50Vmll
d10gYWRkU3Vidmlldzp2aWV3LT5mV2ViVmlld107CiAgICAgICAgIAotICAgICAgICBHZXRXaW5k
b3dBdHRyaWJ1dGVzKCBuZXdXaW5kb3csICZhdHRycyApOwotICAgICAgICB2aWV3LT5mSXNDb21w
b3NpdGVkID0gKCAoIGF0dHJzICYga1dpbmRvd0NvbXBvc2l0aW5nQXR0cmlidXRlICkgIT0gMCAp
OworICAgICAgICBHZXRXaW5kb3dBdHRyaWJ1dGVzKG5ld1dpbmRvdywgJmF0dHJzKTsKKyAgICAg
ICAgdmlldy0+ZklzQ29tcG9zaXRlZCA9IGF0dHJzICYga1dpbmRvd0NvbXBvc2l0aW5nQXR0cmli
dXRlOwogICAgICAgICAKLSAgICAgICAgU3luY0ZyYW1lKCB2aWV3ICk7ICAgICAgICAKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKKyAgICAgICAgU3luY0ZyYW1lKHZpZXcpOyAgICAgICAgCisgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gQmUgc3VyZSB0byBkZXRhY2ggdGhlIGNvY29hIHZpZXcsIHRv
by4KLSAgICAgICAgaWYgKCB2aWV3LT5mV2ViVmlldyApCisgICAgICAgIGlmICh2aWV3LT5mV2Vi
VmlldykKICAgICAgICAgICAgIFt2aWV3LT5mV2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
ICAgICAgICAgCi0gICAgICAgIHZpZXctPmZLaXRXaW5kb3cgPSBOVUxMOyAvLyBicmVhayB0aGUg
dGllcyB0aGF0IGJpbmQKKyAgICAgICAgdmlldy0+ZktpdFdpbmRvdyA9IG51bGxwdHI7IC8vIGJy
ZWFrIHRoZSB0aWVzIHRoYXQgYmluZAogICAgIH0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLwlXaW5kb3dIYW5kbGVyCisvLyAgICBXaW5kb3dIYW5kbGVyCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCVJlZGlyZWN0IG1vdXNlIGV2ZW50cyB0byB0aGUg
dmlld3MgYmVuZWF0aCB0aGVtLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBXZWJLaXQgdG8gd29yawot
Ly8gCXByb3Blcmx5LiBXZSBpbnN0YWxsIGl0IG9uY2UgcGVyIHdpbmRvdy4gV2UgYWxzbyB0YXAg
aW50byB3aW5kb3cgY2xvc2UgdG8gcmVsZWFzZQotLy8JdGhlIE5TV2luZG93IHRoYXQgc2hhZG93
cyBvdXIgQ2FyYm9uIHdpbmRvdy4KLS8vCi1zdGF0aWMgT1NTdGF0dXMKLVdpbmRvd0hhbmRsZXIo
IEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBpbkV2ZW50LCB2b2lkKiBp
blVzZXJEYXRhICkKLXsKLQlXaW5kb3dSZWYJd2luZG93ID0gKFdpbmRvd1JlZilpblVzZXJEYXRh
OwotCU9TU3RhdHVzCXJlc3VsdCA9IGV2ZW50Tm90SGFuZGxlZEVycjsKKy8vICAgIFJlZGlyZWN0
IG1vdXNlIGV2ZW50cyB0byB0aGUgdmlld3MgYmVuZWF0aCB0aGVtLiBUaGlzIGlzIHJlcXVpcmVk
IGZvciBXZWJLaXQgdG8gd29yaworLy8gICAgcHJvcGVybHkuIFdlIGluc3RhbGwgaXQgb25jZSBw
ZXIgd2luZG93LiBXZSBhbHNvIHRhcCBpbnRvIHdpbmRvdyBjbG9zZSB0byByZWxlYXNlCisvLyAg
ICB0aGUgTlNXaW5kb3cgdGhhdCBzaGFkb3dzIG91ciBDYXJib24gd2luZG93LgorLy8KK3N0YXRp
YyBPU1N0YXR1cyBXaW5kb3dIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBF
dmVudFJlZiBpbkV2ZW50LCB2b2lkKiBpblVzZXJEYXRhKQoreworICAgIFdpbmRvd1JlZiB3aW5k
b3cgPSAoV2luZG93UmVmKWluVXNlckRhdGE7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gZXZlbnRO
b3RIYW5kbGVkRXJyOworCisgICAgTlNXaW5kb3cqIGtpdFdpbmRvdzsKKyAgICBPU1N0YXR1cyBl
cnIgPSBub0VycjsKKyAgICBOU0V2ZW50KiBraXRFdmVudDsKKworICAgIHN3aXRjaCAoR2V0RXZl
bnRDbGFzcyhpbkV2ZW50KSkgeworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgorICAgICAg
ICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAgICAgICBjYXNlIGtFdmVudENv
bnRyb2xDbGljazoKKyAgICAgICAgICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmtpdFdpbmRvdzsK
IAotICAgIHN3aXRjaCggR2V0RXZlbnRDbGFzcyggaW5FdmVudCApICkKLSAgICB7Ci0gICAgCWNh
c2Uga0V2ZW50Q2xhc3NDb250cm9sOgotICAgICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNo
KCBHZXRFdmVudEtpbmQoIGluRXZlbnQgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBrRXZlbnRDb250cm9sQ2xpY2s6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmtpdFdpbmRvdzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE9TU3RhdHVzIGVycjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkoIHdpbmRv
dywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNp
emVvZihOU1dpbmRvdyAqKSwgTlVMTCwgJmtpdFdpbmRvdyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYmUgb3V0c2lkZSB0aGUg
SElXZWJWaWV3LCByZWxpbnF1aXNoIGZvY3VzLgotICAgICAgICAgICAgICAgICAgICAgICAgW2tp
dFdpbmRvdyByZWxpbnF1aXNoRm9jdXNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KHdpbmRvdywgTlNBcHBLaXRQcm9wZXJ0
eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRvdyAqKSwg
bnVsbHB0ciwgJmtpdFdpbmRvdyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBX
ZSBtdXN0IGJlIG91dHNpZGUgdGhlIEhJV2ViVmlldywgcmVsaW5xdWlzaCBmb2N1cy4KKyAgICAg
ICAgICAgIFtraXRXaW5kb3cgcmVsaW5xdWlzaEZvY3VzXTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgCWNhc2Uga0V2ZW50
Q2xhc3NLZXlib2FyZDoKLSAgICAJCXsKLSAgICAgICAgICAgICAgICBOU1dpbmRvdyoJCWtpdFdp
bmRvdzsKLSAgICAgICAgICAgICAgICBPU1N0YXR1cwkJZXJyOwotICAgCQkJCU5TRXZlbnQqCQlr
aXRFdmVudDsKLSAgIAkJCQkKLSAgIAkJCQkvLyBpZiB0aGUgZmlyc3QgcmVzcG9uZGVyIGluIHRo
ZSBraXQgd2luZG93IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZQotICAgCQkJCS8vIHdpbmRv
dywgd2UgYXNzdW1lIGEgc3VidmlldyBvZiB0aGUgd2VidmlldyBpcyBmb2N1c2VkLiB3ZSBtdXN0
IHNlbmQKLSAgIAkJCQkvLyB0aGUgZXZlbnQgdG8gdGhlIHdpbmRvdyBzbyB0aGF0IGl0IGdvZXMg
dGhyb3VnaCB0aGUga2l0J3Mgbm9ybWFsIFRTTQotICAgCQkJCS8vIGxvZ2ljLCBhbmQgLS0gbW9y
ZSBpbXBvcnRhbnRseSAtLSBhbGxvd3MgYW55IGRlbGVnYXRlcyBhc3NvY2lhdGVkCi0gICAJCQkJ
Ly8gd2l0aCB0aGUgZmlyc3QgcmVzcG9uZGVyIHRvIGhhdmUgYSBjaGFuY2UgYXQgdGhlIGV2ZW50
LgotICAgCQkJCQotCQkJCWVyciA9IEdldFdpbmRvd1Byb3BlcnR5KCB3aW5kb3csIE5TQXBwS2l0
UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5k
b3cgKiksIE5VTEwsICZraXRXaW5kb3cpOwotCQkJCWlmICggZXJyID09IG5vRXJyICkKLQkJCQl7
Ci0JCQkJCU5TUmVzcG9uZGVyKiByZXNwb25kZXIgPSBba2l0V2luZG93IGZpcnN0UmVzcG9uZGVy
XTsKLQkJCQkJaWYgKCByZXNwb25kZXIgIT0ga2l0V2luZG93ICkKLQkJCQkJewotICAgICAgICAg
ICAgICAgICAgICAgICAga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGlu
RXZlbnQpOwotCQkJCQkJCi0JCQkJCQlba2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0J
CQkJCQlba2l0RXZlbnQgcmVsZWFzZV07Ci0JCQkJCQkKLQkJCQkJCXJlc3VsdCA9IG5vRXJyOwot
CQkJCQl9Ci0JCQkJfQotICAgIAkJfQotICAgIAkJYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZl
bnRDbGFzc1dpbmRvdzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOU1dpbmRvdyoJ
a2l0V2luZG93OwotICAgICAgICAgICAgICAgIE9TU3RhdHVzCWVycjsKKyAgICBjYXNlIGtFdmVu
dENsYXNzS2V5Ym9hcmQ6CisgICAgICAgIC8vIGlmIHRoZSBmaXJzdCByZXNwb25kZXIgaW4gdGhl
IGtpdCB3aW5kb3cgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlCisgICAgICAgIC8vIHdpbmRv
dywgd2UgYXNzdW1lIGEgc3VidmlldyBvZiB0aGUgd2VidmlldyBpcyBmb2N1c2VkLiB3ZSBtdXN0
IHNlbmQKKyAgICAgICAgLy8gdGhlIGV2ZW50IHRvIHRoZSB3aW5kb3cgc28gdGhhdCBpdCBnb2Vz
IHRocm91Z2ggdGhlIGtpdCdzIG5vcm1hbCBUU00KKyAgICAgICAgLy8gbG9naWMsIGFuZCAtLSBt
b3JlIGltcG9ydGFudGx5IC0tIGFsbG93cyBhbnkgZGVsZWdhdGVzIGFzc29jaWF0ZWQKKyAgICAg
ICAgLy8gd2l0aCB0aGUgZmlyc3QgcmVzcG9uZGVyIHRvIGhhdmUgYSBjaGFuY2UgYXQgdGhlIGV2
ZW50LgorCisgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KHdpbmRvdywgTlNBcHBLaXRQ
cm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRv
dyAqKSwgbnVsbHB0ciwgJmtpdFdpbmRvdyk7CisgICAgICAgIGlmIChlcnIgPT0gbm9FcnIpIHsK
KyAgICAgICAgICAgIE5TUmVzcG9uZGVyKiByZXNwb25kZXIgPSBba2l0V2luZG93IGZpcnN0UmVz
cG9uZGVyXTsKKyAgICAgICAgICAgIGlmIChyZXNwb25kZXIgIT0ga2l0V2luZG93KSB7CisgICAg
ICAgICAgICAgICAga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGluRXZl
bnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFtraXRXaW5kb3cgc2VuZEV2
ZW50OmtpdEV2ZW50XTsKKyAgICAgICAgICAgICAgICBba2l0RXZlbnQgcmVsZWFzZV07CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkoIHdp
bmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcs
IHNpemVvZihOU1dpbmRvdyAqKSwgTlVMTCwgJmtpdFdpbmRvdyk7Ci0gICAgICAgICAgICAgICAg
aWYgKCBlcnIgPT0gbm9FcnIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgW2tpdFdpbmRvdyBfcmVtb3ZlV2luZG93UmVmXTsKLSAgICAgICAgICAgICAgICAgICAgW2tp
dFdpbmRvdyBjbG9zZV07Ci0gICAgICAgICAgICAgICAgfQotCQogICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG5vRXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtFdmVudENsYXNzV2luZG93OgogICAgICAg
ICAKLSAgICAgICAgY2FzZSBrRXZlbnRDbGFzc01vdXNlOgotICAgICAgICAgICAgc3dpdGNoIChH
ZXRFdmVudEtpbmQoaW5FdmVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBrRXZlbnRNb3VzZU1vdmVkOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBQb2ludCB3aGVyZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEV2ZW50
UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtTW91c2VMb2NhdGlvbiwgdHlwZVFEUG9pbnQs
IE5VTEwsIHNpemVvZihQb2ludCksIE5VTEwsICZ3aGVyZSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFdpbmRvd1JlZiB0ZW1wOwotICAgICAgICAgICAgICAgICAgICAgICAgRmluZFdpbmRv
dyh3aGVyZSwgJnRlbXApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gd2lu
ZG93KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlY3QgYm91bmRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFdpbmRvd0Jv
dW5kcyh3aW5kb3csIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZib3VuZHMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdoZXJlLmggLT0gYm91bmRzLmxlZnQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hlcmUudiAtPSBib3VuZHMudG9wOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93UmVmLCB0
eXBlV2luZG93UmVmLCBzaXplb2YoV2luZG93UmVmKSwgJndpbmRvdyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5k
b3dNb3VzZUxvY2F0aW9uLCB0eXBlUURQb2ludCwgc2l6ZW9mKFBvaW50KSwgJndoZXJlKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TU3RhdHVzIGVyciA9IG5vRXJyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEhJVmlld1JlZiB2aWV3ID0gTlVMTDsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVyciA9IEhJVmlld0dldFZpZXdGb3JNb3VzZUV2ZW50KEhJVmll
d0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgdmlldyAmJiBISU9iamVjdElzT2ZDbGFzcygoSElP
YmplY3RSZWYpdmlldywga0hJV2ViVmlld0NsYXNzSUQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0V2l0aE9wdGlvbnMoaW5F
dmVudCwgSElPYmplY3RHZXRFdmVudFRhcmdldCgoSElPYmplY3RSZWYpdmlldyksIGtFdmVudFRh
cmdldERvbnRQcm9wYWdhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGNhc2Uga0V2ZW50TW91c2VVcDoKLSAgICAgICAgICAgICAgICBj
YXNlIGtFdmVudE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgICAgICAgICBjYXNlIGtFdmVudE1vdXNl
V2hlZWxNb3ZlZDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgT1NTdGF0dXMgZXJyID0gbm9FcnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBISVZpZXdS
ZWYgdmlldyA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IEhJVmlld0dl
dFZpZXdGb3JNb3VzZUV2ZW50KEhJVmlld0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBub0VyciAmJiB2aWV3ICYmIEhJ
T2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3LCBrSElXZWJWaWV3Q2xhc3NJRCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VuZEV2ZW50VG9FdmVudFRhcmdl
dFdpdGhPcHRpb25zKGluRXZlbnQsIEhJT2JqZWN0R2V0RXZlbnRUYXJnZXQoKEhJT2JqZWN0UmVm
KXZpZXcpLCBrRXZlbnRUYXJnZXREb250UHJvcGFnYXRlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBlcnIgPSBHZXRXaW5kb3dQ
cm9wZXJ0eSh3aW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1By
b3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiksIG51bGxwdHIsICZraXRXaW5kb3cpOworICAg
ICAgICBpZiAoZXJyID09IG5vRXJyKSB7CisgICAgICAgICAgICBba2l0V2luZG93IF9yZW1vdmVX
aW5kb3dSZWZdOworICAgICAgICAgICAgW2tpdFdpbmRvdyBjbG9zZV07CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrRXZlbnRD
bGFzc01vdXNlOgorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAg
ICAgICBjYXNlIGtFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICBQb2ludCB3aGVyZTsKKyAg
ICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtTW91c2VMb2Nh
dGlvbiwgdHlwZVFEUG9pbnQsIG51bGxwdHIsIHNpemVvZihQb2ludCksIG51bGxwdHIsICZ3aGVy
ZSk7CisKKyAgICAgICAgICAgIFdpbmRvd1JlZiB0ZW1wOworICAgICAgICAgICAgRmluZFdpbmRv
dyh3aGVyZSwgJnRlbXApOworICAgICAgICAgICAgaWYgKHRlbXAgPT0gd2luZG93KSB7CisgICAg
ICAgICAgICAgICAgUmVjdCBib3VuZHM7CisgICAgICAgICAgICAgICAgR2V0V2luZG93Qm91bmRz
KHdpbmRvdywga1dpbmRvd1N0cnVjdHVyZVJnbiwgJmJvdW5kcyk7CisgICAgICAgICAgICAgICAg
d2hlcmUuaCAtPSBib3VuZHMubGVmdDsKKyAgICAgICAgICAgICAgICB3aGVyZS52IC09IGJvdW5k
cy50b3A7CisgICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50
UGFyYW1XaW5kb3dSZWYsIHR5cGVXaW5kb3dSZWYsIHNpemVvZihXaW5kb3dSZWYpLCAmd2luZG93
KTsKKyAgICAgICAgICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bVdpbmRvd01vdXNlTG9jYXRpb24sIHR5cGVRRFBvaW50LCBzaXplb2YoUG9pbnQpLCAmd2hlcmUp
OworCisgICAgICAgICAgICAgICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOworCisgICAgICAg
ICAgICAgICAgZXJyID0gSElWaWV3R2V0Vmlld0Zvck1vdXNlRXZlbnQoSElWaWV3R2V0Um9vdCh3
aW5kb3cpLCBpbkV2ZW50LCAmdmlldyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBub0Vy
ciAmJiB2aWV3ICYmIEhJT2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3LCBrSElXZWJW
aWV3Q2xhc3NJRCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNlbmRFdmVudFRvRXZl
bnRUYXJnZXRXaXRoT3B0aW9ucyhpbkV2ZW50LCBISU9iamVjdEdldEV2ZW50VGFyZ2V0KChISU9i
amVjdFJlZil2aWV3KSwga0V2ZW50VGFyZ2V0RG9udFByb3BhZ2F0ZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZl
bnRNb3VzZVVwOgorICAgICAgICBjYXNlIGtFdmVudE1vdXNlRHJhZ2dlZDoKKyAgICAgICAgY2Fz
ZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6CisgICAgICAgICAgICBISVZpZXdSZWYgdmlldyA9IG51
bGxwdHI7CisKKyAgICAgICAgICAgIGVyciA9IEhJVmlld0dldFZpZXdGb3JNb3VzZUV2ZW50KEhJ
Vmlld0dldFJvb3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcpOworICAgICAgICAgICAgaWYgKGVy
ciA9PSBub0VyciAmJiB2aWV3ICYmIEhJT2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3
LCBrSElXZWJWaWV3Q2xhc3NJRCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VuZEV2ZW50
VG9FdmVudFRhcmdldFdpdGhPcHRpb25zKGluRXZlbnQsIEhJT2JqZWN0R2V0RXZlbnRUYXJnZXQo
KEhJT2JqZWN0UmVmKXZpZXcpLCBrRXZlbnRUYXJnZXREb250UHJvcGFnYXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotCXJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC04ODUsNTcgKzgwMiw1MiBAQCBX
aW5kb3dIYW5kbGVyKCBFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsCiAvLyBTeW5jRnJhbWUKIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1TeW5jRnJhbWUoIEhJ
V2ViVmlldyogaW5WaWV3ICkKK3N0YXRpYyB2b2lkIFN5bmNGcmFtZShISVdlYlZpZXcqIGluVmll
dykKIHsKLQlISVZpZXdSZWYJcGFyZW50ID0gSElWaWV3R2V0U3VwZXJ2aWV3KCBpblZpZXctPmZW
aWV3UmVmICk7Ci0JCi0JaWYgKCBwYXJlbnQgKQotCXsKLSAgICAgICAgaWYgKCBpblZpZXctPmZJ
c0NvbXBvc2l0ZWQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBISVJlY3QJCWZyYW1lOwotICAg
ICAgICAgICAgSElSZWN0CQlwYXJlbnRCb3VuZHM7Ci0gICAgICAgICAgICBOU1BvaW50CQlvcmln
aW47CisgICAgSElWaWV3UmVmIHBhcmVudCA9IEhJVmlld0dldFN1cGVydmlldyhpblZpZXctPmZW
aWV3UmVmKTsKKyAgICAKKyAgICBpZiAocGFyZW50KSB7CisgICAgICAgIGlmIChpblZpZXctPmZJ
c0NvbXBvc2l0ZWQpIHsKKyAgICAgICAgICAgIEhJUmVjdCBmcmFtZTsKKyAgICAgICAgICAgIEhJ
UmVjdCBwYXJlbnRCb3VuZHM7CisgICAgICAgICAgICBOU1BvaW50IG9yaWdpbjsKIAotICAgICAg
ICAgICAgSElWaWV3R2V0RnJhbWUoIGluVmlldy0+ZlZpZXdSZWYsICZmcmFtZSApOwotICAgICAg
ICAgICAgSElWaWV3R2V0Qm91bmRzKCBwYXJlbnQsICZwYXJlbnRCb3VuZHMgKTsKKyAgICAgICAg
ICAgIEhJVmlld0dldEZyYW1lKGluVmlldy0+ZlZpZXdSZWYsICZmcmFtZSk7CisgICAgICAgICAg
ICBISVZpZXdHZXRCb3VuZHMocGFyZW50LCAmcGFyZW50Qm91bmRzKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgb3JpZ2luLnggPSBmcmFtZS5vcmlnaW4ueDsKLSAgICAgICAgICAgIG9yaWdp
bi55ID0gcGFyZW50Qm91bmRzLnNpemUuaGVpZ2h0IC0gQ0dSZWN0R2V0TWF4WSggZnJhbWUgKTsK
LS8vICAgIHByaW50ZiggInN5bmNpbmcgdG8gKCVnICVnKSAoJWcgJWcpXG4iLCBvcmlnaW4ueCwg
b3JpZ2luLnksCi0vLyAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVp
Z2h0ICk7CisgICAgICAgICAgICBvcmlnaW4ueSA9IHBhcmVudEJvdW5kcy5zaXplLmhlaWdodCAt
IENHUmVjdEdldE1heFkoZnJhbWUpOworLy8gICAgcHJpbnRmKCJzeW5jaW5nIHRvICglZyAlZykg
KCVnICVnKVxuIiwgb3JpZ2luLngsIG9yaWdpbi55LAorLy8gICAgICAgICAgICBmcmFtZS5zaXpl
LndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiAgICAgICAgICAgICBbaW5WaWV3LT5mV2ViVmll
dyBzZXRGcmFtZU9yaWdpbjogb3JpZ2luXTsKICAgICAgICAgICAgIFtpblZpZXctPmZXZWJWaWV3
IHNldEZyYW1lU2l6ZTogKihOU1NpemUqKSZmcmFtZS5zaXplXTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYWZQdHIJCQlwb3J0ID0gR2V0V2luZG93
UG9ydCggR2V0Q29udHJvbE93bmVyKCBpblZpZXctPmZWaWV3UmVmICkgKTsKLSAgICAgICAgICAg
IFBpeE1hcEhhbmRsZQlwb3J0UGl4ID0gR2V0UG9ydFBpeE1hcCggcG9ydCApOwotICAgICAgICAg
ICAgUmVjdAkJCWJvdW5kczsKLSAgICAgICAgICAgIEhJUmVjdAkJCXJvb3RGcmFtZTsKLSAgICAg
ICAgICAgIEhJUmVjdAkJCWZyYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR3Jh
ZlB0ciBwb3J0ID0gR2V0V2luZG93UG9ydChHZXRDb250cm9sT3duZXIoaW5WaWV3LT5mVmlld1Jl
ZikpOworICAgICAgICAgICAgUGl4TWFwSGFuZGxlIHBvcnRQaXggPSBHZXRQb3J0UGl4TWFwKHBv
cnQpOworICAgICAgICAgICAgUmVjdCBib3VuZHM7CisgICAgICAgICAgICBISVJlY3Qgcm9vdEZy
YW1lOworICAgICAgICAgICAgSElSZWN0IGZyYW1lOwogCi0gICAgICAgICAgICBHZXRDb250cm9s
Qm91bmRzKCBpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzICk7Ci0gICAgICAgICAgICBPZmZzZXRS
ZWN0KCAmYm91bmRzLCAtKCoqcG9ydFBpeCkuYm91bmRzLmxlZnQsIC0oKipwb3J0UGl4KS5ib3Vu
ZHMudG9wICk7CisgICAgICAgICAgICBHZXRDb250cm9sQm91bmRzKGluVmlldy0+ZlZpZXdSZWYs
ICZib3VuZHMpOworICAgICAgICAgICAgT2Zmc2V0UmVjdCgmYm91bmRzLCAtKCoqcG9ydFBpeCku
Ym91bmRzLmxlZnQsIC0oKipwb3J0UGl4KS5ib3VuZHMudG9wKTsKIAotLy8gICAgICAgICAgICBw
cmludGYoICJjb250cm9sIGxpdmVzIGF0ICVkICVkICVkICVkIGluIHdpbmRvdy1jb29yZHNcbiIs
IGJvdW5kcy50b3AsIGJvdW5kcy5sZWZ0LAotLy8gICAgICAgICAgICAgICAgYm91bmRzLmJvdHRv
bSwgYm91bmRzLnJpZ2h0ICk7CisvLyAgICAgICAgICAgIHByaW50ZigiY29udHJvbCBsaXZlcyBh
dCAlZCAlZCAlZCAlZCBpbiB3aW5kb3ctY29vcmRzXG4iLCBib3VuZHMudG9wLCBib3VuZHMubGVm
dCwKKy8vICAgICAgICAgICAgICAgIGJvdW5kcy5ib3R0b20sIGJvdW5kcy5yaWdodCk7CiAgIAot
ICAgICAgICAgICAgSElWaWV3R2V0RnJhbWUoIEhJVmlld0dldFJvb3QoIEdldENvbnRyb2xPd25l
ciggaW5WaWV3LT5mVmlld1JlZiApICksICZyb290RnJhbWUgKTsKKyAgICAgICAgICAgIEhJVmll
d0dldEZyYW1lKEhJVmlld0dldFJvb3QoR2V0Q29udHJvbE93bmVyKGluVmlldy0+ZlZpZXdSZWYp
KSwgJnJvb3RGcmFtZSk7CiAKICAgICAgICAgICAgIGZyYW1lLm9yaWdpbi54ID0gYm91bmRzLmxl
ZnQ7CiAgICAgICAgICAgICBmcmFtZS5vcmlnaW4ueSA9IHJvb3RGcmFtZS5zaXplLmhlaWdodCAt
IGJvdW5kcy5ib3R0b207CiAgICAgICAgICAgICBmcmFtZS5zaXplLndpZHRoID0gYm91bmRzLnJp
Z2h0IC0gYm91bmRzLmxlZnQ7CiAgICAgICAgICAgICBmcmFtZS5zaXplLmhlaWdodCA9IGJvdW5k
cy5ib3R0b20gLSBib3VuZHMudG9wOwogCi0vLyAgICAgICAgICAgIHByaW50ZiggIiAgIGJlZm9y
ZSBmcmFtZSBjb252ZXJ0ICglZyAlZykgKCVnICVnKVxuIiwgZnJhbWUub3JpZ2luLngsIGZyYW1l
Lm9yaWdpbi55LAotLy8gICAgICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6
ZS5oZWlnaHQgKTsKKy8vICAgICAgICAgICAgcHJpbnRmKCIgICBiZWZvcmUgZnJhbWUgY29udmVy
dCAoJWcgJWcpICglZyAlZylcbiIsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwKKy8v
ICAgICAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgW2luVmlldy0+ZldlYlZpZXcgY29udmVydFJlY3Q6KihO
U1JlY3QqKSZmcmFtZSBmcm9tVmlldzpuaWxdOwogCi0vLyAgICAgICAgICAgIHByaW50ZiggIiAg
IG1vdmluZyB3ZWIgdmlldyB0byAoJWcgJWcpICglZyAlZylcbiIsIGZyYW1lLm9yaWdpbi54LCBm
cmFtZS5vcmlnaW4ueSwKLS8vICAgICAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZyYW1l
LnNpemUuaGVpZ2h0ICk7CisvLyAgICAgICAgICAgIHByaW50ZigiICAgbW92aW5nIHdlYiB2aWV3
IHRvICglZyAlZykgKCVnICVnKVxuIiwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LAor
Ly8gICAgICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwog
CiAgICAgICAgICAgICBbaW5WaWV3LT5mV2ViVmlldyBzZXRGcmFtZU9yaWdpbjogKihOU1BvaW50
KikmZnJhbWUub3JpZ2luXTsKICAgICAgICAgICAgIFtpblZpZXctPmZXZWJWaWV3IHNldEZyYW1l
U2l6ZTogKihOU1NpemUqKSZmcmFtZS5zaXplXTsKQEAgLTk0NywxODAgKzg1OSwxNDUgQEAgU3lu
Y0ZyYW1lKCBISVdlYlZpZXcqIGluVmlldyApCiAvLyBTZXRGb2N1c1BhcnQKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyBPU1N0YXR1cwotU2V0Rm9jdXNQYXJ0KAotCUhJ
V2ViVmlldyoJCQkJdmlldywKLQlDb250cm9sUGFydENvZGUgCQlkZXNpcmVkRm9jdXMsCi0JUmdu
SGFuZGxlIAkJCQlpbnZhbGlkUmduLAotCUJvb2xlYW4gCQkJCWZvY3VzRXZlcnl0aGluZywKLQlD
b250cm9sUGFydENvZGUqIAkJYWN0dWFsRm9jdXMgKQorc3RhdGljIE9TU3RhdHVzIFNldEZvY3Vz
UGFydChISVdlYlZpZXcqIHZpZXcsIENvbnRyb2xQYXJ0Q29kZSBkZXNpcmVkRm9jdXMsIFJnbkhh
bmRsZSBpbnZhbGlkUmduLCBCb29sZWFuIGZvY3VzRXZlcnl0aGluZywgQ29udHJvbFBhcnRDb2Rl
KiBhY3R1YWxGb2N1cykKIHsKLSAgICBOU1ZpZXcgKglmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVy
VmlldzsKLSAgICBTSW50MzIgCQlwYXJ0Q29kZVRvUmV0dXJuOworICAgIE5TVmlldyAqZnJlc2hs
eU1hZGVGaXJzdFJlc3BvbmRlclZpZXc7CisgICAgU0ludDMyIHBhcnRDb2RlVG9SZXR1cm47CiAK
ICAgICAvLyBEbyB3aGF0IENhcmJvbiBpcyB0ZWxsaW5nIHVzIHRvIGRvLgotICAgIGlmICggZGVz
aXJlZEZvY3VzID09IGtDb250cm9sRm9jdXNOb1BhcnQgKQotCXsKKyAgICBpZiAoZGVzaXJlZEZv
Y3VzID09IGtDb250cm9sRm9jdXNOb1BhcnQpIHsKICAgICAgICAgLy8gUmVsaW5xdWlzaCB0aGUg
a2V5Ym9hcmQgZm9jdXMuCi0gICAgICAgIFJlbGlucXVpc2hGb2N1cyggdmlldywgdHJ1ZSApOyAv
LyhhdXRvZGlzcGxheSA/IFlFUyA6IE5PKSk7CisgICAgICAgIFJlbGlucXVpc2hGb2N1cyh2aWV3
LCB0cnVlKTsgLy8gKGF1dG9kaXNwbGF5ID8gWUVTIDogTk8pKTsKICAgICAgICAgZnJlc2hseU1h
ZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBuaWw7CiAgICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBr
Q29udHJvbEZvY3VzTm9QYXJ0OwotCQkvL05TTG9nKEAiUmVsaW5xdWlzaGVkIHRoZSBrZXkgZm9j
dXMgYmVjYXVzZSB3ZSBoYXZlIG5vIGNob2ljZS4iKTsKLSAgICB9Ci0JZWxzZSBpZiAoIGRlc2ly
ZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTmV4dFBhcnQgfHwgZGVzaXJlZEZvY3VzID09IGtDb250
cm9sRm9jdXNQcmV2UGFydCApCi0JewotICAgICAgICBCT09MIGdvRm9yd2FyZCA9IChkZXNpcmVk
Rm9jdXMgPT0ga0NvbnRyb2xGb2N1c05leHRQYXJ0ICk7CisgICAgICAgIC8vIE5TTG9nKEAiUmVs
aW5xdWlzaGVkIHRoZSBrZXkgZm9jdXMgYmVjYXVzZSB3ZSBoYXZlIG5vIGNob2ljZS4iKTsKKyAg
ICB9IGVsc2UgaWYgKGRlc2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTmV4dFBhcnQgfHwgZGVz
aXJlZEZvY3VzID09IGtDb250cm9sRm9jdXNQcmV2UGFydCkgeworICAgICAgICBCT09MIGdvRm9y
d2FyZCA9IChkZXNpcmVkRm9jdXMgPT0ga0NvbnRyb2xGb2N1c05leHRQYXJ0KTsKIAogICAgICAg
ICAvLyBBZHZhbmNlIHRoZSBrZXlib2FyZCBmb2N1cywgbWF5YmUgcmlnaHQgb2ZmIG9mIHRoaXMg
dmlldy4gIE1heWJlIGEgc3VidmlldyBvZiB0aGlzIG9uZSBhbHJlYWR5IGhhcyB0aGUga2V5Ym9h
cmQgZm9jdXMsIG1heWJlIG5vdC4KLSAgICAgICAgZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZp
ZXcgPSBBZHZhbmNlRm9jdXMoIHZpZXcsIGdvRm9yd2FyZCApOworICAgICAgICBmcmVzaGx5TWFk
ZUZpcnN0UmVzcG9uZGVyVmlldyA9IEFkdmFuY2VGb2N1cyh2aWV3LCBnb0ZvcndhcmQpOwogICAg
ICAgICBpZiAoZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcpCiAgICAgICAgICAgICBwYXJ0
Q29kZVRvUmV0dXJuID0gZGVzaXJlZEZvY3VzOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
YXJ0Q29kZVRvUmV0dXJuID0ga0NvbnRyb2xGb2N1c05vUGFydDsKLSAgICAgICAgLy9OU0xvZyhm
cmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA/IEAiQWR2YW5jZWQgdGhlIGtleSBmb2N1cy4i
IDogQCJSZWxpbnF1aXNoZWQgdGhlIGtleSBmb2N1cy4iKTsKLSAgICB9Ci0JZWxzZQotCXsKLQkJ
Ly8gV2hhdCdzIHRoaXM/Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRGb2N1cyAhPSBrQ29u
dHJvbEluZGljYXRvclBhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2soZmFsc2UpOwot
ICAgICAgICAgICAgICAgIH0KLQkJZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBuaWw7
Ci0JCXBhcnRDb2RlVG9SZXR1cm4gPSBkZXNpcmVkRm9jdXM7CisgICAgICAgIC8vIE5TTG9nKGZy
ZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3ID8gQCJBZHZhbmNlZCB0aGUga2V5IGZvY3VzLiIg
OiBAIlJlbGlucXVpc2hlZCB0aGUga2V5IGZvY3VzLiIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFdoYXQncyB0aGlzPworICAgICAgICBpZiAoZGVzaXJlZEZvY3VzICE9IGtDb250cm9sSW5k
aWNhdG9yUGFydCkKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBm
cmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA9IG5pbDsKKyAgICAgICAgcGFydENvZGVUb1Jl
dHVybiA9IGRlc2lyZWRGb2N1czsKICAgICB9CiAKLQl2aWV3LT5mRmlyc3RSZXNwb25kZXIgPSBm
cmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldzsKKyAgICB2aWV3LT5mRmlyc3RSZXNwb25kZXIg
PSBmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldzsKIAotCSphY3R1YWxGb2N1cyA9IHBhcnRD
b2RlVG9SZXR1cm47CisgICAgKmFjdHVhbEZvY3VzID0gcGFydENvZGVUb1JldHVybjsKIAotCS8v
IERvbmUuCi0JcmV0dXJuIG5vRXJyOworICAgIC8vIERvbmUuCisgICAgcmV0dXJuIG5vRXJyOwog
fQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEFkdmFuY2VGb2N1cwogLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE5TVmlldyoKLUFkdmFuY2VGb2N1cygg
SElXZWJWaWV3KiB2aWV3LCBib29sIGZvcndhcmQgKQorc3RhdGljIE5TVmlldyogQWR2YW5jZUZv
Y3VzKEhJV2ViVmlldyogdmlldywgYm9vbCBmb3J3YXJkKQogewotICAgIE5TUmVzcG9uZGVyKgkJ
b2xkRmlyc3RSZXNwb25kZXI7Ci0gICAgTlNWaWV3KgkJCQljdXJyZW50S2V5VmlldzsKLSAgICBO
U1ZpZXcqCQkJCXZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlcjsKKyAgICBOU1Jlc3BvbmRlciogb2xk
Rmlyc3RSZXNwb25kZXI7CisgICAgTlNWaWV3KiBjdXJyZW50S2V5VmlldzsKKyAgICBOU1ZpZXcq
IHZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlcjsKKyAgICAKKyAgICAvLyBGb2N1cyBvbiBzb21lIHBh
cnQgKHN1YnZpZXcpIG9mIHRoaXMgY29udHJvbCAodmlldykuCisgICAgLy8gTWF5YmUgYSBzdWJ2
aWV3IG9mIHRoaXMgb25lIGFscmVhZHkgaGFzIHRoZSBrZXlib2FyZCBmb2N1cywgbWF5YmUgbm90
LgorICAgIAorICAgIG9sZEZpcnN0UmVzcG9uZGVyID0gW3ZpZXctPmZLaXRXaW5kb3cgZmlyc3RS
ZXNwb25kZXJdOworCisgICAgLy8gSWYgd2UgdGFiIG91dCBvZiBvdXIgTlNWaWV3LCBpdCB3aWxs
IG5vIGxvbmdlciBiZSB0aGUgcmVzcG9uZGVyCisgICAgLy8gd2hlbiB3ZSBnZXQgaGVyZS4gV2Un
bGwgdHJ5IHRoaXMgdHJpY2sgZm9yIG5vdy4gV2UgbWlnaHQgbmVlZCB0bworICAgIC8vIHRhZyB0
aGUgdmlldyBhcHByb3ByaWF0ZWx5LgorCisgICAgaWYgKHZpZXctPmZGaXJzdFJlc3BvbmRlciAm
JiAoKE5TUmVzcG9uZGVyKil2aWV3LT5mRmlyc3RSZXNwb25kZXIgIT0gb2xkRmlyc3RSZXNwb25k
ZXIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICAvLwlGb2N1cyBvbiBzb21l
IHBhcnQgKHN1YnZpZXcpIG9mIHRoaXMgY29udHJvbCAodmlldykuICBNYXliZQotCS8vCWEgc3Vi
dmlldyBvZiB0aGlzIG9uZSBhbHJlYWR5IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMsIG1heWJlIG5v
dC4KLQkKLQlvbGRGaXJzdFJlc3BvbmRlciA9IFt2aWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9u
ZGVyXTsKLQotCS8vIElmIHdlIHRhYiBvdXQgb2Ygb3VyIE5TVmlldywgaXQgd2lsbCBubyBsb25n
ZXIgYmUgdGhlIHJlc3BvbmRlcgotCS8vIHdoZW4gd2UgZ2V0IGhlcmUuIFdlJ2xsIHRyeSB0aGlz
IHRyaWNrIGZvciBub3cuIFdlIG1pZ2h0IG5lZWQgdG8KLQkvLyB0YWcgdGhlIHZpZXcgYXBwcm9w
cmlhdGVseS4KLQotCWlmICggdmlldy0+ZkZpcnN0UmVzcG9uZGVyICYmICggKE5TUmVzcG9uZGVy
Kil2aWV3LT5mRmlyc3RSZXNwb25kZXIgIT0gb2xkRmlyc3RSZXNwb25kZXIgKSApCi0JewotCQly
ZXR1cm4gTlVMTDsKLQl9Ci0JCi0JaWYgKCBbb2xkRmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFz
czpbTlNWaWV3IGNsYXNzXV0gKQotCXsKLQkJTlNWaWV3KgkJdGVudGF0aXZlTmV3S2V5VmlldzsK
KyAgICBpZiAoW29sZEZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11d
KSB7CisgICAgICAgIE5TVmlldyogdGVudGF0aXZlTmV3S2V5VmlldzsKIAogICAgICAgICAvLyBT
b21lIHZpZXcgaW4gdGhpcyB3aW5kb3cgYWxyZWFkeSBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLiAg
SXQgYmV0dGVyIGF0IGxlYXN0IGJlIGEgc3VidmlldyBvZiB0aGlzIG9uZS4KLSAgICAgICAgTlNW
aWV3KglvbGRGaXJzdFJlc3BvbmRlclZpZXcgPSAoTlNWaWV3ICopb2xkRmlyc3RSZXNwb25kZXI7
Ci0gICAgICAgIGNoZWNrKCBbb2xkRmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9mOnZp
ZXctPmZXZWJWaWV3XSApOworICAgICAgICBOU1ZpZXcqIG9sZEZpcnN0UmVzcG9uZGVyVmlldyA9
IChOU1ZpZXcgKilvbGRGaXJzdFJlc3BvbmRlcjsKKyAgICAgICAgQVNTRVJUKFtvbGRGaXJzdFJl
c3BvbmRlclZpZXcgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKTsKIAotCQlpZiAoIG9s
ZEZpcnN0UmVzcG9uZGVyVmlldyAhPSB2aWV3LT5mRmlyc3RSZXNwb25kZXIKLQkJCSYmICFbb2xk
Rmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZGaXJzdFJlc3BvbmRlcl0g
KQotCQl7CisgICAgICAgIGlmIChvbGRGaXJzdFJlc3BvbmRlclZpZXcgIT0gdmlldy0+ZkZpcnN0
UmVzcG9uZGVyICYmICFbb2xkRmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXct
PmZGaXJzdFJlc3BvbmRlcl0pIHsKICAgICAgICAgICAgIC8vIERlc3BpdGUgb3VyIGVmZm9ydHMg
dG8gcmVjb3JkIHdoYXQgdmlldyB3ZSBtYWRlIHRoZSBmaXJzdCByZXNwb25kZXIKLQkJCS8vIChm
b3IgdXNlIGluIHRoZSBuZXh0IHBhcmFncmFwaCkgd2UgY291bGRuJ3Qga2VlcCB1cCBiZWNhdXNl
IHRoZSB1c2VyCi0JCQkvLyBoYXMgY2xpY2tlZCBpbiBhIHRleHQgZmllbGQgdG8gbWFrZSBpdCB0
aGUga2V5IGZvY3VzLCBpbnN0ZWFkIG9mIHVzaW5nCi0JCQkvLyB0aGUgdGFiIGtleS4gIEZpbmQg
YSBjb250cm9sIG9uIHdoaWNoIGl0J3MgcmVhc29uYWJsZSB0byBpbnZva2UKLQkJCS8vIC1bTlNW
aWV3IG5leHRWYWxpZEtleVZpZXddLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQK
LQkJCS8vIE5TVGV4dEZpZWxkcyBhbHdheXMgcGFzcyBvbiBmaXJzdC1yZXNwb25kZXJzaGlwIHRv
IGEgdGVtcG9yYXJpbHktCi0JCQkvLyBjb250YWluZWQgTlNUZXh0Vmlldy4KLQotCQkJTlNWaWV3
ICp2aWV3QmVpbmdUZXN0ZWQ7Ci0JCQljdXJyZW50S2V5VmlldyA9IG9sZEZpcnN0UmVzcG9uZGVy
VmlldzsKLQkJCXZpZXdCZWluZ1Rlc3RlZCA9IGN1cnJlbnRLZXlWaWV3OwotCQkJd2hpbGUgKCB2
aWV3QmVpbmdUZXN0ZWQgIT0gdmlldy0+ZldlYlZpZXcgKQotCQkJewotCQkJCWlmICggW3ZpZXdC
ZWluZ1Rlc3RlZCBpc0tpbmRPZkNsYXNzOltOU1RleHRGaWVsZCBjbGFzc11dICkKLQkJCQl7Ci0J
CQkJCWN1cnJlbnRLZXlWaWV3ID0gdmlld0JlaW5nVGVzdGVkOwotCQkJCQlicmVhazsKLQkJCQl9
Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJdmlld0JlaW5nVGVzdGVkID0gW3ZpZXdCZWluZ1Rlc3Rl
ZCBzdXBlcnZpZXddOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIAotCQl7Ci0JCQkvLyBXZSBy
ZWNvcmRlZCB3aGljaCB2aWV3IHdlIG1hZGUgaW50byB0aGUgZmlyc3QgcmVzcG9uZGVyIHRoZQot
CQkJLy8gbGFzdCB0aW1lIHRoZSB1c2VyIGhpdCB0aGUgdGFiIGtleSwgYW5kIG5vdGhpbmcgaGFz
IGludmFsaWRhdGVkCi0JCQkvLyBvdXIgcmVjb3JkZWQgdmFsdWUgc2luY2UuCi0JCQkKLQkJCWN1
cnJlbnRLZXlWaWV3ID0gdmlldy0+ZkZpcnN0UmVzcG9uZGVyOwotCQl9CisgICAgICAgICAgICAv
LyAoZm9yIHVzZSBpbiB0aGUgbmV4dCBwYXJhZ3JhcGgpIHdlIGNvdWxkbid0IGtlZXAgdXAgYmVj
YXVzZSB0aGUgdXNlcgorICAgICAgICAgICAgLy8gaGFzIGNsaWNrZWQgaW4gYSB0ZXh0IGZpZWxk
IHRvIG1ha2UgaXQgdGhlIGtleSBmb2N1cywgaW5zdGVhZCBvZiB1c2luZworICAgICAgICAgICAg
Ly8gdGhlIHRhYiBrZXkuIEZpbmQgYSBjb250cm9sIG9uIHdoaWNoIGl0J3MgcmVhc29uYWJsZSB0
byBpbnZva2UKKyAgICAgICAgICAgIC8vIC1bTlNWaWV3IG5leHRWYWxpZEtleVZpZXddLCB0YWtp
bmcgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQKKyAgICAgICAgICAgIC8vIE5TVGV4dEZpZWxk
cyBhbHdheXMgcGFzcyBvbiBmaXJzdC1yZXNwb25kZXJzaGlwIHRvIGEgdGVtcG9yYXJpbHktCisg
ICAgICAgICAgICAvLyBjb250YWluZWQgTlNUZXh0Vmlldy4KKworICAgICAgICAgICAgTlNWaWV3
ICp2aWV3QmVpbmdUZXN0ZWQ7CisgICAgICAgICAgICBjdXJyZW50S2V5VmlldyA9IG9sZEZpcnN0
UmVzcG9uZGVyVmlldzsKKyAgICAgICAgICAgIHZpZXdCZWluZ1Rlc3RlZCA9IGN1cnJlbnRLZXlW
aWV3OworICAgICAgICAgICAgd2hpbGUgKHZpZXdCZWluZ1Rlc3RlZCAhPSB2aWV3LT5mV2ViVmll
dykgeworICAgICAgICAgICAgICAgIGlmIChbdmlld0JlaW5nVGVzdGVkIGlzS2luZE9mQ2xhc3M6
W05TVGV4dEZpZWxkIGNsYXNzXV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEtleVZp
ZXcgPSB2aWV3QmVpbmdUZXN0ZWQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aWV3QmVpbmdUZXN0ZWQgPSBbdmlld0JlaW5n
VGVzdGVkIHN1cGVydmlld107CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBXZSByZWNvcmRlZCB3aGljaCB2aWV3IHdlIG1hZGUgaW50byB0aGUgZmlyc3Qg
cmVzcG9uZGVyIHRoZQorICAgICAgICAgICAgLy8gbGFzdCB0aW1lIHRoZSB1c2VyIGhpdCB0aGUg
dGFiIGtleSwgYW5kIG5vdGhpbmcgaGFzIGludmFsaWRhdGVkCisgICAgICAgICAgICAvLyBvdXIg
cmVjb3JkZWQgdmFsdWUgc2luY2UuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnRL
ZXlWaWV3ID0gdmlldy0+ZkZpcnN0UmVzcG9uZGVyOworICAgICAgICB9CiAKICAgICAgICAgLy8g
VHJ5IHRvIG1vdmUgb24gdG8gdGhlIG5leHQgb3IgcHJldmlvdXMga2V5IHZpZXcuICBXZSB1c2Ug
dGhlIGxhYm9yaW91c2x5Ci0JCS8vIHJlY29yZGVkL2ZpZ3VyZWQgY3VycmVudEtleVZpZXcgaW5z
dGVhZCBvZiBqdXN0IG9sZEZpcnN0UmVzcG9uZGVyIGFzIHRoZQotCQkvLyBqdW1waW5nLW9mZi1w
b2ludCB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIG5leHQgdmFsaWQga2V5IHZpZXcuICBUaGlzIGlz
IHNvCi0JCS8vIHdlIGRvbid0IGdldCBmb29sZWQgaWYgd2UgcmVjZW50bHkgbWFkZSBzb21lIHZp
ZXcgdGhlIGZpcnN0IHJlc3BvbmRlciwgYnV0Ci0JCS8vIGl0IHBhc3NlZCBvbiBmaXJzdC1yZXNw
b25kZXItbmVzcyB0byBzb21lIHRlbXBvcmFyeSBzdWJ2aWV3LgotCQkKKyAgICAgICAgLy8gcmVj
b3JkZWQvZmlndXJlZCBjdXJyZW50S2V5VmlldyBpbnN0ZWFkIG9mIGp1c3Qgb2xkRmlyc3RSZXNw
b25kZXIgYXMgdGhlCisgICAgICAgIC8vIGp1bXBpbmctb2ZmLXBvaW50IHdoZW4gc2VhcmNoaW5n
IGZvciB0aGUgbmV4dCB2YWxpZCBrZXkgdmlldy4gVGhpcyBpcyBzbworICAgICAgICAvLyB3ZSBk
b24ndCBnZXQgZm9vbGVkIGlmIHdlIHJlY2VudGx5IG1hZGUgc29tZSB2aWV3IHRoZSBmaXJzdCBy
ZXNwb25kZXIsIGJ1dAorICAgICAgICAvLyBpdCBwYXNzZWQgb24gZmlyc3QtcmVzcG9uZGVyLW5l
c3MgdG8gc29tZSB0ZW1wb3Jhcnkgc3Vidmlldy4KKyAgICAgICAgLy8KICAgICAgICAgLy8gWW91
IGNhbid0IHB1dCBub3JtYWwgdmlld3MgaW4gYSB3aW5kb3cgd2l0aCBDYXJib24tY29udHJvbC13
cmFwcGVkIHZpZXdzLgotCQkvLyBTdHVmZiBsaWtlIHRoaXMgd291bGQgYnJlYWsuICBNLlAuIE5v
dGljZSAtIDEyLzIvMDAKKyAgICAgICAgLy8gU3R1ZmYgbGlrZSB0aGlzIHdvdWxkIGJyZWFrLiBN
LlAuIE5vdGljZSAtIDEyLzIvMDAKIAogICAgICAgICB0ZW50YXRpdmVOZXdLZXlWaWV3ID0gZm9y
d2FyZCA/IFtjdXJyZW50S2V5VmlldyBuZXh0VmFsaWRLZXlWaWV3XSA6IFtjdXJyZW50S2V5Vmll
dyBwcmV2aW91c1ZhbGlkS2V5Vmlld107Ci0gICAgICAgIGlmICggdGVudGF0aXZlTmV3S2V5Vmll
dyAmJiBbdGVudGF0aXZlTmV3S2V5VmlldyBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5mV2ViVmlld10g
KQotCQl7CisgICAgICAgIGlmICh0ZW50YXRpdmVOZXdLZXlWaWV3ICYmIFt0ZW50YXRpdmVOZXdL
ZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSkgewogICAgICAgICAgICAgLy8g
VGhlIHVzZXIgaGFzIHRhYmJlZCB0byBhbm90aGVyIHN1YnZpZXcgb2YgdGhpcyBjb250cm9sIHZp
ZXcuICBDaGFuZ2UgdGhlIGtleWJvYXJkIGZvY3VzLgogICAgICAgICAgICAgLy9OU0xvZyhAIlRh
YmJlZCB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBrZXkgdmlldy4iKTsKIAogICAgICAgICAgICAg
W3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnRlbnRhdGl2ZU5ld0tleVZpZXdd
OwogICAgICAgICAgICAgdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gdGVudGF0aXZlTmV3S2V5
VmlldzsKLSAgICAgICAgfQotCQllbHNlCi0JCXsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIFRoZSB1c2VyIGhhcyB0YWJiZWQgcGFzdCB0aGUgc3Vidmlld3Mgb2YgdGhpcyBjb250
cm9sIHZpZXcuICBUaGUgd2luZG93IGlzIHRoZSBmaXJzdCByZXNwb25kZXIgbm93LgogICAgICAg
ICAgICAgLy9OU0xvZyhAIlRhYmJlZCBwYXN0IHRoZSBmaXJzdCBvciBsYXN0IGtleSB2aWV3LiIp
OwogICAgICAgICAgICAgW3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXct
PmZLaXRXaW5kb3ddOwogICAgICAgICAgICAgdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gbmls
OwogICAgICAgICB9Ci0gICAgfQotCWVsc2UKLQl7CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
Tm8gdmlldyBpbiB0aGlzIHdpbmRvdyBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLiAgVGhpcyB2aWV3
IHNob3VsZAotCQkvLyB0cnkgdG8gc2VsZWN0IG9uZSBvZiBpdHMga2V5IHN1YnZpZXdzLiAgV2Un
cmUgbm90IGludGVyZXN0ZWQgaW4KLQkJLy8gdGhlIHN1YnZpZXdzIG9mIHNpYmxpbmcgdmlld3Mg
aGVyZS4KKyAgICAgICAgLy8gdHJ5IHRvIHNlbGVjdCBvbmUgb2YgaXRzIGtleSBzdWJ2aWV3cy4g
V2UncmUgbm90IGludGVyZXN0ZWQgaW4KKyAgICAgICAgLy8gdGhlIHN1YnZpZXdzIG9mIHNpYmxp
bmcgdmlld3MgaGVyZS4KIAotCQkvL05TTG9nKEAiTm8ga2V5Ym9hcmQgZm9jdXMgaW4gd2luZG93
LiBBdHRlbXB0aW5nIHRvIHNldC4uLiIpOworICAgICAgICAvLyBOU0xvZyhAIk5vIGtleWJvYXJk
IGZvY3VzIGluIHdpbmRvdy4gQXR0ZW1wdGluZyB0byBzZXQuLi4iKTsKIAotCQlOU1ZpZXcgKnRl
bnRhdGl2ZU5ld0tleVZpZXc7Ci0JCWNoZWNrKG9sZEZpcnN0UmVzcG9uZGVyPT1mS2l0V2luZG93
KTsKLQkJaWYgKCBbdmlldy0+ZldlYlZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSApCi0JCQl0
ZW50YXRpdmVOZXdLZXlWaWV3ID0gdmlldy0+ZldlYlZpZXc7Ci0JCWVsc2UKLQkJCXRlbnRhdGl2
ZU5ld0tleVZpZXcgPSBbdmlldy0+ZldlYlZpZXcgbmV4dFZhbGlkS2V5Vmlld107Ci0gICAgICAg
IGlmICggdGVudGF0aXZlTmV3S2V5VmlldyAmJiBbdGVudGF0aXZlTmV3S2V5VmlldyBpc0Rlc2Nl
bmRhbnRPZjp2aWV3LT5mV2ViVmlld10gKQotCQl7CisgICAgICAgIE5TVmlldyAqdGVudGF0aXZl
TmV3S2V5VmlldzsKKyAgICAgICAgQVNTRVJUKG9sZEZpcnN0UmVzcG9uZGVyID09IHZpZXctPmZL
aXRXaW5kb3cpOworICAgICAgICBpZiAoW3ZpZXctPmZXZWJWaWV3IGFjY2VwdHNGaXJzdFJlc3Bv
bmRlcl0pCisgICAgICAgICAgICB0ZW50YXRpdmVOZXdLZXlWaWV3ID0gdmlldy0+ZldlYlZpZXc7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlbnRhdGl2ZU5ld0tleVZpZXcgPSBbdmlldy0+
ZldlYlZpZXcgbmV4dFZhbGlkS2V5Vmlld107CisgICAgICAgIGlmICh0ZW50YXRpdmVOZXdLZXlW
aWV3ICYmIFt0ZW50YXRpdmVOZXdLZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3
XSkgewogICAgICAgICAgICAgLy8gVGhpcyBjb250cm9sIHZpZXcgaGFzIGF0IGxlYXN0IG9uZSBz
dWJ2aWV3IHRoYXQgY2FuIHRha2UgdGhlIGtleWJvYXJkIGZvY3VzLgotICAgICAgICAgICAgaWYg
KCAhZm9yd2FyZCApCi0JCQl7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgaGFzIHRhYmJl
ZCBpbnRvIHRoaXMgY29udHJvbCB2aWV3IGJhY2t3YXJkcy4gIEZpbmQKLQkJCQkvLyBhbmQgc2Vs
ZWN0IHRoZSBsYXN0IHN1YnZpZXcgb2YgdGhpcyBvbmUgdGhhdCBjYW4gdGFrZSB0aGUKLQkJCQkv
LyBrZXlib2FyZCBmb2N1cy4gIFdhdGNoIG91dCBmb3IgbG9vcHMgb2YgdmFsaWQga2V5IHZpZXdz
LgorICAgICAgICAgICAgaWYgKCFmb3J3YXJkKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHVz
ZXIgaGFzIHRhYmJlZCBpbnRvIHRoaXMgY29udHJvbCB2aWV3IGJhY2t3YXJkcy4gRmluZAorICAg
ICAgICAgICAgICAgIC8vIGFuZCBzZWxlY3QgdGhlIGxhc3Qgc3VidmlldyBvZiB0aGlzIG9uZSB0
aGF0IGNhbiB0YWtlIHRoZQorICAgICAgICAgICAgICAgIC8vIGtleWJvYXJkIGZvY3VzLiBXYXRj
aCBvdXQgZm9yIGxvb3BzIG9mIHZhbGlkIGtleSB2aWV3cy4KIAogICAgICAgICAgICAgICAgIE5T
VmlldyAqZmlyc3RUZW50YXRpdmVOZXdLZXlWaWV3ID0gdGVudGF0aXZlTmV3S2V5VmlldzsKICAg
ICAgICAgICAgICAgICBOU1ZpZXcgKm5leHRUZW50YXRpdmVOZXdLZXlWaWV3ID0gW3RlbnRhdGl2
ZU5ld0tleVZpZXcgbmV4dFZhbGlkS2V5Vmlld107Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBu
ZXh0VGVudGF0aXZlTmV3S2V5VmlldyAKLQkJCQkJCSYmIFtuZXh0VGVudGF0aXZlTmV3S2V5Vmll
dyBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5mV2ViVmlld10gCi0JCQkJCQkmJiBuZXh0VGVudGF0aXZl
TmV3S2V5VmlldyE9Zmlyc3RUZW50YXRpdmVOZXdLZXlWaWV3KQotCQkJCXsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAobmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW25leHRUZW50YXRpdmVOZXdL
ZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSAmJiBuZXh0VGVudGF0aXZlTmV3
S2V5VmlldyAhPSBmaXJzdFRlbnRhdGl2ZU5ld0tleVZpZXcpIHsKICAgICAgICAgICAgICAgICAg
ICAgdGVudGF0aXZlTmV3S2V5VmlldyA9IG5leHRUZW50YXRpdmVOZXdLZXlWaWV3OwogICAgICAg
ICAgICAgICAgICAgICBuZXh0VGVudGF0aXZlTmV3S2V5VmlldyA9IFt0ZW50YXRpdmVOZXdLZXlW
aWV3IG5leHRWYWxpZEtleVZpZXddOwogICAgICAgICAgICAgICAgIH0KQEAgLTExMzEsOSArMTAw
OCw3IEBAIEFkdmFuY2VGb2N1cyggSElXZWJWaWV3KiB2aWV3LCBib29sIGZvcncKICAgICAgICAg
ICAgIC8vTlNMb2coQCJUYWJiZWQgaW50byB0aGUgZmlyc3Qgb3IgbGFzdCBrZXkgdmlldy4iKTsK
ICAgICAgICAgICAgIFt2aWV3LT5mS2l0V2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp0ZW50YXRp
dmVOZXdLZXlWaWV3XTsKICAgICAgICAgICAgIHZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlciA9IHRl
bnRhdGl2ZU5ld0tleVZpZXc7Ci0gICAgICAgIH0KLQkJZWxzZQotCQl7CisgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBUaGlzIGNvbnRyb2wgdmlldyBoYXMgbm8gc3Vidmlld3MgdGhh
dCBjYW4gdGFrZSB0aGUga2V5Ym9hcmQgZm9jdXMuCiAgICAgICAgICAgICAvL05TTG9nKEAiQ2Fu
J3QgdGFiIGludG8gdGhpcyB2aWV3LiIpOwogICAgICAgICAgICAgdmlld1dlTWFkZUZpcnN0UmVz
cG9uZGVyID0gbmlsOwpAQCAtMTE0OSw1OSArMTAyNCw1MyBAQCBBZHZhbmNlRm9jdXMoIEhJV2Vi
VmlldyogdmlldywgYm9vbCBmb3J3CiAvLyBSZWxpbnF1aXNoRm9jdXMKIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogLy8KLXN0YXRpYyB2b2lkCi1SZWxpbnF1aXNoRm9jdXMoIEhJV2ViVmll
dyogdmlldywgYm9vbCBpbkF1dG9kaXNwbGF5ICkKK3N0YXRpYyB2b2lkIFJlbGlucXVpc2hGb2N1
cyhISVdlYlZpZXcqIHZpZXcsIGJvb2wgaW5BdXRvZGlzcGxheSkKIHsKLSAgICBOU1Jlc3BvbmRl
ciogIGZpcnN0UmVzcG9uZGVyOworICAgIE5TUmVzcG9uZGVyKiBmaXJzdFJlc3BvbmRlcjsKIAog
ICAgIC8vIEFwcGFyZW50bHkgQ2FyYm9uIHRoaW5rcyB0aGF0IHNvbWUgc3VidmlldyBvZiB0aGlz
IGNvbnRyb2wgdmlldyBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLAotCS8vIG9yIHdlIHdvdWxkbid0
IGJlIGJlaW5nIGFza2VkIHRvIHJlbGlucXVpc2ggZm9jdXMuCisgICAgLy8gb3Igd2Ugd291bGRu
J3QgYmUgYmVpbmcgYXNrZWQgdG8gcmVsaW5xdWlzaCBmb2N1cy4KIAotCWZpcnN0UmVzcG9uZGVy
ID0gW3ZpZXctPmZLaXRXaW5kb3cgZmlyc3RSZXNwb25kZXJdOwotCWlmICggW2ZpcnN0UmVzcG9u
ZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dICkKLQl7Ci0JCS8vIFNvbWUgc3Vidmll
dyBvZiB0aGlzIGNvbnRyb2wgdmlldyByZWFsbHkgaXMgdGhlIGZpcnN0IHJlc3BvbmRlciByaWdo
dCBub3cuCi0JCWNoZWNrKCBbKE5TVmlldyAqKWZpcnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9m
OnZpZXctPmZXZWJWaWV3XSApOworICAgIGZpcnN0UmVzcG9uZGVyID0gW3ZpZXctPmZLaXRXaW5k
b3cgZmlyc3RSZXNwb25kZXJdOworICAgIGlmIChbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFz
czpbTlNWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgLy8gU29tZSBzdWJ2aWV3IG9mIHRoaXMgY29u
dHJvbCB2aWV3IHJlYWxseSBpcyB0aGUgZmlyc3QgcmVzcG9uZGVyIHJpZ2h0IG5vdy4KKyAgICAg
ICAgQVNTRVJUKFsoTlNWaWV3ICopZmlyc3RSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6dmlldy0+
ZldlYlZpZXddKTsKIAotCQkvLyBNYWtlIHRoZSB3aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwg
c28gdGhhdCBubyB2aWV3IGlzIHRoZSBrZXkgdmlldy4KKyAgICAgICAgLy8gTWFrZSB0aGUgd2lu
ZG93IHRoZSBmaXJzdCByZXNwb25kZXIsIHNvIHRoYXQgbm8gdmlldyBpcyB0aGUga2V5IHZpZXcu
CiAgICAgICAgIFt2aWV3LT5mS2l0V2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3LT5mS2l0
V2luZG93XTsKIAotCQkvLyAJSWYgdGhpcyBjb250cm9sIGlzIG5vdCBhbGxvd2VkIHRvIGRvIGF1
dG9kaXNwbGF5LCBkb24ndCBsZXQKLQkJLy8JaXQgYXV0b2Rpc3BsYXkgYW55IGp1c3QtY2hhbmdl
ZCBmb2N1cyByaW5ncyBvciB0ZXh0IG9uIHRoZQotCQkvLwluZXh0IGdvIGFyb3VuZCB0aGUgZXZl
bnQgbG9vcC4gSSdtIHByb2JhYmx5IGNsZWFyaW5nIG1vcmUKLQkJLy8JZGlydHkgcmVjdHMgdGhh
biBJIGhhdmUgdG8sIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gaHVydCBpbgotCQkvLwl0aGUgcHJp
bnQgcGFuZWwgYWNjZXNzb3J5IHZpZXcgY2FzZSwgYW5kIEkgZG9uJ3QgaGF2ZSB0aW1lCi0JCS8v
CXRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IC1bTlNDZWxsIF9zZXRLZXlib2FyZEZvY3VzUmlu
Z05lZWRzRGlzcGxheV0KLQkJLy8JaXMgZG9pbmcgd2hlbiBpbnZva2VkIGluZGlyZWN0bHkgZnJv
bSAtbWFrZUZpcnN0UmVzcG9uZGVyIHVwIGFib3ZlLiAgTS5QLiBOb3RpY2UgLSAxMi80LzAwCisg
ICAgICAgIC8vIElmIHRoaXMgY29udHJvbCBpcyBub3QgYWxsb3dlZCB0byBkbyBhdXRvZGlzcGxh
eSwgZG9uJ3QgbGV0CisgICAgICAgIC8vIGl0IGF1dG9kaXNwbGF5IGFueSBqdXN0LWNoYW5nZWQg
Zm9jdXMgcmluZ3Mgb3IgdGV4dCBvbiB0aGUKKyAgICAgICAgLy8gbmV4dCBnbyBhcm91bmQgdGhl
IGV2ZW50IGxvb3AuIEknbSBwcm9iYWJseSBjbGVhcmluZyBtb3JlCisgICAgICAgIC8vIGRpcnR5
IHJlY3RzIHRoYW4gSSBoYXZlIHRvLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGh1cnQgaW4KKyAg
ICAgICAgLy8gdGhlIHByaW50IHBhbmVsIGFjY2Vzc29yeSB2aWV3IGNhc2UsIGFuZCBJIGRvbid0
IGhhdmUgdGltZQorICAgICAgICAvLyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCAtW05TQ2Vs
bCBfc2V0S2V5Ym9hcmRGb2N1c1JpbmdOZWVkc0Rpc3BsYXldCisgICAgICAgIC8vIGlzIGRvaW5n
IHdoZW4gaW52b2tlZCBpbmRpcmVjdGx5IGZyb20gLW1ha2VGaXJzdFJlc3BvbmRlciB1cCBhYm92
ZS4gTS5QLiBOb3RpY2UgLSAxMi80LzAwCisKKyAgICAgICAgaWYgKCFpbkF1dG9kaXNwbGF5KQor
ICAgICAgICAgICAgW1t2aWV3LT5mV2ViVmlldyBvcGFxdWVBbmNlc3Rvcl0gX2NsZWFyRGlydHlS
ZWN0c0ZvclRyZWVdOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBDb2NvYSBmaXJzdCBy
ZXNwb25kZXIgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgQ2FyYm9uCisgICAgICAgIC8vIGNv
bnRyb2wgdGhhdCBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgor
ICAgICAgICAvLyB5b3UndmUgY2xvc2VkIGEgZGlhbG9nIGJ5IGhpdHRpbmcgcmV0dXJuIGluIGFu
IE5TVGV4dFZpZXcKKyAgICAgICAgLy8gdGhhdCdzIGEgc3VidmlldyBvZiB0aGlzIG9uZTsgQ29j
b2EgY2xvc2VkIHRoZSB3aW5kb3csIGFuZAorICAgICAgICAvLyBub3cgQ2FyYm9uIGlzIHRlbGxp
bmcgdGhpcyBjb250cm9sIHRvIHJlbGlucXVpc2ggdGhlIGZvY3VzCisgICAgICAgIC8vIGFzIGl0
J3MgYmVpbmcgZGlzcG9zZWQuIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KIAotCQlpZiAoICFpbkF1
dG9kaXNwbGF5ICkKLQkJCVtbdmlldy0+ZldlYlZpZXcgb3BhcXVlQW5jZXN0b3JdIF9jbGVhckRp
cnR5UmVjdHNGb3JUcmVlXTsKKyAgICAgICAgQVNTRVJUKGZpcnN0UmVzcG9uZGVyID09IHZpZXct
PmZLaXRXaW5kb3cpOwogICAgIH0KLQllbHNlCi0JewotCQkvLyAgVGhlIENvY29hIGZpcnN0IHJl
c3BvbmRlciBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBDYXJib24KLQkJLy8JY29udHJvbCB0
aGF0IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMuICBUaGlzIGNhbiBoYXBwZW4gd2hlbgotCQkvLwl5
b3UndmUgY2xvc2VkIGEgZGlhbG9nIGJ5IGhpdHRpbmcgcmV0dXJuIGluIGFuIE5TVGV4dFZpZXcK
LQkJLy8JdGhhdCdzIGEgc3VidmlldyBvZiB0aGlzIG9uZTsgQ29jb2EgY2xvc2VkIHRoZSB3aW5k
b3csIGFuZAotCQkvLwlub3cgQ2FyYm9uIGlzIHRlbGxpbmcgdGhpcyBjb250cm9sIHRvIHJlbGlu
cXVpc2ggdGhlIGZvY3VzCi0JCS8vCWFzIGl0J3MgYmVpbmcgZGlzcG9zZWQuICBUaGVyZSdzIG5v
dGhpbmcgdG8gZG8uCi0KLQkJY2hlY2soZmlyc3RSZXNwb25kZXI9PXdpbmRvdyk7Ci0JfQogfQog
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEFjdGl2ZVN0YXRlQ2hhbmdlZAogLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIHZvaWQKLUFjdGl2ZVN0YXRlQ2hh
bmdlZCggSElXZWJWaWV3KiB2aWV3ICkKK3N0YXRpYyB2b2lkIEFjdGl2ZVN0YXRlQ2hhbmdlZChI
SVdlYlZpZXcqIHZpZXcpCiB7Ci0JaWYgKCBbdmlldy0+ZldlYlZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihzZXRFbmFibGVkKV0gKQotCXsKLQkJWyhOU0NvbnRyb2wqKXZpZXctPmZX
ZWJWaWV3IHNldEVuYWJsZWQ6IElzQ29udHJvbEVuYWJsZWQoIHZpZXctPmZWaWV3UmVmICldOwot
CQlISVZpZXdTZXROZWVkc0Rpc3BsYXkoIHZpZXctPmZWaWV3UmVmLCB0cnVlICk7Ci0JfQorICAg
IGlmIChbdmlldy0+ZldlYlZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRFbmFi
bGVkKV0pIHsKKyAgICAgICAgWyhOU0NvbnRyb2wqKXZpZXctPmZXZWJWaWV3IHNldEVuYWJsZWQ6
IElzQ29udHJvbEVuYWJsZWQodmlldy0+ZlZpZXdSZWYpXTsKKyAgICAgICAgSElWaWV3U2V0TmVl
ZHNEaXNwbGF5KHZpZXctPmZWaWV3UmVmLCB0cnVlKTsKKyAgICB9CiB9CiAKIApAQCAtMTIwOSw0
MiArMTA3OCwzNSBAQCBBY3RpdmVTdGF0ZUNoYW5nZWQoIEhJV2ViVmlldyogdmlldyApCiAvLyBQ
cm9jZXNzQ29tbWFuZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwotc3RhdGljIE9T
U3RhdHVzCi1Qcm9jZXNzQ29tbWFuZCggSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJQ29tbWFu
ZCogaW5Db21tYW5kICkKK3N0YXRpYyBPU1N0YXR1cyBQcm9jZXNzQ29tbWFuZChISVdlYlZpZXcq
IGluVmlldywgY29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQpCiB7Ci0JT1NTdGF0dXMJCXJlc3Vs
dCA9IGV2ZW50Tm90SGFuZGxlZEVycjsKLQlOU1Jlc3BvbmRlcioJcmVzcDsKLQkKLQlyZXNwID0g
W2luVmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0KLQlpZiAoIFtyZXNwIGlzS2lu
ZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dICkKLQl7Ci0JCU5TVmlldyoJcmVzcFZpZXcgPSAoTlNW
aWV3KilyZXNwOwotCi0JCWlmICggcmVzcFZpZXcgPT0gaW5WaWV3LT5mV2ViVmlldwotCQkJfHwg
W3Jlc3BWaWV3IGlzRGVzY2VuZGFudE9mOiBpblZpZXctPmZXZWJWaWV3XSApCi0JCXsKLQkJCXN3
aXRjaCAoIGluQ29tbWFuZC0+Y29tbWFuZElEICkKLQkJCXsKLQkJCQljYXNlIGtISUNvbW1hbmRD
dXQ6Ci0JCQkJY2FzZSBrSElDb21tYW5kQ29weToKLQkJCQljYXNlIGtISUNvbW1hbmRQYXN0ZToK
LQkJCQljYXNlIGtISUNvbW1hbmRDbGVhcjoKLQkJCQljYXNlIGtISUNvbW1hbmRTZWxlY3RBbGw6
Ci0JCQkJCXsKLQkJCQkJCVNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKCBp
bkNvbW1hbmQgKTsKLQkJCQkJCWlmICggW3Jlc3BWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxl
Y3Rvcl0gKQotCQkJCQkJewotCQkJCQkJCVtyZXNwVmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0
b3Igd2l0aE9iamVjdDpuaWxdOwotCQkJCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQkJfQotCQkJ
CQl9Ci0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCQotCXJldHVybiByZXN1bHQ7CisgICAg
T1NTdGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIE5TUmVzcG9uZGVyKiBy
ZXNwOworICAgIAorICAgIHJlc3AgPSBbaW5WaWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9uZGVy
XTsKKworICAgIGlmIChbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgeworICAg
ICAgICBOU1ZpZXcqIHJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKKworICAgICAgICBpZiAocmVz
cFZpZXcgPT0gaW5WaWV3LT5mV2ViVmlldyB8fCBbcmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGlu
Vmlldy0+ZldlYlZpZXddKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGluQ29tbWFuZC0+Y29tbWFu
ZElEKSB7CisgICAgICAgICAgICBjYXNlIGtISUNvbW1hbmRDdXQ6CisgICAgICAgICAgICBjYXNl
IGtISUNvbW1hbmRDb3B5OgorICAgICAgICAgICAgY2FzZSBrSElDb21tYW5kUGFzdGU6CisgICAg
ICAgICAgICBjYXNlIGtISUNvbW1hbmRDbGVhcjoKKyAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFu
ZFNlbGVjdEFsbDogeworICAgICAgICAgICAgICAgIFNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9y
Rm9ySElDb21tYW5kKGluQ29tbWFuZCk7CisgICAgICAgICAgICAgICAgaWYgKFtyZXNwVmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7CisgICAgICAgICAgICAgICAgICAgIFtyZXNw
VmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpuaWxdOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0xMjUyLDQ5ICsxMTE0LDM5IEBAIFByb2Nlc3NDb21tYW5kKCBISVdlYlZpZXcq
IGluVmlldywgY29uc3QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIHN0YXRpYyBP
U1N0YXR1cwotVXBkYXRlQ29tbWFuZFN0YXR1cyggSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJ
Q29tbWFuZCogaW5Db21tYW5kICkKK1VwZGF0ZUNvbW1hbmRTdGF0dXMoSElXZWJWaWV3KiBpblZp
ZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kKQogewotCU9TU3RhdHVzCQlyZXN1bHQgPSBl
dmVudE5vdEhhbmRsZWRFcnI7Ci0JTWVudUl0ZW1Qcm94eSogCXByb3h5ID0gTlVMTDsKLQlOU1Jl
c3BvbmRlcioJcmVzcDsKLQkKLQlyZXNwID0gW2luVmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3Bv
bmRlcl07Ci0JCi0JaWYgKCBbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSApCi0J
ewotCQlOU1ZpZXcqCXJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKLQotCQlpZiAoIHJlc3BWaWV3
ID09IGluVmlldy0+ZldlYlZpZXcKLQkJCXx8IFtyZXNwVmlldyBpc0Rlc2NlbmRhbnRPZjogaW5W
aWV3LT5mV2ViVmlld10gKQotCQl7Ci0JCQlpZiAoIGluQ29tbWFuZC0+YXR0cmlidXRlcyAmIGtI
SUNvbW1hbmRGcm9tTWVudSApCi0JCQl7Ci0JCQkJU0VMIHNlbGVjdG9yID0gX05TU2VsZWN0b3JG
b3JISUNvbW1hbmQoIGluQ29tbWFuZCApOwotCQotCQkJCWlmICggc2VsZWN0b3IgKQotCQkJCXsK
LQkJCQkJaWYgKCBbcmVzcCByZXNwb25kc1RvU2VsZWN0b3I6IHNlbGVjdG9yXSApCi0JCQkJCXsK
LQkJCQkJCXByb3h5ID0gW1tNZW51SXRlbVByb3h5IGFsbG9jXSBpbml0V2l0aEFjdGlvbjogc2Vs
ZWN0b3JdOwotCQkJCQkJCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgLXBl
cmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0OiBoZXJlIGJlY2F1c2UgdGhlIG1ldGhvZCB3ZSdyZSBj
YWxsaW5nIHJldHVybnMgQk9PTCwgd2hpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIC1w
ZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDoncyByZXR1cm4gdmFsdWUgaXMgYXNzdW1lZCB0byBi
ZSBhbiBpZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3dGZPYmpjTXNnU2VuZDxCT09M
PihyZXNwLCBAc2VsZWN0b3IodmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTopLCBwcm94eSkpCi0J
CQkJCQkJRW5hYmxlTWVudUl0ZW0oIGluQ29tbWFuZC0+bWVudS5tZW51UmVmLCBpbkNvbW1hbmQt
Pm1lbnUubWVudUl0ZW1JbmRleCApOwotCQkJCQkJZWxzZQotCQkJCQkJCURpc2FibGVNZW51SXRl
bSggaW5Db21tYW5kLT5tZW51Lm1lbnVSZWYsIGluQ29tbWFuZC0+bWVudS5tZW51SXRlbUluZGV4
ICk7Ci0JCQkJCQkKLQkJCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQl9Ci0JCQkJfQotCQkJfQot
CQl9Ci0JfQotCQotCWlmICggcHJveHkgKQotCQlbcHJveHkgcmVsZWFzZV07CisgICAgT1NTdGF0
dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIE1lbnVJdGVtUHJveHkqIHByb3h5
ID0gbnVsbHB0cjsKKyAgICBOU1Jlc3BvbmRlciogcmVzcDsKKyAgICAKKyAgICByZXNwID0gW2lu
Vmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07CisgICAgCisgICAgaWYgKFtyZXNwIGlz
S2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dKSB7CisgICAgICAgIE5TVmlldyogcmVzcFZpZXcg
PSAoTlNWaWV3KilyZXNwOworCisgICAgICAgIGlmICgocmVzcFZpZXcgPT0gaW5WaWV3LT5mV2Vi
VmlldyB8fCBbcmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+ZldlYlZpZXddKSAmJiBp
bkNvbW1hbmQtPmF0dHJpYnV0ZXMgJiBrSElDb21tYW5kRnJvbU1lbnUpIHsKKyAgICAgICAgICAg
IFNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKGluQ29tbWFuZCk7CisgICAg
CisgICAgICAgICAgICBpZiAoc2VsZWN0b3IgJiYgW3Jlc3AgcmVzcG9uZHNUb1NlbGVjdG9yOiBz
ZWxlY3Rvcl0pIHsKKyAgICAgICAgICAgICAgICBwcm94eSA9IFtbTWVudUl0ZW1Qcm94eSBhbGxv
Y10gaW5pdFdpdGhBY3Rpb246IHNlbGVjdG9yXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIC1wZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDogaGVy
ZSBiZWNhdXNlIHRoZSBtZXRob2Qgd2UncmUgY2FsbGluZyByZXR1cm5zIEJPT0wsIHdoaWxlCisg
ICAgICAgICAgICAgICAgLy8gLXBlcmZvcm1TZWxlY3Rvcjp3aXRoT2JqZWN0OidzIHJldHVybiB2
YWx1ZSBpcyBhc3N1bWVkIHRvIGJlIGFuIGlkLgorICAgICAgICAgICAgICAgIGlmICh3dGZPYmpj
TXNnU2VuZDxCT09MPihyZXNwLCBAc2VsZWN0b3IodmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTop
LCBwcm94eSkpCisgICAgICAgICAgICAgICAgICAgIEVuYWJsZU1lbnVJdGVtKGluQ29tbWFuZC0+
bWVudS5tZW51UmVmLCBpbkNvbW1hbmQtPm1lbnUubWVudUl0ZW1JbmRleCk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBEaXNhYmxlTWVudUl0ZW0oaW5Db21tYW5k
LT5tZW51Lm1lbnVSZWYsIGluQ29tbWFuZC0+bWVudS5tZW51SXRlbUluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHByb3h5KQorICAgICAgICBbcHJv
eHkgcmVsZWFzZV07CiAKLQlyZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IC8vIEJsYXRhbnRseSBzdG9sZW4gZnJvbSBBcHBLaXQgYW5kIGNyb3BwZWQgYSBiaXQKQEAgLTEz
MDMsNDIxICsxMTU1LDM3OSBAQCBVcGRhdGVDb21tYW5kU3RhdHVzKCBISVdlYlZpZXcqIGluVmll
dywgCiAvLyBfTlNTZWxlY3RvckZvckhJQ29tbWFuZAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAvLwotc3RhdGljIFNFTAotX05TU2VsZWN0b3JGb3JISUNvbW1hbmQoIGNvbnN0IEhJQ29t
bWFuZCogaW5Db21tYW5kICkKK3N0YXRpYyBTRUwgX05TU2VsZWN0b3JGb3JISUNvbW1hbmQoY29u
c3QgSElDb21tYW5kKiBpbkNvbW1hbmQpCiB7Ci0gICAgc3dpdGNoICggaW5Db21tYW5kLT5jb21t
YW5kSUQgKQotCXsKLSAgICAgICAgY2FzZSBrSElDb21tYW5kVW5kbzogcmV0dXJuIEBzZWxlY3Rv
cih1bmRvOik7Ci0gICAgICAgIGNhc2Uga0hJQ29tbWFuZFJlZG86IHJldHVybiBAc2VsZWN0b3Io
cmVkbzopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRDdXQgIDogcmV0dXJuIEBzZWxlY3Rvcihj
dXQ6KTsKLSAgICAgICAgY2FzZSBrSElDb21tYW5kQ29weSA6IHJldHVybiBAc2VsZWN0b3IoY29w
eTopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRQYXN0ZTogcmV0dXJuIEBzZWxlY3RvcihwYXN0
ZTopOwotICAgICAgICBjYXNlIGtISUNvbW1hbmRDbGVhcjogcmV0dXJuIEBzZWxlY3RvcihkZWxl
dGU6KTsKLSAgICAgICAgY2FzZSBrSElDb21tYW5kU2VsZWN0QWxsOiByZXR1cm4gQHNlbGVjdG9y
KHNlbGVjdEFsbDopOwotICAgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2gg
KGluQ29tbWFuZC0+Y29tbWFuZElEKSB7CisgICAgY2FzZSBrSElDb21tYW5kVW5kbzoKKyAgICAg
ICAgcmV0dXJuIEBzZWxlY3Rvcih1bmRvOik7CisgICAgY2FzZSBrSElDb21tYW5kUmVkbzoKKyAg
ICAgICAgcmV0dXJuIEBzZWxlY3RvcihyZWRvOik7CisgICAgY2FzZSBrSElDb21tYW5kQ3V0Ogor
ICAgICAgICByZXR1cm4gQHNlbGVjdG9yKGN1dDopOworICAgIGNhc2Uga0hJQ29tbWFuZENvcHk6
CisgICAgICAgIHJldHVybiBAc2VsZWN0b3IoY29weTopOworICAgIGNhc2Uga0hJQ29tbWFuZFBh
c3RlOgorICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHBhc3RlOik7CisgICAgY2FzZSBrSElDb21t
YW5kQ2xlYXI6CisgICAgICAgIHJldHVybiBAc2VsZWN0b3IoZGVsZXRlOik7CisgICAgY2FzZSBr
SElDb21tYW5kU2VsZWN0QWxsOgorICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHNlbGVjdEFsbDop
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJl
dHVybiBOVUxMOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAKIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vCUhJV2ViVmlld0V2ZW50SGFuZGxlcgorLy8gICAgSElXZWJWaWV3RXZl
bnRIYW5kbGVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwlPdXIgb2JqZWN0J3Mg
dmlydHVhbCBldmVudCBoYW5kbGVyIG1ldGhvZC4gSSdtIG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhp
cyB0aGVzZSBkYXlzLgotLy8JV2UgdXNlZCB0byBkbyB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBi
dXQgdGhvc2UgZGF5cyBhcmUgbG9uZyBnb25lLi4uCisvLyAgICBPdXIgb2JqZWN0J3MgdmlydHVh
bCBldmVudCBoYW5kbGVyIG1ldGhvZC4gSSdtIG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhpcyB0aGVz
ZSBkYXlzLgorLy8gICAgV2UgdXNlZCB0byBkbyB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBidXQg
dGhvc2UgZGF5cyBhcmUgbG9uZyBnb25lLi4uCiAvLwogc3RhdGljIE9TU3RhdHVzCi1ISVdlYlZp
ZXdFdmVudEhhbmRsZXIoCi0JRXZlbnRIYW5kbGVyQ2FsbFJlZglpbkNhbGxSZWYsCi0JRXZlbnRS
ZWYJCQlpbkV2ZW50LAotCXZvaWQgKgkJCQlpblVzZXJEYXRhICkKLXsKLQlPU1N0YXR1cwkJCXJl
c3VsdCA9IGV2ZW50Tm90SGFuZGxlZEVycjsKLQlISVBvaW50CQkJCXdoZXJlOwotCU9TVHlwZQkJ
CQl0YWc7Ci0Jdm9pZCAqCQkJCXB0cjsKLQlTaXplCQkJCXNpemU7Ci0JVUludDMyCQkJCWZlYXR1
cmVzOwotCVJnbkhhbmRsZQkJCXJlZ2lvbiA9IE5VTEw7Ci0JQ29udHJvbFBhcnRDb2RlCQlwYXJ0
OwotCUhJV2ViVmlldyoJCQl2aWV3ID0gKEhJV2ViVmlldyopaW5Vc2VyRGF0YTsKLQotICAgICAg
ICAvLyBbTlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXSBtdXN0IGJlIGNhbGxlZCBiZWZv
cmUgZXZlbnRzIHNvIHRoYXQgQWN0aXZhdGVUU01Eb2N1bWVudCBpcyBjYWxsZWQgdG8gc2V0IGFu
IGFjdGl2ZSBkb2N1bWVudC4gCi0gICAgICAgIC8vIFdpdGhvdXQgYW4gYWN0aXZlIGRvY3VtZW50
LCBUU00gd2lsbCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVzZXMgYSBib3R0b20tbGlu
ZSBpbnB1dCB3aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KLSAgICAgICAgW05TQXBwIHNldFdp
bmRvd3NOZWVkVXBkYXRlOllFU107CitISVdlYlZpZXdFdmVudEhhbmRsZXIoRXZlbnRIYW5kbGVy
Q2FsbFJlZiBpbkNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnQsIHZvaWQgKmluVXNlckRhdGEpCit7
CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOworICAgIEhJUG9pbnQg
d2hlcmU7CisgICAgT1NUeXBlIHRhZzsKKyAgICB2b2lkICpwdHI7CisgICAgU2l6ZSBzaXplOwor
ICAgIFVJbnQzMiBmZWF0dXJlczsKKyAgICBSZ25IYW5kbGUgcmVnaW9uID0gbnVsbHB0cjsKKyAg
ICBDb250cm9sUGFydENvZGUgcGFydDsKKyAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElXZWJWaWV3
KilpblVzZXJEYXRhOworCisgICAgLy8gW05TQXBwIHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU10g
bXVzdCBiZSBjYWxsZWQgYmVmb3JlIGV2ZW50cyBzbyB0aGF0IEFjdGl2YXRlVFNNRG9jdW1lbnQg
aXMgY2FsbGVkIHRvIHNldCBhbiBhY3RpdmUgZG9jdW1lbnQuIAorICAgIC8vIFdpdGhvdXQgYW4g
YWN0aXZlIGRvY3VtZW50LCBUU00gd2lsbCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVz
ZXMgYSBib3R0b20tbGluZSBpbnB1dCB3aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KKyAgICBb
TlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXTsKICAgICAgICAgCi0Jc3dpdGNoICggR2V0
RXZlbnRDbGFzcyggaW5FdmVudCApICkKLQl7Ci0JCWNhc2Uga0V2ZW50Q2xhc3NISU9iamVjdDoK
LQkJCXN3aXRjaCAoIEdldEV2ZW50S2luZCggaW5FdmVudCApICkKLQkJCXsKLQkJCQljYXNlIGtF
dmVudEhJT2JqZWN0Q29uc3RydWN0OgotCQkJCQl7Ci0JCQkJCQlISU9iamVjdFJlZgkJb2JqZWN0
OwotCi0JCQkJCQlyZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFy
YW1ISU9iamVjdEluc3RhbmNlLAotCQkJCQkJCQl0eXBlSElPYmplY3RSZWYsIE5VTEwsIHNpemVv
ZiggSElPYmplY3RSZWYgKSwgTlVMTCwgJm9iamVjdCApOwotCQkJCQkJcmVxdWlyZV9ub2Vycigg
cmVzdWx0LCBNaXNzaW5nUGFyYW1ldGVyICk7Ci0JCQkJCQkKLQkJCQkJCS8vIG9uIGVudHJ5IGZv
ciBvdXIgY29uc3RydWN0IGV2ZW50LCB3ZSdyZSBwYXNzZWQgdGhlCi0JCQkJCQkvLyBjcmVhdGlv
biBwcm9jIHdlIHJlZ2lzdGVyZWQgd2l0aCBmb3IgdGhpcyBjbGFzcy4KLQkJCQkJCS8vIHdlIHVz
ZSBpdCBub3cgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSwgYW5kIHRoZW4gd2UKLQkJCQkJCS8vIHJl
cGxhY2UgdGhlIGluc3RhbmNlIHBhcmFtZXRlciBkYXRhIHdpdGggc2FpZCBpbnN0YW5jZQotCQkJ
CQkJLy8gYXMgdHlwZSB2b2lkLgotCi0JCQkJCQl2aWV3ID0gSElXZWJWaWV3Q29uc3RydWN0b3Io
IChISVZpZXdSZWYpb2JqZWN0ICk7Ci0KLQkJCQkJCWlmICggdmlldyApCi0JCQkJCQl7Ci0JCQkJ
CQkJU2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtSElPYmplY3RJbnN0YW5j
ZSwKLQkJCQkJCQkJCXR5cGVWb2lkUHRyLCBzaXplb2YoIHZvaWQgKiApLCAmdmlldyApOyAKLQkJ
CQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudEhJT2JqZWN0
RGVzdHJ1Y3Q6Ci0JCQkJCUhJV2ViVmlld0Rlc3RydWN0b3IoIHZpZXcgKTsKLQkJCQkJLy8gcmVz
dWx0IGlzIHVuaW1wb3J0YW50Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2Fz
ZSBrRXZlbnRDbGFzc0tleWJvYXJkOgotCQkJewotICAgICAgICAgICAgICAgIE5TRXZlbnQqIGtp
dEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLQkJCQlbdmll
dy0+ZktpdFdpbmRvdyBzZW5kU3VwZXJFdmVudDpraXRFdmVudF07Ci0JCQkJW2tpdEV2ZW50IHJl
bGVhc2VdOwotCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBr
RXZlbnRDbGFzc01vdXNlOgotCQkJc3dpdGNoICggR2V0RXZlbnRLaW5kKCBpbkV2ZW50ICkgKQot
CQkJewotCQkJCWNhc2Uga0V2ZW50TW91c2VVcDoKLQkJCQkJcmVzdWx0ID0gTW91c2VVcCggdmll
dywgaW5FdmVudCApOwotCQkJCQlicmVhazsKLQkJCQkKLQkJCQljYXNlIGtFdmVudE1vdXNlV2hl
ZWxNb3ZlZDoKLQkJCQkJcmVzdWx0ID0gTW91c2VXaGVlbE1vdmVkKCB2aWV3LCBpbkV2ZW50ICk7
Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBrRXZlbnRNb3VzZU1vdmVkOgotCQkJCQlyZXN1bHQg
PSBNb3VzZU1vdmVkKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBr
RXZlbnRNb3VzZURyYWdnZWQ6Ci0JCQkJCXJlc3VsdCA9IE1vdXNlRHJhZ2dlZCggdmlldywgaW5F
dmVudCApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2Uga0V2ZW50Q2xh
c3NDb21tYW5kOgotCQkJewotCQkJCUhJQ29tbWFuZAkJY29tbWFuZDsKLQkJCQkKLQkJCQlyZXN1
bHQgPSBHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1EaXJlY3RPYmplY3Qs
IHR5cGVISUNvbW1hbmQsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggSElDb21tYW5kICksIE5VTEws
ICZjb21tYW5kICk7Ci0JCQkJcmVxdWlyZV9ub2VyciggcmVzdWx0LCBNaXNzaW5nUGFyYW1ldGVy
ICk7Ci0JCQkJCi0JCQkJc3dpdGNoICggR2V0RXZlbnRLaW5kKCBpbkV2ZW50ICkgKQotCQkJCXsK
LQkJCQkJY2FzZSBrRXZlbnRDb21tYW5kUHJvY2VzczoKLQkJCQkJCXJlc3VsdCA9IFByb2Nlc3ND
b21tYW5kKCB2aWV3LCAmY29tbWFuZCApOwotCQkJCQkJYnJlYWs7Ci0JCQkJCQotCQkJCQljYXNl
IGtFdmVudENvbW1hbmRVcGRhdGVTdGF0dXM6Ci0JCQkJCQlyZXN1bHQgPSBVcGRhdGVDb21tYW5k
U3RhdHVzKCB2aWV3LCAmY29tbWFuZCApOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJ
YnJlYWs7Ci0KLQkJY2FzZSBrRXZlbnRDbGFzc0NvbnRyb2w6Ci0JCQlzd2l0Y2ggKCBHZXRFdmVu
dEtpbmQoIGluRXZlbnQgKSApCi0JCQl7Ci0JCQkJY2FzZSBrRXZlbnRDb250cm9sSW5pdGlhbGl6
ZToKLQkJCQkJZmVhdHVyZXMgPSBHZXRCZWhhdmlvcnMoKTsKLQkJCQkJU2V0RXZlbnRQYXJhbWV0
ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbEZlYXR1cmVzLCB0eXBlVUludDMyLAotCQkJ
CQkJCXNpemVvZiggVUludDMyICksICZmZWF0dXJlcyApOwotCQkJCQlyZXN1bHQgPSBub0VycjsK
LQkJCQkJYnJlYWs7Ci0JCQkJCQotCQkJCWNhc2Uga0V2ZW50Q29udHJvbERyYXc6Ci0JCQkJCXsK
LQkJCQkJCUNHQ29udGV4dFJlZgkJY29udGV4dCA9IE5VTEw7Ci0JCQkJCQkKLQkJCQkJCUdldEV2
ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbVJnbkhhbmRsZSwgdHlwZVFEUmduSGFu
ZGxlLCBOVUxMLAotCQkJCQkJCQlzaXplb2YoIFJnbkhhbmRsZSApLCBOVUxMLCAmcmVnaW9uICk7
Ci0JCQkJCQlHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1DR0NvbnRleHRS
ZWYsIHR5cGVDR0NvbnRleHRSZWYsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggQ0dDb250ZXh0UmVm
ICksIE5VTEwsICZjb250ZXh0ICk7Ci0KLQkJCQkJCURyYXcoIHZpZXcsIHJlZ2lvbiwgY29udGV4
dCApOwotCi0JCQkJCQlyZXN1bHQgPSBub0VycjsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkK
LQkJCQljYXNlIGtFdmVudENvbnRyb2xIaXRUZXN0OgotCQkJCQlHZXRFdmVudFBhcmFtZXRlcigg
aW5FdmVudCwga0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgTlVMTCwKLQkJ
CQkJCQlzaXplb2YoIEhJUG9pbnQgKSwgTlVMTCwgJndoZXJlICk7Ci0JCQkJCXBhcnQgPSBIaXRU
ZXN0KCB2aWV3LCAmd2hlcmUgKTsKLQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtF
dmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIHNpemVvZiggQ29udHJv
bFBhcnRDb2RlICksICZwYXJ0ICk7Ci0JCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQlicmVhazsK
LQkJCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9sR2V0UGFydFJlZ2lvbjoKLQkJCQkJR2V0RXZl
bnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9s
UGFydENvZGUsIE5VTEwsCi0JCQkJCQkJc2l6ZW9mKCBDb250cm9sUGFydENvZGUgKSwgTlVMTCwg
JnBhcnQgKTsKLQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29u
dHJvbFJlZ2lvbiwgdHlwZVFEUmduSGFuZGxlLCBOVUxMLAotCQkJCQkJCXNpemVvZiggUmduSGFu
ZGxlICksIE5VTEwsICZyZWdpb24gKTsKLQkJCQkJcmVzdWx0ID0gR2V0UmVnaW9uKCB2aWV3LCBw
YXJ0LCByZWdpb24gKTsKLQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9s
R2V0RGF0YToKLQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250
cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwgTlVMTCwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29k
ZSksIE5VTEwsICZwYXJ0KTsKLQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50
UGFyYW1Db250cm9sRGF0YVRhZywgdHlwZUVudW1lcmF0aW9uLCBOVUxMLCBzaXplb2YoT1NUeXBl
KSwgTlVMTCwgJnRhZyk7Ci0JCQkJCUdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBh
cmFtQ29udHJvbERhdGFCdWZmZXIsIHR5cGVQdHIsIE5VTEwsIHNpemVvZihQdHIpLCBOVUxMLCAm
cHRyKTsKLQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9s
RGF0YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIE5VTEwsIHNpemVvZihTaXplKSwgTlVMTCwg
JnNpemUpOwotCi0JCQkJCWlmICh0YWcgPT0ga0NvbnRyb2xLaW5kVGFnKSB7Ci0JCQkJCQlTaXpl
IG91dFNpemU7Ci0JCQkJCQlyZXN1bHQgPSBub0VycjsKLQotCQkJCQkJaWYgKHB0cikgewotCQkJ
CQkJCWlmIChzaXplICE9IHNpemVvZihDb250cm9sS2luZCkpCi0JCQkJCQkJCXJlc3VsdCA9IGVy
ckRhdGFTaXplTWlzbWF0Y2g7Ci0JCQkJCQkJZWxzZQotCQkJCQkJCQkoKihDb250cm9sS2luZCAq
KXB0cikgPSBHZXRLaW5kKCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCW91dFNpemUgPSBzaXplb2YoQ29u
dHJvbEtpbmQpOwotCQkJCQkJU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1D
b250cm9sRGF0YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIHNpemVvZihTaXplKSwgJm91dFNp
emUpOwotCQkJCQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJY2FzZSBrRXZlbnRDb250cm9s
Qm91bmRzQ2hhbmdlZDoKLQkJCQkJewotCQkJCQkJSElSZWN0CQlwcmV2UmVjdCwgY3VyclJlY3Q7
Ci0JCQkJCQlVSW50MzIJCWF0dHJzOwotCQkJCQkJCi0JCQkJCQlHZXRFdmVudFBhcmFtZXRlcigg
aW5FdmVudCwga0V2ZW50UGFyYW1BdHRyaWJ1dGVzLCB0eXBlVUludDMyLCBOVUxMLAotCQkJCQkJ
CQlzaXplb2YoIFVJbnQzMiApLCBOVUxMLCAmYXR0cnMgKTsKLQkJCQkJCUdldEV2ZW50UGFyYW1l
dGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbU9yaWdpbmFsQm91bmRzLCB0eXBlSElSZWN0LCBOVUxM
LAotCQkJCQkJCQlzaXplb2YoIEhJUmVjdCApLCBOVUxMLCAmcHJldlJlY3QgKTsKLQkJCQkJCUdl
dEV2ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbUN1cnJlbnRCb3VuZHMsIHR5cGVI
SVJlY3QsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggSElSZWN0ICksIE5VTEwsICZjdXJyUmVjdCAp
OwotCi0JCQkJCQlCb3VuZHNDaGFuZ2VkKCB2aWV3LCBhdHRycywgJnByZXZSZWN0LCAmY3VyclJl
Y3QgKTsKLQkJCQkJCXJlc3VsdCA9IG5vRXJyOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCQot
CQkJCWNhc2Uga0V2ZW50Q29udHJvbEFjdGl2YXRlOgotCQkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQo
IHZpZXcgKTsKLQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCWJyZWFrOwotCQkJCQkKLQkJCQlj
YXNlIGtFdmVudENvbnRyb2xEZWFjdGl2YXRlOgotCQkJCQlBY3RpdmVTdGF0ZUNoYW5nZWQoIHZp
ZXcgKTsKLQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCWJyZWFrOwotCQkJCQkJCQkJCQkJCQkJ
Ci0JCQkJY2FzZSBrRXZlbnRDb250cm9sT3duaW5nV2luZG93Q2hhbmdlZDoKLQkJCQkJewotCQkJ
CQkJV2luZG93UmVmCQlmcm9tV2luZG93LCB0b1dpbmRvdzsKLQkJCQkJCQotCQkJCQkJcmVzdWx0
ID0gR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbE9yaWdpbmFs
T3duaW5nV2luZG93LCB0eXBlV2luZG93UmVmLCBOVUxMLAotCQkJCQkJCQkJCXNpemVvZiggV2lu
ZG93UmVmICksIE5VTEwsICZmcm9tV2luZG93ICk7Ci0JCQkJCQlyZXF1aXJlX25vZXJyKCByZXN1
bHQsIE1pc3NpbmdQYXJhbWV0ZXIgKTsKLQotCQkJCQkJcmVzdWx0ID0gR2V0RXZlbnRQYXJhbWV0
ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbEN1cnJlbnRPd25pbmdXaW5kb3csIHR5cGVX
aW5kb3dSZWYsIE5VTEwsCi0JCQkJCQkJCQkJc2l6ZW9mKCBXaW5kb3dSZWYgKSwgTlVMTCwgJnRv
V2luZG93ICk7Ci0JCQkJCQlyZXF1aXJlX25vZXJyKCByZXN1bHQsIE1pc3NpbmdQYXJhbWV0ZXIg
KTsKLQotCQkJCQkJT3duaW5nV2luZG93Q2hhbmdlZCggdmlldywgZnJvbVdpbmRvdywgdG9XaW5k
b3cgKTsKLQkJCQkJCQotCQkJCQkJcmVzdWx0ID0gbm9FcnI7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJCQljYXNlIGtFdmVudENv
bnRyb2xDbGljazoKLQkJCQkJcmVzdWx0ID0gQ2xpY2soIHZpZXcsIGluRXZlbnQgKTsKLQkJCQkJ
YnJlYWs7CisgICAgc3dpdGNoIChHZXRFdmVudENsYXNzKGluRXZlbnQpKSB7CisgICAgY2FzZSBr
RXZlbnRDbGFzc0hJT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50
KSkgeworICAgICAgICBjYXNlIGtFdmVudEhJT2JqZWN0Q29uc3RydWN0OgorICAgICAgICAgICAg
SElPYmplY3RSZWYgb2JqZWN0OworCisgICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFt
ZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUhJT2JqZWN0SW5zdGFuY2UsCisgICAgICAgICAgICB0
eXBlSElPYmplY3RSZWYsIG51bGxwdHIsIHNpemVvZihISU9iamVjdFJlZiksIG51bGxwdHIsICZv
YmplY3QpOworICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAvLyBv
biBlbnRyeSBmb3Igb3VyIGNvbnN0cnVjdCBldmVudCwgd2UncmUgcGFzc2VkIHRoZQorICAgICAg
ICAgICAgLy8gY3JlYXRpb24gcHJvYyB3ZSByZWdpc3RlcmVkIHdpdGggZm9yIHRoaXMgY2xhc3Mu
CisgICAgICAgICAgICAvLyB3ZSB1c2UgaXQgbm93IHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UsIGFu
ZCB0aGVuIHdlCisgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXIg
ZGF0YSB3aXRoIHNhaWQgaW5zdGFuY2UKKyAgICAgICAgICAgIC8vIGFzIHR5cGUgdm9pZC4KKwor
ICAgICAgICAgICAgdmlldyA9IEhJV2ViVmlld0NvbnN0cnVjdG9yKChISVZpZXdSZWYpb2JqZWN0
KTsKKworICAgICAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJh
bWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1ISU9iamVjdEluc3RhbmNlLCB0eXBlVm9pZFB0ciwg
c2l6ZW9mKHZvaWQgKiksICZ2aWV3KTsgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBrRXZlbnRISU9iamVjdERlc3RydWN0OgorICAgICAgICAgICAg
SElXZWJWaWV3RGVzdHJ1Y3Rvcih2aWV3KTsKKyAgICAgICAgICAgIC8vIHJlc3VsdCBpcyB1bmlt
cG9ydGFudAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIGtFdmVudENsYXNzS2V5Ym9hcmQ6IHsKKyAgICAgICAgTlNFdmVudCoga2l0RXZl
bnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGluRXZlbnQpOworICAgICAgICBbdmll
dy0+ZktpdFdpbmRvdyBzZW5kU3VwZXJFdmVudDpraXRFdmVudF07CisgICAgICAgIFtraXRFdmVu
dCByZWxlYXNlXTsKKyAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2Uga0V2ZW50Q2xhc3NNb3VzZToKKyAgICAgICAgc3dpdGNoIChHZXRFdmVu
dEtpbmQoaW5FdmVudCkpIHsKKyAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVVwOgorICAgICAgICAg
ICAgcmVzdWx0ID0gTW91c2VVcCh2aWV3LCBpbkV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6CisgICAgICAgICAg
ICByZXN1bHQgPSBNb3VzZVdoZWVsTW92ZWQodmlldywgaW5FdmVudCk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIGtFdmVudE1vdXNlTW92ZWQ6CisgICAgICAgICAgICByZXN1
bHQgPSBNb3VzZU1vdmVkKHZpZXcsIGluRXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBrRXZlbnRNb3VzZURyYWdnZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBNb3Vz
ZURyYWdnZWQodmlldywgaW5FdmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb21tYW5kOgorICAgICAgICBI
SUNvbW1hbmQgY29tbWFuZDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFy
YW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlSElDb21tYW5kLCBu
dWxscHRyLCBzaXplb2YoSElDb21tYW5kKSwgbnVsbHB0ciwgJmNvbW1hbmQpOworICAgICAgICBB
U1NFUlQoIXJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgICAgIHN3aXRjaCAoR2V0RXZlbnRLaW5kKGluRXZlbnQpKSB7CisgICAg
ICAgIGNhc2Uga0V2ZW50Q29tbWFuZFByb2Nlc3M6CisgICAgICAgICAgICByZXN1bHQgPSBQcm9j
ZXNzQ29tbWFuZCh2aWV3LCAmY29tbWFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAKKyAg
ICAgICAgY2FzZSBrRXZlbnRDb21tYW5kVXBkYXRlU3RhdHVzOgorICAgICAgICAgICAgcmVzdWx0
ID0gVXBkYXRlQ29tbWFuZFN0YXR1cyh2aWV3LCAmY29tbWFuZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0V2ZW50Q2xhc3NDb250
cm9sOgorICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgeworICAgICAgICBj
YXNlIGtFdmVudENvbnRyb2xJbml0aWFsaXplOgorICAgICAgICAgICAgZmVhdHVyZXMgPSBHZXRC
ZWhhdmlvcnMoKTsKKyAgICAgICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVu
dFBhcmFtQ29udHJvbEZlYXR1cmVzLCB0eXBlVUludDMyLCBzaXplb2YoVUludDMyKSwgJmZlYXR1
cmVzKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sRHJhdzogeworICAgICAgICAgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBudWxscHRyOworCisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihp
bkV2ZW50LCBrRXZlbnRQYXJhbVJnbkhhbmRsZSwgdHlwZVFEUmduSGFuZGxlLCBudWxscHRyLCBz
aXplb2YoUmduSGFuZGxlKSwgbnVsbHB0ciwgJnJlZ2lvbik7CisgICAgICAgICAgICBHZXRFdmVu
dFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNHQ29udGV4dFJlZiwgdHlwZUNHQ29udGV4
dFJlZiwgbnVsbHB0ciwgc2l6ZW9mKENHQ29udGV4dFJlZiksIG51bGxwdHIsICZjb250ZXh0KTsK
KworICAgICAgICAgICAgRHJhdyh2aWV3LCByZWdpb24sIGNvbnRleHQpOworICAgICAgICAgICAg
cmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2Uga0V2ZW50Q29udHJvbEhpdFRlc3Q6CisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRl
cihpbkV2ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVISVBvaW50LCBudWxscHRy
LCBzaXplb2YoSElQb2ludCksIG51bGxwdHIsICZ3aGVyZSk7CisgICAgICAgICAgICBwYXJ0ID0g
SGl0VGVzdCh2aWV3LCAmd2hlcmUpOworICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5F
dmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwgc2l6ZW9m
KENvbnRyb2xQYXJ0Q29kZSksICZwYXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sR2V0UGFydFJl
Z2lvbjoKKyAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFt
Q29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIG51bGxwdHIsIHNpemVvZihDb250cm9s
UGFydENvZGUpLCBudWxscHRyLCAmcGFydCk7CisgICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRl
cihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xSZWdpb24sIHR5cGVRRFJnbkhhbmRsZSwgbnVs
bHB0ciwgc2l6ZW9mKFJnbkhhbmRsZSksIG51bGxwdHIsICZyZWdpb24pOworICAgICAgICAgICAg
cmVzdWx0ID0gR2V0UmVnaW9uKHZpZXcsIHBhcnQsIHJlZ2lvbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sR2V0RGF0YTog
eworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250
cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwgbnVsbHB0ciwgc2l6ZW9mKENvbnRyb2xQYXJ0
Q29kZSksIG51bGxwdHIsICZwYXJ0KTsKKyAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGlu
RXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbERhdGFUYWcsIHR5cGVFbnVtZXJhdGlvbiwgbnVsbHB0
ciwgc2l6ZW9mKE9TVHlwZSksIG51bGxwdHIsICZ0YWcpOworICAgICAgICAgICAgR2V0RXZlbnRQ
YXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZlciwgdHlwZVB0ciwg
bnVsbHB0ciwgc2l6ZW9mKFB0ciksIG51bGxwdHIsICZwdHIpOworICAgICAgICAgICAgR2V0RXZl
bnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZlclNpemUsIHR5
cGVCeXRlQ291bnQsIG51bGxwdHIsIHNpemVvZihTaXplKSwgbnVsbHB0ciwgJnNpemUpOworCisg
ICAgICAgICAgICBpZiAodGFnID09IGtDb250cm9sS2luZFRhZykgeworICAgICAgICAgICAgICAg
IFNpemUgb3V0U2l6ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBub0VycjsKKworICAgICAg
ICAgICAgICAgIGlmIChwdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gc2l6
ZW9mKENvbnRyb2xLaW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVyckRh
dGFTaXplTWlzbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICgqKENvbnRyb2xLaW5kICopcHRyKSA9IEdldEtpbmQoKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRTaXplID0gc2l6ZW9mKENvbnRyb2xLaW5kKTsK
KyAgICAgICAgICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNv
bnRyb2xEYXRhQnVmZmVyU2l6ZSwgdHlwZUJ5dGVDb3VudCwgc2l6ZW9mKFNpemUpLCAmb3V0U2l6
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Uga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQ6IHsKKyAgICAgICAgICAgIEhJUmVj
dCBwcmV2UmVjdCwgY3VyclJlY3Q7CisgICAgICAgICAgICBVSW50MzIgYXR0cnM7CisgICAgICAg
IAorICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1BdHRy
aWJ1dGVzLCB0eXBlVUludDMyLCBudWxscHRyLCBzaXplb2YoVUludDMyKSwgbnVsbHB0ciwgJmF0
dHJzKTsKKyAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFt
T3JpZ2luYWxCb3VuZHMsIHR5cGVISVJlY3QsIG51bGxwdHIsIHNpemVvZihISVJlY3QpLCBudWxs
cHRyLCAmcHJldlJlY3QpOworICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwg
a0V2ZW50UGFyYW1DdXJyZW50Qm91bmRzLCB0eXBlSElSZWN0LCBudWxscHRyLCBzaXplb2YoSElS
ZWN0KSwgbnVsbHB0ciwgJmN1cnJSZWN0KTsKKworICAgICAgICAgICAgQm91bmRzQ2hhbmdlZCh2
aWV3LCBhdHRycywgJnByZXZSZWN0LCAmY3VyclJlY3QpOworICAgICAgICAgICAgcmVzdWx0ID0g
bm9FcnI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Uga0V2
ZW50Q29udHJvbEFjdGl2YXRlOgorICAgICAgICAgICAgQWN0aXZlU3RhdGVDaGFuZ2VkKHZpZXcp
OworICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIGtFdmVudENvbnRyb2xEZWFjdGl2YXRlOgorICAgICAgICAgICAgQWN0aXZlU3Rh
dGVDaGFuZ2VkKHZpZXcpOworICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbE93bmluZ1dpbmRv
d0NoYW5nZWQ6IHsKKyAgICAgICAgICAgIFdpbmRvd1JlZiBmcm9tV2luZG93LCB0b1dpbmRvdzsK
KworICAgICAgICAgICAgcmVzdWx0ID0gR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50
UGFyYW1Db250cm9sT3JpZ2luYWxPd25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYsIG51bGxwdHIs
IHNpemVvZihXaW5kb3dSZWYpLCBudWxscHRyLCAmZnJvbVdpbmRvdyk7CisgICAgICAgICAgICBB
U1NFUlQoIXJlc3VsdCk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVy
KGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbEN1cnJlbnRPd25pbmdXaW5kb3csIHR5cGVXaW5k
b3dSZWYsIG51bGxwdHIsIHNpemVvZihXaW5kb3dSZWYpLCBudWxscHRyLCAmdG9XaW5kb3cpOwor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBPd25pbmdXaW5kb3dD
aGFuZ2VkKHZpZXcsIGZyb21XaW5kb3csIHRvV2luZG93KTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG5vRXJyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIGtF
dmVudENvbnRyb2xDbGljazoKKyAgICAgICAgICAgIHJlc3VsdCA9IENsaWNrKHZpZXcsIGluRXZl
bnQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLQkJCQljYXNlIGtFdmVudENvbnRyb2xDb250ZXh0dWFsTWVudUNsaWNrOgotCQkJCQly
ZXN1bHQgPSBDb250ZXh0TWVudUNsaWNrKCB2aWV3LCBpbkV2ZW50ICk7Ci0JCQkJCWJyZWFrOwor
ICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xDb250ZXh0dWFsTWVudUNsaWNrOgorICAgICAgICAg
ICAgcmVzdWx0ID0gQ29udGV4dE1lbnVDbGljayh2aWV3LCBpbkV2ZW50KTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQkJY2FzZSBr
RXZlbnRDb250cm9sU2V0Rm9jdXNQYXJ0OgotCQkJCQl7Ci0JCQkJCQlDb250cm9sUGFydENvZGUJ
CWRlc2lyZWRGb2N1czsKLQkJCQkJCVJnbkhhbmRsZQkJCWludmFsaWRSZ247Ci0JCQkJCQlCb29s
ZWFuCQkJCWZvY3VzRXZlcnl0aGluZzsKLQkJCQkJCUNvbnRyb2xQYXJ0Q29kZQkJYWN0dWFsRm9j
dXM7Ci0JCQkJCQkKLQkJCQkJCXJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBr
RXZlbnRQYXJhbUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLCBOVUxMLAotCQkJCQkJ
CQkJCXNpemVvZiggQ29udHJvbFBhcnRDb2RlICksIE5VTEwsICZkZXNpcmVkRm9jdXMgKTsgCi0J
CQkJCQlyZXF1aXJlX25vZXJyKCByZXN1bHQsIE1pc3NpbmdQYXJhbWV0ZXIgKTsKLQkJCQkJCQot
CQkJCQkJR2V0RXZlbnRQYXJhbWV0ZXIoIGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbEludmFs
UmduLCB0eXBlUURSZ25IYW5kbGUsIE5VTEwsCi0JCQkJCQkJCXNpemVvZiggUmduSGFuZGxlICks
IE5VTEwsICZpbnZhbGlkUmduICk7Ci0KLQkJCQkJCWZvY3VzRXZlcnl0aGluZyA9IGZhbHNlOyAv
LyBhIGdvb2QgZGVmYXVsdCBpbiBjYXNlIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBleGlzdAotCi0J
CQkJCQlHZXRFdmVudFBhcmFtZXRlciggaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sRm9jdXNF
dmVyeXRoaW5nLCB0eXBlQm9vbGVhbiwgTlVMTCwKLQkJCQkJCQkJc2l6ZW9mKCBCb29sZWFuICks
IE5VTEwsICZmb2N1c0V2ZXJ5dGhpbmcgKTsKLQotCQkJCQkJcmVzdWx0ID0gU2V0Rm9jdXNQYXJ0
KCB2aWV3LCBkZXNpcmVkRm9jdXMsIGludmFsaWRSZ24sIGZvY3VzRXZlcnl0aGluZywgJmFjdHVh
bEZvY3VzICk7Ci0JCQkJCQkKLQkJCQkJCWlmICggcmVzdWx0ID09IG5vRXJyICkKLQkJCQkJCQl2
ZXJpZnlfbm9lcnIoIFNldEV2ZW50UGFyYW1ldGVyKCBpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRy
b2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLAotCQkJCQkJCQkJc2l6ZW9mKCBDb250cm9sUGFy
dENvZGUgKSwgJmFjdHVhbEZvY3VzICkgKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkKLQkJ
CQkvLyBzb21lIG90aGVyIGtpbmQgb2YgQ29udHJvbCBldmVudAotCQkJCWRlZmF1bHQ6Ci0JCQkJ
CWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCQkKLQkJLy8gc29tZSBvdGhlciBldmVudCBjbGFz
cwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JfQorICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xT
ZXRGb2N1c1BhcnQ6IHsKKyAgICAgICAgICAgIENvbnRyb2xQYXJ0Q29kZSBkZXNpcmVkRm9jdXM7
CisgICAgICAgICAgICBSZ25IYW5kbGUgaW52YWxpZFJnbjsKKyAgICAgICAgICAgIEJvb2xlYW4g
Zm9jdXNFdmVyeXRoaW5nOworICAgICAgICAgICAgQ29udHJvbFBhcnRDb2RlIGFjdHVhbEZvY3Vz
OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlcihp
bkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLCBudWxs
cHRyLCBzaXplb2YoQ29udHJvbFBhcnRDb2RlKSwgbnVsbHB0ciwgJmRlc2lyZWRGb2N1cyk7IAor
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBHZXRFdmVudFBhcmFt
ZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xJbnZhbFJnbiwgdHlwZVFEUmduSGFuZGxl
LCBudWxscHRyLCBzaXplb2YoUmduSGFuZGxlKSwgbnVsbHB0ciwgJmludmFsaWRSZ24pOworICAg
ICAgICAgICAgZm9jdXNFdmVyeXRoaW5nID0gZmFsc2U7IC8vIGEgZ29vZCBkZWZhdWx0IGluIGNh
c2UgdGhlIHBhcmFtZXRlciBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICBHZXRFdmVudFBhcmFt
ZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xGb2N1c0V2ZXJ5dGhpbmcsIHR5cGVCb29s
ZWFuLCBudWxscHRyLCBzaXplb2YoQm9vbGVhbiksIG51bGxwdHIsICZmb2N1c0V2ZXJ5dGhpbmcp
OworCisgICAgICAgICAgICByZXN1bHQgPSBTZXRGb2N1c1BhcnQodmlldywgZGVzaXJlZEZvY3Vz
LCBpbnZhbGlkUmduLCBmb2N1c0V2ZXJ5dGhpbmcsICZhY3R1YWxGb2N1cyk7CisgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IG5vRXJyKQorICAgICAgICAgICAgICAgIEFTU0VSVCghU2V0RXZlbnRQ
YXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0
Q29kZSwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksICZhY3R1YWxGb2N1cykpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBzb21lIG90aGVyIGtpbmQgb2YgQ29u
dHJvbCBldmVudAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CiAKLU1pc3NpbmdQYXJhbWV0ZXI6Ci0JcmV0dXJuIHJlc3VsdDsK
KyAgICAvLyBzb21lIG90aGVyIGV2ZW50IGNsYXNzCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAogc3RhdGljIHZvaWQgVXBkYXRl
T2JzZXJ2ZXIoQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5
IGFjdGl2aXR5LCB2b2lkICppbmZvKTsKIAotc3RhdGljIHZvaWQKLVN0YXJ0VXBkYXRlT2JzZXJ2
ZXIoIEhJV2ViVmlldyogdmlldyApCitzdGF0aWMgdm9pZCBTdGFydFVwZGF0ZU9ic2VydmVyKEhJ
V2ViVmlldyogdmlldykKIHsKLQlDRlJ1bkxvb3BPYnNlcnZlckNvbnRleHQJY29udGV4dDsKLQlD
RlJ1bkxvb3BPYnNlcnZlclJlZgkJb2JzZXJ2ZXI7Ci0gICAgQ0ZSdW5Mb29wUmVmCQkJCW1haW5S
dW5Mb29wOworICAgIENGUnVuTG9vcE9ic2VydmVyQ29udGV4dCBjb250ZXh0OworICAgIENGUnVu
TG9vcE9ic2VydmVyUmVmIG9ic2VydmVyOworICAgIENGUnVuTG9vcFJlZiBtYWluUnVuTG9vcDsK
ICAgICAKLSAgICBjaGVjayggdmlldy0+ZklzQ29tcG9zaXRlZCA9PSBmYWxzZSApOwotICAgIGNo
ZWNrKCB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPT0gTlVMTCApOworICAgIEFTU0VSVCghdmlldy0+
ZklzQ29tcG9zaXRlZCk7CisgICAgQVNTRVJUKCF2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIpOwogCi0J
Y29udGV4dC52ZXJzaW9uID0gMDsKLQljb250ZXh0LmluZm8gPSB2aWV3OwotCWNvbnRleHQucmV0
YWluID0gTlVMTDsKLQljb250ZXh0LnJlbGVhc2UgPSBOVUxMOwotCWNvbnRleHQuY29weURlc2Ny
aXB0aW9uID0gTlVMTDsKLQotICAgIG1haW5SdW5Mb29wID0gKENGUnVuTG9vcFJlZilHZXRDRlJ1
bkxvb3BGcm9tRXZlbnRMb29wKCBHZXRNYWluRXZlbnRMb29wKCkgKTsKLQlvYnNlcnZlciA9IENG
UnVuTG9vcE9ic2VydmVyQ3JlYXRlKCBOVUxMLCBrQ0ZSdW5Mb29wRW50cnkgfCBrQ0ZSdW5Mb29w
QmVmb3JlV2FpdGluZywgdHJ1ZSwgMCwgVXBkYXRlT2JzZXJ2ZXIsICZjb250ZXh0ICk7Ci0JQ0ZS
dW5Mb29wQWRkT2JzZXJ2ZXIoIG1haW5SdW5Mb29wLCBvYnNlcnZlciwga0NGUnVuTG9vcENvbW1v
bk1vZGVzICk7IAorICAgIGNvbnRleHQudmVyc2lvbiA9IDA7CisgICAgY29udGV4dC5pbmZvID0g
dmlldzsKKyAgICBjb250ZXh0LnJldGFpbiA9IG51bGxwdHI7CisgICAgY29udGV4dC5yZWxlYXNl
ID0gbnVsbHB0cjsKKyAgICBjb250ZXh0LmNvcHlEZXNjcmlwdGlvbiA9IG51bGxwdHI7CisKKyAg
ICBtYWluUnVuTG9vcCA9IChDRlJ1bkxvb3BSZWYpR2V0Q0ZSdW5Mb29wRnJvbUV2ZW50TG9vcChH
ZXRNYWluRXZlbnRMb29wKCkpOworICAgIG9ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVh
dGUobnVsbHB0ciwga0NGUnVuTG9vcEVudHJ5IHwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcsIHRy
dWUsIDAsIFVwZGF0ZU9ic2VydmVyLCAmY29udGV4dCk7CisgICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2
ZXIobWFpblJ1bkxvb3AsIG9ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOyAKIAogICAg
IHZpZXctPmZVcGRhdGVPYnNlcnZlciA9IG9ic2VydmVyOwogICAgIAotLy8gICAgcHJpbnRmKCAi
VXBkYXRlIG9ic2VydmVyIHN0YXJ0ZWRcbiIgKTsKKyAgICAvLyBwcmludGYoIlVwZGF0ZSBvYnNl
cnZlciBzdGFydGVkXG4iKTsKIH0KIAotc3RhdGljIHZvaWQKLVN0b3BVcGRhdGVPYnNlcnZlcigg
SElXZWJWaWV3KiB2aWV3ICkKK3N0YXRpYyB2b2lkIFN0b3BVcGRhdGVPYnNlcnZlcihISVdlYlZp
ZXcqIHZpZXcpCiB7Ci0gICAgY2hlY2soIHZpZXctPmZJc0NvbXBvc2l0ZWQgPT0gZmFsc2UgKTsK
LSAgICBjaGVjayggdmlldy0+ZlVwZGF0ZU9ic2VydmVyICE9IE5VTEwgKTsKKyAgICBBU1NFUlQo
IXZpZXctPmZJc0NvbXBvc2l0ZWQpOworICAgIEFTU0VSVCh2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIp
OwogCi0gICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKCB2aWV3LT5mVXBkYXRlT2JzZXJ2
ZXIgKTsKLSAgICBDRlJlbGVhc2UoIHZpZXctPmZVcGRhdGVPYnNlcnZlciApOwotICAgIHZpZXct
PmZVcGRhdGVPYnNlcnZlciA9IE5VTEw7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRl
KHZpZXctPmZVcGRhdGVPYnNlcnZlcik7CisgICAgQ0ZSZWxlYXNlKHZpZXctPmZVcGRhdGVPYnNl
cnZlcik7CisgICAgdmlldy0+ZlVwZGF0ZU9ic2VydmVyID0gbnVsbHB0cjsKIAotLy8gICAgcHJp
bnRmKCAiVXBkYXRlIG9ic2VydmVyIHJlbW92ZWRcbiIgKTsKKyAgICAvLyBwcmludGYoIlVwZGF0
ZSBvYnNlcnZlciByZW1vdmVkXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgCi1VcGRhdGVPYnNlcnZl
ciggQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5IGFjdGl2
aXR5LCB2b2lkICppbmZvICkKK1VwZGF0ZU9ic2VydmVyKENGUnVuTG9vcE9ic2VydmVyUmVmIG9i
c2VydmVyLCBDRlJ1bkxvb3BBY3Rpdml0eSBhY3Rpdml0eSwgdm9pZCAqaW5mbykKIHsKLQlISVdl
YlZpZXcqCQkJdmlldyA9IChISVdlYlZpZXcqKWluZm87Ci0gICAgUmduSGFuZGxlCQkJcmVnaW9u
ID0gTmV3UmduKCk7Ci0gICAgCi0vLyAgICBwcmludGYoICJVcGRhdGUgb2JzZXJ2ZXIgY2FsbGVk
XG4iICk7CisgICAgSElXZWJWaWV3KiB2aWV3ID0gKEhJV2ViVmlldyopaW5mbzsKKyAgICBSZ25I
YW5kbGUgcmVnaW9uID0gTmV3UmduKCk7CiAKLSAgICBpZiAoIHJlZ2lvbiApCi0gICAgewotICAg
ICAgICBHZXRXaW5kb3dSZWdpb24oIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSwg
a1dpbmRvd1VwZGF0ZVJnbiwgcmVnaW9uICk7CisgICAgLy8gcHJpbnRmKCJVcGRhdGUgb2JzZXJ2
ZXIgY2FsbGVkXG4iKTsKKworICAgIGlmIChyZWdpb24pIHsKKyAgICAgICAgR2V0V2luZG93UmVn
aW9uKEdldENvbnRyb2xPd25lcih2aWV3LT5mVmlld1JlZiksIGtXaW5kb3dVcGRhdGVSZ24sIHJl
Z2lvbik7CiAgICAgICAgIAotICAgICAgICBpZiAoICFFbXB0eVJnbiggcmVnaW9uICkgKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBSZ25IYW5kbGUJCW91clJnbiA9IE5ld1JnbigpOwotICAgICAg
ICAgICAgUmVjdAkJCXJlY3Q7CisgICAgICAgIGlmICghRW1wdHlSZ24ocmVnaW9uKSkgeworICAg
ICAgICAgICAgUmduSGFuZGxlIG91clJnbiA9IE5ld1JnbigpOworICAgICAgICAgICAgUmVjdCBy
ZWN0OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHZXRXaW5kb3dCb3VuZHMoIEdldENvbnRy
b2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSwga1dpbmRvd1N0cnVjdHVyZVJnbiwgJnJlY3QgKTsK
KyAgICAgICAgICAgIEdldFdpbmRvd0JvdW5kcyhHZXRDb250cm9sT3duZXIodmlldy0+ZlZpZXdS
ZWYpLCBrV2luZG93U3RydWN0dXJlUmduLCAmcmVjdCk7CiAgICAgICAgICAgICAKLS8vICAgICAg
ICAgICAgcHJpbnRmKCAiVXBkYXRlIHJlZ2lvbiBpcyBub24tZW1wdHlcbiIgKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCBvdXJSZ24gKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFJlY3QJCXJlY3Q7Ci0gICAgICAgICAgICAgICAgR3JhZlB0cgkJc2F2ZVBvcnQsIHBv
cnQ7Ci0gICAgICAgICAgICAgICAgUG9pbnQJCW9mZnNldCA9IHsgMCwgMCB9OworICAgICAgICAg
ICAgLy8gcHJpbnRmKCJVcGRhdGUgcmVnaW9uIGlzIG5vbi1lbXB0eVxuIik7CisgICAgICAgICAg
ICBpZiAob3VyUmduKSB7CisgICAgICAgICAgICAgICAgUmVjdCByZWN0OworICAgICAgICAgICAg
ICAgIEdyYWZQdHIgc2F2ZVBvcnQsIHBvcnQ7CisgICAgICAgICAgICAgICAgUG9pbnQgb2Zmc2V0
ID0geyAwLCAwIH07CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcG9ydCA9IEdl
dFdpbmRvd1BvcnQoIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSApOworICAgICAg
ICAgICAgICAgIHBvcnQgPSBHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcih2aWV3LT5mVmll
d1JlZikpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdldFBvcnQoICZzYXZl
UG9ydCApOwotICAgICAgICAgICAgICAgIFNldFBvcnQoIHBvcnQgKTsKKyAgICAgICAgICAgICAg
ICBHZXRQb3J0KCZzYXZlUG9ydCk7CisgICAgICAgICAgICAgICAgU2V0UG9ydChwb3J0KTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHbG9iYWxUb0xvY2FsKCAmb2Zmc2V0ICk7
Ci0gICAgICAgICAgICAgICAgT2Zmc2V0UmduKCByZWdpb24sIG9mZnNldC5oLCBvZmZzZXQudiAp
OworICAgICAgICAgICAgICAgIEdsb2JhbFRvTG9jYWwoJm9mZnNldCk7CisgICAgICAgICAgICAg
ICAgT2Zmc2V0UmduKHJlZ2lvbiwgb2Zmc2V0LmgsIG9mZnNldC52KTsKIAotICAgICAgICAgICAg
ICAgIEdldENvbnRyb2xCb3VuZHMoIHZpZXctPmZWaWV3UmVmLCAmcmVjdCApOwotICAgICAgICAg
ICAgICAgIFJlY3RSZ24oIG91clJnbiwgJnJlY3QgKTsKLSAgICAgICAgICAgICAgICAKLS8vICAg
ICAgICAgICAgICAgIHByaW50ZiggIm91ciBjb250cm9sIGlzIGF0ICVkICVkICVkICVkXG4iLAot
Ly8gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCwgcmVjdC5sZWZ0LCByZWN0LmJvdHRv
bSwgcmVjdC5yaWdodCApOworICAgICAgICAgICAgICAgIEdldENvbnRyb2xCb3VuZHModmlldy0+
ZlZpZXdSZWYsICZyZWN0KTsKKyAgICAgICAgICAgICAgICBSZWN0UmduKG91clJnbiwgJnJlY3Qp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdldFJlZ2lvbkJvdW5kcyggcmVn
aW9uLCAmcmVjdCApOwotLy8gICAgICAgICAgICAgICAgcHJpbnRmKCAicmVnaW9uIGlzIGF0ICVk
ICVkICVkICVkXG4iLAotLy8gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCwgcmVjdC5s
ZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5yaWdodCApOworICAgICAgICAgICAgICAgIC8vIHByaW50
Zigib3VyIGNvbnRyb2wgaXMgYXQgJWQgJWQgJWQgJWRcbiIsIHJlY3QudG9wLCByZWN0LmxlZnQs
IHJlY3QuYm90dG9tLCByZWN0LnJpZ2h0KTsKKyAgICAgICAgICAgICAgICBHZXRSZWdpb25Cb3Vu
ZHMocmVnaW9uLCAmcmVjdCk7CisgICAgICAgICAgICAgICAgLy8gcHJpbnRmKCJyZWdpb24gaXMg
YXQgJWQgJWQgJWQgJWRcbiIsIHJlY3QudG9wLCByZWN0LmxlZnQsIHJlY3QuYm90dG9tLCByZWN0
LnJpZ2h0KTsKIAotICAgICAgICAgICAgICAgIFNlY3RSZ24oIG91clJnbiwgcmVnaW9uLCBvdXJS
Z24gKTsKKyAgICAgICAgICAgICAgICBTZWN0UmduKG91clJnbiwgcmVnaW9uLCBvdXJSZ24pOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdldFJlZ2lvbkJvdW5kcyggb3VyUmdu
LCAmcmVjdCApOwotLy8gICAgICAgICAgICAgICAgcHJpbnRmKCAiaW50ZXJzZWN0aW9uIGlzICAl
ZCAlZCAlZCAlZFxuIiwKLS8vICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCwgcmVjdC5s
ZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5yaWdodCApOwotICAgICAgICAgICAgICAgIGlmICggIUVt
cHR5UmduKCBvdXJSZ24gKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBSZ25IYW5kbGUJc2F2ZVZpcyA9IE5ld1JnbigpOworICAgICAgICAgICAgICAgIEdldFJlZ2lv
bkJvdW5kcyhvdXJSZ24sICZyZWN0KTsKKyAgICAgICAgICAgICAgICAvLyBwcmludGYoImludGVy
c2VjdGlvbiBpcyAgJWQgJWQgJWQgJWRcbiIsIHJlY3QudG9wLCByZWN0LmxlZnQsIHJlY3QuYm90
dG9tLCByZWN0LnJpZ2h0KTsKKyAgICAgICAgICAgICAgICBpZiAoIUVtcHR5UmduKG91clJnbikp
IHsKKyAgICAgICAgICAgICAgICAgICAgUmduSGFuZGxlIHNhdmVWaXMgPSBOZXdSZ24oKTsKICAg
ICAgICAgICAgICAgICAgICAgCi0vLyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAibG9va3Mg
bGlrZSB3ZSBzaG91bGQgZHJhd1xuIiApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggc2F2
ZVZpcyApCi0gICAgICAgICAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgICAgICAgICAg
UkdCQ29sb3IJa1JlZENvbG9yID0geyAweGZmZmYsIDAsIDAgfTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgR2V0UG9ydFZpc2libGVSZWdpb24oIEdl
dFdpbmRvd1BvcnQoIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSApLCBzYXZlVmlz
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZXRQb3J0VmlzaWJsZVJlZ2lvbiggR2V0V2lu
ZG93UG9ydCggR2V0Q29udHJvbE93bmVyKCB2aWV3LT5mVmlld1JlZiApICksIG91clJnbiApOwor
ICAgICAgICAgICAgICAgICAgICAvLyBwcmludGYoImxvb2tzIGxpa2Ugd2Ugc2hvdWxkIGRyYXdc
biIpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZVZpcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUkdCQ29sb3Iga1JlZENvbG9yID0geyAweGZmZmYsIDAsIDAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdldFBvcnRWaXNpYmxlUmVnaW9uKEdldFdpbmRvd1BvcnQoR2V0
Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSksIHNhdmVWaXMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgU2V0UG9ydFZpc2libGVSZWdpb24oR2V0V2luZG93UG9ydChHZXRDb250cm9sT3du
ZXIodmlldy0+ZlZpZXdSZWYpKSwgb3VyUmduKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAot
Ly8gICAgICAgICAgICAgICAgICAgICAgICBSR0JGb3JlQ29sb3IoICZrUmVkQ29sb3IgKTsKLS8v
ICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRSZ24oIG91clJnbiApOwotLy8gICAgICAgICAg
ICAgICAgICAgICAgICBRREZsdXNoUG9ydEJ1ZmZlciggcG9ydCwgTlVMTCApOwotLy8gICAgICAg
ICAgICAgICAgICAgICAgICBEZWxheSggMTUsIE5VTEwgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgRHJhdzFDb250cm9sKCB2aWV3LT5mVmlld1JlZiApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgVmFsaWRXaW5kb3dSZ24oIEdldENvbnRyb2xPd25lciggdmlldy0+ZlZpZXdSZWYgKSwg
b3VyUmduICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSR0JGb3JlQ29sb3IoJmtSZWRD
b2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYWludFJnbihvdXJSZ24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUURGbHVzaFBvcnRCdWZmZXIocG9ydCwgbnVsbHB0cik7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxheSgxNSwgbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBEcmF3MUNvbnRyb2wodmlldy0+ZlZpZXdSZWYpOworICAgICAgICAg
ICAgICAgICAgICAgICAgVmFsaWRXaW5kb3dSZ24oR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3
UmVmKSwgb3VyUmduKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgU2V0UG9ydFZpc2libGVSZWdpb24oIEdldFdpbmRvd1BvcnQoIEdldENvbnRyb2xP
d25lciggdmlldy0+ZlZpZXdSZWYgKSApLCBzYXZlVmlzICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBEaXNwb3NlUmduKCBzYXZlVmlzICk7CisgICAgICAgICAgICAgICAgICAgICAgICBTZXRQ
b3J0VmlzaWJsZVJlZ2lvbihHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcih2aWV3LT5mVmll
d1JlZikpLCBzYXZlVmlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERpc3Bvc2VSZ24oc2F2
ZVZpcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBTZXRQb3J0KCBzYXZlUG9ydCApOworICAgICAgICAgICAgICAgIFNldFBvcnQo
c2F2ZVBvcnQpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIERpc3Bvc2VSZ24o
IG91clJnbiApOworICAgICAgICAgICAgICAgIERpc3Bvc2VSZ24ob3VyUmduKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRGlzcG9zZVJnbiggcmVnaW9uICk7
CisgICAgICAgIERpc3Bvc2VSZ24ocmVnaW9uKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>