<?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>104540</bug_id>
          
          <creation_ts>2012-12-10 05:52:06 -0800</creation_ts>
          <short_desc>[Qt] JS bridge does not transmit QVariants anymore in Qt5</short_desc>
          <delta_ts>2013-01-31 06:35:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105441</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>bugzilla</reporter>
          <assigned_to name="Michael Brüning">michael.bruning</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>michael.bruning</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>787229</commentid>
    <comment_count>0</comment_count>
    <who name="">bugzilla</who>
    <bug_when>2012-12-10 05:52:06 -0800</bug_when>
    <thetext>Windows 7 and Windows XP
Visual Studio 2010
Qt5 RC
(I can not test if any other platforms are affected.)

In Qt 4.7.x and 4.8.x JSON object were transmitted as QVariant into the C++ Slot:


---JavaScript extract:---
var jsonTest = {
    service: &quot;LogService&quot;,
    type: &quot;request&quot;,
    methodName: &quot;logIt&quot;,
    count: performCounter
};
this.Bridge.slotQVariant(jsonTest);


---C++ extract---
void JavaScriptConnection::slotQVariant(QVariant data)
{
   //... data can be converted to QVariantMap
}

This worked fine, but with Qt5 we get the error &apos;Trying to construct an instance of an invalid type, type id: 732670891&apos;. It helps to make in JS a &apos;JSON.stringify(jsonTest)&apos; and to expect a QString in the C++ Slot:

---JavaScript extract:---
var jsonTest = {
    //... see above
};
this.Bridge.slotQString(JSON.stringify(jsonTest));


---C++ extract---
void JavaScriptConnection::slotQString(QString data)
{
   //...
}


However, this behavior change seems not correct, because (first) it breaks compatability for no reason and (second) it has performance drawbacks on C++ side, because the QString has to be converted.
[Furthermore there&apos;s a severe speed decrease, and I do not mean the mentioned conversion, when using the bridge several 10000s of times, but I will post this as a different bug]

As attachment I added a VS2010 project. It&apos;s stripped down to the bare problem, so you can hopefully and quickly see the problem. Only the Release build is configured correctly. There is some time measurement on C++ side, but this is of no relevance here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787232</commentid>
    <comment_count>1</comment_count>
      <attachid>178525</attachid>
    <who name="">bugzilla</who>
    <bug_when>2012-12-10 05:53:34 -0800</bug_when>
    <thetext>Created attachment 178525
VS2010 solution for JS Bridge problems with QVariant and performance measurements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787311</commentid>
    <comment_count>2</comment_count>
    <who name="">bugzilla</who>
    <bug_when>2012-12-10 07:25:27 -0800</bug_when>
    <thetext>The error &quot;Trying to construct...&quot; is only shown when you start the sample program from within Visual Studio. If you start the program normally, just nothing happens (at first glance, nothing is shown, but internally nothing works). To make the error obvious in everycase just add the following line to the C++ slot:

void JavaScriptConnection::slotQVariant(QVariant dataString)
{
    QVariantMap myVMap = dataString.toMap(); //added, to make the changed behaviour obvious
    //....
}

With this line added (this is what works in Qt 4.7 and Qt 4.8, but no longer in Qt 5) you can see an error if you start the program from outside Visual Studio, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789646</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-12 09:54:17 -0800</bug_when>
    <thetext>The problem here is not with QVariants, but with QVariantMaps. 

For some reason, in case of a QVariantMap, the resulting QVariantMap is not converted correctly in QMetaObject::metcall when it is called from JSValueRef QtRuntimeMethod::call in Source/WebCore/bridge/qt/qt_runtime.cpp . I suspect that something has changed in the way QVariantMap pointers are handled by the QVariant constructor / debugging this atm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789661</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-12 10:08:09 -0800</bug_when>
    <thetext>A temporary workaround until we have found a proper fix is to explicitly declare the parameter for the slot as a QVariantMap instead of QVariant if one can be sure that a JSON object will be returned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789746</commentid>
    <comment_count>5</comment_count>
    <who name="">bugzilla</who>
    <bug_when>2012-12-12 11:34:15 -0800</bug_when>
    <thetext>I can give the temporary workaround a try. HOWEVER, the problem already occured when expecting the QVariant as parmeter -- without converting it to a QVariantMap afterwards. The QVariantMap conversion just made the problem more obvious (see my comment #2, I hope that comment was clear enough).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790358</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-13 00:22:37 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I can give the temporary workaround a try. HOWEVER, the problem already occured when expecting the QVariant as parmeter -- without converting it to a QVariantMap afterwards. The QVariantMap conversion just made the problem more obvious (see my comment #2, I hope that comment was clear enough).

Your comment was clear enough, no worries :). 
Actually, expecting a QVariant parameter in the signature of the slot when a QVariantMap is being returned is what makes it not work. Whatever happens to that  QVariant in the slot afterwards is not really relevant, as the corruption / conversion error from QVariantMap to QVariant occurs inside the JS bridge code before the slot is even called. 

So when returning a JSON object through the bridge, this:

void MyObject::slotHandleJSONObject(QVariantMap map) // okay, no conversion from QVariantMap to QVariant
{
   // process data from map
   ...
}

would work, while this:

void MyObject::slotHandleJSONObject(QVariant variant) // corrupted by the conversion from QVariantMap to QVariant inside the JS bridge
{
   QVariantMap map = variant.topMap(); // contains corrupted data
}

Anyway, this needs to be fixed within the JS bridge / Qt, the solution outlined above is just for temporarily making it work until that fix rolls in...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790585</commentid>
    <comment_count>7</comment_count>
    <who name="">bugzilla</who>
    <bug_when>2012-12-13 07:13:26 -0800</bug_when>
    <thetext>(In reply to comment #6)
Okay, I understand, thanks for your explanation.
I applied your temporary fix and it works -- good thing that we (so far) only send JSON.
However (there&apos;s always a however, sorry), with the changed C++ slot to QVariantMap I could now test the same program in Qt 4.8.4 and Qt 5 RC1:
I saw that the Qt5 performance of the JS bridge is much worse (see how I measure time in the slots in my first attachement). When sending 100000 JSONs objects I need with Qt 4.8.4 approximately 700-800 ms, while it takes in Qt5 1400-1500 ms. Maybe this is side-effect of the QVariant problem, maybe some other problem. I know, sending 100000 JSON object is not very realistic, but a doubling in time should be worth a little investigation... 
What do we do about this? Report new bug? Shall I wait for the fix and retest the timing again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790595</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-13 07:23:17 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; Okay, I understand, thanks for your explanation.
&gt; I applied your temporary fix and it works -- good thing that we (so far) only send JSON.
&gt; However (there&apos;s always a however, sorry), with the changed C++ slot to QVariantMap I could now test the same program in Qt 4.8.4 and Qt 5 RC1:
&gt; I saw that the Qt5 performance of the JS bridge is much worse (see how I measure time in the slots in my first attachement). When sending 100000 JSONs objects I need with Qt 4.8.4 approximately 700-800 ms, while it takes in Qt5 1400-1500 ms. Maybe this is side-effect of the QVariant problem, maybe some other problem. I know, sending 100000 JSON object is not very realistic, but a doubling in time should be worth a little investigation... 
&gt; What do we do about this? Report new bug? Shall I wait for the fix and retest the timing again?

I agree that a doubling in time is undesirable to say the least. I&apos;d suggest waiting for the fix for now, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790603</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-13 07:35:21 -0800</bug_when>
    <thetext>Yeah, let&apos;s treat those as two different things. There&apos;s a bug that we need to fix clearly (we want to retain behavioural compatibility generally).

Performance is another aspect. We did some refactoring of the bridge code to replace the use of ever changing internal API with &quot;external&quot; API, the code became a real maintenance burden for the project. That work isn&apos;t complete yet though, there&apos;s more to be done. Unfortunately we&apos;re going to have to trade _some_ performance for the reduce maintenance, but a factor of two would be good to avoid. Don&apos;t hesitate to file a second bug for that for a separate investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791565</commentid>
    <comment_count>10</comment_count>
      <attachid>179472</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-14 06:04:17 -0800</bug_when>
    <thetext>Created attachment 179472
Reduced test case.

The passing of QVariantMap &quot;raw&quot; pointers seems to have changed internally from Qt4 to Qt5.

I am attaching a reduced test case of what happens in the Qt JS bridge. This test case works fine with Qt4, but on Qt5 passing the QVariantMap inside a QVariant does not work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792639</commentid>
    <comment_count>11</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2012-12-17 05:07:20 -0800</bug_when>
    <thetext>I investigated the reduced test case, it uses QMetaObject::metacall (which is a  private btw.) a bit differently then qt core. If you run the test in valgrind you would see that the string version is broken too. Slots taking QVariant as an argument have different code path, changing initialization code too

qargs[1] = &amp;mapInVariant;
qargs[1] = &amp;stringInVariant;

would fix the example.

Checkout QMetaProperty::read(const QObject *object) implementation (qmetaobject.cpp) to see the correct usage of QMetaObject::metacall, it contains something like:

    QVariant value;
    void *argv[] = { 0, &amp;value, &amp;status };
    if (t == QMetaType::QVariant) {
        argv[0] = &amp;value;
    } else {
        value = QVariant(t, (void*)0);
        argv[0] = value.data();
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792813</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-17 10:09:21 -0800</bug_when>
    <thetext>This approach did not fix it for me and when I tried it, the string example actually worked (at least outside of valgrind). What seems to be the problem is that the data() method when called on a QVariant that holds a QVariantMap seems to return a pointer to the QMap and not the address of the QVariant as it is the case for other types and hence the QVariants / QVariantMaps subsequently constructed/cast from these void pointers contain garbage data (which would also explain why there&apos;s different invalid types and sometimes even segfaults when trying to do this).

I made a patch based on how objects are passed around in the generated code for signals and slots and that seems to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792816</commentid>
    <comment_count>13</comment_count>
      <attachid>179762</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-17 10:14:57 -0800</bug_when>
    <thetext>Created attachment 179762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793578</commentid>
    <comment_count>14</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2012-12-18 05:48:43 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; This approach did not fix it for me and when I tried it, the string example actually worked (at least outside of valgrind). What seems to be the problem is that the data() method when called on a QVariant that holds a QVariantMap seems to return a pointer to the QMap and not the address of the QVariant as it is the case for other types and hence the QVariants / QVariantMaps subsequently constructed/cast from these void pointers contain garbage data (which would also explain why there&apos;s different invalid types and sometimes even segfaults when trying to do this).
&gt; 
&gt; I made a patch based on how objects are passed around in the generated code for signals and slots and that seems to work.

I said that valgrind shows invalid read in QString case, you can not say that it works by reading undefined state in memory. In your example you were doing equivalent of reinterpret_cast&lt;QVariant&gt;(QString(&quot;foo&quot;)) which happens to &quot;work&quot; because of optimization in QVariant which copy construct QString into the variant itself.

QVariant::data() always return data do encapsulated data
QVariant(QString(&quot;foo&quot;))::data would return a pointer to the QString
QVariant(CustomType())::data would return a pointer to the CustomType

__but__

QVariant has an optimization that allows to not store QVariant in a QVariant. That means that *QVariant(QVariant(QVariant(1)))::data() is exactly the same as *QVariant(1)::data(). It is not new in Qt5 it was like that in Qt4 too. Explicit wrapping QVariant inside QVariant is possible but tricky (you can use something like QVariant(QMetaType::QVariant, &amp;otherVariant).

I do not think your patch works, because it doesn&apos;t allocate enough memory for anything bigger then QVariant. Consider to use information from QMetaType about size (QMetaType::sizeof) to allocate enough memory, it may be faster, because it would avoid allocation in most cases. Using QVariant for memory allocation is soo Qt4.0 :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793587</commentid>
    <comment_count>15</comment_count>
      <attachid>179929</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-18 06:17:51 -0800</bug_when>
    <thetext>Created attachment 179929
Valgrind output for string test case only.

Thanks for the comment, the patch did fix the example test case, but caused problems with the API tests.
The string example does not show any invalid reads for me when I run it through valgrind (see attached output if interested). 
Anyway, I&apos;ll continue investigating a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794696</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-19 08:34:52 -0800</bug_when>
    <thetext>Ok, I investigated further and tried the provided test case (first attachment). The bug is in fact exactly like Jędrzej pointed out in comment #11:

The moc generated code we end up calling with the metacall() does expect the void* pointers in the argument array to be pointers to the _final_ types. So if a function takes an int as argument, args[1] should be an pointer to an int (args[0] is the pointer to the return value). If the function takes a QVariant, then it must be a pointer to a QVariant, not its data().

The only exception to that is the handling of the JavaScript null type, which we currently incorrectly map to a default constructed QVariant but _should_ map to t a QVariant(QMetaType::VoidStar, 0) and leave QVariant() for &quot;undefined&quot;. This is also how it&apos;s done in QML. That however is a separate issue and a slight behavioural change that I&apos;ll propose for Qt 5.1. The issue of this bug - the QVariant slot not being called - is fixable easily for 5.0.1.

I have a patch that I&apos;ll upload shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794709</commentid>
    <comment_count>17</comment_count>
      <attachid>180175</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-19 08:46:28 -0800</bug_when>
    <thetext>Created attachment 180175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794908</commentid>
    <comment_count>18</comment_count>
      <attachid>180175</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-19 13:57:00 -0800</bug_when>
    <thetext>Comment on attachment 180175
Patch

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

I had a local patch that basically did the same but checked for userType as Jędrzej suggested, but using chosenTypes makes it simpler, provided it also catches the VariantMap, List and Hash :). I&apos;ll check in the office tomorrow.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1179
&gt; +            if (chosenTypes[i].isVariant() &amp;&amp; !dataPtr)

Can we be sure that dataPtr will be null in this case? I am pretty sure that in the case of the embedded QVariantMaps, data() returned a pointer to embedded Map...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794909</commentid>
    <comment_count>19</comment_count>
      <attachid>180175</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-12-19 13:57:01 -0800</bug_when>
    <thetext>Comment on attachment 180175
Patch

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

I had a local patch that basically did the same but checked for userType as Jędrzej suggested, but using chosenTypes makes it simpler, provided it also catches the VariantMap, List and Hash :). I&apos;ll check in the office tomorrow.

&gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1179
&gt; +            if (chosenTypes[i].isVariant() &amp;&amp; !dataPtr)

Can we be sure that dataPtr will be null in this case? I am pretty sure that in the case of the embedded QVariantMaps, data() returned a pointer to embedded Map...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795274</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-20 01:33:02 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 180175 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180175&amp;action=review
&gt; 
&gt; I had a local patch that basically did the same but checked for userType as Jędrzej suggested, but using chosenTypes makes it simpler, provided it also 
catches the VariantMap, List and Hash :). I&apos;ll check in the office tomorrow.

Good, if we came up with the same then that&apos;s a good sign ;)
 
&gt; &gt; Source/WebCore/bridge/qt/qt_runtime.cpp:1179
&gt; &gt; +            if (chosenTypes[i].isVariant() &amp;&amp; !dataPtr)
&gt; 
&gt; Can we be sure that dataPtr will be null in this case? I am pretty sure that in the case of the embedded QVariantMaps, data() returned a pointer to embedded Map...

I think in case of variant maps and lists this is still correct. QVariantMap is a typedef to a QMap&lt;QString, QVariant&gt; and QVariantList is a typedef to a QList&lt;QVariant&gt;. If you think about the calling convention, then it&apos;s clear that the void* _has_ to be a pointer to the QMap or QList, and that&apos;s what data() does return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795288</commentid>
    <comment_count>21</comment_count>
      <attachid>180175</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-20 01:49:45 -0800</bug_when>
    <thetext>Comment on attachment 180175
Patch

Clearing review on this one. There&apos;s a bug with the refcounting / ownership.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795384</commentid>
    <comment_count>22</comment_count>
      <attachid>180326</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-20 05:39:26 -0800</bug_when>
    <thetext>Created attachment 180326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795385</commentid>
    <comment_count>23</comment_count>
      <attachid>180326</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-20 05:40:43 -0800</bug_when>
    <thetext>Comment on attachment 180326
Patch

LGTM, good description</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795389</commentid>
    <comment_count>24</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-12-20 05:50:13 -0800</bug_when>
    <thetext>Committed r138247: &lt;http://trac.webkit.org/changeset/138247&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821465</commentid>
    <comment_count>25</comment_count>
      <attachid>185767</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-01-31 06:11:02 -0800</bug_when>
    <thetext>Created attachment 185767
Patch series to speed up the bridge code path used in the original test case. Needs further work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821485</commentid>
    <comment_count>26</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2013-01-31 06:35:33 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Created an attachment (id=185767) [details]
&gt; Patch series to speed up the bridge code path used in the original test case. Needs further work.

Uhh, there is some very nice stuff in there.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>178525</attachid>
            <date>2012-12-10 05:53:34 -0800</date>
            <delta_ts>2012-12-10 05:53:34 -0800</delta_ts>
            <desc>VS2010 solution for JS Bridge problems with QVariant and performance measurements</desc>
            <filename>GuiWebKit.zip</filename>
            <type>application/octet-stream</type>
            <size>11312</size>
            <attacher>bugzilla</attacher>
            
              <data encoding="base64">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
