<?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>149165</bug_id>
          
          <creation_ts>2015-09-15 09:45:02 -0700</creation_ts>
          <short_desc>[Win] Provide means for viewing layer tree</short_desc>
          <delta_ts>2015-09-16 12:35:34 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1125991</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 09:45:02 -0700</bug_when>
    <thetext>Debugging rendering problems on Windows is challenging because there is no easy way to view the layer tree of the rendered view. This makes it hard to identify duplicate layers, elements that are larger than they should be, or layers containing backing store that should not be present.

Provide a means by which MiniBrowser can dump the layer tree for user review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126217</commentid>
    <comment_count>1</comment_count>
      <attachid>261271</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 17:43:06 -0700</bug_when>
    <thetext>Created attachment 261271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126219</commentid>
    <comment_count>2</comment_count>
      <attachid>261271</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-09-15 17:46:47 -0700</bug_when>
    <thetext>Comment on attachment 261271
Patch

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

&gt; Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h:80
&gt; +    String printLayerTree() const;

layerTreeAsText()? This isn&apos;t printing anything.

&gt; Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:130
&gt; +    // We always update the repaint count, but we do not paint it for layers that
&gt; +    // only contain tiled backing layers. Those report their repaint counts themselves.
&gt; +    if (!owner() || owner()-&gt;usesTiledBackingLayer())
&gt; +        return;

Did you mean this to be here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126220</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 17:48:47 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 261271 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261271&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h:80
&gt; &gt; +    String printLayerTree() const;
&gt; 
&gt; layerTreeAsText()? This isn&apos;t printing anything.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:130
&gt; &gt; +    // We always update the repaint count, but we do not paint it for layers that
&gt; &gt; +    // only contain tiled backing layers. Those report their repaint counts themselves.
&gt; &gt; +    if (!owner() || owner()-&gt;usesTiledBackingLayer())
&gt; &gt; +        return;
&gt; 
&gt; Did you mean this to be here?

Yes. I&apos;ll add it to the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126226</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 18:00:43 -0700</bug_when>
    <thetext>Committed r189833: &lt;http://trac.webkit.org/changeset/189833&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126256</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-15 20:02:57 -0700</bug_when>
    <thetext>Looks like this patch may have broken WinCairo builds?

https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/49243/steps/compile-webkit/logs/stdio

Source\WebKit\win\WebView.h(86): error C2504: &apos;IWebViewPrivate3&apos;: base class undefined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126259</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 20:29:26 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Looks like this patch may have broken WinCairo builds?
&gt; 
&gt; https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/49243/
&gt; steps/compile-webkit/logs/stdio
&gt; 
&gt; Source\WebKit\win\WebView.h(86): error C2504: &apos;IWebViewPrivate3&apos;: base class
&gt; undefined

Maybe it needs a clean rebuild. IWebViewPrivate3 is generated from the same file that produces the IWebViewPrivate2 it was using previously, so it seems like it didn&apos;t pick up the need to regenerate from IDL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126260</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-15 20:30:57 -0700</bug_when>
    <thetext>+alex so he can check the IWebViewPrivate.idl generation stage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126424</commentid>
    <comment_count>8</comment_count>
      <attachid>261271</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-09-16 11:53:09 -0700</bug_when>
    <thetext>Comment on attachment 261271
Patch

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

looks good

&gt; Source/WebKit/win/Interfaces/IWebViewPrivate.idl:329
&gt; +[ uuid(08C88359-76AA-48F2-BA27-820540E781E9) ]
&gt; +interface IWebViewPrivate3 : IWebViewPrivate2
&gt; +{
&gt; +    HRESULT printLayerTree([out] BSTR*);
&gt; +}

Are we just going to add more of these each time we add a function to IWebViewPrivate?  Maybe we should add a bunch of unused functions here so we can use them later without adding more interfaces.

&gt; Tools/MiniBrowser/win/Common.cpp:93
&gt; -SIZE s_windowSize = { 800, 400 };
&gt; +SIZE s_windowSize = { 500, 200 };

Why smaller?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126434</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-09-16 12:35:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 261271 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261271&amp;action=review
&gt; 
&gt; looks good
&gt; 
&gt; &gt; Source/WebKit/win/Interfaces/IWebViewPrivate.idl:329
&gt; &gt; +[ uuid(08C88359-76AA-48F2-BA27-820540E781E9) ]
&gt; &gt; +interface IWebViewPrivate3 : IWebViewPrivate2
&gt; &gt; +{
&gt; &gt; +    HRESULT printLayerTree([out] BSTR*);
&gt; &gt; +}
&gt; 
&gt; Are we just going to add more of these each time we add a function to
&gt; IWebViewPrivate?  Maybe we should add a bunch of unused functions here so we
&gt; can use them later without adding more interfaces.

We only need to make a new interface version about once a year. For now we can keep adding to this one.

&gt; &gt; Tools/MiniBrowser/win/Common.cpp:93
&gt; &gt; -SIZE s_windowSize = { 800, 400 };
&gt; &gt; +SIZE s_windowSize = { 500, 200 };
&gt; 
&gt; Why smaller?

Whoops! I&apos;ll revert that next time I make a change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261271</attachid>
            <date>2015-09-15 17:43:06 -0700</date>
            <delta_ts>2015-09-15 17:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149165-20150915175850.patch</filename>
            <type>text/plain</type>
            <size>26692</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTgzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE1LTA5LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIFByb3ZpZGUgYSBt
