<?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>141257</bug_id>
          
          <creation_ts>2015-02-04 12:41:22 -0800</creation_ts>
          <short_desc>Web Inspector: ES6: Better support for Symbol types in Type Profiler</short_desc>
          <delta_ts>2015-03-28 10:29:27 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066886</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-04 12:41:22 -0800</bug_when>
    <thetext>* SUMMARY
We should better support for Symbol types in Type Profiler. Symbols are pseudo-primitives, like unique strings. I would expect them to be handled similar to Strings in the Type profiling.

* TEST
&lt;script&gt;
function foo(a) {
  console.log(a);
}
&lt;/script&gt;

js&gt; foo(Symbol()); // I expect &quot;Symbol&quot; to show up next to foo&apos;s `a` param.
js&gt; foo(1); // I expect &quot;(many)&quot; to show up next to foo&apos;s `a` param. Popover should have &quot;Integer&quot; and &quot;Symbol&quot;.

* NOTES
- Symbol has some special properties. But it is more like a primitive than an object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066887</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-02-04 12:41:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/19719214&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076546</commentid>
    <comment_count>2</comment_count>
      <attachid>248484</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-11 21:09:55 -0700</bug_when>
    <thetext>Created attachment 248484
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076560</commentid>
    <comment_count>3</comment_count>
      <attachid>248484</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-11 21:58:07 -0700</bug_when>
    <thetext>Comment on attachment 248484
WIP

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