uK71vg+xCqpJzndzBiLP2KIqklpMeCIzNXFZoy0LuktSt3uEzqrF25Tl9kCZLVWbD5TTpKSN3dEq
QQF12h/gbHF/oRGlbOP8bRdWi9PCqtWKBtnikP+Ean7FeGrBk2t1VtRh21/eaRV/+P79GLs9q0dZ
0kIyeuw/XLO00fcipSojwrdxeLRBE9G1L1BLAQIUAAoAAAAAALhzikEAAAAAAAAAAAAAAAAKAAAA
AAAAAAAAEAAAAAAAAABHdWlXZWJLaXQvUEsBAhQAFAACAAgAqnKKQfUycqAkBQAAhRQAABsAAAAA
AAAAAQAgAAAAKAAAAEd1aVdlYktpdC9HdWlXZWJLaXQudmN4cHJvalBLAQIUABQAAgAIALFkikHq
RfRDvAEAAKsEAAAjAAAAAAAAAAEAIAAAAIUFAABHdWlXZWJLaXQvR3VpV2ViS2l0LnZjeHByb2ou
ZmlsdGVyc1BLAQIUABQAAgAIAGBufkHH5A46JAEAAHkDAAAgAAAAAAAAAAEAIAAAAIIHAABHdWlX
ZWJLaXQvR3VpV2ViS2l0LnZjeHByb2oudXNlclBLAQIUABQAAgAIAK9yikF13YHEAAMAACgKAAAi
AAAAAAAAAAEAIAAAAOQIAABHdWlXZWJLaXQvSmF2YVNjcmlwdENvbm5lY3Rpb24uY3BwUEsBAhQA
FAACAAgAz3KKQUCBY8xKAQAAkgIAACAAAAAAAAAAAQAgAAAAJAwAAEd1aVdlYktpdC9KYXZhU2Ny
aXB0Q29ubmVjdGlvbi5oUEsBAhQAFAACAAgAnHOKQXxzMAmABQAAORAAACIAAAAAAAAAAQAgAAAA
rA0AAEd1aVdlYktpdC9KYXZhU2NyaXB0Q29ubmVjdGlvbi5tb2NQSwECFAAUAAIACADuZIpBhWYv
fOgCAAAUCAAAEgAAAAAAAAABACAAAABsEwAAR3VpV2ViS2l0L21haW4uY3BwUEsBAhQAFAACAAgA
Ukp+QTEWf0RLAAAAdAAAABMAAAAAAAAAAQAgAAAAhBYAAEd1aVdlYktpdC9tb2NjYS5iYXRQSwEC
FAAUAAIACACcc4pBpp+crzwBAADKAgAAFwAAAAAAAAABACAAAAAAFwAAR3VpV2ViS2l0L1BvcHVs
YXRvci5jcHBQSwECFAAUAAIACAA7RbZA6xH5JYgBAAAZAwAAFQAAAAAAAAABACEAAABxGAAAR3Vp
V2ViS2l0L1BvcHVsYXRvci5oUEsBAhQAFAACAAgAnHOKQWkAGB4GBQAAKQ0AABcAAAAAAAAAAQAg
AAAALBoAAEd1aVdlYktpdC9Qb3B1bGF0b3IubW9jUEsBAhQAFAACAAgAT2d+QS98t/EaAgAAJQUA
ABUAAAAAAAAAAQAhAAAAZx8AAEd1aVdlYktpdC9RdDQ4eC5wcm9wc1BLAQIUABQAAgAIAC1bikFg
+5Fj2wEAAHsEAAAVAAAAAAAAAAEAIAAAALQhAABHdWlXZWJLaXQvUXQ1UkMucHJvcHNQSwECFAAU
AAIACACac4pBjPB1lDwCAAB+BwAAFAAAAAAAAAABACAAAADCIwAAR3VpV2ViS2l0L3N0YXJ0Lmh0
bWxQSwECFAAUAAIACABVimZA4yc4t2ABAAB+AwAADQAAAAAAAAABACEAAAAwJgAAR3VpV2ViS2l0
LnNsblBLBQYAAAAAEAAQAF8EAAC7JwAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>179472</attachid>
            <date>2012-12-14 06:04:17 -0800</date>
            <delta_ts>2012-12-14 06:04:17 -0800</delta_ts>
            <desc>Reduced test case.</desc>
            <filename>qvariant_ptr_test.tgz</filename>
            <type>application/x-compressed-tar</type>
            <size>961</size>
            <attacher name="Michael Brüning">michael.bruning</attacher>
            
              <data encoding="base64">H4sIAHAwy1AAA+1X/2/iNhTvz/4r3tJfkhZYCEeR0lKp49it0ziOlt0vt6oywS3eghMSh1114n/f
c5xA4OjdKqE7TfNHSHbed/s9P5vFkiacCjmn8X0sk3vJUvnj0WHhIjqdthqbnbZbHUscNT33zDtr
uc0W0pvtNrKhfeA49iJLJU0AjuZ8kmSCi+fkvsb/j2KxL/9zykUjiOMD+VAJPnPd5/LfanqtIv8e
ks8w/x3P9Y7APZD/L+J/nv9jLoIwmzK4GPWihF3FccgDKnkkLkmF915XyRbtNZtkj1uUAZN0OPmT
BShIgpCmKYyxnjQJfIizCVqHUUH4RABgdD/86dd+b0w001e0jZJdyJ5ATBMmJHTBddBSQbY11YFP
K1IYgDSMZJqbgWXEp6AquozfLic5FdVILqdQcgY0BjwM5xvOIl+o7cDFBVjyKWaWmo1uZcLFo++L
bD5hia0MNhTXdjaS4+gtnTNfKxQOfH/D2dKquOQPUGVBt1tRxwgdvXewN8ReJJYskWwKKOlb51uS
uDTcQ207Qr7tbPMfsAhoMIPNTvGaUtr1uOuVozm9I7sWV+uvFbAwZV9enLbxL9eX6hTk21ss6fMY
tP8VWeH+clyPam62mtDkMahBMMPjf4Lz5Yc7h2i3u0cBqK2FlViZp0pln0R67IJgf1ertwgjd8vk
LJpeiyn7iHJaoX45X58Y26lfcsUdPtxiBdvW3rp1rMKkKu0TWGBA6QfvTtPIbh0rEwNVy4pRfDS4
SHH3bOuBJxinYFZtrWPLJGOOs18+ZUEkpjsKLe85cTnjya60Jr6nYcasUm9dZ1hk16L86FZi0oZ3
xXXu92pYmvf0g1XmCqsa8pxz1UDOcbgAT42np9VS09vZvEOhajSNKZW0WlKVRuf7KoUBDUNb57S2
zb0Wy+gvpiiDvABq1UKoaY/Vk18JYWeF3yAKfVDyYcpCJllRp5qTMJkleBYa7CMLVCAoum7+Vv5m
mEeBRb73lWbwAux9/y1kO5804iQ6gI+vvP/cdqu5fv918OHneq77yrz/vgmO6y8FOSbH8C6J8hsv
wNeCuoknTzCSPfWBndZzm15d/V6Nm57f6viup5Re7omMxkWvO+1CgHdyhVLvwmPGyfjq5k1/jN2y
rFnSG779+fpNqSPSKGQbGmrROL6fZGKKZDLuD979djXuQ04mhNwOf7/p9W+VbvknCJtceb/pblgQ
f+lfve7f5KJ/fCYyM13QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOB74R812jbxACgAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179762</attachid>
            <date>2012-12-17 10:14:57 -0800</date>
            <delta_ts>2012-12-19 08:46:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104540-20121217191215.patch</filename>
            <type>text/plain</type>
            <size>1555</size>
            <attacher name="Michael Brüning">michael.bruning</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg1ZWQxYmI2Zjc3YjJl
YWI3MmIxOWE5NzY0NTJlMjZiMWE4NWE5ZS4uYWRkMWJiYTg0OTQ3YWFjNjlhMGVlMWRjYmMyZGQ5
YWJhOWI4ZWZmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEyLTE3ICBNaWNo
YWVsIEJyw7xuaW5nICA8bWljaGFlbC5icnVuaW5nQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRd
IEpTIGJyaWRnZSBkb2VzIG5vdCB0cmFuc21pdCBRVmFyaWFudHMgYW55bW9yZSBpbiBRdDUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDU0MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgdGhl
IFF0IEpTIGJyaWRnZSB0byBwYXNzIHRoZSBhZGRyZXNzZXMgb2YgdGhlIFFWYXJpYW50cyByYXRo
ZXIgdGhhbgorICAgICAgICB0aGUgZGF0YSBwb2ludGVycyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhl
IFFWYXJpYW50OjpkYXRhKCkgbWV0aG9kLCBhcyB0aGUKKyAgICAgICAgbGF0dGVyIGNhdXNlZCB0
cm91YmxlIHdoZW4gcmV0dXJuaW5nIFFWYXJpYW50TWFwcyBpbiBhIFFWYXJpYW50IGluIFF0IDUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZmluZE1ldGhvZEluZGV4KToKKwogMjAx
Mi0xMi0xNyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNjc5NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9ydW50aW1lLmNwcAppbmRleCA5NTFmYTFjZGUzYjZhMjUxNzIwYjU5NmY2YWU4YjBkM2IwNzM3
NTc3Li4yMmFkMzQzNDJjNjZkMGFiN2YyMTVmMjQ0NDFjMzJhNTBiZjAzYWQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCkBAIC0xMTczLDcgKzExNzMsNyBAQCBzdGF0
aWMgaW50IGZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICAgICAgdmFy
cy5yZXNpemUoYXJncy5jb3VudCgpKTsKICAgICAgICAgZm9yIChpPTA7IGkgPCBhcmdzLmNvdW50
KCk7IGkrKykgewogICAgICAgICAgICAgdmFyc1tpXSA9IGFyZ3NbaV07Ci0gICAgICAgICAgICB2
dmFyc1tpXSA9IHZhcnNbaV0uZGF0YSgpOworICAgICAgICAgICAgdnZhcnNbaV0gPSBjb25zdF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPigmdmFyc1tpXSkpOwogICAg
ICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>179929</attachid>
            <date>2012-12-18 06:17:51 -0800</date>
            <delta_ts>2012-12-18 06:17:51 -0800</delta_ts>
            <desc>Valgrind output for string test case only.</desc>
            <filename>valgrind.txt</filename>
            <type>text/plain</type>
            <size>2159</size>
            <attacher name="Michael Brüning">michael.bruning</attacher>
            
              <data encoding="base64">Li9xdDVfdGVzdAo9PTIxMTU4PT0gTWVtY2hlY2ssIGEgbWVtb3J5IGVycm9yIGRldGVjdG9yCj09
MjExNTg9PSBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMCwgYW5kIEdOVSBHUEwnZCwgYnkgSnVsaWFu
IFNld2FyZCBldCBhbC4KPT0yMTE1OD09IFVzaW5nIFZhbGdyaW5kLTMuNi4xLURlYmlhbiBhbmQg
TGliVkVYOyByZXJ1biB3aXRoIC1oIGZvciBjb3B5cmlnaHQgaW5mbwo9PTIxMTU4PT0gQ29tbWFu
ZDogLi9xdDVfdGVzdAo9PTIxMTU4PT0gCnR5cGUgIjEwIiB0eXBlVG9OYW1lOiBRU3RyaW5nIApD
b252ZXJ0ZWQgc3RyaW5nOiAic3RyaW5neSEiIAp0eXBlICIxMCIgdHlwZVRvTmFtZTogUVN0cmlu
ZyAKQ29udmVydGVkIHN0cmluZzogInN0cmluZ3khIiAKdHlwZSAiMTAiIHR5cGVUb05hbWU6IFFT
dHJpbmcgCkNvbnZlcnRlZCBzdHJpbmc6ICJzdHJpbmd5ISIgCnR5cGUgIjEwIiB0eXBlVG9OYW1l
OiBRU3RyaW5nIApDb252ZXJ0ZWQgc3RyaW5nOiAic3RyaW5neSEiIAp0eXBlICIxMCIgdHlwZVRv
TmFtZTogUVN0cmluZyAKQ29udmVydGVkIHN0cmluZzogInN0cmluZ3khIiAKdHlwZSAiMTAiIHR5
cGVUb05hbWU6IFFTdHJpbmcgCkNvbnZlcnRlZCBzdHJpbmc6ICJzdHJpbmd5ISIgCnR5cGUgIjEw
IiB0eXBlVG9OYW1lOiBRU3RyaW5nIApDb252ZXJ0ZWQgc3RyaW5nOiAic3RyaW5neSEiIAp0eXBl
ICIxMCIgdHlwZVRvTmFtZTogUVN0cmluZyAKQ29udmVydGVkIHN0cmluZzogInN0cmluZ3khIiAK
dHlwZSAiMTAiIHR5cGVUb05hbWU6IFFTdHJpbmcgCkNvbnZlcnRlZCBzdHJpbmc6ICJzdHJpbmd5
ISIgCnR5cGUgIjEwIiB0eXBlVG9OYW1lOiBRU3RyaW5nIApDb252ZXJ0ZWQgc3RyaW5nOiAic3Ry
aW5neSEiIAp0eXBlICIxMCIgdHlwZVRvTmFtZTogUVN0cmluZyAKQ29udmVydGVkIHN0cmluZzog
InN0cmluZ3khIiAKdHlwZSAiMTAiIHR5cGVUb05hbWU6IFFTdHJpbmcgCkNvbnZlcnRlZCBzdHJp
bmc6ICJzdHJpbmd5ISIgCnR5cGUgIjEwIiB0eXBlVG9OYW1lOiBRU3RyaW5nIApDb252ZXJ0ZWQg
c3RyaW5nOiAic3RyaW5neSEiIAp0eXBlICIxMCIgdHlwZVRvTmFtZTogUVN0cmluZyAKQ29udmVy
dGVkIHN0cmluZzogInN0cmluZ3khIiAKdHlwZSAiMTAiIHR5cGVUb05hbWU6IFFTdHJpbmcgCkNv
bnZlcnRlZCBzdHJpbmc6ICJzdHJpbmd5ISIgCnR5cGUgIjEwIiB0eXBlVG9OYW1lOiBRU3RyaW5n
IApDb252ZXJ0ZWQgc3RyaW5nOiAic3RyaW5neSEiIAp0eXBlICIxMCIgdHlwZVRvTmFtZTogUVN0
cmluZyAKQ29udmVydGVkIHN0cmluZzogInN0cmluZ3khIiAKdHlwZSAiMTAiIHR5cGVUb05hbWU6
IFFTdHJpbmcgCkNvbnZlcnRlZCBzdHJpbmc6ICJzdHJpbmd5ISIgCnR5cGUgIjEwIiB0eXBlVG9O
YW1lOiBRU3RyaW5nIApDb252ZXJ0ZWQgc3RyaW5nOiAic3RyaW5neSEiIAp0eXBlICIxMCIgdHlw
ZVRvTmFtZTogUVN0cmluZyAKQ29udmVydGVkIHN0cmluZzogInN0cmluZ3khIiAKPT0yMTE1OD09
IAo9PTIxMTU4PT0gSEVBUCBTVU1NQVJZOgo9PTIxMTU4PT0gICAgIGluIHVzZSBhdCBleGl0OiAx
Miw1MzMgYnl0ZXMgaW4gMTQ4IGJsb2Nrcwo9PTIxMTU4PT0gICB0b3RhbCBoZWFwIHVzYWdlOiA5
NjQgYWxsb2NzLCA4MTYgZnJlZXMsIDY5LDI2NCBieXRlcyBhbGxvY2F0ZWQKPT0yMTE1OD09IAo9
PTIxMTU4PT0gTEVBSyBTVU1NQVJZOgo9PTIxMTU4PT0gICAgZGVmaW5pdGVseSBsb3N0OiAwIGJ5
dGVzIGluIDAgYmxvY2tzCj09MjExNTg9PSAgICBpbmRpcmVjdGx5IGxvc3Q6IDAgYnl0ZXMgaW4g
MCBibG9ja3MKPT0yMTE1OD09ICAgICAgcG9zc2libHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2Nr
cwo9PTIxMTU4PT0gICAgc3RpbGwgcmVhY2hhYmxlOiAxMiw1MzMgYnl0ZXMgaW4gMTQ4IGJsb2Nr
cwo9PTIxMTU4PT0gICAgICAgICBzdXBwcmVzc2VkOiAwIGJ5dGVzIGluIDAgYmxvY2tzCj09MjEx
NTg9PSBSZXJ1biB3aXRoIC0tbGVhay1jaGVjaz1mdWxsIHRvIHNlZSBkZXRhaWxzIG9mIGxlYWtl
ZCBtZW1vcnkKPT0yMTE1OD09IAo9PTIxMTU4PT0gRm9yIGNvdW50cyBvZiBkZXRlY3RlZCBhbmQg
c3VwcHJlc3NlZCBlcnJvcnMsIHJlcnVuIHdpdGg6IC12Cj09MjExNTg9PSBFUlJPUiBTVU1NQVJZ
OiAwIGVycm9ycyBmcm9tIDAgY29udGV4dHMgKHN1cHByZXNzZWQ6IDYgZnJvbSA2KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180175</attachid>
            <date>2012-12-19 08:46:28 -0800</date>
            <delta_ts>2012-12-20 05:39:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104540-20121219174349.patch</filename>
            <type>text/plain</type>
            <size>4533</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI1MmIyYTVlYjExMzkx
