<?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>55105</bug_id>
          
          <creation_ts>2011-02-23 16:53:05 -0800</creation_ts>
          <short_desc>Make weaklist processing deal with weak handles being removed during the iteration</short_desc>
          <delta_ts>2011-02-24 12:10:45 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>356555</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-23 16:53:05 -0800</bug_when>
    <thetext>Make weaklist processing deal with weak handles being removed during the iteration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356561</commentid>
    <comment_count>1</comment_count>
      <attachid>83582</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-23 16:59:22 -0800</bug_when>
    <thetext>Created attachment 83582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356602</commentid>
    <comment_count>2</comment_count>
      <attachid>83582</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-23 17:55:04 -0800</bug_when>
    <thetext>Comment on attachment 83582
Patch

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

I think it&apos;s worth making the simplifications I suggested, so I&apos;m going to say r- here -- let&apos;s talk about this on IRC or in person if you disagree.

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.cpp:36
&gt; +    , m_nextToFinalize(0)

I would call this &quot;m_nodeBeingFinalized&quot;. It&apos;s not the *next* thing that will finalize -- it&apos;s being finalized right now.

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:43
&gt; +typedef void (*Finalizer)(JSGlobalData&amp;, Handle&lt;Unknown&gt;, void*);
&gt; +
&gt; +class ComplexFinalizer {

I would call these FinalizerCallback and FinalizerObject. The class isn&apos;t necessarily more complex than the function -- the function can be as crazy as anyone makes it! -- what distinguishes them is that one is pointer to function, and the other is pointer to object (with extra data attached to it).

That said, I think you can get away with only one kind of finalizer -- see below.

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:46
&gt; +    virtual ~ComplexFinalizer() {}

This seems wrong. The HandleHeap never deletes a pointer to ComplexFinalizer, so there&apos;s no need for a virtual ~ComplexFinalizer().

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:51
&gt; +    enum WeakPointerVisitRule { NormalVisit, IgnoreLiveness };

A simpler solution is just to clearMarks() before doing teardown.

Alternatively, I would name these: ClearAll and ClearkUnmarkedOnly.

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:119
&gt; +        union {
&gt; +            Finalizer m_finalizer;
&gt; +            ComplexFinalizer* m_complexFinalizer;
&gt; +        };
&gt; +        void* m_finalizerContext;
&gt; +        uintptr_t m_prevAndHasComplexFinalizer;

I think you could do away with this two-finalizer setup and its related complexity by just requiring all finalizers to use the &quot;complex&quot; object-based API. A client that doesn&apos;t need context-specific data in its finalizer object can just use a shared, static object declared inside a function. This is thread-safe since the object has only one data member -- a compile-time-constant vtable pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356607</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-23 17:59:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 83582 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83582&amp;action=review
&gt; 
&gt; I think it&apos;s worth making the simplifications I suggested, so I&apos;m going to say r- here -- let&apos;s talk about this on IRC or in person if you disagree.
&gt; 
&gt; &gt; Source/JavaScriptCore/collector/handles/HandleHeap.cpp:36
&gt; &gt; +    , m_nextToFinalize(0)
&gt; 
&gt; I would call this &quot;m_nodeBeingFinalized&quot;. It&apos;s not the *next* thing that will finalize -- it&apos;s being finalized right now.

No it&apos;s not.  It is the next thing to be finalized.  We&apos;re currently finalising the node pointed to be current, the next node to finalize is pointed to by the local &apos;node&apos;, and m_nextToFinalize is pointing to node.

&gt; 
&gt; &gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:43
&gt; &gt; +typedef void (*Finalizer)(JSGlobalData&amp;, Handle&lt;Unknown&gt;, void*);
&gt; &gt; +
&gt; &gt; +class ComplexFinalizer {
&gt; 
&gt; I would call these FinalizerCallback and FinalizerObject. The class isn&apos;t necessarily more complex than the function -- the function can be as crazy as anyone makes it! -- what distinguishes them is that one is pointer to function, and the other is pointer to object (with extra data attached to it).
&gt; 
&gt; That said, I think you can get away with only one kind of finalizer -- see below.
&gt; 
&gt; &gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:46
&gt; &gt; +    virtual ~ComplexFinalizer() {}
&gt; 
&gt; This seems wrong. The HandleHeap never deletes a pointer to ComplexFinalizer, so there&apos;s no need for a virtual ~ComplexFinalizer().

virtual methods means you need a virtual destructor, otherwise we get a warning and so fail to build :-(

&gt; 
&gt; &gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:51
&gt; &gt; +    enum WeakPointerVisitRule { NormalVisit, IgnoreLiveness };
&gt; 
&gt; A simpler solution is just to clearMarks() before doing teardown.
&gt; 
&gt; Alternatively, I would name these: ClearAll and ClearkUnmarkedOnly.

Either works, i&apos;m not sure which i prefer.

&gt; 
&gt; &gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:119
&gt; &gt; +        union {
&gt; &gt; +            Finalizer m_finalizer;
&gt; &gt; +            ComplexFinalizer* m_complexFinalizer;
&gt; &gt; +        };
&gt; &gt; +        void* m_finalizerContext;
&gt; &gt; +        uintptr_t m_prevAndHasComplexFinalizer;
&gt; 
&gt; I think you could do away with this two-finalizer setup and its related complexity by just requiring all finalizers to use the &quot;complex&quot; object-based API. A client that doesn&apos;t need context-specific data in its finalizer object can just use a shared, static object declared inside a function. This is thread-safe since the object has only one data member -- a compile-time-constant vtable pointer.

Righto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357168</commentid>
    <comment_count>4</comment_count>
      <attachid>83679</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-24 10:59:33 -0800</bug_when>
    <thetext>Created attachment 83679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357240</commentid>
    <comment_count>5</comment_count>
      <attachid>83679</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-02-24 11:55:25 -0800</bug_when>
    <thetext>Comment on attachment 83679
Patch

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

Please put up a new patch &amp; ping me if you think these changes need a rereview, but r+ with changes above.

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.cpp:82
&gt; +        

Please to be removing the whitespace change!

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.cpp:97
&gt; +            m_nextToFinalize = &amp;node;
&gt; +            deallocate(toHandle(current));
&gt; +            node = *m_nextToFinalize;
&gt; +            m_nextToFinalize = 0;

Per our discussion, since current cannot == node, can remove the m_nextToFinalize dance &amp; replace with an ASSERT.

&gt; Source/JavaScriptCore/collector/handles/HandleHeap.h:124
&gt; +    Node** m_nextToFinalize;

Per discussion, it seems this can be a Node* rather than a Node**.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357256</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-24 12:10:45 -0800</bug_when>
    <thetext>Committed r79601: &lt;http://trac.webkit.org/changeset/79601&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83582</attachid>
            <date>2011-02-23 16:59:22 -0800</date>
            <delta_ts>2011-02-24 10:59:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55105-20110223165921.patch</filename>
            <type>text/plain</type>
            <size>15803</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk1MDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJm
YTcyODAzYzBhZTk1ZTY1OTdjN2QyMzMwZWQ1NjRmN2M5NjBlZTYuLjc1OTM0MmQzYjQ3MGEzZjQx
YzdjYTM0ZGFiYmQwNmI1MTdiMWFjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDQzIEBACiAyMDExLTAyLTIzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSB3ZWFr
bGlzdCBwcm9jZXNzaW5nIGRlYWwgd2l0aCB3ZWFrIGhhbmRsZXMgYmVpbmcgcmVtb3ZlZCBkdXJp
bmcgdGhlIGl0ZXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTUxMDUKKworICAgICAgICBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGhhbmRsZSBo
ZWFwIHRvIGVuZCB1cCBpbiBhIGJyb2tlbiBzdGF0ZSBpZgorICAgICAgICBhIGhhbmRsZSdzIGZp
bmFsaXplciByZW1vdmVzIGVpdGhlciB0aGUgY3VycmVudCBvciBuZXh0IGhhbmRsZQorICAgICAg
ICB0byBiZSB2aXNpdGVkIGR1cmluZyB0aGUgcG9zdC1nYyBjbGVhbnVwLiAgVGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQKKyAgICAgICAgcHJvYmxlbSBieSBhbGxvd2luZyB0aGUgZGVhbGxvY2F0ZShO
b2RlKikgcm91dGluZSB0byB1cGRhdGUgdGhlCisgICAgICAgIGl0ZXJhdG9yIGlmIGl0IGlzIGNh
bGxlZCBkdXJpbmcgZmluYWxpemF0aW9uLgorCisgICAgICAgICogY29sbGVjdG9yL2hhbmRsZXMv
SGFuZGxlSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OkhhbmRsZUhlYXApOgor
ICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjp1cGRhdGVBZnRlck1hcmspOgorICAgICAgICAoSlND
OjpIYW5kbGVIZWFwOjpjbGVhcldlYWtQb2ludGVycyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhl
YXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OnByb3RlY3RlZEds
b2JhbE9iamVjdENvdW50KToKKyAgICAgICAgKiBjb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFw
Lmg6CisgICAgICAgIChKU0M6OkNvbXBsZXhGaW5hbGl6ZXI6On5Db21wbGV4RmluYWxpemVyKToK
KyAgICAgICAgKEpTQzo6SGFuZGxlSGVhcDo6ZGVhbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Okhh
bmRsZUhlYXA6Om1ha2VXZWFrKToKKyAgICAgICAgKEpTQzo6SGFuZGxlSGVhcDo6bWFrZVNlbGZE
ZXN0cm95aW5nKToKKyAgICAgICAgKEpTQzo6SGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZSk6CisgICAg
ICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6OnNldEZpbmFsaXplcik6CisgICAgICAgIChKU0M6
OkhhbmRsZUhlYXA6Ok5vZGU6OmZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6
Ok5vZGU6OmNvbXBsZXhGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2Rl
OjpmaW5hbGl6ZXJDb250ZXh0KToKKyAgICAgICAgKEpTQzo6SGFuZGxlSGVhcDo6Tm9kZTo6c2V0
UHJldik6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6OnByZXYpOgorICAgICAgICAq
IGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmls
ZTo6Z2xvYmFsT2JqZWN0Q29sbGVjdGVkKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rl
ckZpbGUuaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1B0ci5oOgorICAgICAgICAoSlNDOjpX
ZWFrR0NQdHI6OldlYWtHQ1B0cik6CisgICAgICAgIChKU0M6OldlYWtHQ1B0cjo6c2V0KToKKwor
MjAxMS0wMi0yMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFJv
bGwgb3V0IHI2NDE1NiBhcyBpdCBpbnRyb2R1Y2VzIGluY29ycmVjdCBiZWhhdmlvdXIuCiAKICAg
ICAgICAgKiBydW50aW1lL0pTQnl0ZUFycmF5Lmg6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvSGFuZGxlSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvSGFuZGxlSGVhcC5jcHAKaW5kZXggY2NmZTljZDI5
M2VjMjljMzcyZWM1YmZhNDU2OWUyN2Q2YzU2NWFkZC4uZjU5ODZmZDM5NzJkYmMyODk3YTM5M2Yw
M2YwOGNmZDE4ZmIzNDU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxl
Y3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9j
b2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFwLmNwcApAQCAtMjcsMTIgKzI3LDE2IEBACiAKICNp
bmNsdWRlICJIYW5kbGVIZWFwLmgiCiAKLSNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogSGFuZGxlSGVhcDo6SGFuZGxlSGVhcChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
KyAgICAsIG1fbmV4dFRvRmluYWxpemUoMCkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgLCBt
X2hhbmRsaW5nRmluYWxpemVycyhmYWxzZSkKKyNlbmRpZgogewogICAgIGdyb3coKTsKIH0KQEAg
LTU2LDQ0ICs2MCw2MCBAQCB2b2lkIEhhbmRsZUhlYXA6Om1hcmtTdHJvbmdIYW5kbGVzKE1hcmtT
dGFjayYgbWFya1N0YWNrKQogCiB2b2lkIEhhbmRsZUhlYXA6OnVwZGF0ZUFmdGVyTWFyaygpCiB7
CisgICAgY2xlYXJXZWFrUG9pbnRlcnMoTm9ybWFsVmlzaXQpOworfQorCit2b2lkIEhhbmRsZUhl
YXA6OmNsZWFyV2Vha1BvaW50ZXJzKFdlYWtQb2ludGVyVmlzaXRSdWxlIHZpc2l0UnVsZSkKK3sK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgbV9oYW5kbGluZ0ZpbmFsaXplcnMgPSB0cnVlOwor
I2VuZGlmCiAgICAgTm9kZSogZW5kID0gbV93ZWFrTGlzdC5lbmQoKTsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBtX3dlYWtMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2RlID0gbm9kZS0+bmV4
dCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSAqbm9kZS0+c2xvdCgpOworICAgIGZvciAo
Tm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4oKTsgbm9kZSAhPSBlbmQ7KSB7CisgICAgICAg
IE5vZGUqIGN1cnJlbnQgPSBub2RlOworICAgICAgICBub2RlID0gY3VycmVudC0+bmV4dCgpOwor
ICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICpjdXJyZW50LT5zbG90KCk7CiAgICAg
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQogICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAogICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKICAgICAg
ICAgQVNTRVJUKCFjZWxsIHx8IGNlbGwtPnN0cnVjdHVyZSgpKTsKLQotICAgICAgICBpZiAoSGVh
cDo6aXNNYXJrZWQoY2VsbCkpCisgICAgICAgIAorICAgICAgICBpZiAoKHZpc2l0UnVsZSA9PSBO
b3JtYWxWaXNpdCkgJiYgSGVhcDo6aXNNYXJrZWQoY2VsbCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAoRmluYWxpemVyIGZpbmFsaXplciA9IG5vZGUtPmZpbmFsaXplcigp
KQotICAgICAgICAgICAgZmluYWxpemVyKCptX2dsb2JhbERhdGEsIEhhbmRsZTxVbmtub3duPjo6
d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSk7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmlzU2VsZkRlc3Ry
b3lpbmcoKSkKLSAgICAgICAgICAgIGRlYWxsb2NhdGUodG9IYW5kbGUobm9kZSkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAqbm9kZS0+c2xvdCgpID0gSlNWYWx1ZSgpOwotICAgIH0KLX0K
LSAgICAKLXZvaWQgSGFuZGxlSGVhcDo6Y2xlYXJXZWFrUG9pbnRlcnMoKQotewotICAgIE5vZGUq
IGVuZCA9IG1fd2Vha0xpc3QuZW5kKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV93ZWFrTGlz
dC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gKm5vZGUtPnNsb3QoKTsKLSAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFs
dWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7Ci0KLSAgICAgICAgaWYgKEZpbmFsaXplciBmaW5hbGl6
ZXIgPSBub2RlLT5maW5hbGl6ZXIoKSkKLSAgICAgICAgICAgIGZpbmFsaXplcigqbV9nbG9iYWxE
YXRhLCBIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3QoKSkpOwotICAgICAgICAq
bm9kZS0+c2xvdCgpID0gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKEZpbmFsaXpl
ciBmaW5hbGl6ZXIgPSBjdXJyZW50LT5maW5hbGl6ZXIoKSkgeworICAgICAgICAgICAgbV9uZXh0
VG9GaW5hbGl6ZSA9ICZub2RlOworICAgICAgICAgICAgZmluYWxpemVyKCptX2dsb2JhbERhdGEs
IEhhbmRsZTxVbmtub3duPjo6d3JhcFNsb3QoY3VycmVudC0+c2xvdCgpKSwgY3VycmVudC0+Zmlu
YWxpemVyQ29udGV4dCgpKTsKKyAgICAgICAgICAgIG5vZGUgPSAqbV9uZXh0VG9GaW5hbGl6ZTsK
KyAgICAgICAgICAgIG1fbmV4dFRvRmluYWxpemUgPSAwOworICAgICAgICB9IGVsc2UgaWYgKENv
bXBsZXhGaW5hbGl6ZXIqIGZpbmFsaXplciA9IGN1cnJlbnQtPmNvbXBsZXhGaW5hbGl6ZXIoKSkg
eworICAgICAgICAgICAgbV9uZXh0VG9GaW5hbGl6ZSA9ICZub2RlOworICAgICAgICAgICAgZmlu
YWxpemVyLT5maW5hbGl6ZShIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KGN1cnJlbnQtPnNsb3Qo
KSksIGN1cnJlbnQtPmZpbmFsaXplckNvbnRleHQoKSk7CisgICAgICAgICAgICBub2RlID0gKm1f
bmV4dFRvRmluYWxpemU7CisgICAgICAgICAgICBtX25leHRUb0ZpbmFsaXplID0gMDsKKyAgICAg
ICAgfSAKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50LT5pc1NlbGZEZXN0cm95aW5nKCkp
IHsKKyAgICAgICAgICAgIG1fbmV4dFRvRmluYWxpemUgPSAmbm9kZTsKKyAgICAgICAgICAgIGRl
YWxsb2NhdGUodG9IYW5kbGUoY3VycmVudCkpOworICAgICAgICAgICAgbm9kZSA9ICptX25leHRU
b0ZpbmFsaXplOworICAgICAgICAgICAgbV9uZXh0VG9GaW5hbGl6ZSA9IDA7CisgICAgICAgIH0g
ZWxzZSBpZiAoY3VycmVudC0+bmV4dCgpID09IG5vZGUpIHsgLy8gaWYgY3VycmVudC0+bmV4dCgp
ICE9IG5vZGUsIHRoZW4gY3VycmVudCBoYXMgYmVlbiBkZWFsbG9jYXRlZAorICAgICAgICAgICAg
U2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoY3VycmVudCk7CisgICAgICAgICAgICAq
Y3VycmVudC0+c2xvdCgpID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgbV9pbW1lZGlhdGVMaXN0
LnB1c2goY3VycmVudCk7CisgICAgICAgIH0KICAgICB9CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIG1faGFuZGxpbmdGaW5hbGl6ZXJzID0gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBIYW5k
bGVIZWFwOjp3cml0ZUJhcnJpZXIoSGFuZGxlU2xvdCBzbG90LCBjb25zdCBKU1ZhbHVlJiB2YWx1
ZSkKIHsKKyAgICBBU1NFUlQoIW1faGFuZGxpbmdGaW5hbGl6ZXJzKTsKICAgICBpZiAoc2xvdC0+
aXNDZWxsKCkgPT0gdmFsdWUuaXNDZWxsKCkgJiYgIXZhbHVlID09ICEqc2xvdCkKICAgICAgICAg
cmV0dXJuOwogICAgIE5vZGUqIG5vZGUgPSB0b05vZGUoc2xvdCk7CkBAIC0xMDgsNCArMTI4LDE2
IEBAIHZvaWQgSGFuZGxlSGVhcDo6d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3Qgc2xvdCwgY29uc3Qg
SlNWYWx1ZSYgdmFsdWUpCiAgICAgICAgIG1fc3Ryb25nTGlzdC5wdXNoKG5vZGUpOwogfQogCit1
bnNpZ25lZCBIYW5kbGVIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCit7CisgICAg
dW5zaWduZWQgY291bnQgPSAwOworICAgIE5vZGUqIGVuZCA9IG1fc3Ryb25nTGlzdC5lbmQoKTsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3N0cm9uZ0xpc3QuYmVnaW4oKTsgbm9kZSAhPSBlbmQ7
IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICpub2RlLT5z
bG90KCk7CisgICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHZhbHVlLmFz
Q2VsbCgpKS0+aXNHbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgfQor
ICAgIHJldHVybiBjb3VudDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2NvbGxlY3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFwLmgKaW5kZXggMjNiYjllYzc3Nzk4MjNlMjg1
YThlMmIxZjI0MTFmYTcxYjU5MjY5Ny4uMzk4MDZiNDQzMjc2ZjhlNmViZDZkNzc2OWIyNDJkYzAw
ZjFhZTMyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5k
bGVzL0hhbmRsZUhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29sbGVjdG9yL2hh
bmRsZXMvSGFuZGxlSGVhcC5oCkBAIC0zOCwxMCArMzgsMTggQEAgY2xhc3MgSlNHbG9iYWxEYXRh
OwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIE1hcmtTdGFjazsKIAotdHlwZWRlZiB2b2lkICgqRmlu
YWxpemVyKShKU0dsb2JhbERhdGEmLCBIYW5kbGU8VW5rbm93bj4pOwordHlwZWRlZiB2b2lkICgq
RmluYWxpemVyKShKU0dsb2JhbERhdGEmLCBIYW5kbGU8VW5rbm93bj4sIHZvaWQqKTsKKworY2xh
c3MgQ29tcGxleEZpbmFsaXplciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
KEhhbmRsZTxVbmtub3duPiwgdm9pZCopID0gMDsKKyAgICB2aXJ0dWFsIH5Db21wbGV4RmluYWxp
emVyKCkge30KK307CiAKIGNsYXNzIEhhbmRsZUhlYXAgewogcHJpdmF0ZToKKyAgICBlbnVtIFdl
YWtQb2ludGVyVmlzaXRSdWxlIHsgTm9ybWFsVmlzaXQsIElnbm9yZUxpdmVuZXNzIH07CisKIHB1
YmxpYzoKICAgICBzdGF0aWMgSGFuZGxlSGVhcCogaGVhcEZvcihIYW5kbGVTbG90KTsKIApAQCAt
NTAsMTQgKzU4LDE1IEBAIHB1YmxpYzoKICAgICBIYW5kbGVTbG90IGFsbG9jYXRlKCk7CiAgICAg
dm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3QpOwogICAgIAotICAgIHZvaWQgbWFrZVdlYWsoSGFu
ZGxlU2xvdCwgRmluYWxpemVyKTsKLSAgICB2b2lkIG1ha2VTZWxmRGVzdHJveWluZyhIYW5kbGVT
bG90LCBGaW5hbGl6ZXIpOworICAgIHZvaWQgbWFrZVdlYWsoSGFuZGxlU2xvdCwgRmluYWxpemVy
LCB2b2lkKiBjb250ZXh0KTsKKyAgICB2b2lkIG1ha2VTZWxmRGVzdHJveWluZyhIYW5kbGVTbG90
LCBGaW5hbGl6ZXIsIHZvaWQqIGNvbnRleHQpOworICAgIHZvaWQgbWFrZVdlYWsoSGFuZGxlU2xv
dCwgQ29tcGxleEZpbmFsaXplciosIHZvaWQqIGNvbnRleHQpOwogCiAgICAgdm9pZCBtYXJrU3Ry
b25nSGFuZGxlcyhNYXJrU3RhY2smKTsKICAgICB2b2lkIHVwZGF0ZUFmdGVyTWFyaygpOwogICAg
IAogICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgdGVhcmRvd24uCi0gICAgdm9p
ZCBjbGVhcldlYWtQb2ludGVycygpOworICAgIHZvaWQgY2xlYXJXZWFrUG9pbnRlcnMoV2Vha1Bv
aW50ZXJWaXNpdFJ1bGUgPSBJZ25vcmVMaXZlbmVzcyk7CiAKICAgICB2b2lkIHdyaXRlQmFycmll
cihIYW5kbGVTbG90LCBjb25zdCBKU1ZhbHVlJik7CiAKQEAgLTY4LDYgKzc3LDggQEAgcHVibGlj
OgogICAgIH0KICNlbmRpZgogCisgICAgdW5zaWduZWQgcHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291
bnQoKTsKKyAgICAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiB1aW50cHRyX3QgSGFuZGxlSGVhcFdp
dGhGbGFnczsKICAgICBlbnVtIHsgRmxhZ3NNYXNrID0gMywgV2Vha0ZsYWcgPSAxLCBTZWxmRGVz
dHJveWluZ0ZsYWcgPSAyIH07CkBAIC03OSw4ICs5MCwxMSBAQCBwcml2YXRlOgogICAgICAgICBI
YW5kbGVTbG90IHNsb3QoKTsKICAgICAgICAgSGFuZGxlSGVhcCogaGFuZGxlSGVhcCgpOwogCi0g
ICAgICAgIHZvaWQgc2V0RmluYWxpemVyKEZpbmFsaXplcik7CisgICAgICAgIHZvaWQgc2V0Rmlu
YWxpemVyKEZpbmFsaXplciwgdm9pZCogY29udGV4dCk7CisgICAgICAgIHZvaWQgc2V0RmluYWxp
emVyKENvbXBsZXhGaW5hbGl6ZXIqLCB2b2lkKiBjb250ZXh0KTsKICAgICAgICAgRmluYWxpemVy
IGZpbmFsaXplcigpOworICAgICAgICBDb21wbGV4RmluYWxpemVyKiBjb21wbGV4RmluYWxpemVy
KCk7CisgICAgICAgIHZvaWQqIGZpbmFsaXplckNvbnRleHQoKTsKIAogICAgICAgICB2b2lkIHNl
dFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CkBAIC05Nyw4ICsxMTEsMTIgQEAg
cHJpdmF0ZToKICAgICBwcml2YXRlOgogICAgICAgICBKU1ZhbHVlIG1fdmFsdWU7CiAgICAgICAg
IEhhbmRsZUhlYXBXaXRoRmxhZ3MgbV9oYW5kbGVIZWFwV2l0aEZsYWdzOwotICAgICAgICBGaW5h
bGl6ZXIgbV9maW5hbGl6ZXI7Ci0gICAgICAgIE5vZGUqIG1fcHJldjsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgRmluYWxpemVyIG1fZmluYWxpemVyOworICAgICAgICAgICAgQ29tcGxl
eEZpbmFsaXplciogbV9jb21wbGV4RmluYWxpemVyOworICAgICAgICB9OworICAgICAgICB2b2lk
KiBtX2ZpbmFsaXplckNvbnRleHQ7CisgICAgICAgIHVpbnRwdHJfdCBtX3ByZXZBbmRIYXNDb21w
bGV4RmluYWxpemVyOwogICAgICAgICBOb2RlKiBtX25leHQ7CiAgICAgfTsKIApAQCAtMTE0LDYg
KzEzMiwxMSBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX3dlYWtM
aXN0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxpc3Q7CiAgICAg
U2luZ2x5TGlua2VkTGlzdDxOb2RlPiBtX2ZyZWVMaXN0OworICAgIE5vZGUqKiBtX25leHRUb0Zp
bmFsaXplOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9oYW5kbGluZ0ZpbmFs
aXplcnM7CisjZW5kaWYKIH07CiAKIGlubGluZSBIYW5kbGVIZWFwKiBIYW5kbGVIZWFwOjpoZWFw
Rm9yKEhhbmRsZVNsb3QgaGFuZGxlKQpAQCAtMTQ1LDE1ICsxNjgsMTkgQEAgaW5saW5lIEhhbmRs
ZVNsb3QgSGFuZGxlSGVhcDo6YWxsb2NhdGUoKQogaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6ZGVh
bGxvY2F0ZShIYW5kbGVTbG90IGhhbmRsZSkKIHsKICAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhh
bmRsZSk7CisgICAgaWYgKG1fbmV4dFRvRmluYWxpemUgJiYgKm1fbmV4dFRvRmluYWxpemUgPT0g
bm9kZSkgeworICAgICAgICAqbV9uZXh0VG9GaW5hbGl6ZSA9IG5vZGUtPm5leHQoKTsKKyAgICAg
ICAgQVNTRVJUKG1fbmV4dFRvRmluYWxpemVbMF0tPm5leHQoKSk7CisgICAgfQogICAgIFNlbnRp
bmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwogICAgIG1fZnJlZUxpc3QucHVzaChu
b2RlKTsKIH0KIAotaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBo
YW5kbGUsIEZpbmFsaXplciBmaW5hbGl6ZXIpCitpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtl
V2VhayhIYW5kbGVTbG90IGhhbmRsZSwgRmluYWxpemVyIGZpbmFsaXplciwgdm9pZCogY29udGV4
dCkKIHsKICAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7CiAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PE5vZGU+OjpyZW1vdmUobm9kZSk7Ci0gICAgbm9kZS0+c2V0RmluYWxpemVyKGZpbmFs
aXplcik7CisgICAgbm9kZS0+c2V0RmluYWxpemVyKGZpbmFsaXplciwgY29udGV4dCk7CiAgICAg
bm9kZS0+bWFrZVdlYWsoKTsKICAgICBpZiAoaGFuZGxlLT5pc0NlbGwoKSAmJiAqaGFuZGxlKQog
ICAgICAgICBtX3dlYWtMaXN0LnB1c2gobm9kZSk7CkBAIC0xNjEsMjMgKzE4OCwzOCBAQCBpbmxp
bmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90IGhhbmRsZSwgRmluYWxpemVy
IGZpbmFsaXplcikKICAgICAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlu
bGluZSB2b2lkIEhhbmRsZUhlYXA6Om1ha2VTZWxmRGVzdHJveWluZyhIYW5kbGVTbG90IGhhbmRs
ZSwgRmluYWxpemVyIGZpbmFsaXplcikKK2lubGluZSB2b2lkIEhhbmRsZUhlYXA6Om1ha2VXZWFr
KEhhbmRsZVNsb3QgaGFuZGxlLCBDb21wbGV4RmluYWxpemVyKiBmaW5hbGl6ZXIsIHZvaWQqIGNv
bnRleHQpCiB7Ci0gICAgbWFrZVdlYWsoaGFuZGxlLCBmaW5hbGl6ZXIpOwogICAgIE5vZGUqIG5v
ZGUgPSB0b05vZGUoaGFuZGxlKTsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92
ZShub2RlKTsKKyAgICBub2RlLT5zZXRGaW5hbGl6ZXIoZmluYWxpemVyLCBjb250ZXh0KTsKKyAg
ICBub2RlLT5tYWtlV2VhaygpOworICAgIGlmIChoYW5kbGUtPmlzQ2VsbCgpICYmICpoYW5kbGUp
CisgICAgICAgIG1fd2Vha0xpc3QucHVzaChub2RlKTsKKyAgICBlbHNlCisgICAgICAgIG1faW1t
ZWRpYXRlTGlzdC5wdXNoKG5vZGUpOworfQorCitpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtl
U2VsZkRlc3Ryb3lpbmcoSGFuZGxlU2xvdCBoYW5kbGUsIEZpbmFsaXplciBmaW5hbGl6ZXIsIHZv
aWQqIGNvbnRleHQpCit7CisgICAgbWFrZVdlYWsoaGFuZGxlLCBmaW5hbGl6ZXIsIGNvbnRleHQp
OworICAgIE5vZGUqIG5vZGUgPSB0b05vZGUoaGFuZGxlKTsKICAgICBub2RlLT5tYWtlU2VsZkRl
c3Ryb3lpbmcoKTsKIH0KIAogaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cCogaGFuZGxlSGVhcCkKICAgICA6IG1faGFuZGxlSGVhcFdpdGhGbGFncyhyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaGFuZGxlSGVhcCkpCiAgICAgLCBtX2ZpbmFsaXplcigwKQorICAgICwg
bV9maW5hbGl6ZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXZBbmRIYXNDb21wbGV4RmluYWxpemVy
KDApCiB7CiB9CiAKIGlubGluZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKFdURjo6U2VudGluZWxU
YWcpCiAgICAgOiBtX2hhbmRsZUhlYXBXaXRoRmxhZ3MoMCkKICAgICAsIG1fZmluYWxpemVyKDAp
CisgICAgLCBtX2ZpbmFsaXplckNvbnRleHQoMCkKKyAgICAsIG1fcHJldkFuZEhhc0NvbXBsZXhG
aW5hbGl6ZXIoMCkKIHsKIH0KIApAQCAtMTkxLDkgKzIzMywxNyBAQCBpbmxpbmUgSGFuZGxlSGVh
cCogSGFuZGxlSGVhcDo6Tm9kZTo6aGFuZGxlSGVhcCgpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8SGFuZGxlSGVhcCo+KG1faGFuZGxlSGVhcFdpdGhGbGFncyAmIH5GbGFnc01hc2spOwog
fQogCi1pbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRGaW5hbGl6ZXIoRmluYWxpemVy
IGZpbmFsaXplcikKK2lubGluZSB2b2lkIEhhbmRsZUhlYXA6Ok5vZGU6OnNldEZpbmFsaXplcihG
aW5hbGl6ZXIgZmluYWxpemVyLCB2b2lkKiBjb250ZXh0KQogewogICAgIG1fZmluYWxpemVyID0g
ZmluYWxpemVyOworICAgIG1fZmluYWxpemVyQ29udGV4dCA9IGNvbnRleHQ7Cit9CisKK2lubGlu
ZSB2b2lkIEhhbmRsZUhlYXA6Ok5vZGU6OnNldEZpbmFsaXplcihDb21wbGV4RmluYWxpemVyKiBm
aW5hbGl6ZXIsIHZvaWQqIGNvbnRleHQpCit7CisgICAgbV9jb21wbGV4RmluYWxpemVyID0gZmlu
YWxpemVyOworICAgIG1fZmluYWxpemVyQ29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9wcmV2QW5k
SGFzQ29tcGxleEZpbmFsaXplciB8PSAxOwogfQogCiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpO
b2RlOjptYWtlV2VhaygpCkBAIC0yMjEsMTcgKzI3MSwzMiBAQCBpbmxpbmUgYm9vbCBIYW5kbGVI
ZWFwOjpOb2RlOjppc1NlbGZEZXN0cm95aW5nKCkKIAogaW5saW5lIEZpbmFsaXplciBIYW5kbGVI
ZWFwOjpOb2RlOjpmaW5hbGl6ZXIoKQogeworICAgIGlmIChtX3ByZXZBbmRIYXNDb21wbGV4Rmlu
YWxpemVyICYgMSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1fZmluYWxpemVyOwog
fQogCitpbmxpbmUgQ29tcGxleEZpbmFsaXplciogSGFuZGxlSGVhcDo6Tm9kZTo6Y29tcGxleEZp
bmFsaXplcigpCit7CisgICAgaWYgKG1fcHJldkFuZEhhc0NvbXBsZXhGaW5hbGl6ZXIgJiAxKQor
ICAgICAgICByZXR1cm4gbV9jb21wbGV4RmluYWxpemVyOworICAgIHJldHVybiAwOworfQorCitp
bmxpbmUgdm9pZCogSGFuZGxlSGVhcDo6Tm9kZTo6ZmluYWxpemVyQ29udGV4dCgpCit7CisgICAg
QVNTRVJUKG1fZmluYWxpemVyKTsKKyAgICByZXR1cm4gbV9maW5hbGl6ZXJDb250ZXh0OworfQor
CiBpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjpOb2RlOjpzZXRQcmV2KE5vZGUqIHByZXYpCiB7Ci0g
ICAgbV9wcmV2ID0gcHJldjsKKyAgICBtX3ByZXZBbmRIYXNDb21wbGV4RmluYWxpemVyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHByZXYpIHwgKG1fcHJldkFuZEhhc0NvbXBsZXhGaW5h
bGl6ZXIgJiAxKTsKIH0KIAogaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGUqIEhhbmRsZUhlYXA6Ok5v
ZGU6OnByZXYoKQogewotICAgIHJldHVybiBtX3ByZXY7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Tm9kZSo+KG1fcHJldkFuZEhhc0NvbXBsZXhGaW5hbGl6ZXIgJiB+MSk7CiB9CiAKIGlu
bGluZSB2b2lkIEhhbmRsZUhlYXA6Ok5vZGU6OnNldE5leHQoTm9kZSogbmV4dCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKaW5kZXgg
NDVmM2U0YmZiZjdhZmFmM2RkMmNhYTMxYjNlM2E3ODg2YmFjNmJlNS4uOWI3OTg2ODhmMDc4Mzg5
MmQ2YWIwM2YwMDkzMDQwNzIyNDQ4ZGUxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBS
ZWdpc3RlckZpbGU6OnNldEdsb2JhbE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3RDb2xsZWN0ZWQpOwogfQogCi12b2lkIFJlZ2lzdGVyRmls
ZTo6Z2xvYmFsT2JqZWN0Q29sbGVjdGVkKEpTR2xvYmFsRGF0YSYsIEhhbmRsZTxVbmtub3duPiB2
YWx1ZSkKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpnbG9iYWxPYmplY3RDb2xsZWN0ZWQoSlNHbG9iYWxE
YXRhJiwgSGFuZGxlPFVua25vd24+IHZhbHVlLCB2b2lkKikKIHsKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gYXNHbG9iYWxPYmplY3QodmFsdWUuZ2V0KCkpOwogICAgIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5zZXROdW1H
bG9iYWxzKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1JlZ2lzdGVyRmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVyRmlsZS5oCmluZGV4IGViZmQ0NmRlYWI5Yzk3ZmIwNDNjNjQ5MTk1ODlmN2I1NTM3MjdmZWIu
LmMzYTlmYzZmY2VhZTJhY2NjOGJlM2M2NWE1N2ZlNGIyYjI0ZDI4MWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKQEAgLTEyMCw3ICsx
MjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2VuZCAtIG1fc3RhcnQ7IH0KIAogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChK
U0dsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgdm9pZCBnbG9iYWxPYmplY3RDb2xsZWN0
ZWQoSlNHbG9iYWxEYXRhJiwgSGFuZGxlPFVua25vd24+KTsKKyAgICAgICAgc3RhdGljIHZvaWQg
Z2xvYmFsT2JqZWN0Q29sbGVjdGVkKEpTR2xvYmFsRGF0YSYsIEhhbmRsZTxVbmtub3duPiwgdm9p
ZCopOwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCk7CiAKICAgICAgICAg
Ym9vbCBncm93KFJlZ2lzdGVyKiBuZXdFbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha0dDUHRyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrR0NQdHIuaAppbmRleCBhMDEzOGMwOGM1OTA0YjIzY2RkYzUxZWY3YzA2NzhjYzk0YjFl
MWM2Li45ZmNhMTdmZDY3YmI3NTg4NmM5NWQ5MGZkMzdiNWEyMDE0Yjg3M2JjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaApAQCAtNDMsMTYgKzQzLDE2IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFdlYWtHQ1B0cihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEZpbmFsaXplciBmaW5hbGl6ZXIgPSAwKQorICAgIFdlYWtHQ1B0cihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEZpbmFsaXplciBmaW5hbGl6ZXIgPSAwLCB2b2lkKiBjb250ZXh0
ID0gMCkKICAgICAgICAgOiBtX3Nsb3QoZ2xvYmFsRGF0YS5hbGxvY2F0ZUdsb2JhbEhhbmRsZSgp
KQogICAgIHsKLSAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcihtX3Nsb3QpLT5tYWtlV2Vhayht
X3Nsb3QsIGZpbmFsaXplcik7CisgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IobV9zbG90KS0+
bWFrZVdlYWsobV9zbG90LCBmaW5hbGl6ZXIsIGNvbnRleHQpOwogICAgIH0KICAgICAKLSAgICBX
ZWFrR0NQdHIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFsdWUsIEZp
bmFsaXplciBmaW5hbGl6ZXIgPSAwKQorICAgIFdlYWtHQ1B0cihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEV4dGVybmFsVHlwZSB2YWx1ZSwgRmluYWxpemVyIGZpbmFsaXplciA9IDAsIHZvaWQq
IGNvbnRleHQgPSAwKQogICAgICAgICA6IG1fc2xvdChnbG9iYWxEYXRhLmFsbG9jYXRlR2xvYmFs
SGFuZGxlKCkpCiAgICAgewotICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKG1fc2xvdCktPm1h
a2VXZWFrKG1fc2xvdCwgZmluYWxpemVyKTsKKyAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvciht
X3Nsb3QpLT5tYWtlV2VhayhtX3Nsb3QsIGZpbmFsaXplciwgY29udGV4dCk7CiAgICAgICAgIGlu
dGVybmFsU2V0KHZhbHVlKTsKICAgICB9CiAKQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLT5tX3Nsb3QpIHsKICAgICAgICAgICAgIHRoaXMtPm1fc2xv
dCA9IGdsb2JhbERhdGEuYWxsb2NhdGVHbG9iYWxIYW5kbGUoKTsKLSAgICAgICAgICAgIEhhbmRs
ZUhlYXA6OmhlYXBGb3IodGhpcy0+bV9zbG90KS0+bWFrZVdlYWsodGhpcy0+bV9zbG90LCBmaW5h
bGl6ZXIpOworICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcih0aGlzLT5tX3Nsb3QpLT5t
YWtlV2Vhayh0aGlzLT5tX3Nsb3QsIGZpbmFsaXplciwgMCk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3IodGhpcy0+bV9zbG90KS0+Z2V0Rmlu
YWxpemVyKHRoaXMtPm1fc2xvdCkgPT0gZmluYWxpemVyKTsKICAgICAgICAgdGhpcy0+aW50ZXJu
YWxTZXQodmFsdWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83679</attachid>
            <date>2011-02-24 10:59:33 -0800</date>
            <delta_ts>2011-02-24 11:55:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55105-20110224105932.patch</filename>
            <type>text/plain</type>
            <size>15971</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk1MDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJm
YTcyODAzYzBhZTk1ZTY1OTdjN2QyMzMwZWQ1NjRmN2M5NjBlZTYuLjk1ODYxZWY1NWI5ODM1Mjhh
MmEzYjlkNTU0NmI1ZGI3ZjNlODlmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ0IEBACisyMDExLTAyLTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSB3ZWFr
bGlzdCBwcm9jZXNzaW5nIGRlYWwgd2l0aCB3ZWFrIGhhbmRsZXMgYmVpbmcgcmVtb3ZlZCBkdXJp
bmcgdGhlIGl0ZXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTUxMDUKKworICAgICAgICBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGhhbmRsZSBo
ZWFwIHRvIGVuZCB1cCBpbiBhIGJyb2tlbiBzdGF0ZSBpZgorICAgICAgICBhIGhhbmRsZSdzIGZp
bmFsaXplciByZW1vdmVzIGVpdGhlciB0aGUgY3VycmVudCBvciBuZXh0IGhhbmRsZQorICAgICAg
ICB0byBiZSB2aXNpdGVkIGR1cmluZyB0aGUgcG9zdC1nYyBjbGVhbnVwLiAgVGhpcyBwYXRjaCBy
ZW1vdmVzIHRoYXQKKyAgICAgICAgcHJvYmxlbSBieSBhbGxvd2luZyB0aGUgZGVhbGxvY2F0ZShO
b2RlKikgcm91dGluZSB0byB1cGRhdGUgdGhlCisgICAgICAgIGl0ZXJhdG9yIGlmIGl0IGlzIGNh
bGxlZCBkdXJpbmcgZmluYWxpemF0aW9uLgorCisgICAgICAgICogY29sbGVjdG9yL2hhbmRsZXMv
SGFuZGxlSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OkhhbmRsZUhlYXApOgor
ICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjp1cGRhdGVBZnRlck1hcmspOgorICAgICAgICAoSlND
OjpIYW5kbGVIZWFwOjpjbGVhcldlYWtQb2ludGVycyk6CisgICAgICAgIChKU0M6OkhhbmRsZUhl
YXA6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OnByb3RlY3RlZEds
b2JhbE9iamVjdENvdW50KToKKyAgICAgICAgKiBjb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFw
Lmg6CisgICAgICAgIChKU0M6OkZpbmFsaXplcjo6fkZpbmFsaXplcik6CisgICAgICAgIChKU0M6
OkhhbmRsZUhlYXA6OmdldEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6OmRl
YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjptYWtlV2Vhayk6CisgICAgICAg
IChKU0M6OkhhbmRsZUhlYXA6Om1ha2VTZWxmRGVzdHJveWluZyk6CisgICAgICAgIChKU0M6Okhh
bmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpz
ZXRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpmaW5hbGl6ZXIp
OgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpmaW5hbGl6ZXJDb250ZXh0KToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdp
c3RlckZpbGU6OnNldEdsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6Okdsb2JhbE9iamVjdE5v
dGlmaWVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Z2xvYmFsT2Jq
ZWN0Q29sbGVjdGVkTm90aWZpZXIpOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmls
ZS5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6OlJlZ2lzdGVyRmlsZSk6CisgICAgICAg
ICogcnVudGltZS9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVzdHJveSk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NQdHIuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDUHRyOjpXZWFr
R0NQdHIpOgorICAgICAgICAoSlNDOjpXZWFrR0NQdHI6OnNldCk6CisKIDIwMTEtMDItMjMgIE9s
aXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsIG91dCByNjQxNTYg
YXMgaXQgaW50cm9kdWNlcyBpbmNvcnJlY3QgYmVoYXZpb3VyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5kbGVzL0hhbmRsZUhlYXAuY3BwCmluZGV4IGNj
ZmU5Y2QyOTNlYzI5YzM3MmVjNWJmYTQ1NjllMjdkNmM1NjVhZGQuLjk3MDIzNzNhY2VlOWJjYWEz
ZmUzYzU1MTQ3MzQwZTc0YzQ2ZjBlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvY29sbGVjdG9yL2hhbmRsZXMvSGFuZGxlSGVhcC5jcHAKQEAgLTI3LDEyICsyNywxNiBA
QAogCiAjaW5jbHVkZSAiSGFuZGxlSGVhcC5oIgogCi0jaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIEhhbmRsZUhlYXA6OkhhbmRs
ZUhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCisgICAgLCBtX25leHRUb0ZpbmFsaXplKDApCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICwgbV9oYW5kbGluZ0ZpbmFsaXplcnMoZmFsc2UpCisjZW5kaWYKIHsKICAgICBncm93KCk7
CiB9CkBAIC01Niw0NCArNjAsNTUgQEAgdm9pZCBIYW5kbGVIZWFwOjptYXJrU3Ryb25nSGFuZGxl
cyhNYXJrU3RhY2smIG1hcmtTdGFjaykKIAogdm9pZCBIYW5kbGVIZWFwOjp1cGRhdGVBZnRlck1h
cmsoKQogeworICAgIGNsZWFyV2Vha1BvaW50ZXJzKCk7Cit9CisKK3ZvaWQgSGFuZGxlSGVhcDo6
Y2xlYXJXZWFrUG9pbnRlcnMoKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2hhbmRs
aW5nRmluYWxpemVycyA9IHRydWU7CisjZW5kaWYKICAgICBOb2RlKiBlbmQgPSBtX3dlYWtMaXN0
LmVuZCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2Vha0xpc3QuYmVnaW4oKTsgbm9kZSAh
PSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICpu
b2RlLT5zbG90KCk7CisgICAgZm9yIChOb2RlKiBub2RlID0gbV93ZWFrTGlzdC5iZWdpbigpOyBu
b2RlICE9IGVuZDspIHsKKyAgICAgICAgTm9kZSogY3VycmVudCA9IG5vZGU7CisgICAgICAgIG5v
ZGUgPSBjdXJyZW50LT5uZXh0KCk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
KmN1cnJlbnQtPnNsb3QoKTsKICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCiAgICAgICAgIEpTQ2VsbCogY2VsbCA9
IHZhbHVlLmFzQ2VsbCgpOwogICAgICAgICBBU1NFUlQoIWNlbGwgfHwgY2VsbC0+c3RydWN0dXJl
KCkpOwotCisgICAgICAgIAogICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoRmluYWxpemVyIGZpbmFsaXplciA9IG5v
ZGUtPmZpbmFsaXplcigpKQotICAgICAgICAgICAgZmluYWxpemVyKCptX2dsb2JhbERhdGEsIEhh
bmRsZTxVbmtub3duPjo6d3JhcFNsb3Qobm9kZS0+c2xvdCgpKSk7Ci0KLSAgICAgICAgaWYgKG5v
ZGUtPmlzU2VsZkRlc3Ryb3lpbmcoKSkKLSAgICAgICAgICAgIGRlYWxsb2NhdGUodG9IYW5kbGUo
bm9kZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqbm9kZS0+c2xvdCgpID0gSlNWYWx1
ZSgpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgSGFuZGxlSGVhcDo6Y2xlYXJXZWFrUG9pbnRlcnMo
KQotewotICAgIE5vZGUqIGVuZCA9IG1fd2Vha0xpc3QuZW5kKCk7Ci0gICAgZm9yIChOb2RlKiBu
b2RlID0gbV93ZWFrTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQo
KSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKm5vZGUtPnNsb3QoKTsKLSAgICAgICAgaWYg
KCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgQVNTRVJUKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7Ci0KLSAgICAgICAgaWYgKEZp
bmFsaXplciBmaW5hbGl6ZXIgPSBub2RlLT5maW5hbGl6ZXIoKSkKLSAgICAgICAgICAgIGZpbmFs
aXplcigqbV9nbG9iYWxEYXRhLCBIYW5kbGU8VW5rbm93bj46OndyYXBTbG90KG5vZGUtPnNsb3Qo
KSkpOwotICAgICAgICAqbm9kZS0+c2xvdCgpID0gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKEZpbmFsaXplciogZmluYWxpemVyID0gY3VycmVudC0+ZmluYWxpemVyKCkpIHsKKyAg
ICAgICAgICAgIG1fbmV4dFRvRmluYWxpemUgPSAmbm9kZTsKKyAgICAgICAgICAgIGZpbmFsaXpl
ci0+ZmluYWxpemUoSGFuZGxlPFVua25vd24+Ojp3cmFwU2xvdChjdXJyZW50LT5zbG90KCkpLCBj
dXJyZW50LT5maW5hbGl6ZXJDb250ZXh0KCkpOworICAgICAgICAgICAgbm9kZSA9ICptX25leHRU
b0ZpbmFsaXplOworICAgICAgICAgICAgbV9uZXh0VG9GaW5hbGl6ZSA9IDA7CisgICAgICAgIH0g
CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudC0+aXNTZWxmRGVzdHJveWluZygpKSB7Cisg
ICAgICAgICAgICBtX25leHRUb0ZpbmFsaXplID0gJm5vZGU7CisgICAgICAgICAgICBkZWFsbG9j
YXRlKHRvSGFuZGxlKGN1cnJlbnQpKTsKKyAgICAgICAgICAgIG5vZGUgPSAqbV9uZXh0VG9GaW5h
bGl6ZTsKKyAgICAgICAgICAgIG1fbmV4dFRvRmluYWxpemUgPSAwOworICAgICAgICB9IGVsc2Ug
aWYgKGN1cnJlbnQtPm5leHQoKSA9PSBub2RlKSB7IC8vIGlmIGN1cnJlbnQtPm5leHQoKSAhPSBu
b2RlLCB0aGVuIGN1cnJlbnQgaGFzIGJlZW4gZGVhbGxvY2F0ZWQKKyAgICAgICAgICAgIFNlbnRp
bmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKGN1cnJlbnQpOworICAgICAgICAgICAgKmN1cnJl
bnQtPnNsb3QoKSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIG1faW1tZWRpYXRlTGlzdC5wdXNo
KGN1cnJlbnQpOworICAgICAgICB9CiAgICAgfQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBt
X2hhbmRsaW5nRmluYWxpemVycyA9IGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgSGFuZGxlSGVh
cDo6d3JpdGVCYXJyaWVyKEhhbmRsZVNsb3Qgc2xvdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUpCiB7
CisgICAgQVNTRVJUKCFtX2hhbmRsaW5nRmluYWxpemVycyk7CiAgICAgaWYgKHNsb3QtPmlzQ2Vs
bCgpID09IHZhbHVlLmlzQ2VsbCgpICYmICF2YWx1ZSA9PSAhKnNsb3QpCiAgICAgICAgIHJldHVy
bjsKICAgICBOb2RlKiBub2RlID0gdG9Ob2RlKHNsb3QpOwpAQCAtMTA4LDQgKzEyMywxNiBAQCB2
b2lkIEhhbmRsZUhlYXA6OndyaXRlQmFycmllcihIYW5kbGVTbG90IHNsb3QsIGNvbnN0IEpTVmFs
dWUmIHZhbHVlKQogICAgICAgICBtX3N0cm9uZ0xpc3QucHVzaChub2RlKTsKIH0KIAordW5zaWdu
ZWQgSGFuZGxlSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKQoreworICAgIHVuc2ln
bmVkIGNvdW50ID0gMDsKKyAgICBOb2RlKiBlbmQgPSBtX3N0cm9uZ0xpc3QuZW5kKCk7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gbV9zdHJvbmdMaXN0LmJlZ2luKCk7IG5vZGUgIT0gZW5kOyBub2Rl
ID0gbm9kZS0+bmV4dCgpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAqbm9kZS0+c2xvdCgp
OworICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSAmJiBhc09iamVjdCh2YWx1ZS5hc0NlbGwo
KSktPmlzR2xvYmFsT2JqZWN0KCkpCisgICAgICAgICAgICBjb3VudCsrOworICAgIH0KKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9j
b2xsZWN0b3IvaGFuZGxlcy9IYW5kbGVIZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29s
bGVjdG9yL2hhbmRsZXMvSGFuZGxlSGVhcC5oCmluZGV4IDIzYmI5ZWM3Nzc5ODIzZTI4NWE4ZTJi
MWYyNDExZmE3MWI1OTI2OTcuLmJhMDRiNzMzZjUyMGE3YWY3NDNhYmMwMDUyNWIyMDZhMmQ2NTY4
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb2xsZWN0b3IvaGFuZGxlcy9I
YW5kbGVIZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5kbGVz
L0hhbmRsZUhlYXAuaApAQCAtMzgsMTAgKzM4LDEzIEBAIGNsYXNzIEpTR2xvYmFsRGF0YTsKIGNs
YXNzIEpTVmFsdWU7CiBjbGFzcyBNYXJrU3RhY2s7CiAKLXR5cGVkZWYgdm9pZCAoKkZpbmFsaXpl
cikoSlNHbG9iYWxEYXRhJiwgSGFuZGxlPFVua25vd24+KTsKK2NsYXNzIEZpbmFsaXplciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCop
ID0gMDsKKyAgICB2aXJ0dWFsIH5GaW5hbGl6ZXIoKSB7fQorfTsKIAogY2xhc3MgSGFuZGxlSGVh
cCB7Ci1wcml2YXRlOgogcHVibGljOgogICAgIHN0YXRpYyBIYW5kbGVIZWFwKiBoZWFwRm9yKEhh
bmRsZVNsb3QpOwogCkBAIC01MCw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICBIYW5kbGVTbG90IGFs
bG9jYXRlKCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKEhhbmRsZVNsb3QpOwogICAgIAotICAgIHZv
aWQgbWFrZVdlYWsoSGFuZGxlU2xvdCwgRmluYWxpemVyKTsKLSAgICB2b2lkIG1ha2VTZWxmRGVz
dHJveWluZyhIYW5kbGVTbG90LCBGaW5hbGl6ZXIpOworICAgIHZvaWQgbWFrZVdlYWsoSGFuZGxl
U2xvdCwgRmluYWxpemVyKiwgdm9pZCogY29udGV4dCk7CisgICAgdm9pZCBtYWtlU2VsZkRlc3Ry
b3lpbmcoSGFuZGxlU2xvdCwgRmluYWxpemVyKiwgdm9pZCogY29udGV4dCk7CiAKICAgICB2b2lk
IG1hcmtTdHJvbmdIYW5kbGVzKE1hcmtTdGFjayYpOwogICAgIHZvaWQgdXBkYXRlQWZ0ZXJNYXJr
KCk7CkBAIC02MiwxMiArNjUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEhh
bmRsZVNsb3QsIGNvbnN0IEpTVmFsdWUmKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBG
aW5hbGl6ZXIgZ2V0RmluYWxpemVyKEhhbmRsZVNsb3QgaGFuZGxlKQorICAgIEZpbmFsaXplciog
Z2V0RmluYWxpemVyKEhhbmRsZVNsb3QgaGFuZGxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRv
Tm9kZShoYW5kbGUpLT5maW5hbGl6ZXIoKTsKICAgICB9CiAjZW5kaWYKIAorICAgIHVuc2lnbmVk
IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CisgICAgCiBwcml2YXRlOgogICAgIHR5cGVk
ZWYgdWludHB0cl90IEhhbmRsZUhlYXBXaXRoRmxhZ3M7CiAgICAgZW51bSB7IEZsYWdzTWFzayA9
IDMsIFdlYWtGbGFnID0gMSwgU2VsZkRlc3Ryb3lpbmdGbGFnID0gMiB9OwpAQCAtNzksOCArODQs
OSBAQCBwcml2YXRlOgogICAgICAgICBIYW5kbGVTbG90IHNsb3QoKTsKICAgICAgICAgSGFuZGxl
SGVhcCogaGFuZGxlSGVhcCgpOwogCi0gICAgICAgIHZvaWQgc2V0RmluYWxpemVyKEZpbmFsaXpl
cik7Ci0gICAgICAgIEZpbmFsaXplciBmaW5hbGl6ZXIoKTsKKyAgICAgICAgdm9pZCBzZXRGaW5h
bGl6ZXIoRmluYWxpemVyKiwgdm9pZCogY29udGV4dCk7CisgICAgICAgIEZpbmFsaXplciogZmlu
YWxpemVyKCk7CisgICAgICAgIHZvaWQqIGZpbmFsaXplckNvbnRleHQoKTsKIAogICAgICAgICB2
b2lkIHNldFByZXYoTm9kZSopOwogICAgICAgICBOb2RlKiBwcmV2KCk7CkBAIC05Nyw3ICsxMDMs
OCBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAgICAgIEpTVmFsdWUgbV92YWx1ZTsKICAg
ICAgICAgSGFuZGxlSGVhcFdpdGhGbGFncyBtX2hhbmRsZUhlYXBXaXRoRmxhZ3M7Ci0gICAgICAg
IEZpbmFsaXplciBtX2ZpbmFsaXplcjsKKyAgICAgICAgRmluYWxpemVyKiBtX2ZpbmFsaXplcjsK
KyAgICAgICAgdm9pZCogbV9maW5hbGl6ZXJDb250ZXh0OwogICAgICAgICBOb2RlKiBtX3ByZXY7
CiAgICAgICAgIE5vZGUqIG1fbmV4dDsKICAgICB9OwpAQCAtMTE0LDYgKzEyMSwxMSBAQCBwcml2
YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX3dlYWtMaXN0OwogICAgIFNlbnRp
bmVsTGlua2VkTGlzdDxOb2RlPiBtX2ltbWVkaWF0ZUxpc3Q7CiAgICAgU2luZ2x5TGlua2VkTGlz
dDxOb2RlPiBtX2ZyZWVMaXN0OworICAgIE5vZGUqKiBtX25leHRUb0ZpbmFsaXplOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9oYW5kbGluZ0ZpbmFsaXplcnM7CisjZW5kaWYK
IH07CiAKIGlubGluZSBIYW5kbGVIZWFwKiBIYW5kbGVIZWFwOjpoZWFwRm9yKEhhbmRsZVNsb3Qg
aGFuZGxlKQpAQCAtMTQ1LDE1ICsxNTcsMTkgQEAgaW5saW5lIEhhbmRsZVNsb3QgSGFuZGxlSGVh
cDo6YWxsb2NhdGUoKQogaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6ZGVhbGxvY2F0ZShIYW5kbGVT
bG90IGhhbmRsZSkKIHsKICAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGhhbmRsZSk7CisgICAgaWYg
KG1fbmV4dFRvRmluYWxpemUgJiYgKm1fbmV4dFRvRmluYWxpemUgPT0gbm9kZSkgeworICAgICAg
ICAqbV9uZXh0VG9GaW5hbGl6ZSA9IG5vZGUtPm5leHQoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV4
dFRvRmluYWxpemVbMF0tPm5leHQoKSk7CisgICAgfQogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxO
b2RlPjo6cmVtb3ZlKG5vZGUpOwogICAgIG1fZnJlZUxpc3QucHVzaChub2RlKTsKIH0KIAotaW5s
aW5lIHZvaWQgSGFuZGxlSGVhcDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBoYW5kbGUsIEZpbmFsaXpl
ciBmaW5hbGl6ZXIpCitpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlV2VhayhIYW5kbGVTbG90
IGhhbmRsZSwgRmluYWxpemVyKiBmaW5hbGl6ZXIsIHZvaWQqIGNvbnRleHQpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IHRvTm9kZShoYW5kbGUpOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6
cmVtb3ZlKG5vZGUpOwotICAgIG5vZGUtPnNldEZpbmFsaXplcihmaW5hbGl6ZXIpOworICAgIG5v
ZGUtPnNldEZpbmFsaXplcihmaW5hbGl6ZXIsIGNvbnRleHQpOwogICAgIG5vZGUtPm1ha2VXZWFr
KCk7CiAgICAgaWYgKGhhbmRsZS0+aXNDZWxsKCkgJiYgKmhhbmRsZSkKICAgICAgICAgbV93ZWFr
TGlzdC5wdXNoKG5vZGUpOwpAQCAtMTYxLDIzICsxNzcsMjQgQEAgaW5saW5lIHZvaWQgSGFuZGxl
SGVhcDo6bWFrZVdlYWsoSGFuZGxlU2xvdCBoYW5kbGUsIEZpbmFsaXplciBmaW5hbGl6ZXIpCiAg
ICAgICAgIG1faW1tZWRpYXRlTGlzdC5wdXNoKG5vZGUpOwogfQogCi1pbmxpbmUgdm9pZCBIYW5k
bGVIZWFwOjptYWtlU2VsZkRlc3Ryb3lpbmcoSGFuZGxlU2xvdCBoYW5kbGUsIEZpbmFsaXplciBm
aW5hbGl6ZXIpCitpbmxpbmUgdm9pZCBIYW5kbGVIZWFwOjptYWtlU2VsZkRlc3Ryb3lpbmcoSGFu
ZGxlU2xvdCBoYW5kbGUsIEZpbmFsaXplciogZmluYWxpemVyLCB2b2lkKiBjb250ZXh0KQogewot
ICAgIG1ha2VXZWFrKGhhbmRsZSwgZmluYWxpemVyKTsKKyAgICBtYWtlV2VhayhoYW5kbGUsIGZp
bmFsaXplciwgY29udGV4dCk7CiAgICAgTm9kZSogbm9kZSA9IHRvTm9kZShoYW5kbGUpOwotICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3ZlKG5vZGUpOwogICAgIG5vZGUtPm1ha2VT
ZWxmRGVzdHJveWluZygpOwogfQogCiBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShIYW5k
bGVIZWFwKiBoYW5kbGVIZWFwKQogICAgIDogbV9oYW5kbGVIZWFwV2l0aEZsYWdzKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGVIZWFwKSkKICAgICAsIG1fZmluYWxpemVyKDApCisg
ICAgLCBtX2ZpbmFsaXplckNvbnRleHQoMCkKIHsKIH0KIAogaW5saW5lIEhhbmRsZUhlYXA6Ok5v
ZGU6Ok5vZGUoV1RGOjpTZW50aW5lbFRhZykKICAgICA6IG1faGFuZGxlSGVhcFdpdGhGbGFncygw
KQogICAgICwgbV9maW5hbGl6ZXIoMCkKKyAgICAsIG1fZmluYWxpemVyQ29udGV4dCgwKQogewog
fQogCkBAIC0xOTEsOSArMjA4LDEwIEBAIGlubGluZSBIYW5kbGVIZWFwKiBIYW5kbGVIZWFwOjpO
b2RlOjpoYW5kbGVIZWFwKCkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIYW5kbGVIZWFw
Kj4obV9oYW5kbGVIZWFwV2l0aEZsYWdzICYgfkZsYWdzTWFzayk7CiB9CiAKLWlubGluZSB2b2lk
IEhhbmRsZUhlYXA6Ok5vZGU6OnNldEZpbmFsaXplcihGaW5hbGl6ZXIgZmluYWxpemVyKQoraW5s
aW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9kZTo6c2V0RmluYWxpemVyKEZpbmFsaXplciogZmluYWxp
emVyLCB2b2lkKiBjb250ZXh0KQogewogICAgIG1fZmluYWxpemVyID0gZmluYWxpemVyOworICAg
IG1fZmluYWxpemVyQ29udGV4dCA9IGNvbnRleHQ7CiB9CiAKIGlubGluZSB2b2lkIEhhbmRsZUhl
YXA6Ok5vZGU6Om1ha2VXZWFrKCkKQEAgLTIxOSwxMSArMjM3LDE3IEBAIGlubGluZSBib29sIEhh
bmRsZUhlYXA6Ok5vZGU6OmlzU2VsZkRlc3Ryb3lpbmcoKQogICAgIHJldHVybiAhIShtX2hhbmRs
ZUhlYXBXaXRoRmxhZ3MgJiBTZWxmRGVzdHJveWluZ0ZsYWcpOwogfQogCi1pbmxpbmUgRmluYWxp
emVyIEhhbmRsZUhlYXA6Ok5vZGU6OmZpbmFsaXplcigpCitpbmxpbmUgRmluYWxpemVyKiBIYW5k
bGVIZWFwOjpOb2RlOjpmaW5hbGl6ZXIoKQogewogICAgIHJldHVybiBtX2ZpbmFsaXplcjsKIH0K
IAoraW5saW5lIHZvaWQqIEhhbmRsZUhlYXA6Ok5vZGU6OmZpbmFsaXplckNvbnRleHQoKQorewor
ICAgIEFTU0VSVChtX2ZpbmFsaXplcik7CisgICAgcmV0dXJuIG1fZmluYWxpemVyQ29udGV4dDsK
K30KKwogaW5saW5lIHZvaWQgSGFuZGxlSGVhcDo6Tm9kZTo6c2V0UHJldihOb2RlKiBwcmV2KQog
ewogICAgIG1fcHJldiA9IHByZXY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9SZWdpc3RlckZpbGUuY3BwCmluZGV4IDQ1ZjNlNGJmYmY3YWZhZjNkZDJjYWEzMWIz
ZTNhNzg4NmJhYzZiZTUuLjQ3ZjBjMThjOTIzOGNkOTMxZDY3MDA1MmI0Yjc2NTE2YWNjM2UxMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwCkBAIC02MSwxMyArNjEsMjQgQEAgdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNl
c3NDYXBhY2l0eSgpCiAKIHZvaWQgUmVnaXN0ZXJGaWxlOjpzZXRHbG9iYWxPYmplY3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Q29sbGVjdGVk
KTsKKyAgICBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdCwgUmVnaXN0ZXJGaWxlOjpnbG9iYWxPYmplY3RDb2xsZWN0ZWROb3RpZmllcigp
KTsKIH0KIAotdm9pZCBSZWdpc3RlckZpbGU6Omdsb2JhbE9iamVjdENvbGxlY3RlZChKU0dsb2Jh
bERhdGEmLCBIYW5kbGU8VW5rbm93bj4gdmFsdWUpCitjbGFzcyBHbG9iYWxPYmplY3ROb3RpZmll
ciA6IHB1YmxpYyBGaW5hbGl6ZXIgeworcHVibGljOgorICAgIHZvaWQgZmluYWxpemUoSGFuZGxl
PFVua25vd24+IHZhbHVlLCB2b2lkKikKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBhc0dsb2JhbE9iamVjdCh2YWx1ZS5nZXQoKSk7CisgICAgICAgIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5zZXROdW1H
bG9iYWxzKDApOworICAgIH0KK307CisKK0ZpbmFsaXplciogUmVnaXN0ZXJGaWxlOjpnbG9iYWxP
YmplY3RDb2xsZWN0ZWROb3RpZmllcigpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGFzR2xvYmFsT2JqZWN0KHZhbHVlLmdldCgpKTsKLSAgICBnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkuc2V0TnVtR2xvYmFscygwKTsK
KyAgICAvLyBUaGlzIHdpbGwgbGVhayBhbGFzLCBidXQgd2Ugb25seSBjcmVhdGUgb25lIG9mIHRo
ZW0sIGFuZCBpdCBkb2Vzbid0CisgICAgLy8gdGFrZSB1cCBhbnkgc2lnbmlmaWNhbnQgYW1vdW50
IG9mIHNwYWNlLgorICAgIHN0YXRpYyBHbG9iYWxPYmplY3ROb3RpZmllciogbm90aWZpZXIgPSBu
ZXcgR2xvYmFsT2JqZWN0Tm90aWZpZXI7CisgICAgcmV0dXJuIG5vdGlmaWVyOwogfQogCiBKU0ds
b2JhbE9iamVjdCogUmVnaXN0ZXJGaWxlOjpnbG9iYWxPYmplY3QoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCmluZGV4IGViZmQ0NmRlYWI5
Yzk3ZmIwNDNjNjQ5MTk1ODlmN2I1NTM3MjdmZWIuLmJiNDI5MDI2N2Y0MmNlYzA3NmJiMWZmOTE0
MDY4ZjQxNWE2ZGIxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUmVnaXN0ZXJGaWxlLmgKQEAgLTEyMCw3ICsxMjAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2VuZCAtIG1fc3RhcnQ7IH0KIAog
ICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbE9iamVjdCopOwotICAgICAgICBz
dGF0aWMgdm9pZCBnbG9iYWxPYmplY3RDb2xsZWN0ZWQoSlNHbG9iYWxEYXRhJiwgSGFuZGxlPFVu
a25vd24+KTsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpOwogCiAgICAg
ICAgIGJvb2wgZ3JvdyhSZWdpc3RlciogbmV3RW5kKTsKQEAgLTEzNSw2ICsxMzQsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291bnQoKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogCisgICAgICAgIHN0
YXRpYyBGaW5hbGl6ZXIqIGdsb2JhbE9iamVjdENvbGxlY3RlZE5vdGlmaWVyKCk7CisKICAgICBw
cml2YXRlOgogICAgICAgICB2b2lkIHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwogICAgICAgICB2
b2lkIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxvbmcpOwpAQCAtMTU2LDcgKzE1Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAsIG1fc3RhcnQoMCkKICAgICAgICAgLCBtX2VuZCgwKQog
ICAgICAgICAsIG1fbWF4KDApCi0gICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0Q29sbGVjdGVkKQorICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERh
dGEsIFJlZ2lzdGVyRmlsZTo6Z2xvYmFsT2JqZWN0Q29sbGVjdGVkTm90aWZpZXIoKSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChtYXhHbG9iYWxzICYmIGlzUGFnZUFsaWduZWQobWF4R2xvYmFscykp
OwogICAgICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmNwcAppbmRleCBlYjIwNjhlZDJhZjg0ZDhm
M2YwNWRkZThjYWNlNWU5N2Q4ZjNkMjZiLi4wODVhYjEzNjYwMjYyYjdkM2VhNzNmMTViMmIwYzRl
ZmVlOWY0NzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFw
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmNwcApAQCAtNzcs
NyArNzcsNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogCiAgICAgZGVsZXRlIG1fbWFya0xpc3RT
ZXQ7CiAgICAgbV9tYXJrTGlzdFNldCA9IDA7Ci0KKyAgICBtX21hcmtlZFNwYWNlLmNsZWFyTWFy
a3MoKTsKICAgICBtX2hhbmRsZUhlYXAuY2xlYXJXZWFrUG9pbnRlcnMoKTsKICAgICBtX21hcmtl
ZFNwYWNlLmRlc3Ryb3koKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDUHRyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQ
dHIuaAppbmRleCBhMDEzOGMwOGM1OTA0YjIzY2RkYzUxZWY3YzA2NzhjYzk0YjFlMWM2Li4zZjg3
YjgzY2U5ZGVhYmNlNzk1ZDYzNzZmMzVjOWYwYjcwN2U4OTEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrR0NQdHIuaApAQCAtNDMsMTYgKzQzLDE2IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAotICAgIFdlYWtHQ1B0cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEZpbmFsaXplciBmaW5hbGl6ZXIgPSAwKQorICAgIFdlYWtHQ1B0cihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEZpbmFsaXplciogZmluYWxpemVyID0gMCwgdm9pZCogY29udGV4dCA9IDApCiAg
ICAgICAgIDogbV9zbG90KGdsb2JhbERhdGEuYWxsb2NhdGVHbG9iYWxIYW5kbGUoKSkKICAgICB7
Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IobV9zbG90KS0+bWFrZVdlYWsobV9zbG90LCBm
aW5hbGl6ZXIpOworICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKG1fc2xvdCktPm1ha2VXZWFr
KG1fc2xvdCwgZmluYWxpemVyLCBjb250ZXh0KTsKICAgICB9CiAgICAgCi0gICAgV2Vha0dDUHRy
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXh0ZXJuYWxUeXBlIHZhbHVlLCBGaW5hbGl6ZXIg
ZmluYWxpemVyID0gMCkKKyAgICBXZWFrR0NQdHIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBF
eHRlcm5hbFR5cGUgdmFsdWUsIEZpbmFsaXplciogZmluYWxpemVyID0gMCwgdm9pZCogY29udGV4
dCA9IDApCiAgICAgICAgIDogbV9zbG90KGdsb2JhbERhdGEuYWxsb2NhdGVHbG9iYWxIYW5kbGUo
KSkKICAgICB7Ci0gICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3IobV9zbG90KS0+bWFrZVdlYWso
bV9zbG90LCBmaW5hbGl6ZXIpOworICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKG1fc2xvdCkt
Pm1ha2VXZWFrKG1fc2xvdCwgZmluYWxpemVyLCBjb250ZXh0KTsKICAgICAgICAgaW50ZXJuYWxT
ZXQodmFsdWUpOwogICAgIH0KIApAQCAtNzcsMTEgKzc3LDExIEBAIHB1YmxpYzoKICAgICAgICAg
SGFuZGxlSGVhcDo6aGVhcEZvcihtX3Nsb3QpLT5kZWFsbG9jYXRlKG1fc2xvdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFs
dWUsIEZpbmFsaXplciBmaW5hbGl6ZXIpCisgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBFeHRlcm5hbFR5cGUgdmFsdWUsIEZpbmFsaXplciogZmluYWxpemVyKQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLT5tX3Nsb3QpIHsKICAgICAgICAgICAgIHRoaXMtPm1fc2xvdCA9
IGdsb2JhbERhdGEuYWxsb2NhdGVHbG9iYWxIYW5kbGUoKTsKLSAgICAgICAgICAgIEhhbmRsZUhl
YXA6OmhlYXBGb3IodGhpcy0+bV9zbG90KS0+bWFrZVdlYWsodGhpcy0+bV9zbG90LCBmaW5hbGl6
ZXIpOworICAgICAgICAgICAgSGFuZGxlSGVhcDo6aGVhcEZvcih0aGlzLT5tX3Nsb3QpLT5tYWtl
V2Vhayh0aGlzLT5tX3Nsb3QsIGZpbmFsaXplciwgMCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgQVNTRVJUKEhhbmRsZUhlYXA6OmhlYXBGb3IodGhpcy0+bV9zbG90KS0+Z2V0RmluYWxp
emVyKHRoaXMtPm1fc2xvdCkgPT0gZmluYWxpemVyKTsKICAgICAgICAgdGhpcy0+aW50ZXJuYWxT
ZXQodmFsdWUpOwo=
</data>
<flag name="review"
          id="75541"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>