Yeah, this looks good!

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:77
&gt; +    if (structure &amp;&amp; newShape &amp;&amp; (type &amp; (TypeString | TypeSymbol) == TypeNothing)) {

Why are String|Symbol special but boolean and number aren&apos;t?

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:139
&gt; +    if (m_seenTypes &amp; TypeSymbol)
&gt; +         seen.append(&quot;Symbol &quot;);

These can all be appendLiteral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076581</commentid>
    <comment_count>4</comment_count>
      <attachid>248484</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-12 00:37:02 -0700</bug_when>
    <thetext>Comment on attachment 248484
WIP

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

Just checked out my local build. Looks like this patch works. Gonna run the tests I have now to make sure they work and also write a few more.

&gt;&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:77
&gt;&gt; +    if (structure &amp;&amp; newShape &amp;&amp; (type &amp; (TypeString | TypeSymbol) == TypeNothing)) {
&gt; 
&gt; Why are String|Symbol special but boolean and number aren&apos;t?

Because Symbol and String are the two primitives that are also JSCells.
It may be worth writing a function that checks if a RuntimeType bit mask is a primitive, something like:
bool isPrimitive(uint16_t types) { return types &amp; ~(TypeFunction | TypeObject) }
and the above line can just be
... &amp;&amp; !isPrimitive(type)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076769</commentid>
    <comment_count>5</comment_count>
      <attachid>248549</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-12 15:53:35 -0700</bug_when>
    <thetext>Created attachment 248549
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076834</commentid>
    <comment_count>6</comment_count>
      <attachid>248549</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-12 20:20:31 -0700</bug_when>
    <thetext>Comment on attachment 248549
patch

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

Nice! r=me, some nits you can choose to fix if you want to.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1183
&gt; -            uint8_t seenTypes = typeSet-&gt;seenTypes();
&gt; +            uint16_t seenTypes = typeSet-&gt;seenTypes();

Instead of &quot;uint16_t&quot; can this just be &quot;RuntimeType&quot;?

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:2
&gt; - * Copyright (C) 2008, 2014 Apple Inc. All Rights Reserved.
&gt; + * Copyright (C) 2014, 2015 Apple Inc. All Rights Reserved.

lol

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:123
&gt; +        seen.append(&quot;Function &quot;);

Since you&apos;re updating each of these lines anyways, these should be &quot;appendLiteral&quot; instead of just &quot;append&quot;.

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:164
&gt; -bool TypeSet::doesTypeConformTo(uint8_t test) const
&gt; +bool TypeSet::doesTypeConformTo(uint16_t test) const

Instead of &quot;uint16_t&quot; can this just be &quot;RuntimeType&quot;?

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:327
&gt; +            json.append(&quot;,&quot;);

Nit: All of these appends with 1 character can/should be append(&apos;,&apos;).

&gt; Source/JavaScriptCore/runtime/TypeSet.cpp:329
&gt; +        json.append(&quot;\&quot;Symbol\&quot;&quot;);

Nit: This can/should be appendLiteral.

&gt; Source/JavaScriptCore/runtime/TypeSet.h:113
&gt; +    bool doesTypeConformTo(uint16_t test) const;
&gt; +    uint16_t seenTypes() const { return m_seenTypes; }

Same here about &quot;uint16_t&quot; &lt;=&gt; &quot;RuntimeType&quot;?

&gt; Source/JavaScriptCore/runtime/TypeSet.h:117
&gt; +    uint16_t m_seenTypes;

Same here about &quot;uint16_t&quot; &lt;=&gt; &quot;RuntimeType&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080951</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-28 10:29:27 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/182114</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248484</attachid>
            <date>2015-03-11 21:09:55 -0700</date>
            <delta_ts>2015-03-12 15:53:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>12520</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTgxNDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIC8vIChUaGUgb3RoZXIgZGlyZWN0aW9uIGRvZXMgbm90IGhvbGQgaW4gZ2VuZXJhbCku
CiAKICAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0ID0gbm9kZS0+dHlwZUxvY2F0
aW9uKCktPm1faW5zdHJ1Y3Rpb25UeXBlU2V0OwotICAgICAgICAgICAgdWludDhfdCBzZWVuVHlw
ZXMgPSB0eXBlU2V0LT5zZWVuVHlwZXMoKTsKKyAgICAgICAgICAgIHVpbnQxNl90IHNlZW5UeXBl
cyA9IHR5cGVTZXQtPnNlZW5UeXBlcygpOwogICAgICAgICAgICAgaWYgKHR5cGVTZXQtPmRvZXNU
eXBlQ29uZm9ybVRvKFR5cGVNYWNoaW5lSW50KSkgewogICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb0NoZWNrKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVJbnQzMigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9SdW50aW1lLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHJldmlzaW9uIDE4MTQyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDggQEAKICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImlzSW50ZWdlciIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNh
dGVzIGlmIHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIEludGVnZXIuIiB9LAog
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNOdW1iZXIiLCAidHlwZSI6ICJib29sZWFuIiwg
ImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24gaGFzIGJl
ZW4gdHlwZSBOdW1iZXIuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNTdHJpbmci
LCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5
cGUgZGVzY3JpcHRpb24gaGFzIGJlZW4gdHlwZSBTdHJpbmcuIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaXNPYmplY3QiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjog
IkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24gaGFzIGJlZW4gdHlwZSBPYmplY3Qu
IiB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc09iamVjdCIsICJ0eXBlIjogImJvb2xl
YW4iLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVzIGlmIHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBo
YXMgYmVlbiB0eXBlIE9iamVjdC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc1N5
bWJvbCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVzIGlmIHRo
aXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIFN5bWJvbC4iIH0KICAgICAgICAgICAg
IF0KICAgICAgICAgfSwKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE4MTQyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw2ICs2MSw4
IEBAIFJ1bnRpbWVUeXBlIFR5cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmEKICAgICAgICAgcmV0
ID0gVHlwZVN0cmluZzsKICAgICBlbHNlIGlmICh2LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldCA9
IFR5cGVPYmplY3Q7CisgICAgZWxzZSBpZiAodi5pc1N5bWJvbCgpKQorICAgICAgICByZXQgPSBU
eXBlU3ltYm9sOwogICAgIGVsc2UKICAgICAgICAgcmV0ID0gVHlwZU5vdGhpbmc7CiAKQEAgLTcy
LDcgKzc0LDcgQEAgdm9pZCBUeXBlU2V0OjphZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZQogICAg
IFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gbmV3U2hhcGUgPSBwcnBOZXdTaGFwZTsKICAgICBtX3Nl
ZW5UeXBlcyA9IG1fc2VlblR5cGVzIHwgdHlwZTsKIAotICAgIGlmIChzdHJ1Y3R1cmUgJiYgbmV3
U2hhcGUgJiYgdHlwZSAhPSBUeXBlU3RyaW5nKSB7CisgICAgaWYgKHN0cnVjdHVyZSAmJiBuZXdT
aGFwZSAmJiAodHlwZSAmIChUeXBlU3RyaW5nIHwgVHlwZVN5bWJvbCkgPT0gVHlwZU5vdGhpbmcp
KSB7CiAgICAgICAgIGlmICghbV9zdHJ1Y3R1cmVTZXQuY29udGFpbnMoc3RydWN0dXJlKSkgewog
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAv
LyBNYWtlIG9uZSBtb3JlIHBhc3MgbWFraW5nIHN1cmUgdGhhdDogCkBAIC0xMzMsNiArMTM1LDgg
QEAgU3RyaW5nIFR5cGVTZXQ6OmR1bXBUeXBlcygpIGNvbnN0CiAgICAgICAgICBzZWVuLmFwcGVu
ZCgiU3RyaW5nICIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVPYmplY3QpCiAgICAgICAg
ICBzZWVuLmFwcGVuZCgiT2JqZWN0ICIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVTeW1i
b2wpCisgICAgICAgICBzZWVuLmFwcGVuZCgiU3ltYm9sICIpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3Rvcnkuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSA9IG1fc3RydWN0dXJlSGlzdG9yeS5hdChpKTsKQEAg
LTE1Nyw3ICsxNjEsNyBAQCBTdHJpbmcgVHlwZVNldDo6ZHVtcFR5cGVzKCkgY29uc3QKICAgICBy
ZXR1cm4gc2Vlbi50b1N0cmluZygpOwogfQogCi1ib29sIFR5cGVTZXQ6OmRvZXNUeXBlQ29uZm9y
bVRvKHVpbnQ4X3QgdGVzdCkgY29uc3QKK2Jvb2wgVHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8o
dWludDE2X3QgdGVzdCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBv
dXIgc2VlbiB0eXBlcyBjb25mb3JtICB0byB0aGUgdHlwZXMgZGVzY3JpYmVkIGJ5IHRoZSB0ZXN0
IGJpdHN0cmluZy4gKGkuZSB3ZSBoYXZlbid0IHNlZW4gbW9yZSB0eXBlcyB0aGFuIHRlc3QpLgog
ICAgIC8vIFdlIGFyZSA8PSB0byB0aG9zZSB0eXBlcyBpZiBBTkRpbmcgd2l0aCB0aGUgYml0c3Ry
aW5nIGRvZXNuJ3QgemVybyBvdXQgYW55IG9mIG91ciBiaXRzLgpAQCAtMjA4LDYgKzIxMiw4IEBA
IFN0cmluZyBUeXBlU2V0OjpkaXNwbGF5TmFtZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIk51bWJlciIpOwogICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlU3RyaW5n
KSkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiU3RyaW5nIik7CisgICAgaWYgKGRvZXNU
eXBlQ29uZm9ybVRvKFR5cGVTeW1ib2wpKQorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJT
eW1ib2wiKTsKIAogICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVsbCB8IFR5cGVVbmRl
ZmluZWQpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIoPykiKTsKQEAgLTIyMiw2ICsy
MjgsOCBAQCBTdHJpbmcgVHlwZVNldDo6ZGlzcGxheU5hbWUoKSBjb25zdAogICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJOdW1iZXI/Iik7CiAgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5
cGVTdHJpbmcgfCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQogICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJTdHJpbmc/Iik7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVTeW1i
b2wgfCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJTeW1ib2w/Iik7CiAgICAKICAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVj
dCB8IFR5cGVGdW5jdGlvbiB8IFR5cGVTdHJpbmcpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJPYmplY3QiKTsKQEAgLTI1Nyw2ICsyNjUsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHlwZVNlCiAgICAgICAgIC5zZXRJc051bWJlcigobV9zZWVuVHlwZXMgJiBU
eXBlTnVtYmVyKSAhPSBUeXBlTm90aGluZykKICAgICAgICAgLnNldElzU3RyaW5nKChtX3NlZW5U
eXBlcyAmIFR5cGVTdHJpbmcpICE9IFR5cGVOb3RoaW5nKQogICAgICAgICAuc2V0SXNPYmplY3Qo
KG1fc2VlblR5cGVzICYgVHlwZU9iamVjdCkgIT0gVHlwZU5vdGhpbmcpCisgICAgICAgIC5zZXRJ
c1N5bWJvbCgobV9zZWVuVHlwZXMgJiBUeXBlU3ltYm9sKSAhPSBUeXBlTm90aGluZykKICAgICAg
ICAgLnJlbGVhc2UoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuaAkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKU1ZhbHVlOwogCi1lbnVtIFJ1bnRpbWVUeXBlIDogdWludDhfdCB7Citl
bnVtIFJ1bnRpbWVUeXBlIDogdWludDE2X3QgewogICAgIFR5cGVOb3RoaW5nICAgICAgICAgICAg
PSAweDAsCiAgICAgVHlwZUZ1bmN0aW9uICAgICAgICAgICA9IDB4MSwKICAgICBUeXBlVW5kZWZp
bmVkICAgICAgICAgID0gMHgyLApAQCAtNTcsNyArNTcsOCBAQCBlbnVtIFJ1bnRpbWVUeXBlIDog
dWludDhfdCB7CiAgICAgVHlwZU1hY2hpbmVJbnQgICAgICAgICA9IDB4MTAsCiAgICAgVHlwZU51
bWJlciAgICAgICAgICAgICA9IDB4MjAsCiAgICAgVHlwZVN0cmluZyAgICAgICAgICAgICA9IDB4
NDAsCi0gICAgVHlwZU9iamVjdCAgICAgICAgICAgICA9IDB4ODAKKyAgICBUeXBlT2JqZWN0ICAg
ICAgICAgICAgID0gMHg4MCwKKyAgICBUeXBlU3ltYm9sICAgICAgICAgICAgID0gMHgxMDAKIH07
CiAKIGNsYXNzIFN0cnVjdHVyZVNoYXBlIDogcHVibGljIFJlZkNvdW50ZWQ8U3RydWN0dXJlU2hh
cGU+IHsKQEAgLTEwOCwxMiArMTA5LDEyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbGVhc3RDb21t
b25BbmNlc3RvcigpIGNvbnN0OwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUeXBlU2V0PiBpbnNwZWN0b3JUeXBlU2V0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmc7IH0KLSAgICBib29sIGRv
ZXNUeXBlQ29uZm9ybVRvKHVpbnQ4X3QgdGVzdCkgY29uc3Q7Ci0gICAgdWludDhfdCBzZWVuVHlw
ZXMoKSBjb25zdCB7IHJldHVybiBtX3NlZW5UeXBlczsgfQorICAgIGJvb2wgZG9lc1R5cGVDb25m
b3JtVG8odWludDE2X3QgdGVzdCkgY29uc3Q7CisgICAgdWludDE2X3Qgc2VlblR5cGVzKCkgY29u
c3QgeyByZXR1cm4gbV9zZWVuVHlwZXM7IH0KICAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH07CiAKIHByaXZhdGU6Ci0gICAgdWlu
dDhfdCBtX3NlZW5UeXBlczsKKyAgICB1aW50MTZfdCBtX3NlZW5UeXBlczsKICAgICBib29sIG1f
aXNPdmVyZmxvd247CiAgICAgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IG1fc3RydWN0
dXJlSGlzdG9yeTsKICAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL3N5bWJvbC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL3N5bWJvbC5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIv
c3ltYm9sLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2xvYWQoIi4vZHJpdmVy
L2RyaXZlci5qcyIpOworCitmdW5jdGlvbiB3cmFwcGVyKCkgeworICAgIHZhciBzMSA9IFN5bWJv
bCgpOworICAgIHZhciBzQ2FwdHVyZWQgPSBTeW1ib2woKTsKKyAgICBmdW5jdGlvbiBmb28oKSB7
CisgICAgICAgIHNDYXB0dXJlZCA9IG51bGw7CisgICAgfQorICAgIGZvbygpOworfQorCit3cmFw
cGVyKCk7CisKKy8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwordmFyIHR5cGVzID0g
ZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJzMSIpOyAKK2Fzc2VydCh0eXBlcy5pbnN0
cnVjdGlvblR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMSwgIlByaW1pdGl2
ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluIG9uZSB0eXBlIik7Cithc3NlcnQodHlwZXMuaW5z
dHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3ltYm9sKSAhPT0g
LTEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFpbiAnU3ltYm9sJyIpOworCit0
eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAic0NhcHR1cmVkIik7Cithc3Nl
cnQodHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULlN5bWJv
bCkgIT09IC0xLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gJ1N5bWJvbCci
KTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9m
KFQuTnVsbCkgIT09IC0xLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gJ051
bGwnIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2Ry
aXZlci9kcml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3R5cGVQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2RyaXZlci9kcml2ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTcsNiArNyw3IEBAIHZhciBUID0gewogICAgIE1hbnk6ICIobWFueSki
LAogICAgIFN0cmluZzogIlN0cmluZyIsCiAgICAgVW5kZWZpbmVkOiAiVW5kZWZpbmVkIiwKKyAg
ICBTeW1ib2w6ICJTeW1ib2wiLAogICAgIFVuZGVmaW5lZE9yTnVsbDogIig/KSIKIH07CiAKQEAg
LTE0LDcgKzE1LDggQEAgdmFyIFRPcHRpb25hbCA9IHsKICAgICBCb29sZWFuOiJCb29sZWFuPyIs
CiAgICAgSW50ZWdlcjogIkludGVnZXI/IiwKICAgICBOdW1iZXI6ICJOdW1iZXI/IiwKLSAgICBT
dHJpbmc6ICJTdHJpbmc/IgorICAgIFN0cmluZzogIlN0cmluZz8iLAorICAgIFN5bWJvbDogIlN5
bWJvbD8iCiB9OwogCiBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCByZWFzb24pIHsKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9UeXBlU2V0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9U
eXBlU2V0LmpzCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgU2FhbSBCYXJhdGkuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC00Niw2ICs0Niw4IEBAIFdlYkluc3BlY3Rvci5UeXBlU2V0ID0gZnVuY3Rpb24ocnVudGlt
ZVQKICAgICAgICAgYml0U3RyaW5nIHw9IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3Ry
aW5nOwogICAgIGlmICh0eXBlU2V0LmlzT2JqZWN0KQogICAgICAgICBiaXRTdHJpbmcgfD0gV2Vi
SW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3Q7CisgICAgaWYgKHR5cGVTZXQuaXNTeW1i
b2wpCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlN5
bWJvbDsKIAogICAgIGNvbnNvbGUuYXNzZXJ0KGJpdFN0cmluZyk7CiAgICAgdGhpcy5fYml0U3Ry
aW5nID0gYml0U3RyaW5nOwpAQCAtNjYsNyArNjgsOCBAQCBXZWJJbnNwZWN0b3IuVHlwZVNldC5U
eXBlQml0ID0gewogICAgICJJbnRlZ2VyIiAgICAgOiAgMHgxMCwKICAgICAiTnVtYmVyIiAgICAg
IDogIDB4MjAsCiAgICAgIlN0cmluZyIgICAgICA6ICAweDQwLAotICAgICJPYmplY3QiICAgICAg
OiAgMHg4MAorICAgICJPYmplY3QiICAgICAgOiAgMHg4MCwKKyAgICAiU3ltYm9sIiAgICAgIDog
IDB4MTAwCiB9OwogCiBXZWJJbnNwZWN0b3IuVHlwZVNldC5OdWxsT3JVbmRlZmluZWRUeXBlQml0
cyA9IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVsbCB8IFdlYkluc3BlY3Rvci5UeXBl
U2V0LlR5cGVCaXQuVW5kZWZpbmVkOwpAQCAtMTEwLDYgKzExMyw4IEBAIFdlYkluc3BlY3Rvci5U
eXBlU2V0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3ByaW1pdGl2ZVR5cGVOYW1l
cy5wdXNoKCJCb29sZWFuIik7CiAgICAgICAgIGlmICh0eXBlU2V0LmlzU3RyaW5nKQogICAgICAg
ICAgICAgdGhpcy5fcHJpbWl0aXZlVHlwZU5hbWVzLnB1c2goIlN0cmluZyIpOworICAgICAgICBp
ZiAodHlwZVNldC5pc1N5bWJvbCkKKyAgICAgICAgICAgIHRoaXMuX3ByaW1pdGl2ZVR5cGVOYW1l
cy5wdXNoKCJTeW1ib2wiKTsKIAogICAgICAgICAvLyBJdCdzIGltcGxpZWQgdGhhdCB0eXBlIElu
dGVnZXIgaXMgY29udGFpbmVkIGluIHR5cGUgTnVtYmVyLiBEb24ndCBwdXQgCiAgICAgICAgIC8v
IGJvdGggJ0ludGVnZXInIGFuZCAnTnVtYmVyJyBpbnRvIHRoZSBzZXQgYmVjYXVzZSB0aGlzIGNv
dWxkIGltcGx5IHRoYXQgCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwkocmV2aXNpb24gMTgx
NDIwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRv
a2VuVmlldy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDEwIEBACiAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiKDIyMywgNTMsIDQ2KTsKIH0KIAorLnR5cGUtdG9rZW4tc3ltYm9sIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNjMsIDE2OSwgMTU2KTsKK30KKwogLnR5cGUtdG9rZW4t
ZGVmYXVsdCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDExOCwgMTc0LCAyOSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5W
aWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHJldmlzaW9uIDE4MTQyMCkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTY5LDYgKzY5LDcgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBl
ID0gewogCiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvckNsYXNzRm9yVHlwZSA9IHsK
ICAgICAiU3RyaW5nIjogInR5cGUtdG9rZW4tc3RyaW5nIiwKKyAgICAiU3ltYm9sIjogInR5cGUt
dG9rZW4tc3ltYm9sIiwKICAgICAiRnVuY3Rpb24iOiAidHlwZS10b2tlbi1mdW5jdGlvbiIsCiAg
ICAgIk51bWJlciI6ICJ0eXBlLXRva2VuLW51bWJlciIsCiAgICAgIkludGVnZXIiOiAidHlwZS10
b2tlbi1udW1iZXIiLApAQCAtMTc5LDYgKzE4MCw4IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIjsKICAgICAgICAg
aWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlN0
cmluZykpCiAgICAgICAgICAgICByZXR1cm4gIlN0cmluZyI7CisgICAgICAgIGlmICh0eXBlU2V0
LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TeW1ib2wpKQorICAg
ICAgICAgICAgcmV0dXJuICJTeW1ib2wiOwogCiAgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFp
bmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuTnVsbE9yVW5kZWZpbmVkVHlwZUJpdHMpKQogICAg
ICAgICAgICAgcmV0dXJuICIoPykiOwpAQCAtMTkzLDYgKzE5Niw4IEBAIFdlYkluc3BlY3Rvci5U
eXBlVG9rZW5WaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiAiTnVtYmVyPyI7
CiAgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQu
VHlwZUJpdC5TdHJpbmcgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5OdWxsT3JVbmRlZmluZWRUeXBl
Qml0cykpCiAgICAgICAgICAgICByZXR1cm4gIlN0cmluZz8iOworICAgICAgICBpZiAodHlwZVNl
dC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3ltYm9sIHwgV2Vi
SW5zcGVjdG9yLlR5cGVTZXQuTnVsbE9yVW5kZWZpbmVkVHlwZUJpdHMpKQorICAgICAgICAgICAg
cmV0dXJuICJTeW1ib2w/IjsKICAgICAgICAKICAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWlu
ZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk9iamVjdCB8IFdlYkluc3BlY3Rvci5U
eXBlU2V0LlR5cGVCaXQuRnVuY3Rpb24gfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlN0
cmluZykpCiAgICAgICAgICAgICByZXR1cm4gIk9iamVjdCI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248549</attachid>
            <date>2015-03-12 15:53:35 -0700</date>
            <delta_ts>2015-03-12 20:20:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>17591</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDE1LTAzLTEyICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBFUzY6IEJldHRlciBzdXBwb3J0IGZvciBTeW1ib2wgdHlwZXMg
aW4gVHlwZSBQcm9maWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRVM2IGludHJvZHVjZXMgdGhlIG5ldyBwcmltaXRpdmUgdHlwZSBTeW1ib2wuIFRo
aXMgcGF0Y2ggbWFrZXMgSlNDJ3MgCisgICAgICAgIHR5cGUgcHJvZmlsZXIgc3VwcG9ydCB0aGlz
IG5ldyBwcmltaXRpdmUgdHlwZS4KKworICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb246CisgICAgICAgICogcnVudGltZS9UeXBlU2V0
LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6
OlR5cGVTZXQ6OmR1bXBUeXBlcyk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmRvZXNUeXBlQ29u
Zm9ybVRvKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZGlzcGxheU5hbWUpOgorICAgICAgICAo
SlNDOjpUeXBlU2V0OjppbnNwZWN0b3JUeXBlU2V0KToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6
dG9KU09OU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKEpT
Qzo6VHlwZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAgKEpTQzo6cnVudGltZVR5cGVJc1ByaW1p
dGl2ZSk6CisgICAgICAgICogdGVzdHMvdHlwZVByb2ZpbGVyL2RyaXZlci9kcml2ZXIuanM6Cisg
ICAgICAgICogdGVzdHMvdHlwZVByb2ZpbGVyL3N5bWJvbC5qczogQWRkZWQuCisgICAgICAgICh3
cmFwcGVyLmZvbyk6CisgICAgICAgICh3cmFwcGVyLmJhcik6CisgICAgICAgICh3cmFwcGVyLmJh
ci5iYXIuYmF6KToKKyAgICAgICAgKHdyYXBwZXIpOgorCiAyMDE1LTAzLTEyICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugc3RkOjphdG9taWMgZm9yIENvZGVC
bG9jazo6bV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4MTQyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExODAsNyArMTE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyAoVGhlIG90aGVy
IGRpcmVjdGlvbiBkb2VzIG5vdCBob2xkIGluIGdlbmVyYWwpLgogCiAgICAgICAgICAgICBSZWZQ
dHI8VHlwZVNldD4gdHlwZVNldCA9IG5vZGUtPnR5cGVMb2NhdGlvbigpLT5tX2luc3RydWN0aW9u
VHlwZVNldDsKLSAgICAgICAgICAgIHVpbnQ4X3Qgc2VlblR5cGVzID0gdHlwZVNldC0+c2VlblR5
cGVzKCk7CisgICAgICAgICAgICB1aW50MTZfdCBzZWVuVHlwZXMgPSB0eXBlU2V0LT5zZWVuVHlw
ZXMoKTsKICAgICAgICAgICAgIGlmICh0eXBlU2V0LT5kb2VzVHlwZUNvbmZvcm1UbyhUeXBlTWFj
aGluZUludCkpIHsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9DaGVjaygpOwogICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5q
c29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvUnVudGltZS5qc29uCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDcgKzE1Myw4IEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0ludGVnZXIiLCAidHlw
ZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVz
Y3JpcHRpb24gaGFzIGJlZW4gdHlwZSBJbnRlZ2VyLiIgfSwKICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImlzTnVtYmVyIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJJbmRp
Y2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgTnVtYmVyLiIgfSwK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzU3RyaW5nIiwgInR5cGUiOiAiYm9vbGVhbiIs
ICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBi
ZWVuIHR5cGUgU3RyaW5nLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzT2JqZWN0
IiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0
eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgT2JqZWN0LiIgfQorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaXNPYmplY3QiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjog
IkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24gaGFzIGJlZW4gdHlwZSBPYmplY3Qu
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNTeW1ib2wiLCAidHlwZSI6ICJib29s
ZWFuIiwgImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24g
aGFzIGJlZW4gdHlwZSBTeW1ib2wuIiB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAg
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShy
ZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNiArNjEsOCBAQCBSdW50aW1lVHlwZSBUeXBl
U2V0OjpnZXRSdW50aW1lVHlwZUZvclZhCiAgICAgICAgIHJldCA9IFR5cGVTdHJpbmc7CiAgICAg
ZWxzZSBpZiAodi5pc09iamVjdCgpKQogICAgICAgICByZXQgPSBUeXBlT2JqZWN0OworICAgIGVs
c2UgaWYgKHYuaXNTeW1ib2woKSkKKyAgICAgICAgcmV0ID0gVHlwZVN5bWJvbDsKICAgICBlbHNl
CiAgICAgICAgIHJldCA9IFR5cGVOb3RoaW5nOwogCkBAIC03Miw3ICs3NCw3IEBAIHZvaWQgVHlw
ZVNldDo6YWRkVHlwZUluZm9ybWF0aW9uKFJ1bnRpbWUKICAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IG5ld1NoYXBlID0gcHJwTmV3U2hhcGU7CiAgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBl
cyB8IHR5cGU7CiAKLSAgICBpZiAoc3RydWN0dXJlICYmIG5ld1NoYXBlICYmIHR5cGUgIT0gVHlw
ZVN0cmluZykgeworICAgIGlmIChzdHJ1Y3R1cmUgJiYgbmV3U2hhcGUgJiYgIXJ1bnRpbWVUeXBl
SXNQcmltaXRpdmUodHlwZSkpIHsKICAgICAgICAgaWYgKCFtX3N0cnVjdHVyZVNldC5jb250YWlu
cyhzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJl
KTsKICAgICAgICAgICAgIC8vIE1ha2Ugb25lIG1vcmUgcGFzcyBtYWtpbmcgc3VyZSB0aGF0OiAK
QEAgLTExOCwyMSArMTIwLDIzIEBAIFN0cmluZyBUeXBlU2V0OjpkdW1wVHlwZXMoKSBjb25zdAog
ICAgIFN0cmluZ0J1aWxkZXIgc2VlbjsKIAogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVGdW5j
dGlvbikKLSAgICAgICAgIHNlZW4uYXBwZW5kKCJGdW5jdGlvbiAiKTsKKyAgICAgICAgc2Vlbi5h
cHBlbmQoIkZ1bmN0aW9uICIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQp
Ci0gICAgICAgICBzZWVuLmFwcGVuZCgiVW5kZWZpbmVkICIpOworICAgICAgICBzZWVuLmFwcGVu
ZCgiVW5kZWZpbmVkICIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdWxsKQotICAgICAg
ICAgc2Vlbi5hcHBlbmQoIk51bGwgIik7CisgICAgICAgIHNlZW4uYXBwZW5kKCJOdWxsICIpOwog
ICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVCb29sZWFuKQotICAgICAgICAgc2Vlbi5hcHBlbmQo
IkJvb2xlYW4gIik7CisgICAgICAgIHNlZW4uYXBwZW5kKCJCb29sZWFuICIpOwogICAgIGlmICht
X3NlZW5UeXBlcyAmIFR5cGVNYWNoaW5lSW50KQotICAgICAgICAgc2Vlbi5hcHBlbmQoIk1hY2hp
bmVJbnQgIik7CisgICAgICAgIHNlZW4uYXBwZW5kKCJNYWNoaW5lSW50ICIpOwogICAgIGlmICht
X3NlZW5UeXBlcyAmIFR5cGVOdW1iZXIpCi0gICAgICAgICBzZWVuLmFwcGVuZCgiTnVtYmVyICIp
OworICAgICAgICBzZWVuLmFwcGVuZCgiTnVtYmVyICIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAm
IFR5cGVTdHJpbmcpCi0gICAgICAgICBzZWVuLmFwcGVuZCgiU3RyaW5nICIpOworICAgICAgICBz
ZWVuLmFwcGVuZCgiU3RyaW5nICIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVPYmplY3Qp
Ci0gICAgICAgICBzZWVuLmFwcGVuZCgiT2JqZWN0ICIpOworICAgICAgICBzZWVuLmFwcGVuZCgi
T2JqZWN0ICIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVTeW1ib2wpCisgICAgICAgIHNl
ZW4uYXBwZW5kKCJTeW1ib2wgIik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3Ry
dWN0dXJlSGlzdG9yeS5zaXplKCk7IGkrKykgewogICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IHNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LmF0KGkpOwpAQCAtMTU3LDcgKzE2MSw3IEBA
IFN0cmluZyBUeXBlU2V0OjpkdW1wVHlwZXMoKSBjb25zdAogICAgIHJldHVybiBzZWVuLnRvU3Ry
aW5nKCk7CiB9CiAKLWJvb2wgVHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8odWludDhfdCB0ZXN0
KSBjb25zdAorYm9vbCBUeXBlU2V0Ojpkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MTZfdCB0ZXN0KSBj
b25zdAogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIG91ciBzZWVuIHR5cGVzIGNv
bmZvcm0gIHRvIHRoZSB0eXBlcyBkZXNjcmliZWQgYnkgdGhlIHRlc3QgYml0c3RyaW5nLiAoaS5l
IHdlIGhhdmVuJ3Qgc2VlbiBtb3JlIHR5cGVzIHRoYW4gdGVzdCkuCiAgICAgLy8gV2UgYXJlIDw9
IHRvIHRob3NlIHR5cGVzIGlmIEFORGluZyB3aXRoIHRoZSBiaXRzdHJpbmcgZG9lc24ndCB6ZXJv
IG91dCBhbnkgb2Ygb3VyIGJpdHMuCkBAIC0yMDgsNiArMjEyLDggQEAgU3RyaW5nIFR5cGVTZXQ6
OmRpc3BsYXlOYW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiTnVtYmVy
Iik7CiAgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVTdHJpbmcpKQogICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJTdHJpbmciKTsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlw
ZVN5bWJvbCkpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlN5bWJvbCIpOwogCiAgICAg
aWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5lZCkpCiAgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIig/KSIpOwpAQCAtMjIyLDYgKzIyOCw4IEBAIFN0cmluZyBU
eXBlU2V0OjpkaXNwbGF5TmFtZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Ik51bWJlcj8iKTsKICAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZVN0cmluZyB8IFR5cGVO
dWxsIHwgVHlwZVVuZGVmaW5lZCkpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlN0cmlu
Zz8iKTsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZVN5bWJvbCB8IFR5cGVOdWxsIHwg
VHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlN5bWJvbD8iKTsK
ICAgIAogICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlT2JqZWN0IHwgVHlwZUZ1bmN0aW9u
IHwgVHlwZVN0cmluZykpCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwpA
QCAtMjU3LDYgKzI2NSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBl
U2UKICAgICAgICAgLnNldElzTnVtYmVyKChtX3NlZW5UeXBlcyAmIFR5cGVOdW1iZXIpICE9IFR5
cGVOb3RoaW5nKQogICAgICAgICAuc2V0SXNTdHJpbmcoKG1fc2VlblR5cGVzICYgVHlwZVN0cmlu
ZykgIT0gVHlwZU5vdGhpbmcpCiAgICAgICAgIC5zZXRJc09iamVjdCgobV9zZWVuVHlwZXMgJiBU
eXBlT2JqZWN0KSAhPSBUeXBlTm90aGluZykKKyAgICAgICAgLnNldElzU3ltYm9sKChtX3NlZW5U
eXBlcyAmIFR5cGVTeW1ib2wpICE9IFR5cGVOb3RoaW5nKQogICAgICAgICAucmVsZWFzZSgpOwog
fQogCkBAIC0zMTMsNiArMzIyLDEyIEBAIFN0cmluZyBUeXBlU2V0Ojp0b0pTT05TdHJpbmcoKSBj
b25zdAogICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOwogICAgICAgICBqc29uLmFwcGVuZCgiXCJT
dHJpbmdcIiIpOwogICAgIH0KKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlU3ltYm9sKSB7Cisg
ICAgICAgIGlmIChoYXNBbkl0ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAg
ICAgICBoYXNBbkl0ZW0gPSB0cnVlOworICAgICAgICBqc29uLmFwcGVuZCgiXCJTeW1ib2xcIiIp
OworICAgIH0KICAgICBqc29uLmFwcGVuZCgiXSIpOwogCiAgICAganNvbi5hcHBlbmQoIiwiKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE4
MTQyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNWYWx1
ZTsKIAotZW51bSBSdW50aW1lVHlwZSA6IHVpbnQ4X3QgeworZW51bSBSdW50aW1lVHlwZSA6IHVp
bnQxNl90IHsKICAgICBUeXBlTm90aGluZyAgICAgICAgICAgID0gMHgwLAogICAgIFR5cGVGdW5j
dGlvbiAgICAgICAgICAgPSAweDEsCiAgICAgVHlwZVVuZGVmaW5lZCAgICAgICAgICA9IDB4MiwK
QEAgLTU3LDcgKzU3LDggQEAgZW51bSBSdW50aW1lVHlwZSA6IHVpbnQ4X3QgewogICAgIFR5cGVN
YWNoaW5lSW50ICAgICAgICAgPSAweDEwLAogICAgIFR5cGVOdW1iZXIgICAgICAgICAgICAgPSAw
eDIwLAogICAgIFR5cGVTdHJpbmcgICAgICAgICAgICAgPSAweDQwLAotICAgIFR5cGVPYmplY3Qg
ICAgICAgICAgICAgPSAweDgwCisgICAgVHlwZU9iamVjdCAgICAgICAgICAgICA9IDB4ODAsCisg
ICAgVHlwZVN5bWJvbCAgICAgICAgICAgICA9IDB4MTAwCiB9OwogCiBjbGFzcyBTdHJ1Y3R1cmVT
aGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cnVjdHVyZVNoYXBlPiB7CkBAIC0xMDgsMTcgKzEw
OSwyMiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsK
ICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZVNldD4gaW5zcGVjdG9y
VHlwZVNldCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vl
blR5cGVzID09IFR5cGVOb3RoaW5nOyB9Ci0gICAgYm9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50
OF90IHRlc3QpIGNvbnN0OwotICAgIHVpbnQ4X3Qgc2VlblR5cGVzKCkgY29uc3QgeyByZXR1cm4g
bV9zZWVuVHlwZXM7IH0KKyAgICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQxNl90IHRlc3Qp
IGNvbnN0OworICAgIHVpbnQxNl90IHNlZW5UeXBlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VlblR5
cGVzOyB9CiAgICAgU3RydWN0dXJlU2V0IHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlU2V0OyB9OwogCiBwcml2YXRlOgotICAgIHVpbnQ4X3QgbV9zZWVuVHlwZXM7Cisg
ICAgdWludDE2X3QgbV9zZWVuVHlwZXM7CiAgICAgYm9vbCBtX2lzT3ZlcmZsb3duOwogICAgIFZl
Y3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBtX3N0cnVjdHVyZUhpc3Rvcnk7CiAgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwogfTsKIAorQUxXQVlTX0lOTElORSBib29sIHJ1bnRp
bWVUeXBlSXNQcmltaXRpdmUodWludDE2X3QgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSAmIH4o
VHlwZUZ1bmN0aW9uIHwgVHlwZU9iamVjdCk7Cit9CisKIH0gLy9uYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvL1R5cGVTZXRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQ
cm9maWxlci9zeW1ib2wuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3R5cGVQcm9maWxlci9zeW1ib2wuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL3N5bWJvbC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKworZnVuY3Rpb24gd3Jh
cHBlcigpIHsKKyAgICB2YXIgczEgPSBTeW1ib2woKTsKKworICAgIHZhciBzQ2FwdHVyZWQgPSBT
eW1ib2woKTsKKyAgICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgIHNDYXB0dXJlZCA9IG51bGw7
CisgICAgfQorICAgIGZvbygpOworCisgICAgZnVuY3Rpb24gYmFyKHMzKSB7IHJldHVybiBzMzsg
fQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBiYXIoaSkKKyAg
ICBiYXIoU3ltYm9sKCkpCisKKyAgICBmdW5jdGlvbiBiYXooczQpIHsgcmV0dXJuIHM0OyB9Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCisgICAgICAgIGJheihTeW1ib2woKSkK
KyAgICBiYXooImhlbGxvIikKK30KKword3JhcHBlcigpOworCisvLyA9PT09PT0gRW5kIHRlc3Qg
Y2FzZXMgPT09PT09CisKK3ZhciB0eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVy
LCAiczEiKTsgCithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVO
YW1lcy5sZW5ndGggPT09IDEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFpbiBv
bmUgdHlwZSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBl
TmFtZXMuaW5kZXhPZihULlN5bWJvbCkgIT09IC0xLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hv
dWxkIGNvbnRhaW4gJ1N5bWJvbCciKTsKKwordHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24o
d3JhcHBlciwgInNDYXB0dXJlZCIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0
aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMiwgIlByaW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBj
b250YWluIHR3byBpdGVtcy4iKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2
ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3ltYm9sKSAhPT0gLTEsICJQcmltaXRpdmUgdHlwZSBuYW1l
cyBzaG91bGQgY29udGFpbiAnU3ltYm9sJyIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQu
cHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5OdWxsKSAhPT0gLTEsICJQcmltaXRpdmUgdHlw
ZSBuYW1lcyBzaG91bGQgY29udGFpbiAnTnVsbCciKTsKKwordHlwZXMgPSBmaW5kVHlwZUZvckV4
cHJlc3Npb24od3JhcHBlciwgInMzIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0
LnByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGggPT09IDIsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBz
aG91bGQgY29udGFpbiAyIGl0ZW1zIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0
LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuSW50ZWdlcikgIT09IC0xLCAiUHJpbWl0aXZl
IHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gJ0ludGVnZXInIik7Cithc3NlcnQodHlwZXMuaW5z
dHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3ltYm9sKSAhPT0g
LTEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFpbiAnU3ltYm9sJyIpOworCit0
eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAiczQiKTsKK2Fzc2VydCh0eXBl
cy5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMiwgIlBy
aW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluIDIgaXRlbXMiKTsKK2Fzc2VydCh0eXBl
cy5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5TdHJpbmcp
ICE9PSAtMSwgIlByaW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdTdHJpbmcnIik7
Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRl
eE9mKFQuU3ltYm9sKSAhPT0gLTEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFp
biAnU3ltYm9sJyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9m
aWxlci9kcml2ZXIvZHJpdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy90eXBlUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qcwkocmV2aXNpb24gMTgxNDIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kcml2ZXIvZHJpdmVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC03LDYgKzcsNyBAQCB2YXIgVCA9IHsKICAgICBNYW55OiAi
KG1hbnkpIiwKICAgICBTdHJpbmc6ICJTdHJpbmciLAogICAgIFVuZGVmaW5lZDogIlVuZGVmaW5l
ZCIsCisgICAgU3ltYm9sOiAiU3ltYm9sIiwKICAgICBVbmRlZmluZWRPck51bGw6ICIoPykiCiB9
OwogCkBAIC0xNCw3ICsxNSw4IEBAIHZhciBUT3B0aW9uYWwgPSB7CiAgICAgQm9vbGVhbjoiQm9v
bGVhbj8iLAogICAgIEludGVnZXI6ICJJbnRlZ2VyPyIsCiAgICAgTnVtYmVyOiAiTnVtYmVyPyIs
Ci0gICAgU3RyaW5nOiAiU3RyaW5nPyIKKyAgICBTdHJpbmc6ICJTdHJpbmc/IiwKKyAgICBTeW1i
b2w6ICJTeW1ib2w/IgogfTsKIAogZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgcmVhc29uKSB7
CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTQ1NikKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBA
QAorMjAxNS0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogRVM2OiBCZXR0ZXIgc3VwcG9ydCBmb3IgU3ltYm9sIHR5cGVz
IGluIFR5cGUgUHJvZmlsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBXZWIgSW5zcGVjdG9yJ3MgdmlzdWFsaXphdGlvbiBvZiBKU0MncyB0eXBl
IHByb2ZpbGVyCisgICAgICAgIHNob3VsZCBoYXZlIHN1cHBvcnQgZm9yIHRoZSBTeW1ib2wgdHlw
ZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1R5cGVTZXQuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVHlwZVNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVNldC5w
cm90b3R5cGUuZ2V0IHByaW1pdGl2ZVR5cGVOYW1lcyk6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzczoKKyAgICAgICAgVHlwZVRva2VuVmlldyB3aWxsIGRp
c3BsYXkgU3ltYm9sIHR5cGUgdG9rZW5zIHVzaW5nIHRoZSBzYW1lIGNvbG9yIHRoYXQgCisgICAg
ICAgIFN5bWJvbCB2YWx1ZXMgYXJlIGRpc3BsYXllZCBhcyBmb3JtYXR0ZWQgdmFsdWVzLgorCisg
ICAgICAgICgudHlwZS10b2tlbi1zeW1ib2wpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvVHlwZVRva2VuVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3
LnByb3RvdHlwZS5fZGlzcGxheVR5cGVOYW1lKToKKwogMjAxNS0wMy0xMiAgSm9ubyBXZWxscyAg
PGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRGVidWdnZXIg
c2lkZWJhciBzaG91bGQgZ3JvdXAgZ2xvYmFsIGJyZWFrcG9pbnRzIHRvZ2V0aGVyCkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVHlw
ZVNldC5qcwkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL1R5cGVTZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIFNhYW0gQmFyYXRpLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtNDYsNiArNDYsOCBAQCBXZWJJbnNwZWN0b3IuVHlwZVNldCA9IGZ1bmN0aW9uKHJ1bnRpbWVU
CiAgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlN0cmlu
ZzsKICAgICBpZiAodHlwZVNldC5pc09iamVjdCkKICAgICAgICAgYml0U3RyaW5nIHw9IFdlYklu
c3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuT2JqZWN0OworICAgIGlmICh0eXBlU2V0LmlzU3ltYm9s
KQorICAgICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TeW1i
b2w7CiAKICAgICBjb25zb2xlLmFzc2VydChiaXRTdHJpbmcpOwogICAgIHRoaXMuX2JpdFN0cmlu
ZyA9IGJpdFN0cmluZzsKQEAgLTY2LDcgKzY4LDggQEAgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlw
ZUJpdCA9IHsKICAgICAiSW50ZWdlciIgICAgIDogIDB4MTAsCiAgICAgIk51bWJlciIgICAgICA6
ICAweDIwLAogICAgICJTdHJpbmciICAgICAgOiAgMHg0MCwKLSAgICAiT2JqZWN0IiAgICAgIDog
IDB4ODAKKyAgICAiT2JqZWN0IiAgICAgIDogIDB4ODAsCisgICAgIlN5bWJvbCIgICAgICA6ICAw
eDEwMAogfTsKIAogV2ViSW5zcGVjdG9yLlR5cGVTZXQuTnVsbE9yVW5kZWZpbmVkVHlwZUJpdHMg
PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51bGwgfCBXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0LlVuZGVmaW5lZDsKQEAgLTExMCw2ICsxMTMsOCBAQCBXZWJJbnNwZWN0b3IuVHlw
ZVNldC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9wcmltaXRpdmVUeXBlTmFtZXMu
cHVzaCgiQm9vbGVhbiIpOwogICAgICAgICBpZiAodHlwZVNldC5pc1N0cmluZykKICAgICAgICAg
ICAgIHRoaXMuX3ByaW1pdGl2ZVR5cGVOYW1lcy5wdXNoKCJTdHJpbmciKTsKKyAgICAgICAgaWYg
KHR5cGVTZXQuaXNTeW1ib2wpCisgICAgICAgICAgICB0aGlzLl9wcmltaXRpdmVUeXBlTmFtZXMu
cHVzaCgiU3ltYm9sIik7CiAKICAgICAgICAgLy8gSXQncyBpbXBsaWVkIHRoYXQgdHlwZSBJbnRl
Z2VyIGlzIGNvbnRhaW5lZCBpbiB0eXBlIE51bWJlci4gRG9uJ3QgcHV0IAogICAgICAgICAvLyBi
b3RoICdJbnRlZ2VyJyBhbmQgJ051bWJlcicgaW50byB0aGUgc2V0IGJlY2F1c2UgdGhpcyBjb3Vs
ZCBpbXBseSB0aGF0IApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvVHlwZVRva2VuVmlldy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHJldmlzaW9uIDE4MTQy
MCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tl
blZpZXcuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NSwxMCBAQAogICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigyMjMsIDUzLCA0Nik7CiB9CiAKKy50eXBlLXRva2VuLXN5bWJvbCB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmdiKDYzLCAxNjksIDE1Nik7Cit9CisKIC50eXBlLXRva2VuLWRl
ZmF1bHQgewogICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMTgsIDE3NCwgMjkpOwogfQpJbmRl
eDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmll
dy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9UeXBlVG9rZW5WaWV3LmpzCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02OSw2ICs2OSw3IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZSA9
IHsKIAogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JDbGFzc0ZvclR5cGUgPSB7CiAg
ICAgIlN0cmluZyI6ICJ0eXBlLXRva2VuLXN0cmluZyIsCisgICAgIlN5bWJvbCI6ICJ0eXBlLXRv
a2VuLXN5bWJvbCIsCiAgICAgIkZ1bmN0aW9uIjogInR5cGUtdG9rZW4tZnVuY3Rpb24iLAogICAg
ICJOdW1iZXIiOiAidHlwZS10b2tlbi1udW1iZXIiLAogICAgICJJbnRlZ2VyIjogInR5cGUtdG9r
ZW4tbnVtYmVyIiwKQEAgLTE3OSw2ICsxODAsOCBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gIk51bWJlciI7CiAgICAgICAgIGlm
ICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TdHJp
bmcpKQogICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgICAgICBpZiAodHlwZVNldC5p
c0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3ltYm9sKSkKKyAgICAg
ICAgICAgIHJldHVybiAiU3ltYm9sIjsKIAogICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5l
ZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0Lk51bGxPclVuZGVmaW5lZFR5cGVCaXRzKSkKICAgICAg
ICAgICAgIHJldHVybiAiKD8pIjsKQEAgLTE5Myw2ICsxOTYsOCBAQCBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gIk51bWJlcj8iOwog
ICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5
cGVCaXQuU3RyaW5nIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuTnVsbE9yVW5kZWZpbmVkVHlwZUJp
dHMpKQogICAgICAgICAgICAgcmV0dXJuICJTdHJpbmc/IjsKKyAgICAgICAgaWYgKHR5cGVTZXQu
aXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlN5bWJvbCB8IFdlYklu
c3BlY3Rvci5UeXBlU2V0Lk51bGxPclVuZGVmaW5lZFR5cGVCaXRzKSkKKyAgICAgICAgICAgIHJl
dHVybiAiU3ltYm9sPyI7CiAgICAgICAgCiAgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVk
SW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3QgfCBXZWJJbnNwZWN0b3IuVHlw
ZVNldC5UeXBlQml0LkZ1bmN0aW9uIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TdHJp
bmcpKQogICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiOwo=
</data>
<flag name="review"
          id="273428"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>