ZTc3ZDIyN2ZkMjQyNmY4MjNiOGNkOTYxYy4uNGQ2ZjdkYzYzMTdjMDVlYTA4NDJiZDFiNWYyMDQx
Nzk2YmNmNmUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEyLTE5ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIEpT
IGJyaWRnZSBkb2VzIG5vdCB0cmFuc21pdCBRVmFyaWFudHMgYW55bW9yZSBpbiBRdDUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDU0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgZGF0YSBjb3JydXB0
aW9uIGV4aXN0cyBpbiB0aGUgUU9iamVjdCBicmlkZ2Ugd2hlbiBjYWxsaW5nIHNsb3RzIHRoYXQK
KyAgICAgICAgdGFrZSBhIFFWYXJpYW50LgorCisgICAgICAgIFRoZSBjYWxsaW5nIGNvbnZlbnRp
b24gZm9yIHNsb3RzIGlzIHRoYXQgdGhlIHZvaWQqIHBhcmFtZXRlciBhcnJheSBtdXN0CisgICAg
ICAgIGNvbnRhaW4gcG9pbnRlcnMgdG8gdGhlIGFjdHVhbGx5IHJlcXVpcmVkIGRlc3RpbmF0aW9u
IGFyZ3VtZW50IHR5cGUuIElmCisgICAgICAgIGEgZnVuY3Rpb24gdGFrZXMgYW4gaW50IGZvciBl
eGFtcGxlLCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUKKyAgICAgICAgdm9pZCogcGFy
YW1ldGVyIGFycmF5IG11c3QgYmUgYSBwb2ludGVyIHRvIGFuIGludCB0aGF0IHRoZSBtb2MKKyAg
ICAgICAgZ2VuZXJhdGVkIGNvZGUgdGhlbiBjYW4gInNhZmVseSIgY2FzdCB0byBhbiBpbnQqIGFu
ZCBkZXJlZmVyZW5jZS4KKyAgICAgICAgU2ltaWxhcmx5IGlmIHRoZSBmdW5jdGlvbiB0YWtlcyBh
IFFWYXJpYW50IGl0IG11c3QgYmUgYSBwb2ludGVyIHRvIGEKKyAgICAgICAgUVZhcmlhbnQuCisK
KyAgICAgICAgV2UgaW1wbGVtZW50IHRoaXMgY2FsbGluZyBjb252ZW50aW9uIGJ5IGNvbnN0cnVj
dGluZyBRVmFyaWFudHMgb2YgdGhlCisgICAgICAgIHJlcXVlc3RlZCBwYXJhbWV0ZXIgdHlwZXMg
YW5kIHBhc3NpbmcgdGhlIHZhbHVlIG9mIGRhdGEoKSBpbnRvIHRoZQorICAgICAgICB2b2lkKiBw
YXJhbWV0ZXIgYXJyYXkuIFRoaXMgd29ya3MgZmluZSBmb3IgYWxsIHR5cGVzIGV4Y2VwdCBpZiB0
aGUKKyAgICAgICAgcmVxdWVzdGVkIHR5cGUgaXMgYSBRVmFyaWFudC4gSW4gdGhhdCBjYXNlIGRh
dGEoKSB3aWxsIF9ub3RfIHJldHVybiBhCisgICAgICAgIHBvaW50ZXIgdGhhdCBjYW4gbGF0ZXIg
YmUgc2FmZWx5IGNhc3RlZCB0byBhIFFWYXJpYW50IHBvaW50ZXIgYW5kCisgICAgICAgIGRlcmVm
ZXJlbmNlZC4gSW5zdGVhZCB3ZSBtdXN0IHVzZSB0aGUgYWRkcmVzcyBvZiBvdXIgdmFyaWFudCB0
byBlbnN1cmUKKyAgICAgICAgYSB3b3JraW5nIGNhc3QuCisKKyAgICAgICAgQW4gZXhjZXB0aW9u
IHRvIHRoaXMgY2FzZSBpcyBhIEphdmFTY3JpcHQgbnVsbCB2YWx1ZSwgd2hpY2ggaXMgY29udmVy
dGVkCisgICAgICAgIHRvIGEgZGVmYXVsdCBjb25zdHJ1Y3RlZCBRVmFyaWFudCgpIHdpdGggbnVs
bCBkLXBvaW50ZXIuIFdoaWxlIHRoYXQgbWFwcGluZworICAgICAgICBpcyBub3QgY29ycmVjdCAo
YnVnICMxMDU0NDEgdHJhY2tzIHRoaXMpIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBwcmVzZXJ2ZSBp
dAorICAgICAgICBhbmQgdGhlcmVmb3JlIGFsc28gcGFzcyBhIG51bGwgcG9pbnRlciBpbiB0aGUg
cGFyYW1ldGVyIGFycmF5IHRoYXQgbGF0ZXIKKyAgICAgICAgd2lsbCB0aGVuIGFsc28gcmVzdWx0
IGluIGEgUVZhcmlhbnQgd2l0aCBhIG51bGwgZC1wb2ludGVyIGFnYWluLgorCisgICAgICAgIE91
ciBhdXRvIHRlc3RzIGNvdmVyIHRoaXMgY2FzZSwgYnV0IHRoZXkgd29ya2VkIGJ5IGFjY2lkZW50
IGJlY2F1c2UgdGhlCisgICAgICAgIHByb3ZpZGVkIHBvaW50ZXIgd2hlbiBjYXN0ZWQgdG8gYSBR
VmFyaWFudCBoYXBwZW5zIHRvIGhhdmUgdGhlIGNvcnJlY3QKKyAgICAgICAgdHlwZSBpZCB0aGF0
IGRvZXNuJ3QgcHJvZHVjZSB0aGUgd2FybmluZyBzZWVuIGluIHRoZSB0ZXN0IGNhc2Ugb2YgdGhl
CisgICAgICAgIHByb3ZpZGVkIGV4YW1wbGUgYW5kIHRoZSB1bml0IHRlc3QganVzdCBjb3BpZXMg
dGhlIFFWYXJpYW50IGFuZCB0aHVzCisgICAgICAgIHBvaW50ZXIuCisKKyAgICAgICAgKiBicmlk
Z2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1h
dGNoVHlwZTo6dHlwZUlkKTogUmVwbGFjZSBzdHJpbmcgYmFzZWQgbWV0YQorICAgICAgICB0eXBl
IGlkIGRldGVybWluYXRpb24gb2YgUVZhcmlhbnQgd2l0aCBhIHF1aWNrZXIgdGFibGUgbG9va3Vw
LgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZmluZE1ldGhvZEluZGV4KTogUmVtZW1iZXIgdGhl
IGNob3NlbiAocmVxdWVzdGVkKSB0eXBlcworICAgICAgICBhbmQgcGFzcyB0aGUgcG9pbnRlciB0
byB0aGUgUVZhcmlhbnQgaW5zdGVhZCBvZiBpdHMgZGF0YSgpIHBvaW50ZXIgaWYKKyAgICAgICAg
cmVxdWVzdGVkLgorCiAyMDEyLTEyLTE5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1JFR1JFU1NJT05dIFRoZSBsYXN0
IHJlbWVtYmVyZWQgdGFiIGlzIG5vdCByZXN0b3JlZCB3aGVuIHRoZSBTZXR0aW5ncyBkaWFsb2cg
aXMgb3BlbmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKaW5kZXggOTUx
ZmExY2RlM2I2YTI1MTcyMGI1OTZmNmFlOGIwZDNiMDczNzU3Ny4uODYxZjJkNGNmMmFiMjhhZGRj
NzVmYTMwYzc2Y2Y0OTljNDFkZTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3J1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lLmNwcApAQCAtODkzLDcgKzg5Myw3IEBAIHByaXZhdGU6CiBRTWV0YVR5cGU6OlR5cGUgUXRN
ZXRob2RNYXRjaFR5cGU6OnR5cGVJZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVmFyaWFudCgpKQot
ICAgICAgICByZXR1cm4gKFFNZXRhVHlwZTo6VHlwZSkgUU1ldGFUeXBlOjp0eXBlKCJRVmFyaWFu
dCIpOworICAgICAgICByZXR1cm4gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlh
bnQ+KCk7CiAgICAgcmV0dXJuIChRTWV0YVR5cGU6OlR5cGUpIChpc01ldGFFbnVtKCkgPyBRTWV0
YVR5cGU6OkludCA6IG1fdHlwZUlkKTsKIH0KIApAQCAtMTA4Niw2ICsxMDg2LDcgQEAgc3RhdGlj
IGludCBmaW5kTWV0aG9kSW5kZXgoSlNDb250ZXh0UmVmIGNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgJiYgKG1hdGNoRGlzdGFuY2UgPT0gMCkpIHsKICAgICAgICAgICAgICAgICAvLyBwZXJmZWN0
IG1hdGNoLCB1c2UgdGhpcyBvbmUKICAgICAgICAgICAgICAgICBjaG9zZW5JbmRleCA9IGluZGV4
OworICAgICAgICAgICAgICAgIGNob3NlblR5cGVzID0gdHlwZXM7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBRdE1ldGhvZE1hdGNoRGF0YSBjdXJy
ZW50TWF0Y2gobWF0Y2hEaXN0YW5jZSwgaW5kZXgsIHR5cGVzLCBhcmdzKTsKQEAgLTExNjMsNiAr
MTE2NCw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEpTQ29udGV4dFJlZiBjb250ZXh0
LAogICAgICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbWVzc2FnZSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjaG9zZW5JbmRleCA9IGJlc3RNYXRjaC5p
bmRleDsKKyAgICAgICAgICAgIGNob3NlblR5cGVzID0gYmVzdE1hdGNoLnR5cGVzOwogICAgICAg
ICAgICAgYXJncyA9IGJlc3RNYXRjaC5hcmdzOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE3Myw3
ICsxMTc1LDExIEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEpTQ29udGV4dFJlZiBjb250
ZXh0LAogICAgICAgICB2YXJzLnJlc2l6ZShhcmdzLmNvdW50KCkpOwogICAgICAgICBmb3IgKGk9
MDsgaSA8IGFyZ3MuY291bnQoKTsgaSsrKSB7CiAgICAgICAgICAgICB2YXJzW2ldID0gYXJnc1tp
XTsKLSAgICAgICAgICAgIHZ2YXJzW2ldID0gdmFyc1tpXS5kYXRhKCk7CisgICAgICAgICAgICB2
b2lkKiBkYXRhUHRyID0gdmFyc1tpXS5kYXRhKCk7CisgICAgICAgICAgICBpZiAoY2hvc2VuVHlw
ZXNbaV0uaXNWYXJpYW50KCkgJiYgIWRhdGFQdHIpCisgICAgICAgICAgICAgICAgdnZhcnNbaV0g
PSAmdmFyc1tpXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2dmFyc1tpXSA9
IGRhdGFQdHI7CiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180326</attachid>
            <date>2012-12-20 05:39:26 -0800</date>
            <delta_ts>2012-12-20 05:44:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104540-20121220143649.patch</filename>
            <type>text/plain</type>
            <size>5600</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI1MmIyYTVlYjExMzkx