ZWFucyBmb3Igdmlld2luZyB0aGUgbGF5ZXIgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmV2aXNlIHRoZSBvbGQgZnByaW50ZiBsb2dpYyB0byBn
ZW5lcmF0ZSBhIHN0cmluZworICAgICAgICBjb250YWluaW5nIHRoZSBsYXllciB0cmVlIHNvIHRo
YXQgaXQgY2FuIGJlIG91dHB1dAorICAgICAgICB0byB0aGUgZGVidWdnZXIgKG9yIGVsc2V3aGVy
ZSkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDog
UmVuYW1lICdwcmludFRyZWUnCisgICAgICAgIHRvICdwcmludExheWVyVHJlZScsIGFuZCBtYWtl
IGl0IGF2YWlsYWJsZSBpbiByZWxlYXNlIGJ1aWxkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FD
RkxheWVyVHJlZUhvc3Q6OnByaW50TGF5ZXJUcmVlKTogQWRkZWQuIENhbGxzIGludG8KKyAgICAg
ICAgdGhlIFBsYXRmb3JtQ0FMYXllciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcDoKKyAgICAgICAgKHByaW50
SW5kZW50KTogUmV2aXNlIHRvIHVzZSB0d28tc3BhY2UgaW5kZW50IGFuZCB1c2UgU3RyaW5nQnVp
bGRlci4KKyAgICAgICAgKHByaW50VHJhbnNmb3JtKTogRGl0dG8uCisgICAgICAgIChwcmludENv
bG9yKTogQWRkZWQgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAocHJpbnRMYXllcik6IFJldmlz
ZWQgdG8gb3V0cHV0IGluZm9ybWF0aW9uIG9uIHRoZSBsYXllciBjb250ZW50cy4KKyAgICAgICAg
KFBsYXRmb3JtQ0FMYXllcldpbjo6cHJpbnRMYXllclRyZWUpOiBSZW5hbWVkIGZyb20gJ3ByaW50
VHJlZScuCisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OnByaW50VHJlZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZHJhd1Jl
cGFpbnRDb3VudGVycyk6CisKIDIwMTUtMDktMTUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEFkZCBlbXB0eSBJREJGYWN0b3J5IGltcGxlbWVudGF0aW9uIGZv
ciBNb2Rlcm4gSURCLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
UGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgJKHJldmlzaW9uIDE4OTgyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsOSArMjM0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGxhdGZvcm1D
QUxheWVyKiByb290TGF5ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
TGF5b3V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpID0gMDsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgdmlydHVhbCB2b2lkIHByaW50VHJlZSgpIGNvbnN0ID0gMDsKLSNl
bmRpZiAvLyBOREVCVUcKKyAgICB2aXJ0dWFsIFN0cmluZyBwcmludExheWVyVHJlZSgpIGNvbnN0
ID0gMDsKICNlbmRpZiAvLyBQTEFURk9STShXSU4pCiAKICNpZiBQTEFURk9STShJT1MpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhv
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHJldmlzaW9uIDE4OTgyMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyMiw0ICszMjIsMTIgQEAgQ0dSZWN0IENBQ0ZMYXll
clRyZWVIb3N0Ojpib3VuZHMoKSBjb25zdAogICAgIHJldHVybiB3aW5SZWN0VG9DR1JlY3QoY2xp
ZW50UmVjdCk7CiB9CiAKK1N0cmluZyBDQUNGTGF5ZXJUcmVlSG9zdDo6cHJpbnRMYXllclRyZWUo
KSBjb25zdAoreworICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworCisgICAgcmV0dXJuIG1fcm9vdExheWVyLT5wcmludExheWVyVHJlZSgpOworfQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxh
eWVyVHJlZUhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAkocmV2aXNpb24gMTg5ODIwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsNiArNzcsOCBAQCBwdWJs
aWM6CiAgICAgLy8gQWJzdHJhY3RDQUNGTGF5ZXJUcmVlSG9zdAogICAgIHZpcnR1YWwgdm9pZCBm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXNOb3coKTsKIAorICAgIFN0cmluZyBwcmludExheWVyVHJl
ZSgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgQ0FDRkxheWVyVHJlZUhvc3QoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHJldmlzaW9uIDE4OTgyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC02NDEs
MTI3ICs2NDIsMjQ4IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpzZXRTaGFwZVBhdGgoY28K
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50LgogfQogCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZv
aWQgcHJpbnRJbmRlbnQoaW50IGluZGVudCkKK3N0YXRpYyB2b2lkIHByaW50SW5kZW50KFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIGludCBpbmRlbnQpCiB7CiAgICAgZm9yICggOyBpbmRlbnQgPiAw
OyAtLWluZGVudCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgiICAiKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRUcmFuc2Zvcm0oY29uc3Qg
Q0FUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtKQorc3RhdGljIHZvaWQgcHJpbnRUcmFuc2Zvcm0oU3Ry
aW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgQ0FUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtKQogewot
ICAgIGZwcmludGYoc3RkZXJyLCAiWyVnICVnICVnICVnOyAlZyAlZyAlZyAlZzsgJWcgJWcgJWcg
JWc7ICVnICVnICVnICVnXSIsCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMTEsIHRy
YW5zZm9ybS5tMTIsIHRyYW5zZm9ybS5tMTMsIHRyYW5zZm9ybS5tMTQsIAotICAgICAgICAgICAg
ICAgICAgICB0cmFuc2Zvcm0ubTIxLCB0cmFuc2Zvcm0ubTIyLCB0cmFuc2Zvcm0ubTIzLCB0cmFu
c2Zvcm0ubTI0LCAKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0zMSwgdHJhbnNmb3Jt
Lm0zMiwgdHJhbnNmb3JtLm0zMywgdHJhbnNmb3JtLm0zNCwgCi0gICAgICAgICAgICAgICAgICAg
IHRyYW5zZm9ybS5tNDEsIHRyYW5zZm9ybS5tNDIsIHRyYW5zZm9ybS5tNDMsIHRyYW5zZm9ybS5t
NDQpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIo
dHJhbnNmb3JtLm0xMSk7CisgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICBidWlsZGVyLmFw
cGVuZE51bWJlcih0cmFuc2Zvcm0ubTEyKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAg
IGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRyYW5zZm9ybS5tMTMpOworICAgIGJ1aWxkZXIuYXBwZW5k
KCcgJyk7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHJhbnNmb3JtLm0xNCk7CisgICAgYnVp
bGRlci5hcHBlbmQoIjsgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHJhbnNmb3JtLm0y
MSk7CisgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0
cmFuc2Zvcm0ubTIyKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTnVtYmVyKHRyYW5zZm9ybS5tMjMpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAg
YnVpbGRlci5hcHBlbmROdW1iZXIodHJhbnNmb3JtLm0yNCk7CisgICAgYnVpbGRlci5hcHBlbmQo
IjsgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHJhbnNmb3JtLm0zMSk7CisgICAgYnVp
bGRlci5hcHBlbmQoJyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0cmFuc2Zvcm0ubTMy
KTsKKyAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRy
YW5zZm9ybS5tMzMpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgYnVpbGRlci5hcHBl
bmROdW1iZXIodHJhbnNmb3JtLm0zNCk7CisgICAgYnVpbGRlci5hcHBlbmQoIjsgIik7CisgICAg
YnVpbGRlci5hcHBlbmROdW1iZXIodHJhbnNmb3JtLm00MSk7CisgICAgYnVpbGRlci5hcHBlbmQo
JyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcih0cmFuc2Zvcm0ubTQyKTsKKyAgICBidWls
ZGVyLmFwcGVuZCgnICcpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRyYW5zZm9ybS5tNDMp
OworICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodHJh
bnNmb3JtLm00NCk7CisgICAgYnVpbGRlci5hcHBlbmQoJ10nKTsKIH0KIAotc3RhdGljIHZvaWQg
cHJpbnRMYXllcihjb25zdCBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyLCBpbnQgaW5kZW50KQorc3Rh
dGljIHZvaWQgcHJpbnRDb2xvcihTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBpbnQgaW5kZW50LCBj
b25zdCBTdHJpbmcmIGxhYmVsLCBDR0NvbG9yUmVmIGNvbG9yKQoreworICAgIENvbG9yIGxheWVy
Q29sb3IoY29sb3IpOworICAgIGlmICghbGF5ZXJDb2xvci5pc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIHByaW50SW5kZW50KGJ1aWxk
ZXIsIGluZGVudCk7CisgICAgYnVpbGRlci5hcHBlbmQoJygnKTsKKyAgICBidWlsZGVyLmFwcGVu
ZChsYWJlbCk7CisgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZChs
YXllckNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkpOworICAgIGJ1aWxkZXIuYXBwZW5k
KCcpJyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50TGF5ZXIoU3RyaW5nQnVpbGRlciYgYnVpbGRl
ciwgY29uc3QgUGxhdGZvcm1DQUxheWVyKiBsYXllciwgaW50IGluZGVudCkKIHsKICAgICBGbG9h
dFBvaW50M0QgbGF5ZXJQb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpOwogICAgIEZsb2F0UG9p
bnQzRCBsYXllckFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CiAgICAgRmxvYXRS
ZWN0IGxheWVyQm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwotICAgIHByaW50SW5kZW50KGluZGVu
dCk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgcHJpbnRJbmRlbnQoYnVpbGRlciwg
aW5kZW50KTsKIAotICAgIGNoYXIqIGxheWVyVHlwZU5hbWUgPSAwOworICAgIGNoYXIqIGxheWVy
VHlwZU5hbWUgPSBudWxscHRyOwogICAgIHN3aXRjaCAobGF5ZXItPmxheWVyVHlwZSgpKSB7CiAg
ICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyOiBsYXllclR5cGVOYW1lID0g
ImxheWVyIjsgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYkxh
eWVyOiBsYXllclR5cGVOYW1lID0gIndlYi1sYXllciI7IGJyZWFrOworICAgIGNhc2UgUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllcjogbGF5ZXJUeXBlTmFtZSA9ICJzaW1wbGUt
bGF5ZXIiOyBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNm
b3JtTGF5ZXI6IGxheWVyVHlwZU5hbWUgPSAidHJhbnNmb3JtLWxheWVyIjsgYnJlYWs7CiAgICAg
Y2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVdlYlRpbGVkTGF5ZXI6IGxheWVyVHlwZU5h
bWUgPSAid2ViLXRpbGVkLWxheWVyIjsgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOiBsYXllclR5cGVOYW1lID0gInRpbGVkLWJhY2tp
bmctbGF5ZXIiOyBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUGFn
ZVRpbGVkQmFja2luZ0xheWVyOiBsYXllclR5cGVOYW1lID0gInBhZ2UtdGlsZWQtYmFja2luZy1s
YXllciI7IGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJh
Y2tpbmdUaWxlTGF5ZXI6IGxheWVyVHlwZU5hbWUgPSAidGlsZWQtYmFja2luZy10aWxlLWxheWVy
IjsgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllcjog
bGF5ZXJUeXBlTmFtZSA9ICJyb290LWxheWVyIjsgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZUFWUGxheWVyTGF5ZXI6IGxheWVyVHlwZU5hbWUgPSAiYXZwbGF5ZXIt
bGF5ZXIiOyBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2ViR0xM
YXllcjogbGF5ZXJUeXBlTmFtZSA9ICJ3ZWJnbC1sYXllciI7IGJyZWFrOworICAgIGNhc2UgUGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGVCYWNrZHJvcExheWVyOiBsYXllclR5cGVOYW1lID0gImJh
Y2tkcm9wLWxheWVyIjsgYnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVNoYXBlTGF5ZXI6IGxheWVyVHlwZU5hbWUgPSAic2hhcGUtbGF5ZXIiOyBicmVhazsKKyAgICBj
YXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGlnaHRTeXN0ZW1CYWNrZHJvcExheWVyOiBs
YXllclR5cGVOYW1lID0gImxpZ2h0LXN5c3RlbS1iYWNrZHJvcC1sYXllciI7IGJyZWFrOworICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVEYXJrU3lzdGVtQmFja2Ryb3BMYXllcjog
bGF5ZXJUeXBlTmFtZSA9ICJkYXJrLXN5c3RlbS1iYWNrZHJvcC1sYXllciI7IGJyZWFrOworICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTY3JvbGxpbmdMYXllcjogbGF5ZXJUeXBl
TmFtZSA9ICJzY3JvbGxpbmctbGF5ZXIiOyBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlQ3VzdG9tOiBsYXllclR5cGVOYW1lID0gImN1c3RvbS1sYXllciI7IGJyZWFr
OwogICAgIH0KIAotICAgIGZwcmludGYoc3RkZXJyLCAiKCVzIFslZyAlZyAlZ10gWyVnICVnICVn
ICVnXSBbJWcgJWcgJWddIHN1cGVybGF5ZXI9JXBcbiIsCi0gICAgICAgIGxheWVyVHlwZU5hbWUs
Ci0gICAgICAgIGxheWVyUG9zaXRpb24ueCgpLCBsYXllclBvc2l0aW9uLnkoKSwgbGF5ZXJQb3Np
dGlvbi56KCksIAotICAgICAgICBsYXllckJvdW5kcy54KCksIGxheWVyQm91bmRzLnkoKSwgbGF5
ZXJCb3VuZHMud2lkdGgoKSwgbGF5ZXJCb3VuZHMuaGVpZ2h0KCksCi0gICAgICAgIGxheWVyQW5j
aG9yUG9pbnQueCgpLCBsYXllckFuY2hvclBvaW50LnkoKSwgbGF5ZXJBbmNob3JQb2ludC56KCks
IGxheWVyLT5zdXBlcmxheWVyKCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIoIik7CisgICAgYnVp
bGRlci5hcHBlbmQobGF5ZXJUeXBlTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmQoIiBbIik7Cisg
ICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5ZXJQb3NpdGlvbi54KCkpOworICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5ZXJQb3NpdGlvbi55KCkp
OworICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5
ZXJQb3NpdGlvbi56KCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJdIFsiKTsKKyAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihsYXllckJvdW5kcy54KCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7
CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5ZXJCb3VuZHMueSgpKTsKKyAgICBidWlsZGVy
LmFwcGVuZCgnICcpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxheWVyQm91bmRzLndpZHRo
KCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIo
bGF5ZXJCb3VuZHMuaGVpZ2h0KCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJdIFsiKTsKKyAgICBi
dWlsZGVyLmFwcGVuZE51bWJlcihsYXllckFuY2hvclBvaW50LngoKSk7CisgICAgYnVpbGRlci5h
cHBlbmQoJyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsYXllckFuY2hvclBvaW50Lnko
KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihs
YXllckFuY2hvclBvaW50LnooKSk7CisgICAgYnVpbGRlci5hcHBlbmQoIl0gc3VwZXJsYXllcj0i
KTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4obGF5ZXItPnN1cGVybGF5ZXIoKSkpOwogCiAgICAgLy8gUHJpbnQgbmFtZSBpZiBu
ZWVkZWQKICAgICBTdHJpbmcgbGF5ZXJOYW1lID0gQ0FDRkxheWVyR2V0TmFtZShsYXllci0+cGxh
dGZvcm1MYXllcigpKTsKICAgICBpZiAoIWxheWVyTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cHJpbnRJbmRlbnQoaW5kZW50ICsgMSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKG5hbWUg
JXMpXG4iLCBsYXllck5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcbicpOworICAgICAgICBwcmludEluZGVudChidWlsZGVyLCBpbmRlbnQgKyAxKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIihuYW1lIFwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxh
eWVyTmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcIikiKTsKKyAgICB9CisKKyAgICAv
LyBQcmludCBib3JkZXJXaWR0aCBpZiBuZWVkZWQKKyAgICBpZiAoQ0dGbG9hdCBib3JkZXJXaWR0
aCA9IENBQ0ZMYXllckdldEJvcmRlcldpZHRoKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpKSB7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBwcmludEluZGVudChidWlsZGVy
LCBpbmRlbnQgKyAxKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIihib3JkZXJXaWR0aCAiKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYm9yZGVyV2lkdGgpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgnKScpOwogICAgIH0KIAorICAgIC8vIFByaW50IGJhY2tncm91bmRDb2xvciBp
ZiBuZWVkZWQKKyAgICBwcmludENvbG9yKGJ1aWxkZXIsIGluZGVudCArIDEsICJiYWNrZ3JvdW5k
Q29sb3IiLCBDQUNGTGF5ZXJHZXRCYWNrZ3JvdW5kQ29sb3IobGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KSkpOworCisgICAgLy8gUHJpbnQgYm9yZGVyQ29sb3IgaWYgbmVlZGVkCisgICAgcHJpbnRDb2xv
cihidWlsZGVyLCBpbmRlbnQgKyAxLCAiYm9yZGVyQ29sb3IiLCBDQUNGTGF5ZXJHZXRCb3JkZXJD
b2xvcihsYXllci0+cGxhdGZvcm1MYXllcigpKSk7CisKICAgICAvLyBQcmludCBtYXNrc1RvQm91
bmRzIGlmIG5lZWRlZAotICAgIGJvb2wgbGF5ZXJNYXNrc1RvQm91bmRzID0gbGF5ZXItPm1hc2tz
VG9Cb3VuZHMoKTsKLSAgICBpZiAobGF5ZXJNYXNrc1RvQm91bmRzKSB7Ci0gICAgICAgIHByaW50
SW5kZW50KGluZGVudCArIDEpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIihtYXNrc1RvQm91
bmRzIHRydWUpXG4iKTsKKyAgICBpZiAoYm9vbCBsYXllck1hc2tzVG9Cb3VuZHMgPSBsYXllci0+
bWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAg
ICBwcmludEluZGVudChidWlsZGVyLCBpbmRlbnQgKyAxKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoIihtYXNrc1RvQm91bmRzIHRydWUpIik7CiAgICAgfQogCiAgICAgLy8gUHJpbnQgb3BhY2l0
eSBpZiBuZWVkZWQKICAgICBmbG9hdCBsYXllck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOwog
ICAgIGlmIChsYXllck9wYWNpdHkgIT0gMSkgewotICAgICAgICBwcmludEluZGVudChpbmRlbnQg
KyAxKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIob3BhY2l0eSAlaGYpXG4iLCBsYXllck9w
YWNpdHkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgcHJpbnRJbmRl
bnQoYnVpbGRlciwgaW5kZW50ICsgMSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIob3BhY2l0
eSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGF5ZXJPcGFjaXR5KTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyknKTsKICAgICB9CiAKICAgICAvLyBQcmludCBzdWJsYXllclRy
YW5zZm9ybSBpZiBuZWVkZWQKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9y
bSA9IGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpOwogICAgIGlmICghbGF5ZXJUcmFuc2Zvcm0u
aXNJZGVudGl0eSgpKSB7Ci0gICAgICAgIHByaW50SW5kZW50KGluZGVudCArIDEpOwotICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIihzdWJsYXllclRyYW5zZm9ybSAiKTsKLSAgICAgICAgcHJpbnRU
cmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIilcbiIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgcHJpbnRJbmRlbnQoYnVp
bGRlciwgaW5kZW50ICsgMSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIoc3VibGF5ZXJUcmFu
c2Zvcm0gIik7CisgICAgICAgIHByaW50VHJhbnNmb3JtKGJ1aWxkZXIsIGxheWVyVHJhbnNmb3Jt
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKICAgICB9CiAKICAgICAvLyBQcmludCB0
cmFuc2Zvcm0gaWYgbmVlZGVkCiAgICAgbGF5ZXJUcmFuc2Zvcm0gPSBsYXllci0+dHJhbnNmb3Jt
KCk7CiAgICAgaWYgKCFsYXllclRyYW5zZm9ybS5pc0lkZW50aXR5KCkpIHsKLSAgICAgICAgcHJp
bnRJbmRlbnQoaW5kZW50ICsgMSk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiKHRyYW5zZm9y
bSAiKTsKLSAgICAgICAgcHJpbnRUcmFuc2Zvcm0obGF5ZXJUcmFuc2Zvcm0pOwotICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIilcbiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAg
ICAgICAgcHJpbnRJbmRlbnQoYnVpbGRlciwgaW5kZW50ICsgMSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIodHJhbnNmb3JtICIpOworICAgICAgICBwcmludFRyYW5zZm9ybShidWlsZGVyLCBs
YXllclRyYW5zZm9ybSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7CiAgICAgfQogCiAg
ICAgLy8gUHJpbnQgY29udGVudHMgaWYgbmVlZGVkCi0gICAgQ0ZUeXBlUmVmIGxheWVyQ29udGVu
dHMgPSBsYXllci0+Y29udGVudHMoKTsKLSAgICBpZiAobGF5ZXJDb250ZW50cykgeworICAgIGlm
IChDRlR5cGVSZWYgbGF5ZXJDb250ZW50cyA9IGxheWVyLT5jb250ZW50cygpKSB7CiAgICAgICAg
IGlmIChDRkdldFR5cGVJRChsYXllckNvbnRlbnRzKSA9PSBDR0ltYWdlR2V0VHlwZUlEKCkpIHsK
ICAgICAgICAgICAgIENHSW1hZ2VSZWYgaW1hZ2VDb250ZW50cyA9IHN0YXRpY19jYXN0PENHSW1h
Z2VSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KGxheWVyQ29udGVudHMpKTsKLSAgICAgICAgICAgIHBy
aW50SW5kZW50KGluZGVudCArIDEpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoY29u
dGVudHMgKGltYWdlIFslSXUgJUl1XSkpXG4iLAotICAgICAgICAgICAgICAgIENHSW1hZ2VHZXRX
aWR0aChpbWFnZUNvbnRlbnRzKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZUNvbnRlbnRzKSk7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIHByaW50SW5kZW50
KGJ1aWxkZXIsIGluZGVudCArIDEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIihjb250
ZW50cyAoaW1hZ2UgWyIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoQ0dJbWFn
ZUdldFdpZHRoKGltYWdlQ29udGVudHMpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcg
Jyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlQ29udGVudHMpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJdKSkiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChDRkdldFR5cGVJRChsYXllckNvbnRlbnRzKSA9PSBDQUJhY2tp
bmdTdG9yZUdldFR5cGVJRCgpKSB7CisgICAgICAgICAgICBDQUJhY2tpbmdTdG9yZVJlZiBiYWNr
aW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDQUJhY2tpbmdTdG9yZVJlZj4oY29uc3RfY2FzdDx2b2lk
Kj4obGF5ZXJDb250ZW50cykpOworICAgICAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZUNvbnRlbnRz
ID0gQ0FCYWNraW5nU3RvcmVHZXRDR0ltYWdlKGJhY2tpbmdTdG9yZSk7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIHByaW50SW5kZW50KGJ1aWxkZXIsIGlu
ZGVudCArIDEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIihjb250ZW50cyAoYmFja2lu
Zy1zdG9yZSBbIik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihDR0ltYWdlR2V0
V2lkdGgoaW1hZ2VDb250ZW50cykpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2VD
b250ZW50cykpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIl0pKSIpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gUHJpbnQgc3VibGF5ZXJzIGlmIG5lZWRlZAogICAgIGludCBuID0g
aW50ZXJuKGxheWVyKS0+c3VibGF5ZXJDb3VudCgpOwogICAgIGlmIChuID4gMCkgewotICAgICAg
ICBwcmludEluZGVudChpbmRlbnQgKyAxKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIoc3Vi
bGF5ZXJzXG4iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIHByaW50
SW5kZW50KGJ1aWxkZXIsIGluZGVudCArIDEpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiKHN1
YmxheWVycyIpOwogCiAgICAgICAgIFBsYXRmb3JtQ0FMYXllckxpc3Qgc3VibGF5ZXJzOwogICAg
ICAgICBpbnRlcm4obGF5ZXIpLT5nZXRTdWJsYXllcnMoc3VibGF5ZXJzKTsKICAgICAgICAgQVNT
RVJUKG4gPT0gc3VibGF5ZXJzLnNpemUoKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgKytpKQotICAgICAgICAgICAgcHJpbnRMYXllcihzdWJsYXllcnNbaV0uZ2V0KCksIGluZGVu
dCArIDIpOworICAgICAgICAgICAgcHJpbnRMYXllcihidWlsZGVyLCBzdWJsYXllcnNbaV0uZ2V0
KCksIGluZGVudCArIDIpOwogCi0gICAgICAgIHByaW50SW5kZW50KGluZGVudCArIDEpOwotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScp
OwogICAgIH0KIAotICAgIHByaW50SW5kZW50KGluZGVudCk7Ci0gICAgZnByaW50ZihzdGRlcnIs
ICIpXG4iKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnKScpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6cHJpbnRUcmVlKCkgY29uc3QKK1N0cmluZyBQbGF0Zm9ybUNBTGF5ZXJXaW46OnBy
aW50TGF5ZXJUcmVlKCkgY29uc3QKIHsKICAgICAvLyBQcmludCBoZWFkaW5nIGluZm8KICAgICBD
R1JlY3Qgcm9vdEJvdW5kcyA9IGJvdW5kcygpOwotICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbioq
IFJlbmRlciB0cmVlIGF0IHRpbWUgJWcgKGJvdW5kcyAlZywgJWcgJWd4JWcpICoqXG5cbiIsIAot
ICAgICAgICBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgcm9vdEJvdW5kcy5vcmlnaW4u
eCwgcm9vdEJvdW5kcy5vcmlnaW4ueSwgcm9vdEJvdW5kcy5zaXplLndpZHRoLCByb290Qm91bmRz
LnNpemUuaGVpZ2h0KTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVy
LmFwcGVuZCgiXG5cbioqIFJlbmRlciB0cmVlIGF0IHRpbWUgIik7CisgICAgYnVpbGRlci5hcHBl
bmROdW1iZXIobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgKGJvdW5kcyAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihyb290Qm91bmRzLm9y
aWdpbi54KTsKKyAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51
bWJlcihyb290Qm91bmRzLm9yaWdpbi55KTsKKyAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAg
IGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHJvb3RCb3VuZHMuc2l6ZS53aWR0aCk7CisgICAgYnVpbGRl
ci5hcHBlbmQoJ3gnKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihyb290Qm91bmRzLnNpemUu
aGVpZ2h0KTsKKyAgICBidWlsZGVyLmFwcGVuZCgiKSAqKlxuXG4iKTsKIAogICAgIC8vIFByaW50
IGxheWVyIHRyZWUgZnJvbSB0aGUgcm9vdAotICAgIHByaW50TGF5ZXIodGhpcywgMCk7CisgICAg
cHJpbnRMYXllcihidWlsZGVyLCB0aGlzLCAwKTsKKworICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7CiB9Ci0jZW5kaWYgLy8gI2lmbmRlZiBOREVCVUcKIAogUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRm
b3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBj
bGllbnQpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCShyZXZpc2lvbiAx
ODk4MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYsIENHRmxvYXQg
eCwgQ0dGbG9hdCB5LCBjb25zdCBjaGFyKiB0ZXh0LCBzaXplX3QgbGVuZ3RoKSBjb25zdCBvdmVy
cmlkZTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICB2aXJ0dWFsIHZvaWQgcHJpbnRUcmVlKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgcHJpbnRMYXllclRyZWUoKSBjb25zdCBv
dmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gY2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9u
IDE4OTgyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQs
MTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheQogCiB2b2lkIFBs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJl
ZiBjYUxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmRzLCBpbnQg
ZHJhd0NvdW50KQogeworICAgIC8vIFdlIGFsd2F5cyB1cGRhdGUgdGhlIHJlcGFpbnQgY291bnQs
IGJ1dCB3ZSBkbyBub3QgcGFpbnQgaXQgZm9yIGxheWVycyB0aGF0CisgICAgLy8gb25seSBjb250
YWluIHRpbGVkIGJhY2tpbmcgbGF5ZXJzLiBUaG9zZSByZXBvcnQgdGhlaXIgcmVwYWludCBjb3Vu
dHMgdGhlbXNlbHZlcy4KKyAgICBpZiAoIW93bmVyKCkgfHwgb3duZXIoKS0+dXNlc1RpbGVkQmFj
a2luZ0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIENHQ29sb3JSZWYgYmFja2dyb3Vu
ZENvbG9yID0gbnVsbHB0cjsKICAgICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBjb3Vu
dGVyIHRoZSBzYW1lIGFzIHRoZSBib3JkZXIgY29sb3IsCiAgICAgLy8gdW5sZXNzIHRoZXJlIGlz
IG5vIGJvcmRlciwgdGhlbiBtYWtlIGl0IHJlZApJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNp
b24gMTg5ODMxKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMTUtMDktMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gUHJvdmlkZSBhIG1lYW5zIGZvciB2aWV3aW5nIHRo
ZSBsYXllciB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDkxNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgYSBuZXcgV2ViVmlldyBtZXRob2QgInByaW50TGF5ZXJUcmVlIiBzbyB0aGF0IGNs
aWVudHMKKyAgICAgICAgY2FuIGdldCBhIHN0cmluZyBkdW1wIG9mIHRoZSBjdXJyZW50IGxheWVy
IHRyZWUuIEFkZCB0aGlzCisgICAgICAgIHRvIGEgbmV3IENPTSBpbnRlcmZhY2UgdmVyc2lvbiBz
byBubyBleGlzdGluZyBjbGllbnRzIGJyZWFrCisgICAgICAgIGNvbXBhdGliaWxpdHkuCisgICAg
ICAgIAorICAgICAgICAqIEludGVyZmFjZXMvSVdlYlZpZXdQcml2YXRlLmlkbDoKKyAgICAgICAg
KiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OlF1ZXJ5SW50ZXJmYWNlKTogUmVjb2du
aXplIHRoZSBuZXcgaW50ZXJmYWNlIHZlcnNpb24uCisgICAgICAgIChXZWJWaWV3OjpwcmludExh
eWVyVHJlZSk6IEFkZGVkLiBUaGlzIGp1c3QgY2FsbHMgdGhlIFdlYkNvcmUKKyAgICAgICAgaW1w
bGVtZW50YXRpb24uCisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDE1LTA5LTEyICBCcmlhbiBC
dXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRpc2FtYmln
dWF0ZSBpbnNwZWN0ZWQvZnJvbnRlbmQgY29udHJvbGxlcnMgYW5kIHBhZ2VzIGluIGJhY2tlbmQg
Y29kZQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE4OTgyMCkKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjI3LDYgKzI2Mjcs
OCBAQCBIUkVTVUxUIFdlYlZpZXc6OlF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGCiAgICAgICAgICpw
cHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViVmlld1ByaXZhdGUqPih0aGlzKTsKICAgICBlbHNl
IGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYlZpZXdQcml2YXRlMikpCiAgICAgICAgICpw
cHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViVmlld1ByaXZhdGUyKj4odGhpcyk7CisgICAgZWxz
ZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJWaWV3UHJpdmF0ZTMpKQorICAgICAgICAq
cHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYlZpZXdQcml2YXRlMyo+KHRoaXMpOwogICAgIGVs
c2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViSUJBY3Rpb25zKSkKICAgICAgICAgKnBw
dk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJJQkFjdGlvbnMqPih0aGlzKTsKICAgICBlbHNlIGlm
IChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYlZpZXdDU1MpKQpAQCAtNzQzMSwzICs3NDMzLDI0
IEBAIEhSRVNVTFQgV2ViVmlldzo6YmFja2luZ1NjYWxlRmFjdG9yKF9PdXQKIAogICAgIHJldHVy
biBTX09LOwogfQorCitIUkVTVUxUIFdlYlZpZXc6OnByaW50TGF5ZXJUcmVlKF9EZXJlZl9vcHRf
b3V0XyBCU1RSKiB0cmVlQnN0cikKK3sKKyAgICBpZiAoIXRyZWVCc3RyKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgKnRyZWVCc3RyID0gbnVsbHB0cjsKKworI2lmIFVTRShDQSkK
KyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuIFNfT0s7CisKKyAgICBT
dHJpbmcgdHJlZSA9IG1fbGF5ZXJUcmVlSG9zdC0+cHJpbnRMYXllclRyZWUoKTsKKworICAgICp0
cmVlQnN0ciA9IEJTdHJpbmcodHJlZSkucmVsZWFzZSgpOworICAgIGlmICghKnRyZWVCc3RyICYm
IHRyZWUubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworI2VuZGlmCisK
KyAgICByZXR1cm4gU19PSzsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDE4OTgy
MCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCBpbnRlcmZhY2UgSURyb3BUYXJnZXRIZWxwZXI7CiAKIGNsYXNzIFdlYlZpZXcg
CiAgICAgOiBwdWJsaWMgSVdlYlZpZXcKLSAgICAsIHB1YmxpYyBJV2ViVmlld1ByaXZhdGUyCisg
ICAgLCBwdWJsaWMgSVdlYlZpZXdQcml2YXRlMwogICAgICwgcHVibGljIElXZWJJQkFjdGlvbnMK
ICAgICAsIHB1YmxpYyBJV2ViVmlld0NTUwogICAgICwgcHVibGljIElXZWJWaWV3RWRpdGluZwpA
QCAtMzkwLDYgKzM5MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgYWRkVXNlclN0eWxlU2hlZXRUb0dyb3VwKF9Jbl8gQlNUUiBncm91cE5hbWUsIF9J
bl9vcHRfIElXZWJTY3JpcHRXb3JsZCosIF9Jbl8gQlNUUiBzb3VyY2UsIF9Jbl8gQlNUUiB1cmws
CiAgICAgICAgIHVuc2lnbmVkIHdoaXRlbGlzdENvdW50LCBfX2lub3V0X2Vjb3VudF9mdWxsKHdo
aXRlbGlzdENvdW50KSBCU1RSKiB3aGl0ZWxpc3QsIHVuc2lnbmVkIGJsYWNrbGlzdENvdW50LCBf
X2lub3V0X2Vjb3VudF9mdWxsKGJsYWNrbGlzdENvdW50KSBCU1RSKiBibGFja2xpc3QsIFdlYlVz
ZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMpOwogCisgICAgLy8gSVdlYlZpZXdQcml2YXRlMworICAg
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcHJpbnRMYXllclRyZWUoX0RlcmVmX29wdF9vdXRf
IEJTVFIqKTsKKwogICAgIC8vIFdlYlZpZXcKICAgICBib29sIHNob3VsZFVzZUVtYmVkZGVkVmll
dyhjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vSW50ZXJmYWNlcy9JV2ViVmlld1ByaXZhdGUuaWRsCShyZXZpc2lvbiAx
ODk4MjApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw0ICszMTksMTAgQEAgaW50ZXJmYWNlIElXZWJWaWV3
UHJpdmF0ZTIgOiBJV2ViVmlld1ByaQogICAgICAgICBbaW5dIHVuc2lnbmVkIHdoaXRlbGlzdENv
dW50LCBbaW4sIHNpemVfaXMod2hpdGVsaXN0Q291bnQpXSBCU1RSKiB3aGl0ZWxpc3QsCiAgICAg
ICAgIFtpbl0gdW5zaWduZWQgYmxhY2tsaXN0Q291bnQsIFtpbiwgc2l6ZV9pcyhibGFja2xpc3RD
b3VudCldIEJTVFIqIGJsYWNrbGlzdCwKICAgICAgICAgW2luXSBXZWJVc2VyQ29udGVudEluamVj
dGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
Cit9CisKK1sgdXVpZCgwOEM4ODM1OS03NkFBLTQ4RjItQkEyNy04MjA1NDBFNzgxRTkpIF0KK2lu
dGVyZmFjZSBJV2ViVmlld1ByaXZhdGUzIDogSVdlYlZpZXdQcml2YXRlMgoreworICAgIEhSRVNV
TFQgcHJpbnRMYXllclRyZWUoW291dF0gQlNUUiopOworfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5ODMxKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTUtMDktMTUg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gUHJv
dmlkZSBhIG1lYW5zIGZvciB2aWV3aW5nIHRoZSBsYXllciB0cmVlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxNjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgTWluaUJyb3dzZXIgd2l0aCBh
IG5ldyBEZWJ1ZyBtZW51IG9wdGlvbiB0aGF0IHdpbGwKKyAgICAgICAgZHVtcCB0aGUgY3VycmVu
dCBsYXllciB0cmVlIHRvIHRoZSBkZWJ1ZyBjb25zb2xlLgorICAgICAgICAKKyAgICAgICAgKiBN
aW5pQnJvd3Nlci9NaW5pQnJvd3Nlci52Y3hwcm9qL01pbmlCcm93c2VyTGliLnJjOgorICAgICAg
ICAqIE1pbmlCcm93c2VyL01pbmlCcm93c2VyLnZjeHByb2ovTWluaUJyb3dzZXJMaWJSZXNvdXJj
ZS5oOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9Db21tb24uY3BwOgorICAgICAgICAoV25k
UHJvYyk6IEFkZCBoYW5kbGVyIGZvciAnUHJpbnQgTGF5ZXIgVHJlZScgbWVudSBvcHRpb24uCisg
ICAgICAgICogTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmNwcDoKKyAgICAgICAgKE1pbmlC
cm93c2VyOjpwcmludExheWVyVHJlZSk6IEFkZGVkIEhhbmRsZXIuCisgICAgICAgICogTWluaUJy
b3dzZXIvd2luL01pbmlCcm93c2VyLmg6CisKIDIwMTUtMDktMTQgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXRUZXN0UnVubmVyIGRlY2xh
cmF0aXZlIGxhbmd1YWdlIHNldHRpbmcgaXMgYnJva2VuIGZvciBpT1MKSW5kZXg6IFRvb2xzL01p
bmlCcm93c2VyL01pbmlCcm93c2VyLnZjeHByb2ovTWluaUJyb3dzZXJMaWIucmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvTWluaUJyb3dzZXIudmN4cHJvai9NaW5pQnJvd3Nlckxp
Yi5yYwkocmV2aXNpb24gMTg5ODIwKQorKysgVG9vbHMvTWluaUJyb3dzZXIvTWluaUJyb3dzZXIu
dmN4cHJvai9NaW5pQnJvd3NlckxpYi5yYwkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3
IEBAIEJFR0lOCiAgICAgICAgIE1FTlVJVEVNICJTaG93IENvbXBvc2l0aW5nIEJvcmRlcnMiLCAg
ICBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUw0KICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SDQog
ICAgICAgICBNRU5VSVRFTSAiU2hvdyBDYWNoZXMgV2luZG93IiwgICAgICAgICAgSURNX0NBQ0hF
Uw0KKyAgICAgICAgTUVOVUlURU0gIlByaW50IExheWVyIFRyZWUiLCAgICAgICAgICAgIElETV9Q
UklOVF9MQVlFUl9UUkVFDQogICAgIEVORA0KIEVORA0KIA0KSW5kZXg6IFRvb2xzL01pbmlCcm93
c2VyL01pbmlCcm93c2VyLnZjeHByb2ovTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL01pbmlCcm93c2VyLnZjeHByb2ovTWluaUJyb3dzZXJM
aWJSZXNvdXJjZS5oCShyZXZpc2lvbiAxODk4MjApCisrKyBUb29scy9NaW5pQnJvd3Nlci9NaW5p
QnJvd3Nlci52Y3hwcm9qL01pbmlCcm93c2VyTGliUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNiArNTIsNyBAQAogI2RlZmluZSBJRE1fQUNUVUFMX1NJWkUgICAgICAgICAgICAgICAg
IDE3MQogI2RlZmluZSBJRE1fWk9PTV9JTiAgICAgICAgICAgICAgICAgICAgIDE3MgogI2RlZmlu
ZSBJRE1fWk9PTV9PVVQgICAgICAgICAgICAgICAgICAgIDE3MworI2RlZmluZSBJRE1fUFJJTlRf
TEFZRVJfVFJFRSAgICAgICAgICAgIDE3NAogI2RlZmluZSBJRENfRU1QVFlfVVJMX0NBQ0hFICAg
ICAgICAgICAgIDEwMDAKICNkZWZpbmUgSURDX1JFVFVSTl9GUkVFX01FTU9SWSAgICAgICAgICAx
MDAxCiAjZGVmaW5lIElEQ19FTVBUWV9XRUJDT1JFX0NBQ0hFICAgICAgICAgMTAwMgpJbmRleDog
VG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWlu
aUJyb3dzZXIvd2luL0NvbW1vbi5jcHAJKHJldmlzaW9uIDE4OTgyMCkKKysrIFRvb2xzL01pbmlC
cm93c2VyL3dpbi9Db21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIFRD
SEFSIHN6V2luZG93Q2xhc3NbTUFYX0xPQURTVFJJTkddOyAvLwogCiAvLyBTdXBwb3J0IG1vdmlu
ZyB0aGUgdHJhbnNwYXJlbnQgd2luZG93CiBQT0lOVCBzX3dpbmRvd1Bvc2l0aW9uID0geyAxMDAs
IDEwMCB9OwotU0laRSBzX3dpbmRvd1NpemUgPSB7IDgwMCwgNDAwIH07CitTSVpFIHNfd2luZG93
U2l6ZSA9IHsgNTAwLCAyMDAgfTsKIAogLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rp
b25zIGluY2x1ZGVkIGluIHRoaXMgY29kZSBtb2R1bGU6CiBBVE9NIE15UmVnaXN0ZXJDbGFzcyhI
SU5TVEFOQ0UgaEluc3RhbmNlKTsKQEAgLTUxMiw2ICs1MTIsMTAgQEAgTFJFU1VMVCBDQUxMQkFD
SyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVAogICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikK
ICAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnpvb21PdXQoKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIElETV9QUklOVF9MQVlFUl9UUkVFOgorICAgICAgICAgICAgaWYg
KGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnByaW50TGF5ZXJU
cmVlKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGlmICghVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmNwcAkocmV2aXNpb24gMTg5
ODIwKQorKysgVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDg2LDYgKzQ4NiwyMSBAQCB2b2lkIE1pbmlCcm93c2VyOjp6b29tT3V0KCkKICAg
ICB3ZWJBY3Rpb25zLT56b29tUGFnZU91dChudWxscHRyKTsKIH0KIAordHlwZWRlZiBfY29tX3B0
cl90PF9jb21fSUlJRDxJV2ViVmlld1ByaXZhdGUzLCAmX191dWlkb2YoSVdlYlZpZXdQcml2YXRl
Myk+PiBJV2ViVmlld1ByaXZhdGUzUHRyOworCit2b2lkIE1pbmlCcm93c2VyOjpwcmludExheWVy
VHJlZSgpCit7CisgICAgSVdlYlZpZXdQcml2YXRlM1B0ciB3ZWJWaWV3UHJpdmF0ZTsKKyAgICBp
ZiAoRkFJTEVEKG1fd2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJWaWV3UHJpdmF0ZTMs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViVmlld1ByaXZhdGUuR2V0SW50ZXJmYWNlUHRy
KCkpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIF9ic3RyX3QgbGF5ZXJUcmVlQnN0cjsKKyAg
ICB3ZWJWaWV3UHJpdmF0ZS0+cHJpbnRMYXllclRyZWUobGF5ZXJUcmVlQnN0ci5HZXRBZGRyZXNz
KCkpOworICAgIE91dHB1dERlYnVnU3RyaW5nKEwiQ1VSUkVOVCBUUkVFOlxuIik7CisgICAgT3V0
cHV0RGVidWdTdHJpbmcobGF5ZXJUcmVlQnN0cik7CisgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJc
blxuIik7Cit9CisKIHZvaWQgTWluaUJyb3dzZXI6OmdlbmVyYXRlRm9udEZvclNjYWxlRmFjdG9y
KGZsb2F0IHNjYWxlRmFjdG9yKQogewogICAgIGlmIChtX2hVUkxCYXJGb250KQpJbmRleDogVG9v
bHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWlu
aUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmgJKHJldmlzaW9uIDE4OTgyMCkKKysrIFRvb2xzL01p
bmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHpvb21JbigpOwogICAgIHZvaWQgem9vbU91dCgpOwogCisg
ICAgdm9pZCBwcmludExheWVyVHJlZSgpOworCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Io
KSB7IHJldHVybiBtX2RldmljZVNjYWxlRmFjdG9yOyB9CiAgICAgdm9pZCB1cGRhdGVEZXZpY2VT
Y2FsZUZhY3RvcigpOwogCg==
</data>
<flag name="review"
          id="286481"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>