ZTc3ZDIyN2ZkMjQyNmY4MjNiOGNkOTYxYy4uNTYwYjE5NTYwMWZmMTdlYWQ2ZDMwNTRhNTE2YjZj
NWE4NTgxZWIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEyLTE5ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4sIEplZHJ6ZWogTm93YWNraSA8
amVkcnplai5ub3dhY2tpQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIEpTIGJyaWRnZSBkb2Vz
IG5vdCB0cmFuc21pdCBRVmFyaWFudHMgYW55bW9yZSBpbiBRdDUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDU0MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgZGF0YSBjb3JydXB0aW9uIGV4aXN0cyBp
biB0aGUgUU9iamVjdCBicmlkZ2Ugd2hlbiBjYWxsaW5nIHNsb3RzIHRoYXQKKyAgICAgICAgdGFr
ZSBhIFFWYXJpYW50LgorCisgICAgICAgIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIHNsb3Rz
IGlzIHRoYXQgdGhlIHZvaWQqIHBhcmFtZXRlciBhcnJheSBtdXN0CisgICAgICAgIGNvbnRhaW4g
cG9pbnRlcnMgdG8gdGhlIGFjdHVhbGx5IHJlcXVpcmVkIGRlc3RpbmF0aW9uIGFyZ3VtZW50IHR5
cGUuIElmCisgICAgICAgIGEgZnVuY3Rpb24gdGFrZXMgYW4gaW50IGZvciBleGFtcGxlLCB0aGUg
Y29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUKKyAgICAgICAgdm9pZCogcGFyYW1ldGVyIGFycmF5
IG11c3QgYmUgYSBwb2ludGVyIHRvIGFuIGludCB0aGF0IHRoZSBtb2MKKyAgICAgICAgZ2VuZXJh
dGVkIGNvZGUgdGhlbiBjYW4gInNhZmVseSIgY2FzdCB0byBhbiBpbnQqIGFuZCBkZXJlZmVyZW5j
ZS4KKyAgICAgICAgU2ltaWxhcmx5IGlmIHRoZSBmdW5jdGlvbiB0YWtlcyBhIFFWYXJpYW50IGl0
IG11c3QgYmUgYSBwb2ludGVyIHRvIGEKKyAgICAgICAgUVZhcmlhbnQuCisKKyAgICAgICAgV2Ug
aW1wbGVtZW50IHRoaXMgY2FsbGluZyBjb252ZW50aW9uIGJ5IGNvbnN0cnVjdGluZyBRVmFyaWFu
dHMgb2YgdGhlCisgICAgICAgIHJlcXVlc3RlZCBwYXJhbWV0ZXIgdHlwZXMgYW5kIHBhc3Npbmcg
dGhlIHZhbHVlIG9mIGRhdGEoKSBpbnRvIHRoZQorICAgICAgICB2b2lkKiBwYXJhbWV0ZXIgYXJy
YXkuIFRoaXMgd29ya3MgZmluZSBmb3IgYWxsIHR5cGVzIGV4Y2VwdCBpZiB0aGUKKyAgICAgICAg
cmVxdWVzdGVkIHR5cGUgaXMgYSBRVmFyaWFudC4gSW4gdGhhdCBjYXNlIGRhdGEoKSB3aWxsIF9u
b3RfIHJldHVybiBhCisgICAgICAgIHBvaW50ZXIgdGhhdCBjYW4gbGF0ZXIgYmUgc2FmZWx5IGNh
c3RlZCB0byBhIFFWYXJpYW50IHBvaW50ZXIgYW5kCisgICAgICAgIGRlcmVmZXJlbmNlZC4gSW5z
dGVhZCB3ZSBtdXN0IHVzZSB0aGUgYWRkcmVzcyBvZiBvdXIgdmFyaWFudCB0byBlbnN1cmUKKyAg
ICAgICAgYSB3b3JraW5nIGNhc3QuCisKKyAgICAgICAgT3VyIGF1dG8gdGVzdHMgY292ZXIgdGhp
cyBjYXNlLCBidXQgdGhleSB3b3JrZWQgYnkgYWNjaWRlbnQgYmVjYXVzZSB0aGUKKyAgICAgICAg
cHJvdmlkZWQgcG9pbnRlciB3aGVuIGNhc3RlZCB0byBhIFFWYXJpYW50IGhhcHBlbnMgdG8gaGF2
ZSB0aGUgY29ycmVjdAorICAgICAgICB0eXBlIGlkIHRoYXQgZG9lc24ndCBwcm9kdWNlIHRoZSB3
YXJuaW5nIHNlZW4gaW4gdGhlIHRlc3QgY2FzZSBvZiB0aGUKKyAgICAgICAgcHJvdmlkZWQgZXhh
bXBsZSBhbmQgdGhlIHVuaXQgdGVzdCBqdXN0IGNvcGllcyB0aGUgUVZhcmlhbnQgYW5kIHRodXMK
KyAgICAgICAgcG9pbnRlci4KKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjp0eXBlSWQpOiBSZXBs
YWNlIHN0cmluZyBiYXNlZCBtZXRhCisgICAgICAgIHR5cGUgaWQgZGV0ZXJtaW5hdGlvbiBvZiBR
VmFyaWFudCB3aXRoIGEgcXVpY2tlciB0YWJsZSBsb29rdXAuCisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpmaW5kTWV0aG9kSW5kZXgpOiBSZW1lbWJlciB0aGUgY2hvc2VuIChyZXF1ZXN0ZWQpIHR5
cGVzCisgICAgICAgIGFuZCBwYXNzIHRoZSBwb2ludGVyIHRvIHRoZSBRVmFyaWFudCBpbnN0ZWFk
IG9mIGl0cyBkYXRhKCkgcG9pbnRlciBpZgorICAgICAgICByZXF1ZXN0ZWQuCisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmNhbGwpOiBGaXhlZCBkZXRlcm1pbmF0aW9u
IG9mIHdoZXRoZXIKKyAgICAgICAgd2UgbmVlZCB0byBjb252ZXJ0IGEgcmV0dXJuIHZhbHVlIG9y
IG5vdCBzb2xlbHkgYmFzZWQgb24gdGhlIHJldHVybgorICAgICAgICB0eXBlIF9zcGVjaWZpZWRf
IGluIHRoZSBtZXRhIG1ldGhvZCBpbnN0ZWFkIG9mIHRoZSB2YXJpYW50IHZhbHVlCisgICAgICAg
IHJldHVybmVkLiBUaGUgbGF0dGVyIGlzIG5vdCBzdWZmaWNpZW50IGJlY2F1c2UgYSBzbG90IGNh
biByZXR1cm4gYW4KKyAgICAgICAgaW52YWxpZCB2YXJpYW50LCB3aGljaCBpcyBub3QgdGhlIHNh
bWUgYXMgcmV0dXJuaW5nIHZvaWQuIFRoaXMgd2FzCisgICAgICAgIHRyaWdnZXJlZCBieSBhbiB1
bml0IHRlc3QgdGhhdCBhY2NpZGVudGFsbHkgcGFzc2VkIGR1ZSB0byB0aGlzIG1lbW9yeQorICAg
ICAgICBjb3JydXB0aW9uIGluIHRoZSBmaXJzdCBwbGFjZS4KKwogMjAxMi0xMi0xOSAgQWxleGFu
ZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtSRUdSRVNTSU9OXSBUaGUgbGFzdCByZW1lbWJlcmVkIHRhYiBpcyBub3QgcmVzdG9yZWQg
d2hlbiB0aGUgU2V0dGluZ3MgZGlhbG9nIGlzIG9wZW5lZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X3J1bnRpbWUuY3BwCmluZGV4IDk1MWZhMWNkZTNiNmEyNTE3MjBiNTk2ZjZhZThiMGQzYjA3
Mzc1NzcuLjEzMTIzOTUzMzNlZTQwM2MyMDljN2YwZjFkNWFjYjc2MjlmNjllMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKQEAgLTg5Myw3ICs4OTMsNyBAQCBwcml2
YXRlOgogUU1ldGFUeXBlOjpUeXBlIFF0TWV0aG9kTWF0Y2hUeXBlOjp0eXBlSWQoKSBjb25zdAog
ewogICAgIGlmIChpc1ZhcmlhbnQoKSkKLSAgICAgICAgcmV0dXJuIChRTWV0YVR5cGU6OlR5cGUp
IFFNZXRhVHlwZTo6dHlwZSgiUVZhcmlhbnQiKTsKKyAgICAgICAgcmV0dXJuIChRTWV0YVR5cGU6
OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpOwogICAgIHJldHVybiAoUU1ldGFUeXBlOjpU
eXBlKSAoaXNNZXRhRW51bSgpID8gUU1ldGFUeXBlOjpJbnQgOiBtX3R5cGVJZCk7CiB9CiAKQEAg
LTEwODYsNiArMTA4Niw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEpTQ29udGV4dFJl
ZiBjb250ZXh0LAogICAgICAgICAgICAgICAgICYmIChtYXRjaERpc3RhbmNlID09IDApKSB7CiAg
ICAgICAgICAgICAgICAgLy8gcGVyZmVjdCBtYXRjaCwgdXNlIHRoaXMgb25lCiAgICAgICAgICAg
ICAgICAgY2hvc2VuSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBjaG9zZW5UeXBlcyA9
IHR5cGVzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgUXRNZXRob2RNYXRjaERhdGEgY3VycmVudE1hdGNoKG1hdGNoRGlzdGFuY2UsIGluZGV4LCB0
eXBlcywgYXJncyk7CkBAIC0xMTYzLDYgKzExNjQsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJ
bmRleChKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICAgICAgICAgIHNldEV4Y2VwdGlvbihjb250
ZXh0LCBleGNlcHRpb24sIG1lc3NhZ2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Y2hvc2VuSW5kZXggPSBiZXN0TWF0Y2guaW5kZXg7CisgICAgICAgICAgICBjaG9zZW5UeXBlcyA9
IGJlc3RNYXRjaC50eXBlczsKICAgICAgICAgICAgIGFyZ3MgPSBiZXN0TWF0Y2guYXJnczsKICAg
ICAgICAgfQogICAgIH0KQEAgLTExNzMsNyArMTE3NSwxMCBAQCBzdGF0aWMgaW50IGZpbmRNZXRo
b2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICAgICAgdmFycy5yZXNpemUoYXJncy5j
b3VudCgpKTsKICAgICAgICAgZm9yIChpPTA7IGkgPCBhcmdzLmNvdW50KCk7IGkrKykgewogICAg
ICAgICAgICAgdmFyc1tpXSA9IGFyZ3NbaV07Ci0gICAgICAgICAgICB2dmFyc1tpXSA9IHZhcnNb
aV0uZGF0YSgpOworICAgICAgICAgICAgaWYgKGNob3NlblR5cGVzW2ldLmlzVmFyaWFudCgpKQor
ICAgICAgICAgICAgICAgIHZ2YXJzW2ldID0gJnZhcnNbaV07CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgdnZhcnNbaV0gPSB2YXJzW2ldLmRhdGEoKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTIzOCwxNCArMTI0MywxNSBAQCBKU1ZhbHVlUmVmIFF0UnVudGltZU1ldGhvZDo6
Y2FsbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTTwogCiAg
ICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gdmFyZ3M7CiAgICAgdm9pZCogcWFyZ3Nb
MTFdOworICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhT2JqZWN0ID0gb2JqLT5tZXRhT2JqZWN0
KCk7CiAKLSAgICBpbnQgbWV0aG9kSW5kZXggPSBmaW5kTWV0aG9kSW5kZXgoY29udGV4dCwgb2Jq
LT5tZXRhT2JqZWN0KCksIGQtPm1faWRlbnRpZmllciwgIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50
cywKKyAgICBpbnQgbWV0aG9kSW5kZXggPSBmaW5kTWV0aG9kSW5kZXgoY29udGV4dCwgbWV0YU9i
amVjdCwgZC0+bV9pZGVudGlmaWVyLCAgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZC0+bV9mbGFncyAmIEFsbG93UHJpdmF0
ZSksIHZhcmdzLCAodm9pZCAqKilxYXJncywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChRTWV0YU9i
amVjdDo6bWV0YWNhbGwob2JqLCBRTWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCwgbWV0aG9k
SW5kZXgsIHFhcmdzKSA+PSAwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAKLSAgICBpZiAodmFyZ3Muc2l6ZSgpID4gMCAmJiB2YXJnc1swXS5pc1ZhbGlk
KCkpCisgICAgaWYgKHZhcmdzLnNpemUoKSA+IDAgJiYgbWV0YU9iamVjdC0+bWV0aG9kKG1ldGhv
ZEluZGV4KS5yZXR1cm5UeXBlKCkgIT0gUU1ldGFUeXBlOjpWb2lkKQogICAgICAgICByZXR1cm4g
Y29udmVydFFWYXJpYW50VG9WYWx1ZShjb250ZXh0LCBkLT5tX2luc3RhbmNlLT5yb290T2JqZWN0
KCksIHZhcmdzWzBdLCBleGNlcHRpb24pOwogCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwo=
</data>
<flag name="review"
          id="197560"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185767</attachid>
            <date>2013-01-31 06:11:02 -0800</date>
            <delta_ts>2013-01-31 06:11:02 -0800</delta_ts>
            <desc>Patch series to speed up the bridge code path used in the original test case. Needs further work.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>46245</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">RnJvbSA0M2Q4NmEyNzc2ZWE3ODFmMDYyZTFjZmI2YTI5ZDk4ZTlmNzdjYjU5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTaW1vbiBIYXVzbWFubiA8c2ltb24uaGF1c21hbm5AZGlnaWEu
Y29tPgpEYXRlOiBXZWQsIDMwIEphbiAyMDEzIDE1OjA4OjE2ICswMTAwClN1YmplY3Q6IFtQQVRD
SCAwMS8xMF0gU3BlZWQgdXAgbWV0aG9kIGNhbGxzIGJ5IHJlZHVjaW5nIGNhbGxzIHRvCiBRTWV0
YU9iamV0Yzo6bWV0aG9kKGludCkgYW5kIChtb3JlIGltcG9ydGFudGx5KQogUU1ldGFNZXRob2Q6
Om1ldGhvZFNpZ25hdHVyZQoKLS0tCiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAgfCAgIDU4ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmggICB8ICAgIDMgKysKIDIgZmlsZXMgY2hhbmdlZCwg
MjggaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X3J1bnRpbWUuY3BwCmluZGV4IDI5NDNiMDEuLjZjM2JjYzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKQEAgLTk1MywzMyArOTUzLDI2IEBAIHN0YXRpYyBpbnQg
aW5kZXhPZk1ldGFFbnVtKGNvbnN0IFFNZXRhT2JqZWN0ICptZXRhLCBjb25zdCBRQnl0ZUFycmF5
ICZzdHIpCiAKIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVzb2x2aW5nIG1ldGhvZHMKIC8vIExh
cmdlbHkgYmFzZWQgb24gY29kZSBpbiBRdFNjcmlwdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25z
Ci1zdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxvd1ByaXZhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBR
VmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiAmdmFycywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQqKiB2dmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK2ludCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmRNZXRob2RJbmRleChKU0Nv
bnRleHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+JiB2YXJzLCB2b2lkKiogdnZh
cnMsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBRTGlzdDxpbnQ+IG1hdGNoaW5nSW5k
aWNlczsKLQotICAgIGJvb2wgb3ZlcmxvYWRzID0gIXNpZ25hdHVyZS5jb250YWlucygnKCcpOwot
Ci0gICAgaW50IGNvdW50ID0gbWV0YS0+bWV0aG9kQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0g
Y291bnQgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBRTWV0YU1ldGhvZCBtID0g
bWV0YS0+bWV0aG9kKGkpOwotCi0gICAgICAgIC8vIERvbid0IGNob29zZSBwcml2YXRlIG1ldGhv
ZHMKLSAgICAgICAgaWYgKG0uYWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUgJiYgIWFs
bG93UHJpdmF0ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIHRyeSBhbmQg
ZmluZCBhbGwgbWF0Y2hpbmcgbmFtZWQgbWV0aG9kcwotICAgICAgICBpZiAoIW92ZXJsb2FkcyAm
JiBtLm1ldGhvZFNpZ25hdHVyZSgpID09IHNpZ25hdHVyZSkKLSAgICAgICAgICAgIG1hdGNoaW5n
SW5kaWNlcy5hcHBlbmQoaSk7Ci0gICAgICAgIGVsc2UgaWYgKG92ZXJsb2FkcyAmJiBtLm5hbWUo
KSA9PSBzaWduYXR1cmUpCi0gICAgICAgICAgICBtYXRjaGluZ0luZGljZXMuYXBwZW5kKGkpOwor
ICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBjb25zdCBtZXRhID0gbV9vYmplY3QtPm1ldGFPYmplY3Qo
KTsKKyAgICBib29sIG92ZXJsb2FkcyA9ICFtX2lkZW50aWZpZXIuY29udGFpbnMoJygnKTsKKwor
ICAgIGlmIChtX2NhY2hlZE1ldGhvZEluZGljZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGludCBj
b3VudCA9IG1ldGEtPm1ldGhvZENvdW50KCk7CisgICAgICAgIGZvciAoaW50IGkgPSBjb3VudCAt
IDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBjb25zdCBRTWV0YU1ldGhvZCBtID0gbWV0
YS0+bWV0aG9kKGkpOworCisgICAgICAgICAgICAvLyBEb24ndCBjaG9vc2UgcHJpdmF0ZSBtZXRo
b2RzCisgICAgICAgICAgICBpZiAobS5hY2Nlc3MoKSA9PSBRTWV0YU1ldGhvZDo6UHJpdmF0ZSAm
JiAhKG1fZmxhZ3MgJiBBbGxvd1ByaXZhdGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAvLyB0cnkgYW5kIGZpbmQgYWxsIG1hdGNoaW5nIG5hbWVkIG1ldGhvZHMK
KyAgICAgICAgICAgIGlmICghb3ZlcmxvYWRzICYmIG0ubWV0aG9kU2lnbmF0dXJlKCkgPT0gbV9p
ZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIG1fY2FjaGVkTWV0aG9kSW5kaWNlcy5hcHBlbmQo
aSk7CisgICAgICAgICAgICBlbHNlIGlmIChvdmVybG9hZHMgJiYgbS5uYW1lKCkgPT0gbV9pZGVu
dGlmaWVyKQorICAgICAgICAgICAgICAgIG1fY2FjaGVkTWV0aG9kSW5kaWNlcy5hcHBlbmQoaSk7
CisgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgY2hvc2VuSW5kZXggPSAtMTsKQEAgLTk5MSw3
ICs5ODQsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4
dCwKICAgICBRVmVjdG9yPGludD4gdG9vRmV3QXJnczsKICAgICBRVmVjdG9yPGludD4gY29udmVy
c2lvbkZhaWxlZDsKIAotICAgIGZvcmVhY2goaW50IGluZGV4LCBtYXRjaGluZ0luZGljZXMpIHsK
KyAgICBmb3JlYWNoKGludCBpbmRleCwgbV9jYWNoZWRNZXRob2RJbmRpY2VzKSB7CiAgICAgICAg
IFFNZXRhTWV0aG9kIG1ldGhvZCA9IG1ldGEtPm1ldGhvZChpbmRleCk7CiAKICAgICAgICAgUVZl
Y3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gdHlwZXM7CkBAIC0xMTEzLDcgKzExMDYsNyBAQCBzdGF0
aWMgaW50IGZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICAgICAgLy8g
Tm8gdmFsaWQgZnVuY3Rpb25zIGF0IGFsbCAtIGZvcm1hdCBhbiBlcnJvciBtZXNzYWdlCiAgICAg
ICAgIGlmICghY29udmVyc2lvbkZhaWxlZC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFFTdHJp
bmcgbWVzc2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImluY29tcGF0aWJsZSB0eXBlIG9mIGFy
Z3VtZW50KHMpIGluIGNhbGwgdG8gJTAoKTsgY2FuZGlkYXRlcyB3ZXJlXG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKHNpZ25hdHVyZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4x
KG1faWRlbnRpZmllcikpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb252ZXJz
aW9uRmFpbGVkLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQogICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFMYXRpbjFTdHJpbmcoIlxuIik7CkBAIC0xMTI3
LDEyICsxMTIwLDEyIEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEpTQ29udGV4dFJlZiBj
b250ZXh0LAogICAgICAgICAgICAgUV9BU1NFUlQodW5yZXNvbHZlZEluZGV4ICE9IC0xKTsKICAg
ICAgICAgICAgIFF0TWV0aG9kTWF0Y2hUeXBlIHVucmVzb2x2ZWRUeXBlID0gYXJnc0luc3RhbmNl
LnR5cGVzLmF0KHVucmVzb2x2ZWRJbmRleCk7CiAgICAgICAgICAgICBRU3RyaW5nIG1lc3NhZ2Ug
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJjYW5ub3QgY2FsbCAlMCgpOiB1bmtub3duIHR5cGUgYCUx
JyIpCi0gICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKHNpZ25hdHVyZSkp
CisgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG1faWRlbnRpZmllcikp
CiAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHVucmVzb2x2ZWRUeXBlLm5hbWUo
KSkpOwogICAgICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbWVzc2Fn
ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJ0b28gZmV3IGFyZ3VtZW50cyBpbiBjYWxsIHRvICUwKCk7IGNhbmRp
ZGF0ZXMgYXJlXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5n
Ojpmcm9tTGF0aW4xKHNpZ25hdHVyZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG1faWRlbnRpZmllcikpOwogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0b29GZXdBcmdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFMYXRpbjFTdHJp
bmcoIlxuIik7CkBAIC0xMTUwLDcgKzExNDMsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRl
eChKU0NvbnRleHRSZWYgY29udGV4dCwKICAgICAgICAgICAgICYmIChiZXN0TWF0Y2gubWF0Y2hE
aXN0YW5jZSA9PSBjYW5kaWRhdGVzLmF0KDEpLm1hdGNoRGlzdGFuY2UpKSB7CiAgICAgICAgICAg
ICAvLyBhbWJpZ3VvdXMgY2FsbAogICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiYW1iaWd1b3VzIGNhbGwgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbiAlMCgp
OyBjYW5kaWRhdGVzIHdlcmVcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKG1faWRlbnRpZmllcikpOwogICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gT25seSBjYW5kaWRhdGUgZm9yIG92ZXJsb2FkIGlmIGFyZ3VtZW50IGNvdW50IGFuZCBt
YXRjaCBkaXN0YW5jZSBpcyBzYW1lIGFzIGJlc3QgbWF0Y2gKICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlcy5hdChpKS5hcmdzLmNvdW50KCkgPT0gYmVzdE1hdGNoLmFyZ3MuY291bnQoKQpA
QCAtMTI0NSw4ICsxMjM4LDcgQEAgSlNWYWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNhbGwoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU08KICAgICB2b2lkKiBx
YXJnc1sxMV07CiAgICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGFPYmplY3QgPSBvYmotPm1ldGFP
YmplY3QoKTsKIAotICAgIGludCBtZXRob2RJbmRleCA9IGZpbmRNZXRob2RJbmRleChjb250ZXh0
LCBtZXRhT2JqZWN0LCBkLT5tX2lkZW50aWZpZXIsICBhcmd1bWVudENvdW50LCBhcmd1bWVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkLT5tX2ZsYWdzICYgQWxs
b3dQcml2YXRlKSwgdmFyZ3MsICh2b2lkICoqKXFhcmdzLCBleGNlcHRpb24pOworICAgIGludCBt
ZXRob2RJbmRleCA9IGQtPmZpbmRNZXRob2RJbmRleChjb250ZXh0LCBhcmd1bWVudENvdW50LCBh
cmd1bWVudHMsIHZhcmdzLCAodm9pZCAqKilxYXJncywgZXhjZXB0aW9uKTsKIAogICAgIGlmIChR
TWV0YU9iamVjdDo6bWV0YWNhbGwob2JqLCBRTWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCwg
bWV0aG9kSW5kZXgsIHFhcmdzKSA+PSAwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
cnVudGltZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAppbmRleCBm
MjY2Nzg3Li43MjM1OGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
cnVudGltZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKQEAg
LTk1LDExICs5NSwxNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUUJ5dGVBcnJheSYgbmFtZSgpIHsg
cmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiBwcml2YXRlOgorICAgIGludCBmaW5kTWV0aG9kSW5k
ZXgoSlNDb250ZXh0UmVmIGNvbnRleHQsIGludCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiAmdmFycywgdm9p
ZCoqIHZ2YXJzLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCiAgICAgc3RhdGljIFF0UnVudGlt
ZU1ldGhvZCogdG9SdW50aW1lTWV0aG9kKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOwogCiAg
ICAgc3RhdGljIEpTVmFsdWVSZWYgY29ubmVjdE9yRGlzY29ubmVjdChKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbiwgYm9vbCBjb25uZWN0KTsKICAgICBRUG9pbnRlcjxRT2JqZWN0PiBtX29iamVjdDsK
ICAgICBRQnl0ZUFycmF5IG1faWRlbnRpZmllcjsKKyAgICBRTGlzdDxpbnQ+IG1fY2FjaGVkTWV0
aG9kSW5kaWNlczsKICAgICBpbnQgbV9pbmRleDsKICAgICBpbnQgbV9mbGFnczsKICAgICBXZWFr
PEpTT2JqZWN0PiBtX2pzT2JqZWN0OwotLSAKMS43LjEwLjQKCgpGcm9tIDU5ZDg0YjU0YjM0YzM1
NDJkNjYwZWU4MWMyMDAwNDgyY2MwYmU1NWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206
IFNpbW9uIEhhdXNtYW5uIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CkRhdGU6IFdlZCwgMzAg
SmFuIDIwMTMgMTU6NDk6NDQgKzAxMDAKU3ViamVjdDogW1BBVENIIDAyLzEwXSBBdm9pZCBjYWxs
aW5nIFFNZXRhTWV0aG9kOjpwYXJhbWV0ZXJUeXBlTmFtZXMgYXMgaXQgaXMKIHZlcnkgc2xvdwoK
LS0tCiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgfCAgIDYzICsrKysr
KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzMyBpbnNlcnRpb25z
KCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAKaW5kZXggNmMzYmNjMy4uM2UwOWM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcApAQCAtODQyLDcgKzg0Miw3IEBAIHB1YmxpYzoKIAogCiAgICAgUXRNZXRob2RN
YXRjaFR5cGUoKQotICAgICAgICA6IG1fa2luZChJbnZhbGlkKSB7IH0KKyAgICAgICAgOiBtX2tp
bmQoSW52YWxpZCksIG1fcGFyYW1ldGVySW5kZXgoLTIpIHsgfQogCiAgICAgS2luZCBraW5kKCkg
Y29uc3QKICAgICB7IHJldHVybiBtX2tpbmQ7IH0KQEAgLTg2NCwzMCArODY0LDMwIEBAIHB1Ymxp
YzoKICAgICBib29sIGlzTWV0YUVudW0oKSBjb25zdAogICAgIHsgcmV0dXJuIChtX2tpbmQgPT0g
TWV0YUVudW0pOyB9CiAKLSAgICBRQnl0ZUFycmF5IG5hbWUoKSBjb25zdDsKLQogICAgIGludCBl
bnVtZXJhdG9ySW5kZXgoKSBjb25zdAogICAgIHsgUV9BU1NFUlQoaXNNZXRhRW51bSgpKTsgcmV0
dXJuIG1fdHlwZUlkOyB9CiAKICAgICBzdGF0aWMgUXRNZXRob2RNYXRjaFR5cGUgdmFyaWFudCgp
CiAgICAgeyByZXR1cm4gUXRNZXRob2RNYXRjaFR5cGUoVmFyaWFudCk7IH0KIAotICAgIHN0YXRp
YyBRdE1ldGhvZE1hdGNoVHlwZSBtZXRhVHlwZShpbnQgdHlwZUlkLCBjb25zdCBRQnl0ZUFycmF5
ICZuYW1lKQotICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKE1ldGFUeXBlLCB0eXBlSWQs
IG5hbWUpOyB9CisgICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIG1ldGFUeXBlKGludCB0eXBl
SWQpCisgICAgeyByZXR1cm4gUXRNZXRob2RNYXRjaFR5cGUoTWV0YVR5cGUsIHR5cGVJZCk7IH0K
KworICAgIHN0YXRpYyBRdE1ldGhvZE1hdGNoVHlwZSBtZXRhRW51bShpbnQgZW51bUluZGV4KQor
ICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKE1ldGFFbnVtLCBlbnVtSW5kZXgpOyB9CiAK
LSAgICBzdGF0aWMgUXRNZXRob2RNYXRjaFR5cGUgbWV0YUVudW0oaW50IGVudW1JbmRleCwgY29u
c3QgUUJ5dGVBcnJheSAmbmFtZSkKLSAgICB7IHJldHVybiBRdE1ldGhvZE1hdGNoVHlwZShNZXRh
RW51bSwgZW51bUluZGV4LCBuYW1lKTsgfQorICAgIHN0YXRpYyBRdE1ldGhvZE1hdGNoVHlwZSB1
bnJlc29sdmVkKGludCBwYXJhbUluZGV4KQorICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBl
KFVucmVzb2x2ZWQsIC8qdHlwZUlkPSovMCwgcGFyYW1JbmRleCk7IH0KIAotICAgIHN0YXRpYyBR
dE1ldGhvZE1hdGNoVHlwZSB1bnJlc29sdmVkKGNvbnN0IFFCeXRlQXJyYXkgJm5hbWUpCi0gICAg
eyByZXR1cm4gUXRNZXRob2RNYXRjaFR5cGUoVW5yZXNvbHZlZCwgLyp0eXBlSWQ9Ki8wLCBuYW1l
KTsgfQorICAgIFFCeXRlQXJyYXkgdW5yZXNvbHZlZFR5cGVOYW1lKGNvbnN0IFFNZXRhTWV0aG9k
JiBtZXRob2QpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFF0TWV0aG9kTWF0Y2hUeXBlKEtpbmQg
a2luZCwgaW50IHR5cGVJZCA9IDAsIGNvbnN0IFFCeXRlQXJyYXkgJm5hbWUgPSBRQnl0ZUFycmF5
KCkpCi0gICAgICAgIDogbV9raW5kKGtpbmQpLCBtX3R5cGVJZCh0eXBlSWQpLCBtX25hbWUobmFt
ZSkgeyB9CisgICAgUXRNZXRob2RNYXRjaFR5cGUoS2luZCBraW5kLCBpbnQgdHlwZUlkID0gMCxp
bnQgcGFyYW1JbmRleCA9IC0yKQorICAgICAgICA6IG1fa2luZChraW5kKSwgbV90eXBlSWQodHlw
ZUlkKSwgbV9wYXJhbWV0ZXJJbmRleChwYXJhbUluZGV4KSB7IH0KIAogICAgIEtpbmQgbV9raW5k
OwogICAgIGludCBtX3R5cGVJZDsKLSAgICBRQnl0ZUFycmF5IG1fbmFtZTsKKyAgICBpbnQgbV9w
YXJhbWV0ZXJJbmRleDsKIH07CiAKIFFNZXRhVHlwZTo6VHlwZSBRdE1ldGhvZE1hdGNoVHlwZTo6
dHlwZUlkKCkgY29uc3QKQEAgLTg5NywxMyArODk3LDEzIEBAIFFNZXRhVHlwZTo6VHlwZSBRdE1l
dGhvZE1hdGNoVHlwZTo6dHlwZUlkKCkgY29uc3QKICAgICByZXR1cm4gKFFNZXRhVHlwZTo6VHlw
ZSkgKGlzTWV0YUVudW0oKSA/IFFNZXRhVHlwZTo6SW50IDogbV90eXBlSWQpOwogfQogCi1RQnl0
ZUFycmF5IFF0TWV0aG9kTWF0Y2hUeXBlOjpuYW1lKCkgY29uc3QKK1FCeXRlQXJyYXkgUXRNZXRo
b2RNYXRjaFR5cGU6OnVucmVzb2x2ZWRUeXBlTmFtZShjb25zdCBRTWV0YU1ldGhvZCAmbWV0aG9k
KSBjb25zdAogewotICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1f
bmFtZTsKLSAgICBlbHNlIGlmIChtX2tpbmQgPT0gVmFyaWFudCkKLSAgICAgICAgcmV0dXJuICJR
VmFyaWFudCI7Ci0gICAgcmV0dXJuIFFCeXRlQXJyYXkoKTsKKyAgICBpZiAobV9wYXJhbWV0ZXJJ
bmRleCA8IC0xKQorICAgICAgICByZXR1cm4gUUJ5dGVBcnJheSgpOworICAgIGlmIChtX3BhcmFt
ZXRlckluZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gbWV0aG9kLnR5cGVOYW1lKCk7CisgICAg
cmV0dXJuIG1ldGhvZC5wYXJhbWV0ZXJUeXBlcygpLmF0KG1fcGFyYW1ldGVySW5kZXgpOwogfQog
CiBzdHJ1Y3QgUXRNZXRob2RNYXRjaERhdGEKQEAgLTk5NSw0MSArOTk1LDQzIEBAIGludCBRdFJ1
bnRpbWVNZXRob2Q6OmZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwgaW50IGFy
Z3VtZW50Q291bnQsIGNvCiAgICAgICAgIGludCBydHlwZSA9IG1ldGhvZC5yZXR1cm5UeXBlKCk7
CiAgICAgICAgIGlmIChydHlwZSA9PSBRTWV0YVR5cGU6OlVua25vd25UeXBlKSB7CiAgICAgICAg
ICAgICBpZiAocmV0dXJuVHlwZU5hbWUuZW5kc1dpdGgoJyonKSkgewotICAgICAgICAgICAgICAg
IHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUoUU1ldGFUeXBlOjpWb2lk
U3RhciwgcmV0dXJuVHlwZU5hbWUpKTsKKyAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRN
ZXRob2RNYXRjaFR5cGU6Om1ldGFUeXBlKFFNZXRhVHlwZTo6Vm9pZFN0YXIpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50IGVudW1JbmRleCA9IGluZGV4T2ZNZXRh
RW51bShtZXRhLCByZXR1cm5UeXBlTmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKGVudW1JbmRl
eCAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hU
eXBlOjptZXRhRW51bShlbnVtSW5kZXgsIHJldHVyblR5cGVOYW1lKSk7CisgICAgICAgICAgICAg
ICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YUVudW0oZW51bUluZGV4
KSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHVucmVzb2x2
ZWRUeXBlcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhv
ZE1hdGNoVHlwZTo6dW5yZXNvbHZlZChyZXR1cm5UeXBlTmFtZSkpOworICAgICAgICAgICAgICAg
ICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnVucmVzb2x2ZWQoLTEpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAocnR5cGUgPT0gUU1ldGFUeXBlOjpRVmFyaWFudCkKICAgICAgICAgICAgICAgICB0
eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnZhcmlhbnQoKSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRh
VHlwZShydHlwZSwgcmV0dXJuVHlwZU5hbWUpKTsKKyAgICAgICAgICAgICAgICB0eXBlcy5hcHBl
bmQoUXRNZXRob2RNYXRjaFR5cGU6Om1ldGFUeXBlKHJ0eXBlKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyByZXNvbHZlIGFyZ3VtZW50IHR5cGVzCi0gICAgICAgIFFMaXN0PFFCeXRlQXJyYXk+
IHBhcmFtZXRlclR5cGVOYW1lcyA9IG1ldGhvZC5wYXJhbWV0ZXJUeXBlcygpOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlclR5cGVOYW1lcy5jb3VudCgpOyArK2kpIHsKLSAg
ICAgICAgICAgIFFCeXRlQXJyYXkgYXJnVHlwZU5hbWUgPSBwYXJhbWV0ZXJUeXBlTmFtZXMuYXQo
aSk7CisgICAgICAgIFFMaXN0PFFCeXRlQXJyYXk+IHBhcmFtZXRlclR5cGVOYW1lczsKKyAgICAg
ICAgY29uc3QgaW50IHBhcmFtZXRlckNvdW50ID0gbWV0aG9kLnBhcmFtZXRlckNvdW50KCk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyQ291bnQ7ICsraSkgewogICAgICAg
ICAgICAgaW50IGF0eXBlID0gbWV0aG9kLnBhcmFtZXRlclR5cGUoaSk7CiAgICAgICAgICAgICBp
ZiAoYXR5cGUgPT0gUU1ldGFUeXBlOjpVbmtub3duVHlwZSkgewotICAgICAgICAgICAgICAgIGlu
dCBlbnVtSW5kZXggPSBpbmRleE9mTWV0YUVudW0obWV0YSwgYXJnVHlwZU5hbWUpOworICAgICAg
ICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlTmFtZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJUeXBlTmFtZXMgPSBtZXRob2QucGFyYW1ldGVyVHlwZXMoKTsKKyAg
ICAgICAgICAgICAgICBpbnQgZW51bUluZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIHBhcmFt
ZXRlclR5cGVOYW1lcy5hdChpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGVudW1JbmRleCAhPSAt
MSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjpt
ZXRhRW51bShlbnVtSW5kZXgsIGFyZ1R5cGVOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIHR5
cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YUVudW0oZW51bUluZGV4KSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRUeXBlcyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlw
ZTo6dW5yZXNvbHZlZChhcmdUeXBlTmFtZSkpOworICAgICAgICAgICAgICAgICAgICB0eXBlcy5h
cHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnVucmVzb2x2ZWQoaSkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGF0eXBlID09IFFN
ZXRhVHlwZTo6UVZhcmlhbnQpCiAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1l
dGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUoYXR5
cGUsIGFyZ1R5cGVOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1l
dGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUoYXR5cGUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCkBAIC0xMTE5LDkgKzExMjEsMTAgQEAgaW50IFF0UnVudGltZU1ldGhvZDo6ZmluZE1ldGhv
ZEluZGV4KEpTQ29udGV4dFJlZiBjb250ZXh0LCBpbnQgYXJndW1lbnRDb3VudCwgY28KICAgICAg
ICAgICAgIGludCB1bnJlc29sdmVkSW5kZXggPSBhcmdzSW5zdGFuY2UuZmlyc3RVbnJlc29sdmVk
SW5kZXgoKTsKICAgICAgICAgICAgIFFfQVNTRVJUKHVucmVzb2x2ZWRJbmRleCAhPSAtMSk7CiAg
ICAgICAgICAgICBRdE1ldGhvZE1hdGNoVHlwZSB1bnJlc29sdmVkVHlwZSA9IGFyZ3NJbnN0YW5j
ZS50eXBlcy5hdCh1bnJlc29sdmVkSW5kZXgpOworICAgICAgICAgICAgUUJ5dGVBcnJheSB1bnJl
c29sdmVkVHlwZU5hbWUgPSB1bnJlc29sdmVkVHlwZS51bnJlc29sdmVkVHlwZU5hbWUobWV0YS0+
bWV0aG9kKGFyZ3NJbnN0YW5jZS5pbmRleCkpOwogICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdl
ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiY2Fubm90IGNhbGwgJTAoKTogdW5rbm93biB0eXBlIGAl
MSciKQogICAgICAgICAgICAgICAgIC5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtX2lkZW50aWZp
ZXIpKQotICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyh1bnJlc29sdmVkVHlwZS5u
YW1lKCkpKTsKKyAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcodW5yZXNvbHZlZFR5
cGVOYW1lKSk7CiAgICAgICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBt
ZXNzYWdlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9
IFFTdHJpbmc6OmZyb21MYXRpbjEoInRvbyBmZXcgYXJndW1lbnRzIGluIGNhbGwgdG8gJTAoKTsg
Y2FuZGlkYXRlcyBhcmVcbiIpCi0tIAoxLjcuMTAuNAoKCkZyb20gNDMwMmVlMmE1YzRkZjlmMGUw
NGQ1MjY4ZmMxZDYxZWY0YjBkYjFkNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogU2lt
b24gSGF1c21hbm4gPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KRGF0ZTogVGh1LCAzMSBKYW4g
MjAxMyAwODoyODowNiArMDEwMApTdWJqZWN0OiBbUEFUQ0ggMDMvMTBdIEF2b2lkIGR1cGxpY2F0
ZWQgSlNWYWx1ZUlzRm9vIGNhbGxzIGFuZCBhdm9pZAogcmVjdXJzaW5nIHdoZW4gYSBRVmFyaWFu
dCBpcyByZXF1ZXN0ZWQKCi0tLQogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUu
Y3BwIHwgIDEyMCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgNTggaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3J1bnRpbWUuY3BwCmluZGV4IDNlMDljNmEuLmZjM2IxMjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVmIGVu
dW0gewogICAgIFFPYmosCiAgICAgT2JqZWN0LAogICAgIE51bGwsCisgICAgVW5kZWZpbmVkLAog
ICAgIFJUVWludDhBcnJheQogfSBKU1JlYWxUeXBlOwogCkBAIC0xNjUsNTEgKzE2NiwxMSBAQCBz
dGF0aWMgYm9vbCBpc1F0T2JqZWN0KEpTT2JqZWN0UmVmIG9iamVjdCkKICAgICByZXR1cm4gdG9K
UyhvYmplY3QpLT5pbmhlcml0cygmUnVudGltZU9iamVjdDo6c19pbmZvKTsKIH0KIAotc3RhdGlj
IEpTUmVhbFR5cGUgdmFsdWVSZWFsVHlwZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChKU1ZhbHVlSXNOdW1i
ZXIoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gTnVtYmVyOwotICAgIGlmIChKU1Zh
bHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4gUlRTdHJpbmc7Ci0g
ICAgaWYgKEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpKQotICAgICAgICByZXR1cm4g
Qm9vbGVhbjsKLSAgICBpZiAoSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAg
IHJldHVybiBOdWxsOwotICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIFJUU3RyaW5nOyAvLyBJIGRvbid0IGtub3cuCi0KLSAgICBKU09iamVj
dFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7
Ci0KLSAgICBpZiAoaXNKU1VpbnQ4QXJyYXkob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIFJUVWlu
dDhBcnJheTsKLSAgICBpZiAoaXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
QXJyYXk7Ci0gICAgaWYgKGlzSlNEYXRlKG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gRGF0
ZTsKLSAgICBpZiAoaXNRdE9iamVjdChvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIFFPYmo7
Ci0KLSAgICByZXR1cm4gT2JqZWN0OwotfQotCiBzdGF0aWMgUVN0cmluZyB0b1N0cmluZyhKU1N0
cmluZ1JlZiBzdHJpbmdSZWYpCiB7CiAgICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmdSZWYpKSwgSlNT
dHJpbmdHZXRMZW5ndGgoc3RyaW5nUmVmKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHVud3Jh
cEJveGVkUHJpbWl0aXZlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBK
U09iamVjdFJlZiBvYmopCi17Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqKTsKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwotICAgIGlmIChvYmplY3QtPmluaGVy
aXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0b1JlZihleGVjLCBq
c051bWJlcihvYmplY3QtPnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgaWYgKG9iamVjdC0+aW5oZXJp
dHMoJlN0cmluZ09iamVjdDo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIG9i
amVjdC0+dG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZCb29sZWFu
T2JqZWN0OjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdG9SZWYoZXhlYywgb2JqZWN0LT50b1By
aW1pdGl2ZShleGVjKSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCiBRVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgUU1ldGFUeXBlOjpUeXBl
LCBpbnQqLCBIYXNoU2V0PEpTT2JqZWN0UmVmPiosIGludCwgSlNWYWx1ZVJlZiAqZXhjZXB0aW9u
KTsKIAogc3RhdGljIFFWYXJpYW50TWFwIGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnRNYXAoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSGFzaFNldDxKU09iamVjdFJlZj4q
IHZpc2l0ZWRPYmplY3RzLCBpbnQgcmVjdXJzaW9uTGltaXQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKQEAgLTMwOSw2ICsyNzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogICAgIGlmICgh
dmFsdWUgfHwgIXJlY3Vyc2lvbkxpbWl0KQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAor
ICAgIEpTUmVhbFR5cGUgdHlwZTsKICAgICBKU09iamVjdFJlZiBvYmplY3QgPSAwOwogICAgIGlm
IChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7CiAgICAgICAgIG9iamVjdCA9IEpT
VmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCk7CkBAIC0zMTcsMjQgKzI3OSw3MyBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogCiAgICAgICAgIHZpc2l0ZWRPYmplY3RzLT5hZGQob2Jq
ZWN0KTsKIAotICAgICAgICB2YWx1ZSA9IHVud3JhcEJveGVkUHJpbWl0aXZlKGNvbnRleHQsIHZh
bHVlLCBvYmplY3QpOwotICAgIH0KKyAgICAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhv
YmplY3QpOworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgICAg
ICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykpIHsKKyAgICAg
ICAgICAgIHZhbHVlID0gdG9SZWYoZXhlYywganNOdW1iZXIoanNPYmplY3QtPnRvTnVtYmVyKGV4
ZWMpKSk7CisgICAgICAgICAgICB0eXBlID0gTnVtYmVyOworICAgICAgICB9IGVsc2UgaWYgKGpz
T2JqZWN0LT5pbmhlcml0cygmU3RyaW5nT2JqZWN0OjpzX2luZm8pKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IHRvUmVmKGV4ZWMsIGpzT2JqZWN0LT50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAg
ICB0eXBlID0gUlRTdHJpbmc7CisgICAgICAgIH0gZWxzZSAgaWYgKGpzT2JqZWN0LT5pbmhlcml0
cygmQm9vbGVhbk9iamVjdDo6c19pbmZvKSkgeworICAgICAgICAgICAgdmFsdWUgPSB0b1JlZihl
eGVjLCBqc09iamVjdC0+dG9QcmltaXRpdmUoZXhlYykpOworICAgICAgICAgICAgdHlwZSA9IEJv
b2xlYW47CisgICAgICAgIH0gZWxzZSBpZiAoaXNKU1VpbnQ4QXJyYXkob2JqZWN0KSkKKyAgICAg
ICAgICAgIHR5cGUgPSBSVFVpbnQ4QXJyYXk7CisgICAgICAgIGVsc2UgaWYgKGlzSlNBcnJheShv
YmplY3QpKQorICAgICAgICAgICAgdHlwZSA9IEFycmF5OworICAgICAgICBlbHNlIGlmIChpc0pT
RGF0ZShvYmplY3QpKQorICAgICAgICAgICAgdHlwZSA9IERhdGU7CisgICAgICAgIGVsc2UgaWYg
KGlzUXRPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgICAgIHR5cGUgPSBRT2JqOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0eXBlID0gT2JqZWN0OworICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlz
TnVtYmVyKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgdHlwZSA9IE51bWJlcjsKKyAgICBlbHNl
IGlmIChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQorICAgICAgICB0eXBlID0gUlRT
dHJpbmc7CisgICAgZWxzZSBpZiAoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCisg
ICAgICAgIHR5cGUgPSBCb29sZWFuOworICAgIGVsc2UgaWYgKEpTVmFsdWVJc051bGwoY29udGV4
dCwgdmFsdWUpKQorICAgICAgICB0eXBlID0gTnVsbDsKKyAgICBlbHNlIGlmIChKU1ZhbHVlSXNV
bmRlZmluZWQoY29udGV4dCwgdmFsdWUpKQorICAgICAgICB0eXBlID0gVW5kZWZpbmVkOworICAg
IGVsc2UKKyAgICAgICAgdHlwZSA9IFJUU3RyaW5nOyAvLyBJIGRvbid0IGtub3cuCiAKICAgICAv
LyBjaGVjayBtYWdpYyBwb2ludGVyIHZhbHVlcyBiZWZvcmUgZGVyZWZlcmVuY2luZyB2YWx1ZQot
ICAgIGlmIChKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgdmFsdWUpCisgICAgaWYgKHR5cGUgPT0g
TnVtYmVyCiAgICAgICAgICYmIGlzbmFuKEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwg
ZXhjZXB0aW9uKSkpIHsKICAgICAgICAgaWYgKGRpc3RhbmNlKQogICAgICAgICAgICAgKmRpc3Rh
bmNlID0gLTE7CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIGlmIChK
U1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpR
U3RyaW5nICYmIGhpbnQgIT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+
KCkpIHsKKyAgICBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRVmFy
aWFudD4oKSkgeworICAgICAgICBpZiAodHlwZSA9PSBOdWxsIHx8IHR5cGUgPT0gVW5kZWZpbmVk
KSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCisgICAgICAgICAgICAgICAgKmRpc3RhbmNl
ID0gMTsKKyAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOworICAgICAgICB9CisgICAgICAg
IGlmICh0eXBlID09IE9iamVjdCkgeworICAgICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZW4ndCBy
ZWFsbHkgdmlzaXRlZCB0aGlzIG9iamVjdCB5ZXQsIHdlIHJlbW92ZSBpdAorICAgICAgICAgICAg
dmlzaXRlZE9iamVjdHMtPnJlbW92ZShvYmplY3QpOworICAgICAgICB9CisKKyAgICAgICAgaGlu
dCA9IFFNZXRhVHlwZTo6Vm9pZDsKKyAgICAgICAgaWYgKGRpc3RhbmNlKSB7CisgICAgICAgICAg
ICAqZGlzdGFuY2UgPSAxMDsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gMDsKKyAgICAgICAgfQor
ICAgIH0KKworCisgICAgaWYgKHR5cGUgPT0gVW5kZWZpbmVkICYmIGhpbnQgIT0gUU1ldGFUeXBl
OjpRU3RyaW5nICYmIGhpbnQgIT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlh
bnQ+KCkpIHsKICAgICAgICAgaWYgKGRpc3RhbmNlKQogICAgICAgICAgICAgKmRpc3RhbmNlID0g
LTE7CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTUmVhbFR5cGUg
dHlwZSA9IHZhbHVlUmVhbFR5cGUoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CiAgICAgaWYg
KGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CiAgICAg
ICAgICAgICBjYXNlIE51bWJlcjoKQEAgLTM2Nyw3ICszNzgsNyBAQCBRVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBR
TWV0YVR5cAogCiAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0VmFsdWVUb1FWYXJpYW50OiBq
c3R5cGUgaXMgIiA8PCB0eXBlIDw8ICIsIGhpbnQgaXMiIDw8IGhpbnQ7CiAKLSAgICBpZiAoSlNW
YWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkKKyAgICBpZiAodHlwZSA9PSBOdWxsCiAgICAgICAg
ICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhcgogICAgICAgICAmJiBoaW50ICE9IFFN
ZXRhVHlwZTo6Vm9pZFN0YXIKICAgICAgICAgJiYgaGludCAhPSBRTWV0YVR5cGU6OlFTdHJpbmcK
QEAgLTQ1NSw3ICs0NjYsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFTdHJpbmc6IHsKLSAgICAgICAgICAg
IGlmIChKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKSB8fCBKU1ZhbHVlSXNVbmRlZmluZWQo
Y29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBOdWxsIHx8IHR5cGUg
PT0gVW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQogICAgICAgICAg
ICAgICAgICAgICAqZGlzdGFuY2UgPSAxOwogICAgICAgICAgICAgICAgIHJldHVybiBRU3RyaW5n
KCk7CkBAIC02MjksMjEgKzY0MCw2IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIFFNZXRhVHlwCiAgICAgICAg
ICAgICAgICAgcmV0ID0gY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPnZhbHVlKGhpbnQpLnRv
VmFyaWFudEZ1bmModG9KUyhvYmplY3QpLCAmZGlzdCwgdmlzaXRlZE9iamVjdHMpOwogICAgICAg
ICAgICAgICAgIGlmIChkaXN0ID09IDApCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlk
PFFWYXJpYW50PigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWVJc051bGwoY29udGV4
dCwgdmFsdWUpIHx8IEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0LCB2YWx1ZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgKmRp
c3RhbmNlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMg
b2JqZWN0IHlldCwgd2UgcmVtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRPYmpl
Y3RzLT5yZW1vdmUob2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAvLyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9kZXRlY3QgZmxhZwotICAgICAgICAg
ICAgICAgIHJldCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoY29udGV4dCwgdmFsdWUsIFFNZXRh
VHlwZTo6Vm9pZCwgZGlzdGFuY2UsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCwgZXhj
ZXB0aW9uKTsKLSAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRpc3QgPSAxMDsKLS0gCjEuNy4xMC40
CgoKRnJvbSAxMGMzMmE2YzU1OGQ5ZWE3NDcyZDFiM2M3YWY5OTA0ZjkyYWE1MDNmIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTaW1vbiBIYXVzbWFubiA8c2ltb24uaGF1c21hbm5AZGln
aWEuY29tPgpEYXRlOiBUaHUsIDMxIEphbiAyMDEzIDA5OjQzOjMxICswMTAwClN1YmplY3Q6IFtQ
QVRDSCAwNC8xMF0gQXZvaWQgdGhyZWUgZGVlcCBjb3BpZXMgd2hlbiBnb2luZyBmcm9tIFdURlN0
cmluZyAtPgogSlNTdHJpbmdSZWYgLT4gUVN0cmluZwoKSW5zdGVhZCBkbyBvbmx5IG9uZSBjb3B5
LCBmcm9tIFdURlN0cmluZyB0byBXVEZTdHJpbmcgdGhhdCBKU1N0cmluZ1JlZgpob2xkcyBpbiBh
IGZvcm1hdCB0aGF0IGhhcyBhIFFTdHJpbmdEYXRhIGFuZCB0aHVzIGFsbG93cyBmb3IgYSBmcmVl
CmNvbnZlcnNpb24gdG8gYSBRU3RyaW5nLgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTdHJpbmdSZWZRdC5jcHAgfCAgIDQwICsrKysrKysrKysrKysrKysrKysrKysrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5oICAgfCAgIDQzICsrKysrKysrKysr
KysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmlu
Zy5oICB8ICAgMTEgKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkgICAg
ICAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
ICAgICB8ICAgMTQgKysrKy0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCsp
LCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTdHJpbmdSZWZRdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmUXQuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU3RyaW5nUmVmUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFj
OTkwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3Ry
aW5nUmVmUXQuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nUmVmUXQuaCIKKwor
I2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisj
aW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgorCitRU3RyaW5nIEpTU3RyaW5nQ29weVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQorewor
ICAgIHJldHVybiBzdHJpbmctPnFTdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZRdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1N0cmluZ1JlZlF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIz
ZWY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJp
bmdSZWZRdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU1N0cmluZ1JlZlF0X2gKKyNkZWZpbmUgSlNTdHJpbmdSZWZRdF9oCisKKyNp
bmNsdWRlICJKU0Jhc2UuaCIKKyNpbmNsdWRlIDxRU3RyaW5nPgorCisvKiBRU3RyaW5nIGNvbnZl
bmllbmNlIG1ldGhvZHMgKi8KKworLyohCitAZnVuY3Rpb24KK0BhYnN0cmFjdCAgICAgICAgIENy
ZWF0ZXMgYSBRU3RyaW5nIGZyb20gYSBKYXZhU2NyaXB0IHN0cmluZy4KK0BwYXJhbSBzdHJpbmcg
ICAgIFRoZSBKU1N0cmluZyB0byBjb3B5IGludG8gdGhlIG5ldyBRU3RyaW5nLgorQHJlc3VsdCAg
ICAgICAgICAgQSBRU3RyaW5nIGNvbnRhaW5pbmcgc3RyaW5nLgorKi8KK0pTX0VYUE9SVCBRU3Ry
aW5nIEpTU3RyaW5nQ29weVFTdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKTsKKworI2VuZGlmIC8q
IEpTU3RyaW5nUmVmUXRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PcGFxdWVKU1N0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0
cmluZy5oCmluZGV4IDA0NjRlODguLjI5ZWZhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL09wYXF1ZUpTU3RyaW5nLmgKQEAgLTU4LDYgKzU4LDEwIEBAIHN0cnVjdCBPcGFxdWVKU1N0
cmluZyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxPcGFxdWVKU1N0cmluZz4gewogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHN0cmluZygpIGNvbnN0OwogICAgIEpTQzo6SWRl
bnRpZmllciBpZGVudGlmaWVyKEpTQzo6SlNHbG9iYWxEYXRhKikgY29uc3Q7CisjaWYgUExBVEZP
Uk0oUVQpCisgICAgLy8gVGhpcyBpcyBjaGVhcCBpZiBtX3N0cmluZyB3YXMgY3JlYXRlZCBmcm9t
IGEgUVN0cmluZy4KKyAgICBRU3RyaW5nIHFTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
ZzsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6VGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8T3BhcXVlSlNTdHJpbmc+OwpAQCAtNjgsMTEgKzcyLDE4IEBAIHByaXZhdGU6
CiAKICAgICBPcGFxdWVKU1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7CisjaWYg
UExBVEZPUk0oUVQpCisgICAgICAgIC8vIElmIHdlJ3JlIGdvaW5nIHRvIG1ha2UgYSBkZWVwIGNv
cHkgZm9yIHVzZSBpbiB0aGUgQVBJIGxheWVyLAorICAgICAgICAvLyB0aGVuIHdlIG1pZ2h0IGFz
IHdlbGwgc3RvcmUgaXQgaW4gYSBmb3JtYXQgcGFydGljdWxhcmx5CisgICAgICAgIC8vIHN1aXRh
YmxlIGZvciAiZXhwb3J0IiBsYXRlci4KKyAgICAgICAgbV9zdHJpbmcgPSBRU3RyaW5nKHN0cmlu
Zyk7CisjZWxzZQogICAgICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgc291cmNlIHN0cmluZy4K
ICAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKICAgICAgICAgICAgIG1fc3RyaW5nID0gU3Ry
aW5nKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBtX3N0cmluZyA9IFN0cmluZyhzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0
cmluZy5sZW5ndGgoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICBPcGFxdWVKU1N0cmluZyhjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQppbmRleCBmZjgzNTczLi4zODI0YzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpA
QCAtNDIsNiArNDIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBBUEkvSlNPYmplY3RSZWYuY3BwIFwK
ICAgICBBUEkvSlNTY3JpcHRSZWYuY3BwIFwKICAgICBBUEkvSlNTdHJpbmdSZWYuY3BwIFwKKyAg
ICBBUEkvSlNTdHJpbmdSZWZRdC5jcHAgXAogICAgIEFQSS9KU1ZhbHVlUmVmLmNwcCBcCiAgICAg
QVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIFwKICAgICBBUEkvT3BhcXVlSlNTdHJp
bmcuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAppbmRleCBmYzNi
MTI0Li4zMDJiMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVu
dGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKICNpbmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgIkpTU3RyaW5nUmVmUXQuaCIK
ICNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKQEAgLTE2NiwxMiArMTY3LDgg
QEAgc3RhdGljIGJvb2wgaXNRdE9iamVjdChKU09iamVjdFJlZiBvYmplY3QpCiAgICAgcmV0dXJu
IHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbyk7CiB9CiAKLXN0
YXRpYyBRU3RyaW5nIHRvU3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZ1JlZikKLXsKLSAgICByZXR1
cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oSlNTdHJpbmdHZXRDaGFy
YWN0ZXJzUHRyKHN0cmluZ1JlZikpLCBKU1N0cmluZ0dldExlbmd0aChzdHJpbmdSZWYpKTsKLX0K
LQogUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChKU0NvbnRleHRSZWYsIEpTVmFsdWVS
ZWYsIFFNZXRhVHlwZTo6VHlwZSwgaW50KiwgSGFzaFNldDxKU09iamVjdFJlZj4qLCBpbnQsIEpT
VmFsdWVSZWYgKmV4Y2VwdGlvbik7CitzdGF0aWMgUVN0cmluZyB0b1FTdHJpbmcoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpOwogCiBzdGF0aWMgUVZhcmlhbnRNYXAgY29u
dmVydFZhbHVlVG9RVmFyaWFudE1hcChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
b2JqZWN0LCBIYXNoU2V0PEpTT2JqZWN0UmVmPiogdmlzaXRlZE9iamVjdHMsIGludCByZWN1cnNp
b25MaW1pdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewpAQCAtMTg4LDcgKzE4NSw3IEBAIHN0
YXRpYyBRVmFyaWFudE1hcCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50TWFwKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBvCiAgICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlv
bikKICAgICAgICAgICAgICpleGNlcHRpb24gPSAwOwogICAgICAgICBlbHNlIGlmIChwcm9wZXJ0
eUNvbnZlcnNpb25EaXN0YW5jZSA+PSAwKSB7Ci0gICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHRv
U3RyaW5nKG5hbWUpLCB2KTsKKyAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQoSlNTdHJpbmdDb3B5
UVN0cmluZyhuYW1lKSwgdik7CiAgICAgICAgIH0KICAgICB9CiAgICAgSlNQcm9wZXJ0eU5hbWVB
cnJheVJlbGVhc2UocHJvcGVydGllcyk7CkBAIC0yMzYsNyArMjMzLDcgQEAgc3RhdGljIFFTdHJp
bmcgdG9RU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmcoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0Nv
cHkoY29udGV4dCwgdmFsdWUsIDApKTsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJu
IFFTdHJpbmcoKTsKLSAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFD
aGFyKj4oSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0cmluZy5nZXQoKSkpLCBKU1N0cmluZ0dl
dExlbmd0aChzdHJpbmcuZ2V0KCkpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDb3B5UVN0cmluZyhz
dHJpbmcuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRHcmVnb3JpYW5EYXRlVGltZVVUQyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNSZWFsVHlwZSB0eXBlLCBKU1ZhbHVlUmVmIHZhbHVlLCBK
U09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgR3JlZ29yaWFuRGF0ZVRp
bWUqIGdkdCkKQEAgLTQ3Myw4ICs0NzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cihBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKSk7CiAgICAg
ICAgICAgICBpZiAoc3RyKSB7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBzdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHIuZ2V0
KCkpKSwgSlNTdHJpbmdHZXRMZW5ndGgoc3RyLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgcmV0
ID0gUVZhcmlhbnQoc3RyaW5nKTsKKyAgICAgICAgICAgICAgICByZXQgPSBKU1N0cmluZ0NvcHlR
U3RyaW5nKHN0ci5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRTdHJpbmcp
CiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwogICAgICAgICAgICAgICAgIGVsc2UKLS0g
CjEuNy4xMC40CgoKRnJvbSBiNDA0NDlhYTgzODAyMjYyZjkxNzFlOTc3NTM5M2U0OTE1NzUwOWFi
IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTaW1vbiBIYXVzbWFubiA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgpEYXRlOiBUaHUsIDMxIEphbiAyMDEzIDEwOjA0OjI4ICswMTAwClN1
YmplY3Q6IFtQQVRDSCAwNS8xMF0gUmVkdWNlIHRoZSBudW1iZXIgb2YgSlNDIEMgQVBJIGVudHJp
ZXMKCi0tLQogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIHwgICAzMSAr
KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0
aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwCmluZGV4IDMwMmIzOGQuLjE2NmFhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5jcHAKQEAgLTk1LDggKzk1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHR5cGVk
ZWYgZW51bSB7Ci0gICAgVmFyaWFudCA9IDAsCi0gICAgTnVtYmVyLAorICAgIE51bWJlciA9IDAs
CiAgICAgQm9vbGVhbiwKICAgICBSVFN0cmluZywKICAgICBEYXRlLApAQCAtMjY3LDkgKzI2Niwx
OCBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogICAgIGlmICghdmFsdWUgfHwgIXJlY3Vyc2lv
bkxpbWl0KQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAotICAgIEpTUmVhbFR5cGUgdHlw
ZTsKKyAgICBzdGF0aWMgSlNSZWFsVHlwZSB0eXBlTWFwWzZdID0geworICAgICAgICBVbmRlZmlu
ZWQsIC8vIGtKU1R5cGVVbmRlZmluZWQKKyAgICAgICAgTnVsbCwgICAgICAvLyBrSlNUeXBlTnVs
bAorICAgICAgICBCb29sZWFuLCAgIC8vIGtKU1R5cGVCb29sZWFuCisgICAgICAgIE51bWJlciwg
ICAgLy8ga0pTVHlwZU51bWJlcgorICAgICAgICBSVFN0cmluZywgIC8vIGtKU1R5cGVTdHJpbmcK
KyAgICAgICAgT2JqZWN0LCAgICAvLyBrSlNUeXBlT2JqZWN0CisgICAgfTsKKyAgICBKU1JlYWxU
eXBlIHR5cGUgPSB0eXBlTWFwW0pTVmFsdWVHZXRUeXBlKGNvbnRleHQsIHZhbHVlKV07CiAgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gMDsKLSAgICBpZiAoSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQs
IHZhbHVlKSkgeworCisgICAgaWYgKHR5cGUgPT0gT2JqZWN0KSB7CiAgICAgICAgIG9iamVjdCA9
IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgMCk7CiAgICAgICAgIGlmICh2aXNpdGVk
T2JqZWN0cy0+Y29udGFpbnMob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgp
OwpAQCAtMjk1LDIwICszMDMsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogICAgICAgICAg
ICAgdHlwZSA9IERhdGU7CiAgICAgICAgIGVsc2UgaWYgKGlzUXRPYmplY3Qob2JqZWN0KSkKICAg
ICAgICAgICAgIHR5cGUgPSBRT2JqOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0g
T2JqZWN0OwotICAgIH0gZWxzZSBpZiAoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSkK
LSAgICAgICAgdHlwZSA9IE51bWJlcjsKLSAgICBlbHNlIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgdmFsdWUpKQotICAgICAgICB0eXBlID0gUlRTdHJpbmc7Ci0gICAgZWxzZSBpZiAoSlNW
YWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpCi0gICAgICAgIHR5cGUgPSBCb29sZWFuOwot
ICAgIGVsc2UgaWYgKEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpKQotICAgICAgICB0eXBl
ID0gTnVsbDsKLSAgICBlbHNlIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
KQotICAgICAgICB0eXBlID0gVW5kZWZpbmVkOwotICAgIGVsc2UKLSAgICAgICAgdHlwZSA9IFJU
U3RyaW5nOyAvLyBJIGRvbid0IGtub3cuCisgICAgfQogCiAgICAgLy8gY2hlY2sgbWFnaWMgcG9p
bnRlciB2YWx1ZXMgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdmFsdWUKICAgICBpZiAodHlwZSA9PSBO
dW1iZXIKLS0gCjEuNy4xMC40CgoKRnJvbSA5OGI4Mzc4NTAxNzI5ZDhmNTJmYmFkMWQxOGIxODY3
NGRjMjFhZGI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTaW1vbiBIYXVzbWFubiA8
c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgpEYXRlOiBUaHUsIDMxIEphbiAyMDEzIDEwOjMxOjA1
ICswMTAwClN1YmplY3Q6IFtQQVRDSCAwNi8xMF0gQ29tbWVudCBvdXQgcU1hdGNoRGVidWcoKSBj
YWxsIHRoYXQgaXMgYWx3YXlzCiBleGVjdXRlZC4KCkl0IGRvZXNuJ3QgZXhwYW5kIHRvIGFueSBj
b2RlIGluIHJlbGVhc2UgYnVpbGRzLCBleGNlcHQgdGhhdCBpdApkb2VzIGluY2x1ZGUgYSBjYWxs
IHRvIFFNZXRhTWV0aG9kOjptZXRob2RTaWduYXR1cmUoKSwgd2hpY2ggdGhlCmNvbXBpbGVyIGNh
bm5vdCBvcHRpbWl6ZSBhd2F5IGJlY2F1c2UgaXQgbWF5IG9yIG1heSBub3QgaGF2ZSBzaWRlCmVm
ZmVjdHMgKHRoZSBjb21waWxlciBjYW4ndCBrbm93KS4gSG93ZXZlciB0aGF0IGZ1bmN0aW9uIGNh
bGwgaXMKdmVyeSBleHBlbnNpdmUuCi0tLQogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuY3BwIHwgICAgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRl
bGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCmluZGV4IDE2
NmFhM2YuLjc4MDc5ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAK
QEAgLTEwNjEsNyArMTA2MSw3IEBAIGludCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmRNZXRob2RJbmRl
eChKU0NvbnRleHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDogIiA8PCBt
ZXRob2QubWV0aG9kU2lnbmF0dXJlKCkgPDwgKGNvbnZlcnRlZCA/ICJjb252ZXJ0ZWQiOiJmYWls
ZWQgdG8gY29udmVydCIpIDw8ICJkaXN0YW5jZSAiIDw8IG1hdGNoRGlzdGFuY2U7CisvLyAgICAg
ICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6ICIgPDwgbWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgp
IDw8IChjb252ZXJ0ZWQgPyAiY29udmVydGVkIjoiZmFpbGVkIHRvIGNvbnZlcnQiKSA8PCAiZGlz
dGFuY2UgIiA8PCBtYXRjaERpc3RhbmNlOwogCiAgICAgICAgIGlmIChjb252ZXJ0ZWQpIHsKICAg
ICAgICAgICAgIGlmICgoYXJndW1lbnRDb3VudCArIDEgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHR5cGVzLmNvdW50KCkpKQotLSAKMS43LjEwLjQKCgpGcm9tIGZhMjU1NGU1MjJiYWM5OTMxZWE5
NWJlZWM4NDgyMDIzNDczMTE5MjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IFNpbW9u
IEhhdXNtYW5uIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CkRhdGU6IFRodSwgMzEgSmFuIDIw
MTMgMTE6MTg6NTEgKzAxMDAKU3ViamVjdDogW1BBVENIIDA3LzEwXSBTcGVlZCB1cCBmaW5kTWV0
aG9kSW5kZXgKCkF2b2lkIHVubmVjZXNzYXJ5IGRldGFjaGVzIGFuZCByZWFsbG9jcyBvZiB0aGUg
cGFyYW1ldGVyIHR5cGUgYXJyYXlzCi0tLQogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuY3BwIHwgICAgNSArKystLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg
MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
cnVudGltZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKaW5k
ZXggNzgwNzllMy4uYTgwYjU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X3J1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1l
LmNwcApAQCAtOTAwLDcgKzkwMCw3IEBAIHN0cnVjdCBRdE1ldGhvZE1hdGNoRGF0YQogICAgIFFW
ZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IHR5cGVzOwogICAgIFFWYXJMZW5ndGhBcnJheTxRVmFy
aWFudCwgMTA+IGFyZ3M7CiAKLSAgICBRdE1ldGhvZE1hdGNoRGF0YShpbnQgZGlzdCwgaW50IGlk
eCwgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gdHlwcywKKyAgICBRdE1ldGhvZE1hdGNoRGF0
YShpbnQgZGlzdCwgaW50IGlkeCwgY29uc3QgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4mIHR5
cHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFWYXJMZW5ndGhBcnJh
eTxRVmFyaWFudCwgMTA+ICZhcykKICAgICAgICAgOiBtYXRjaERpc3RhbmNlKGRpc3QpLCBpbmRl
eChpZHgpLCB0eXBlcyh0eXBzKSwgYXJncyhhcykgeyB9CiAgICAgUXRNZXRob2RNYXRjaERhdGEo
KQpAQCAtOTc1LDYgKzk3NSw3IEBAIGludCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmRNZXRob2RJbmRl
eChKU0NvbnRleHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgICAgIFFN
ZXRhTWV0aG9kIG1ldGhvZCA9IG1ldGEtPm1ldGhvZChpbmRleCk7CiAKICAgICAgICAgUVZlY3Rv
cjxRdE1ldGhvZE1hdGNoVHlwZT4gdHlwZXM7CisgICAgICAgIHR5cGVzLnJlc2VydmUobWV0aG9k
LnBhcmFtZXRlckNvdW50KCkgKyAxKTsKICAgICAgICAgYm9vbCB1bnJlc29sdmVkVHlwZXMgPSBm
YWxzZTsKIAogICAgICAgICAvLyByZXNvbHZlIHJldHVybiB0eXBlCkBAIC0xMTU4LDcgKzExNTks
NyBAQCBpbnQgUXRSdW50aW1lTWV0aG9kOjpmaW5kTWV0aG9kSW5kZXgoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGludCBhcmd1bWVudENvdW50LCBjbwogICAgICAgICB2YXJzLnJlc2l6ZShhcmdzLmNv
dW50KCkpOwogICAgICAgICBmb3IgKGk9MDsgaSA8IGFyZ3MuY291bnQoKTsgaSsrKSB7CiAgICAg
ICAgICAgICB2YXJzW2ldID0gYXJnc1tpXTsKLSAgICAgICAgICAgIGlmIChjaG9zZW5UeXBlc1tp
XS5pc1ZhcmlhbnQoKSkKKyAgICAgICAgICAgIGlmIChjaG9zZW5UeXBlcy5hdChpKS5pc1Zhcmlh
bnQoKSkKICAgICAgICAgICAgICAgICB2dmFyc1tpXSA9ICZ2YXJzW2ldOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHZ2YXJzW2ldID0gdmFyc1tpXS5kYXRhKCk7Ci0tIAoxLjcu
MTAuNAoKCkZyb20gODFiMGExNTEyNmRmMGZhMTQyMjRmMjExODRlYjRhYTczMDllNDUxYyBNb24g
U2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogU2ltb24gSGF1c21hbm4gPHNpbW9uLmhhdXNtYW5u
QGRpZ2lhLmNvbT4KRGF0ZTogVGh1LCAzMSBKYW4gMjAxMyAxMToyNzo1NiArMDEwMApTdWJqZWN0
OiBbUEFUQ0ggMDgvMTBdIFNwZWVkIHVwIGZpbmRNZXRob2RJbmRleAoKUmVwbGFjZSB0aGUgdXNl
IG9mIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudD4gd2l0aCBRVmVjdG9yPFFWYXJpYW50PiBhcwp3
ZSBkbyBlbmQgdXAgY29weWluZyB0aGVzZSBhcnJheSBpbnN0YW5jZXMgYW5kIGNvcHlpbmcgYSBR
VmVjdG9yCmlzIGNoZWFwZXIgdGhhbiBjb3B5aW5nIGFsbCB0aGUgaW5kaXZpZHVhbCB2YXJpYW50
cyBvZiBhIFFWYXJMZW5ndGhBcnJheSwKcHJvdmlkZWQgdGhhdCBhZnRlciBzZXR0aW5nIHVwIHRo
ZSBhcnJheSB3ZSBzdGljayB0byByZWFkLW9ubHkgYWNjZXNzLgotLS0KIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCB8ICAgMTUgKysrKysrKystLS0tLS0tCiAxIGZpbGUg
Y2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9ydW50aW1lLmNwcAppbmRleCBhODBiNTVjLi5jM2U3NjUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCkBAIC04OTgsMTAgKzg5OCwxMCBAQCBzdHJ1
Y3QgUXRNZXRob2RNYXRjaERhdGEKICAgICBpbnQgbWF0Y2hEaXN0YW5jZTsKICAgICBpbnQgaW5k
ZXg7CiAgICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gdHlwZXM7Ci0gICAgUVZhckxlbmd0
aEFycmF5PFFWYXJpYW50LCAxMD4gYXJnczsKKyAgICBRVmVjdG9yPFFWYXJpYW50PiBhcmdzOwog
CiAgICAgUXRNZXRob2RNYXRjaERhdGEoaW50IGRpc3QsIGludCBpZHgsIGNvbnN0IFFWZWN0b3I8
UXRNZXRob2RNYXRjaFR5cGU+JiB0eXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiAmYXMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFWZWN0b3I8UVZhcmlhbnQ+ICZhcykKICAgICAgICAg
OiBtYXRjaERpc3RhbmNlKGRpc3QpLCBpbmRleChpZHgpLCB0eXBlcyh0eXBzKSwgYXJncyhhcykg
eyB9CiAgICAgUXRNZXRob2RNYXRjaERhdGEoKQogICAgICAgICA6IGluZGV4KC0xKSB7IH0KQEAg
LTk2NSw3ICs5NjUsNiBAQCBpbnQgUXRSdW50aW1lTWV0aG9kOjpmaW5kTWV0aG9kSW5kZXgoSlND
b250ZXh0UmVmIGNvbnRleHQsIGludCBhcmd1bWVudENvdW50LCBjbwogICAgIGludCBjaG9zZW5J
bmRleCA9IC0xOwogICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IGNob3NlblR5cGVzOwog
Ci0gICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gYXJnczsKICAgICBRVmVjdG9yPFF0
TWV0aG9kTWF0Y2hEYXRhPiBjYW5kaWRhdGVzOwogICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaERh
dGE+IHVucmVzb2x2ZWQ7CiAgICAgUVZlY3RvcjxpbnQ+IHRvb0Zld0FyZ3M7CkBAIC0xMDM0LDEz
ICsxMDMzLDEzIEBAIGludCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmRNZXRob2RJbmRleChKU0NvbnRl
eHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgICAgICAgICBxTWF0Y2hE
ZWJ1ZygpIDw8ICJNYXRjaDp1bnJlc29sdmVkIGFyZyB0eXBlcyBmb3IiIDw8IG1ldGhvZC5tZXRo
b2RTaWduYXR1cmUoKTsKICAgICAgICAgICAgIC8vIHJlbWVtYmVyIGl0IHNvIHdlIGNhbiBnaXZl
IGFuIGVycm9yIG1lc3NhZ2UgbGF0ZXIsIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAgdW5yZXNv
bHZlZC5hcHBlbmQoUXRNZXRob2RNYXRjaERhdGEoLyptYXRjaERpc3RhbmNlPSovSU5UX01BWCwg
aW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlcywgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4oKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMsIFFWZWN0b3I8UVZh
cmlhbnQ+KCkpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm93IGNvbnZlcnQgYXJndW1lbnRzCi0gICAgICAgIGlmIChhcmdzLmNvdW50KCkgIT0gdHlw
ZXMuY291bnQoKSkKLSAgICAgICAgICAgIGFyZ3MucmVzaXplKHR5cGVzLmNvdW50KCkpOworICAg
ICAgICBRVmVjdG9yPFFWYXJpYW50PiBhcmdzOworICAgICAgICBhcmdzLnJlc2l6ZSh0eXBlcy5j
b3VudCgpKTsKIAogICAgICAgICBRdE1ldGhvZE1hdGNoVHlwZSByZXRUeXBlID0gdHlwZXNbMF07
CiAgICAgICAgIGlmIChyZXRUeXBlLnR5cGVJZCgpICE9IFFNZXRhVHlwZTo6Vm9pZCkKQEAgLTEx
MjcsNiArMTEyNiw4IEBAIGludCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmRNZXRob2RJbmRleChKU0Nv
bnRleHRSZWYgY29udGV4dCwgaW50IGFyZ3VtZW50Q291bnQsIGNvCiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBRVmVjdG9yPFFWYXJpYW50PiBhcmdzOworCiAgICAgaWYgKGNob3NlbkluZGV4ID09
IC0xICYmIGNhbmRpZGF0ZXMuY291bnQoKSA+IDApIHsKICAgICAgICAgUXRNZXRob2RNYXRjaERh
dGEgYmVzdE1hdGNoID0gY2FuZGlkYXRlcy5hdCgwKTsKICAgICAgICAgaWYgKChjYW5kaWRhdGVz
LnNpemUoKSA+IDEpCkBAIC0xMTU4LDcgKzExNTksNyBAQCBpbnQgUXRSdW50aW1lTWV0aG9kOjpm
aW5kTWV0aG9kSW5kZXgoSlNDb250ZXh0UmVmIGNvbnRleHQsIGludCBhcmd1bWVudENvdW50LCBj
bwogICAgICAgICBpbnQgaTsKICAgICAgICAgdmFycy5yZXNpemUoYXJncy5jb3VudCgpKTsKICAg
ICAgICAgZm9yIChpPTA7IGkgPCBhcmdzLmNvdW50KCk7IGkrKykgewotICAgICAgICAgICAgdmFy
c1tpXSA9IGFyZ3NbaV07CisgICAgICAgICAgICB2YXJzW2ldID0gYXJncy5hdChpKTsKICAgICAg
ICAgICAgIGlmIChjaG9zZW5UeXBlcy5hdChpKS5pc1ZhcmlhbnQoKSkKICAgICAgICAgICAgICAg
ICB2dmFyc1tpXSA9ICZ2YXJzW2ldOwogICAgICAgICAgICAgZWxzZQotLSAKMS43LjEwLjQKCgpG
cm9tIGE3NzU1ODEwYTU2MzBiNjc3NTRlMGY3Y2I2OTVhMDRjY2FlNTBjZmIgTW9uIFNlcCAxNyAw
MDowMDowMCAyMDAxCkZyb206IFNpbW9uIEhhdXNtYW5uIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5j
b20+CkRhdGU6IFRodSwgMzEgSmFuIDIwMTMgMTI6MDY6MjkgKzAxMDAKU3ViamVjdDogW1BBVENI
IDA5LzEwXSBTcGVlZCB1cCBtZXRob2QgY2FsbHMKCkF2b2lkIHRlbXBvcmFyeSBRQnl0ZUFycmF5
IGFuZCBRU3RyaW5nIGFsbG9jYXRpb24gYW5kIG9wdGltaXplCmZpZWxkTmFtZWQoKSBmb3IgdGhl
IGNvbW1vbiBjYXNlIG9mIG1ldGhvZCBsb29rdXAgd2l0aCBhbiBlYXJseQpyZXR1cm4uCi0tLQog
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCAgICB8ICAgMjEgKysrKysrKysr
KystLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwIHwg
ICAgNCArKy0tCiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaCAgIHwgICAg
MiArLQogMyBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAppbmRleCBkYTI1ZDk1Li4wYTNlOWQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKQEAgLTczLDExICs3MywxMCBA
QCBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSW5zdGFu
Y2UqIGluc3QsIFByb3BlcnR5TmFtZSBpZAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9S
ZWYoZXhlYyk7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogCi0gICAgU3RyaW5nIHVz
dHJpbmcoaWRlbnRpZmllci5wdWJsaWNOYW1lKCkpOwotICAgIGNvbnN0IFFCeXRlQXJyYXkgbmFt
ZSA9IFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHVzdHJpbmcuY2hhcmFj
dGVycygpKSwgdXN0cmluZy5sZW5ndGgoKSkudG9MYXRpbjEoKTsKKyAgICBTdHJpbmcgbmFtZShp
ZGVudGlmaWVyLnB1YmxpY05hbWUoKSk7CiAKICAgICAvLyBGaXJzdCBzZWUgaWYgd2UgaGF2ZSBh
IGNhY2hlIGhpdAotICAgIGlmIChRdFJ1bnRpbWVNZXRob2QqIG1ldGhvZCA9IHF0aW5zdC0+bV9t
ZXRob2RzLnZhbHVlKG5hbWUpKSB7CisgICAgaWYgKFF0UnVudGltZU1ldGhvZCogbWV0aG9kID0g
cXRpbnN0LT5tX21ldGhvZHMuZ2V0KG5hbWUpKSB7CiAgICAgICAgIEpTVmFsdWUgb2JqID0gdG9K
UyhtZXRob2QtPmpzT2JqZWN0UmVmKGNvbnRleHQsICZleGNlcHRpb24pKTsKICAgICAgICAgaWYg
KGV4Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIHRvSlMoZXhl
YywgZXhjZXB0aW9uKSk7CkBAIC04NSw3ICs4NCw3IEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJh
Y2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdCwgUHJvcGVydHlOYW1lIGlk
CiAgICAgfQogCiAgICAgLy8gTm9wZSwgY3JlYXRlIGFuIGVudHJ5Ci0gICAgY29uc3QgUUJ5dGVB
cnJheSBub3JtYWwgPSBRTWV0YU9iamVjdDo6bm9ybWFsaXplZFNpZ25hdHVyZShuYW1lLmNvbnN0
RGF0YSgpKTsKKyAgICBjb25zdCBRQnl0ZUFycmF5IG5vcm1hbCA9IFFNZXRhT2JqZWN0Ojpub3Jt
YWxpemVkU2lnbmF0dXJlKG5hbWUuaXM4Qml0KCkgPyByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIgKj4obmFtZS5jaGFyYWN0ZXJzOCgpKSA6IG5hbWUuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAg
Ly8gU2VlIGlmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoCiAgICAgaW50IGluZGV4ID0gLTE7CkBA
IC0xMTQsNyArMTEzLDcgQEAgSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEluc3RhbmNlKiBpbnN0LCBQcm9wZXJ0eU5hbWUgaWQKIAogICAgIGludCBmbGFn
cyA9IG1ldGFNZXRob2QubWV0aG9kVHlwZSgpID09IFFNZXRhTWV0aG9kOjpTaWduYWwgPyBRdFJ1
bnRpbWVNZXRob2Q6Ok1ldGhvZElzU2lnbmFsIDogMDsKICAgICBRdFJ1bnRpbWVNZXRob2QqIG1l
dGhvZCA9IG5ldyBRdFJ1bnRpbWVNZXRob2QoY29udGV4dCwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5j
ZSo+KGluc3QpLT5nZXRPYmplY3QoKSwgbm9ybWFsLCBpbmRleCwgZmxhZ3MsIHF0aW5zdCk7Ci0g
ICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIG1ldGhvZCk7CisgICAgcXRpbnN0LT5t
X21ldGhvZHMuc2V0KG5hbWUsIG1ldGhvZCk7CiAgICAgSlNWYWx1ZSBvYmogPSB0b0pTKG1ldGhv
ZC0+anNPYmplY3RSZWYoY29udGV4dCwgJmV4Y2VwdGlvbikpOwogICAgIGlmIChleGNlcHRpb24p
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7
CkBAIC0xMzcsNiArMTM2LDEzIEBAIEZpZWxkKiBRdENsYXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5
TmFtZSBpZGVudGlmaWVyLCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0CiAKICAgICBRT2JqZWN0
KiBvYmogPSBxdGluc3QtPmdldE9iamVjdCgpOwogICAgIFN0cmluZyB1c3RyaW5nKGlkZW50aWZp
ZXIucHVibGljTmFtZSgpKTsKKworICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggcXRzY3Jp
cHQsIGNhY2hlZCBtZXRob2RzIGRvbid0IGNhdXNlCisgICAgLy8gZXJyb3JzIHVudGlsIHRoZXkg
YXJlIGFjY2Vzc2VkLCBzbyBkb24ndCBibGluZGx5IGNyZWF0ZSBhbiBlcnJvcgorICAgIC8vIGhl
cmUuCisgICAgaWYgKHF0aW5zdC0+bV9tZXRob2RzLmNvbnRhaW5zKHVzdHJpbmcpKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIGNvbnN0IFFTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNv
bnN0IFFDaGFyKj4odXN0cmluZy5jaGFyYWN0ZXJzKCkpLCB1c3RyaW5nLmxlbmd0aCgpKTsKICAg
ICBjb25zdCBRQnl0ZUFycmF5IGFzY2lpID0gbmFtZS50b0xhdGluMSgpOwogCkBAIC0yMTAsMTEg
KzIxNiw2IEBAIEZpZWxkKiBRdENsYXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBpZGVudGlm
aWVyLCBJbnN0YW5jZSogaW5zdGFuY2UpIGNvbnN0CiAgICAgICAgIC8vIE5vdGhpbmcgbmFtZWQg
dGhpcwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgLy8gRm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBxdHNjcmlwdCwgY2FjaGVkIG1ldGhvZHMgZG9uJ3QgY2F1c2UKLSAgICAvLyBlcnJvcnMg
dW50aWwgdGhleSBhcmUgYWNjZXNzZWQsIHNvIGRvbid0IGJsaW5kbHkgY3JlYXRlIGFuIGVycm9y
Ci0gICAgLy8gaGVyZS4KLSAgICBpZiAocXRpbnN0LT5tX21ldGhvZHMuY29udGFpbnMoYXNjaWkp
KQotICAgICAgICByZXR1cm4gMDsKIAogI2lmbmRlZiBRVF9OT19QUk9QRVJUSUVTCiAgICAgLy8g
ZGVsZXRlZCBxb2JqZWN0LCBidXQgY2FuJ3QgdGhyb3cgYW4gZXJyb3IgZnJvbSBoZXJlIChubyBl
eGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggOGYxYmU2
ZS4uMzMwNjhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3Rh
bmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBA
IC05NSw3ICs5NSw3IEBAIFF0SW5zdGFuY2U6On5RdEluc3RhbmNlKCkKIAogICAgIGNhY2hlZElu
c3RhbmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIAotICAgIHFEZWxldGVBbGwobV9tZXRob2RzKTsK
KyAgICBkZWxldGVBbGxWYWx1ZXMobV9tZXRob2RzKTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsK
IAogICAgIHFEZWxldGVBbGwobV9maWVsZHMpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIENsYXNzKiBR
dEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiBSdW50aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpu
ZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKLSAgICBxRGVsZXRlQWxsKG1fbWV0aG9kcyk7CisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fbWV0aG9kcyk7CiAgICAgbV9tZXRob2RzLmNsZWFyKCk7CiAgICAgcmV0dXJuIFF0UnVudGlt
ZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCmluZGV4IDA5ZDQzYmMuLmU1
YzNhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCkBAIC0xMDgsNyAr
MTA4LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFF0Q2xhc3MqIG1fY2xhc3M7CiAgICAgUVBv
aW50ZXI8UU9iamVjdD4gbV9vYmplY3Q7CiAgICAgUU9iamVjdCogbV9oYXNoa2V5OwotICAgIG11
dGFibGUgUUhhc2g8UUJ5dGVBcnJheSwgUXRSdW50aW1lTWV0aG9kKj4gbV9tZXRob2RzOworICAg
IG11dGFibGUgSGFzaE1hcDxTdHJpbmcsIFF0UnVudGltZU1ldGhvZCo+IG1fbWV0aG9kczsKICAg
ICBtdXRhYmxlIFFIYXNoPFFTdHJpbmcsIFF0RmllbGQqPiBtX2ZpZWxkczsKICAgICBWYWx1ZU93
bmVyc2hpcCBtX293bmVyc2hpcDsKIH07Ci0tIAoxLjcuMTAuNAoKCkZyb20gZjQ3OTcwYmIxNDAx
NDE2MWJiN2UwMDA5ZjI0NzhiYWMxZTRlMjU2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJv
bTogU2ltb24gSGF1c21hbm4gPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KRGF0ZTogVGh1LCAz
MSBKYW4gMjAxMyAxMjoxOTozMiArMDEwMApTdWJqZWN0OiBbUEFUQ0ggMTAvMTBdIFJlbW92ZSB1
bm5lY2Vzc2FyeSBoYXNoIGluc2VydGlvbnMgYW5kIGxvb2t1cHMKCi0tLQogU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIHwgICAxOCArKysrKysrKy0tLS0tLS0tLS0KIDEg
ZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAppbmRleCBjM2U3NjUzLi4zNTFiM2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCkBAIC0yODIsOCArMjgyLDYgQEAg
UVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiB2YWx1ZSwgUU1ldGFUeXAKICAgICAgICAgaWYgKHZpc2l0ZWRPYmplY3RzLT5jb250
YWlucyhvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAKLSAgICAgICAg
dmlzaXRlZE9iamVjdHMtPmFkZChvYmplY3QpOwotCiAgICAgICAgIEpTT2JqZWN0KiBqc09iamVj
dCA9IHRvSlMob2JqZWN0KTsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0
KTsKICAgICAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmTnVtYmVyT2JqZWN0OjpzX2luZm8p
KSB7CkBAIC0yOTcsMTIgKzI5NSwxNiBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBRTWV0YVR5cAogICAgICAg
ICAgICAgdHlwZSA9IEJvb2xlYW47CiAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1VpbnQ4QXJyYXko
b2JqZWN0KSkKICAgICAgICAgICAgIHR5cGUgPSBSVFVpbnQ4QXJyYXk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgdHlwZSA9IEFycmF5OwogICAgICAg
ICBlbHNlIGlmIChpc0pTRGF0ZShvYmplY3QpKQogICAgICAgICAgICAgdHlwZSA9IERhdGU7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzUXRPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgICAgIHR5cGUgPSBR
T2JqOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZpc2l0ZWRPYmplY3RzLT5hZGQob2Jq
ZWN0KTsKKworICAgICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAg
ICAgIHR5cGUgPSBBcnJheTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzUXRPYmplY3Qob2JqZWN0
KSkKKyAgICAgICAgICAgICAgICB0eXBlID0gUU9iajsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IC8vIGNoZWNrIG1hZ2ljIHBvaW50ZXIgdmFsdWVzIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHZhbHVl
CkBAIC0zMTksMTAgKzMyMSw2IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIFFNZXRhVHlwCiAgICAgICAgICAg
ICAgICAgKmRpc3RhbmNlID0gMTsKICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICh0eXBlID09IE9iamVjdCkgewotICAgICAgICAgICAgLy8gU2lu
Y2Ugd2UgaGF2ZW4ndCByZWFsbHkgdmlzaXRlZCB0aGlzIG9iamVjdCB5ZXQsIHdlIHJlbW92ZSBp
dAotICAgICAgICAgICAgdmlzaXRlZE9iamVjdHMtPnJlbW92ZShvYmplY3QpOwotICAgICAgICB9
CiAKICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6Vm9pZDsKICAgICAgICAgaWYgKGRpc3RhbmNl
KSB7Ci0tIAoxLjcuMTAuNAoK
</data>

          </attachment>
      

    </bug>

</bugzilla>