<?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>29891</bug_id>
          
          <creation_ts>2009-09-29 12:46:35 -0700</creation_ts>
          <short_desc>Web Inspector: Introduce inspected object groups for console and watch evaluation results so that they could be released explicitly.</short_desc>
          <delta_ts>2009-10-05 01:57:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151006</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-29 12:46:35 -0700</bug_when>
    <thetext>Currently console and watch evaluation results are wrapped with InspectorController::wrapObject. wrapObject caches the results in the inspector controller. We clean it up upon clearConsole. Originally, wrapObject was only applied to console evaluation results, so that implementation was correct. However, now watch expressions now use same method, while their lifetime does not depend on console. As a result we leak memory on every watch expressions update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151010</commentid>
    <comment_count>1</comment_count>
      <attachid>40318</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-29 12:57:39 -0700</bug_when>
    <thetext>Created attachment 40318
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152111</commentid>
    <comment_count>2</comment_count>
      <attachid>40318</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-10-03 16:21:49 -0700</bug_when>
    <thetext>Comment on attachment 40318
patch


&gt; +    for (Vector&lt;String&gt;::iterator it = groupIt-&gt;second.begin(); it != groupIt-&gt;second.end(); ++it) {
&gt; +        m_idToWrappedObject.remove(*it);
&gt; +    }

No need for braces here. Does find really return all objects found? I thought it just found the first and returned an iterator for that location for fast removal. I think this code will remove the found object and everything after it.

But I might be wrong. r- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152136</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-03 23:03:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 40318 [details])
&gt; 
&gt; &gt; +    for (Vector&lt;String&gt;::iterator it = groupIt-&gt;second.begin(); it != groupIt-&gt;second.end(); ++it) {
&gt; &gt; +        m_idToWrappedObject.remove(*it);
&gt; &gt; +    }
&gt; 
&gt; No need for braces here. Does find really return all objects found? I thought
&gt; it just found the first and returned an iterator for that location for fast
&gt; removal. I think this code will remove the found object and everything after
&gt; it.
&gt; 
&gt; But I might be wrong. r- for now.

m_objectGroups contains a mapping from object group id to a Vector of values. The loop here is iterating over groupIt-&gt;second which is that vector and releases all the objects from another map (objectId -&gt; ScriptObject one). Then it removes this single entry from m_objectGroups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152140</commentid>
    <comment_count>4</comment_count>
      <attachid>40592</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-04 00:29:14 -0700</bug_when>
    <thetext>Created attachment 40592
patch with review comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152239</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-05 01:57:24 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/JSInspectorBackendCustom.cpp
	M	WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/front-end/ConsoleView.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/ScriptsPanel.js
	M	WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
Committed r49084</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40318</attachid>
            <date>2009-09-29 12:57:39 -0700</date>
            <delta_ts>2009-10-04 00:29:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>watch_release</filename>
            <type>text/plain</type>
            <size>19205</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGNkZjFhOS4uNmUwOWE0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0OSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IFRp
bW90aHkgSGF0Y2hlci4KIAorICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnRyb2R1Y2UgaW5zcGVj
dGVkIG9iamVjdCBncm91cHMgZm9yIGNvbnNvbGUKKyAgICAgICAgYW5kIHdhdGNoIGV2YWx1YXRp
b24gcmVzdWx0cyBzbyB0aGF0IHRoZXkgY291bGQgYmUgcmVsZWFzZWQKKyAgICAgICAgZXhwbGlj
aXRseS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjk4OTEKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OndyYXBPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JC
YWNrZW5kOjp3cmFwT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6
OnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXApOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnVud3JhcE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3Vw
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xl
Vmlldy5wcm90b3R5cGUuZXZhbEluSW5zcGVjdGVkV2luZG93KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuZG9FdmFsSW5XaW5kb3cpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZW50ZXJLZXlQcmVzc2VkKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoSW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRl
QW5kV3JhcCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZUluQ2FsbEZyYW1lKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmV2YWx1YXRlSW5TZWxlY3RlZENh
bGxGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5k
b0V2YWxJbkNhbGxGcmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4
cHJlc3Npb25zU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuV2F0Y2hFeHBy
ZXNzaW9uc1NpZGViYXJQYW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Np
b25zU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlKToKKworMjAwOS0wOS0yOSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCisKICAgICAgICAgV2ViIEluc3BlY3RvcjogRW5jYXBzdWxhdGUgSlMgbGlzdGVu
ZXJzIHNwZWNpZmljcyBpbnRvIFNjcmlwdEV2ZW50TGlzdGVuZXIuCiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODE2CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAKaW5kZXggNTgzZDk3MS4uY2Ix
NWUzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRD
dXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3Vz
dG9tLmNwcApAQCAtMjk1LDEyICsyOTUsMTIgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6
Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgcmV0
dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChpbnNwZWN0ZWRXaW5kb3ctPmdsb2Jh
bEV4ZWMoKSwgdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGlu
c3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpKSwgbm9kZSkpOwogfQogCi1KU1ZhbHVlIEpTSW5z
cGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OndyYXBPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICByZXR1cm4gaW1wbCgpLT53cmFwT2JqZWN0KFNjcmlwdFZhbHVlKGFyZ3MuYXQoMCkpKS5qc1Zh
bHVlKCk7CisgICAgcmV0dXJuIGltcGwoKS0+d3JhcE9iamVjdChTY3JpcHRWYWx1ZShhcmdzLmF0
KDApKSwgYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSkuanNWYWx1ZSgpOwogfQogCiBKU1ZhbHVl
IEpTSW5zcGVjdG9yQmFja2VuZDo6dW53cmFwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCmluZGV4IGM4ZDZiZjIuLmQ0ODI5MmIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3Rv
bS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5k
Q3VzdG9tLmNwcApAQCAtMjMyLDExICsyMzIsMTEgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3Bl
Y3RvckJhY2tlbmROb2RlRm9ySWQpCiBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2Vu
ZFdyYXBPYmplY3QpCiB7CiAgICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLndyYXBPYmpl
Y3QoKSIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDIpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBJbnNwZWN0b3JC
YWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBh
cmdzLkhvbGRlcigpKTsKLSAgICByZXR1cm4gaW5zcGVjdG9yQmFja2VuZC0+d3JhcE9iamVjdChT
Y3JpcHRWYWx1ZShhcmdzWzBdKSkudjhWYWx1ZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JCYWNr
ZW5kLT53cmFwT2JqZWN0KFNjcmlwdFZhbHVlKGFyZ3NbMF0pLCB0b1dlYkNvcmVTdHJpbmdXaXRo
TnVsbENoZWNrKGFyZ3NbMV0pKS52OFZhbHVlKCk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChJ
bnNwZWN0b3JCYWNrZW5kVW53cmFwT2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmNwcAppbmRleCA3NTJlYzBjLi5lOGI4ZDc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmNwcApAQCAtNDc3LDEwICs0NzcsMTAgQEAgTm9kZSogSW5zcGVjdG9yQmFja2Vu
ZDo6bm9kZUZvcklkKGxvbmcgbm9kZUlkKQogICAgIHJldHVybiAwOwogfQogCi1TY3JpcHRWYWx1
ZSBJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3Qp
CitTY3JpcHRWYWx1ZSBJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZh
bHVlJiBvYmplY3QsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
d3JhcE9iamVjdChvYmplY3QpOworICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT53cmFwT2JqZWN0KG9iamVjdCwgb2JqZWN0R3JvdXApOwogICAgIHJldHVybiBTY3JpcHRWYWx1
ZSgpOwogfQogCkBAIC00OTEsNiArNDkxLDEyIEBAIFNjcmlwdFZhbHVlIEluc3BlY3RvckJhY2tl
bmQ6OnVud3JhcE9iamVjdChjb25zdCBTdHJpbmcmIG9iamVjdElkKQogICAgIHJldHVybiBTY3Jp
cHRWYWx1ZSgpOwogfQogCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbGVhc2VXcmFw
cGVyT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOworfQorCiBsb25nIEluc3BlY3RvckJhY2tlbmQ6
OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwgYm9vbCBzZWxlY3RJblVJKQogewog
ICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5kKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggNzIyNzhhMy4uZWM5OTdjZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtMTQ0LDggKzE0NCw5IEBAIHB1Ymxp
YzoKICAgICAvLyBHZW5lcmljIGNvZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVudGF0aW9u
cy4KICAgICB2b2lkIGhpZ2hsaWdodChsb25nIG5vZGVJZCk7CiAgICAgTm9kZSogbm9kZUZvcklk
KGxvbmcgbm9kZUlkKTsKLSAgICBTY3JpcHRWYWx1ZSB3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZh
bHVlJiBvYmplY3QpOworICAgIFNjcmlwdFZhbHVlIHdyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFs
dWUmIG9iamVjdCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CiAgICAgU2NyaXB0VmFsdWUg
dW53cmFwT2JqZWN0KGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIHZvaWQgcmVsZWFzZVdy
YXBwZXJPYmplY3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKICAgICBsb25nIHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwgYm9vbCBzZWxlY3RJblVJKTsKICAgICB2
b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICNpZiBF
TkFCTEUoREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCmluZGV4
IDVjNmJhYmIuLjlhMGUwMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRs
CkBAIC0xMTQsOCArMTE0LDkgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAgIC8vIENhbGxlZCBm
cm9tIEluamVjdGVkU2NyaXB0LgogICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgbm9kZUZvcklk
KGluIGxvbmcgbm9kZUlkKTsKLSAgICAgICAgW0N1c3RvbV0gbG9uZyB3cmFwT2JqZWN0KGluIERP
TU9iamVjdCBvYmplY3QpOworICAgICAgICBbQ3VzdG9tXSBsb25nIHdyYXBPYmplY3QoaW4gRE9N
T2JqZWN0IG9iamVjdCwgaW4gRE9NU3RyaW5nIG9iamVjdEdyb3VwKTsKICAgICAgICAgW0N1c3Rv
bV0gRE9NT2JqZWN0IHVud3JhcE9iamVjdChpbiBsb25nIG9iamVjdElkKTsKKyAgICAgICAgdm9p
ZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGluIERPTVN0cmluZyBvYmplY3RHcm91cCk7CiAg
ICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBu
b2RlLCBpbiBib29sZWFuIHNlbGVjdEluVUkpOwogICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFC
QVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggYmI3N2ViZi4uOGE1NmM3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTM5MCw3ICszOTAsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKGJvb2wgY2xlYXJVSSkKICAgICBtX2NvbnNv
bGVNZXNzYWdlcy5jbGVhcigpOwogICAgIG1fcHJldmlvdXNNZXNzYWdlID0gMDsKICAgICBtX2dy
b3VwTGV2ZWwgPSAwOwotICAgIG1faWRUb0NvbnNvbGVPYmplY3QuY2xlYXIoKTsKKyAgICByZWxl
YXNlV3JhcHBlck9iamVjdEdyb3VwKCJjb25zb2xlIik7CiAgICAgaWYgKG1fZG9tQWdlbnQpCiAg
ICAgICAgIG1fZG9tQWdlbnQtPnJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAgICAgaWYgKGNsZWFy
VUkgJiYgbV9mcm9udGVuZCkKQEAgLTcwMCw2ICs3MDAsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cygpCiAKICAgICBtX2Zyb250ZW5kLT5yZXNldCgpOwog
ICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KDApOworICAgIG1fb2JqZWN0R3JvdXBzLmNsZWFy
KCk7CisgICAgbV9pZFRvV3JhcHBlZE9iamVjdC5jbGVhcigpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAsIERv
Y3VtZW50TG9hZGVyKiBsb2FkZXJUb0tlZXApCkBAIC0xNjIzLDE1ICsxNjI1LDE4IEBAIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNwZWNpYWxQYW5lbHMgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3BlY2lh
bFBhbmVsRm9ySlNOYW1lKGNvCiAgICAgICAgIHJldHVybiBFbGVtZW50c1BhbmVsOwogfQogCi1T
Y3JpcHRWYWx1ZSBJbnNwZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZh
bHVlJiBxdWFyYW50aW5lZE9iamVjdCkKK1NjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRyb2xsZXI6
OndyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIHF1YXJhbnRpbmVkT2JqZWN0LCBjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3NjcmlwdFN0YXRlLCBtX2luamVjdGVkU2NyaXB0T2JqLCAiY3JlYXRlUHJveHlPYmplY3QiKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChxdWFyYW50aW5lZE9iamVjdCk7CiAgICAgaWYg
KHF1YXJhbnRpbmVkT2JqZWN0LmlzT2JqZWN0KCkpIHsKICAgICAgICAgbG9uZyBpZCA9IG1fbGFz
dEJvdW5kT2JqZWN0SWQrKzsKICAgICAgICAgU3RyaW5nIG9iamVjdElkID0gU3RyaW5nOjpmb3Jt
YXQoIm9iamVjdCMlbGQiLCBpZCk7Ci0gICAgICAgIG1faWRUb0NvbnNvbGVPYmplY3Quc2V0KG9i
amVjdElkLCBxdWFyYW50aW5lZE9iamVjdCk7Ci0KKyAgICAgICAgbV9pZFRvV3JhcHBlZE9iamVj
dC5zZXQob2JqZWN0SWQsIHF1YXJhbnRpbmVkT2JqZWN0KTsKKyAgICAgICAgT2JqZWN0R3JvdXBz
TWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0R3JvdXBzLmZpbmQob2JqZWN0R3JvdXApOworICAg
ICAgICBpZiAoaXQgPT0gbV9vYmplY3RHcm91cHMuZW5kKCkpCisgICAgICAgICAgICBpdCA9IG1f
b2JqZWN0R3JvdXBzLnNldChvYmplY3RHcm91cCwgVmVjdG9yPFN0cmluZz4oKSkuZmlyc3Q7Cisg
ICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKG9iamVjdElkKTsKICAgICAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQob2JqZWN0SWQpOwogICAgIH0KICAgICBTY3JpcHRWYWx1ZSB3cmFwcGVyID0g
ZnVuY3Rpb24uY2FsbCgpOwpAQCAtMTY0MCwxMiArMTY0NSwyMyBAQCBTY3JpcHRWYWx1ZSBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBxdWFyYW50aW5l
ZE9iamVjdAogCiBTY3JpcHRWYWx1ZSBJbnNwZWN0b3JDb250cm9sbGVyOjp1bndyYXBPYmplY3Qo
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBIYXNoTWFwPFN0cmluZywgU2NyaXB0VmFs
dWU+OjppdGVyYXRvciBpdCA9IG1faWRUb0NvbnNvbGVPYmplY3QuZmluZChvYmplY3RJZCk7Ci0g
ICAgaWYgKGl0ICE9IG1faWRUb0NvbnNvbGVPYmplY3QuZW5kKCkpCisgICAgSGFzaE1hcDxTdHJp
bmcsIFNjcmlwdFZhbHVlPjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9XcmFwcGVkT2JqZWN0LmZpbmQo
b2JqZWN0SWQpOworICAgIGlmIChpdCAhPSBtX2lkVG9XcmFwcGVkT2JqZWN0LmVuZCgpKQogICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIH0KIAor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXApCit7CisgICAgT2JqZWN0R3JvdXBzTWFwOjppdGVyYXRvciBn
cm91cEl0ID0gbV9vYmplY3RHcm91cHMuZmluZChvYmplY3RHcm91cCk7CisgICAgaWYgKGdyb3Vw
SXQgPT0gbV9vYmplY3RHcm91cHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKFZl
Y3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IGdyb3VwSXQtPnNlY29uZC5iZWdpbigpOyBpdCAh
PSBncm91cEl0LT5zZWNvbmQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgbV9pZFRvV3JhcHBlZE9i
amVjdC5yZW1vdmUoKml0KTsKKyAgICB9CisgICAgbV9vYmplY3RHcm91cHMucmVtb3ZlKGdyb3Vw
SXQpOworfQorCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0SW5qZWN0ZWRTY3JpcHQo
KQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX2lu
amVjdGVkU2NyaXB0T2JqLCAicmVzZXQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAppbmRleCBmZjdhNTE2Li5hODE0OWFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPEZyYW1lPiwgUmVzb3VyY2VzTWFwKj4gRnJhbWVSZXNvdXJjZXNNYXA7CiAg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERh
dGFiYXNlUmVzb3VyY2VzU2V0OwogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8SW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNTZXQ7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBPYmplY3RHcm91cHNNYXA7CiAKICAg
ICB0eXBlZGVmIGVudW0gewogICAgICAgICBDdXJyZW50UGFuZWwsCkBAIC0yOTUsOCArMjk2LDkg
QEAgcHJpdmF0ZToKICAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JGcm9u
dGVuZCBvbmx5LiBXZSBkb24ndCB3YW50IHRvIGV4cG9zZSB0aGVtIHRvIHRoZQogICAgIC8vIHJl
c3Qgb2YgdGhlIEluc3BlY3RvckNvbnRyb2xsZXIgY2xpZW50cy4KICAgICAvLyBUT0RPOiBleHRy
YWN0IHRoZXNlIGludG8gYSBzZXBhcmF0ZSBpbnRlcmZhY2UuCi0gICAgU2NyaXB0VmFsdWUgd3Jh
cE9iamVjdChjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0KTsKKyAgICBTY3JpcHRWYWx1ZSB3cmFw
T2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXApOwogICAgIFNjcmlwdFZhbHVlIHVud3JhcE9iamVjdChjb25zdCBTdHJpbmcmIG9iamVjdElk
KTsKKyAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCk7CiAgICAgCiAgICAgdm9pZCByZXNldEluamVjdGVkU2NyaXB0KCk7CiAKQEAgLTM2
MCw3ICszNjIsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxl
ZDsKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JCYWNrZW5kPiBtX2luc3BlY3RvckJhY2tlbmQ7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFNjcmlwdFZhbHVlPiBtX2lkVG9Db25zb2xlT2JqZWN0OworICAgIEhhc2hNYXA8U3RyaW5n
LCBTY3JpcHRWYWx1ZT4gbV9pZFRvV3JhcHBlZE9iamVjdDsKKyAgICBPYmplY3RHcm91cHNNYXAg
bV9vYmplY3RHcm91cHM7CisKICAgICBsb25nIG1fbGFzdEJvdW5kT2JqZWN0SWQ7CiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBtX2RlYnVnZ2VyRW5hYmxlZDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCA2M2JiNmUyLi4wZjA4ZWIy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC04Nyw3ICs4Nyw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU2Ny
aXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zCiAgICAgICAgICAgICBmdW5jdGlvbi0+YXBwZW5k
QXJndW1lbnQoZnJhbWVzW2ldKTsKICAgICB9IGVsc2UgaWYgKCF3cmFwcGVkQXJndW1lbnRzLmlz
RW1wdHkoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd3JhcHBlZEFyZ3Vt
ZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudCht
X2luc3BlY3RvckNvbnRyb2xsZXItPndyYXBPYmplY3Qod3JhcHBlZEFyZ3VtZW50c1tpXSkpOwor
ICAgICAgICAgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+d3JhcE9iamVjdCh3cmFwcGVkQXJndW1lbnRzW2ldLCAiY29uc29sZSIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KG1lc3NhZ2UpOwogICAgIGZ1bmN0
aW9uLT5jYWxsKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29u
c29sZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMK
aW5kZXggNGY1MGVjYy4uNmNiMTRmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
b25zb2xlVmlldy5qcwpAQCAtMzkxLDE2ICszOTEsMTYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5wcm9tcHQuaGFuZGxlS2V5RXZlbnQoZXZl
bnQpOwogICAgIH0sCiAKLSAgICBldmFsSW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJl
c3Npb24sIGNhbGxiYWNrKQorICAgIGV2YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhw
cmVzc2lvbiwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMucGF1
c2VkKSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZXZhbHVhdGVJ
blNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZhbHNlLCBjYWxsYmFjayk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5kb0V2YWxJbldpbmRvdyhleHBy
ZXNzaW9uLCBjYWxsYmFjayk7CisgICAgICAgIHRoaXMuZG9FdmFsSW5XaW5kb3coZXhwcmVzc2lv
biwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKTsKICAgICB9LAogCi0gICAgZG9FdmFsSW5XaW5kb3c6
IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNhbGxiYWNrKQorICAgIGRvRXZhbEluV2luZG93OiBmdW5j
dGlvbihleHByZXNzaW9uLCBvYmplY3RHcm91cCwgY2FsbGJhY2spCiAgICAgewogICAgICAgICBp
ZiAoIWV4cHJlc3Npb24pIHsKICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGV4cHJlc3Npb24s
IHNvIHRoZSBjb21wbGV0aW9uIHNob3VsZCBoYXBwZW4gYWdhaW5zdCBnbG9iYWwgcHJvcGVydGll
cy4KQEAgLTQxMSw3ICs0MTEsNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBl
ID0gewogICAgICAgICB7CiAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUsIHJlc3Vs
dC5pc0V4Y2VwdGlvbik7CiAgICAgICAgIH07Ci0gICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNz
LmV2YWx1YXRlKGV4cHJlc3Npb24sIGV2YWxDYWxsYmFjayk7CisgICAgICAgIEluamVjdGVkU2Ny
aXB0QWNjZXNzLmV2YWx1YXRlKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBldmFsQ2FsbGJhY2sp
OwogICAgIH0sCiAKICAgICBfZW50ZXJLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKQEAgLTQz
OSw3ICs0MzksNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgc2VsZi5wcm9tcHQudGV4dCA9ICIiOwogICAgICAgICAgICAgc2VsZi5hZGRNZXNz
YWdlKG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQocmVzdWx0LCBleGNlcHRp
b24sIGNvbW1hbmRNZXNzYWdlKSk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5ldmFsSW5JbnNw
ZWN0ZWRXaW5kb3coc3RyLCBwcmludFJlc3VsdCk7CisgICAgICAgIHRoaXMuZXZhbEluSW5zcGVj
dGVkV2luZG93KHN0ciwgImNvbnNvbGUiLCBwcmludFJlc3VsdCk7CiAgICAgfSwKIAogICAgIF9m
b3JtYXQ6IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggODcyOTNiOC4uNDA1NWQw
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpA
QCAtNTI5LDE2ICs1MjksMTYgQEAgSW5qZWN0ZWRTY3JpcHQuZ2V0Q29tcGxldGlvbnMgPSBmdW5j
dGlvbihleHByZXNzaW9uLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmUKICAgICByZXR1cm4g
cHJvcHM7CiB9CiAKLUluamVjdGVkU2NyaXB0LmV2YWx1YXRlID0gZnVuY3Rpb24oZXhwcmVzc2lv
bikKK0luamVjdGVkU2NyaXB0LmV2YWx1YXRlID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXApCiB7Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZUFuZFdyYXAoSW5q
ZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwsIEluamVjdGVkU2NyaXB0Ll93aW5kb3coKSwgZXhw
cmVzc2lvbik7CisgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZUFuZFdyYXAoSW5q
ZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwsIEluamVjdGVkU2NyaXB0Ll93aW5kb3coKSwgZXhw
cmVzc2lvbiwgb2JqZWN0R3JvdXApOwogfQogCi1JbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVBbmRX
cmFwID0gZnVuY3Rpb24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4cHJlc3Npb24pCitJbmplY3Rl
ZFNjcmlwdC5fZXZhbHVhdGVBbmRXcmFwID0gZnVuY3Rpb24oZXZhbEZ1bmN0aW9uLCBvYmplY3Qs
IGV4cHJlc3Npb24sIG9iamVjdEdyb3VwKQogewogICAgIHZhciByZXN1bHQgPSB7fTsKICAgICB0
cnkgewotICAgICAgICByZXN1bHQudmFsdWUgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBPYmpl
Y3QoSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlT24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4cHJl
c3Npb24pKTsKKyAgICAgICAgcmVzdWx0LnZhbHVlID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFw
T2JqZWN0KEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZU9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBl
eHByZXNzaW9uKSwgb2JqZWN0R3JvdXApOwogICAgICAgICAvLyBIYW5kbGUgZXJyb3IgdGhhdCBt
aWdodCBoYXZlIGhhcHBlbmVkIHdoaWxlIGRlc2NyaWJpbmcgcmVzdWx0LgogICAgICAgICBpZiAo
cmVzdWx0LnZhbHVlLmVycm9yVGV4dCkgewogICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gcmVz
dWx0LnZhbHVlLmVycm9yVGV4dDsKQEAgLTgzOCwxMiArODM4LDEyIEBAIEluamVjdGVkU2NyaXB0
LmdldENhbGxGcmFtZXMgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGVJbkNhbGxGcmFtZSA9IGZ1bmN0aW9uKGNhbGxGcmFtZUlkLCBj
b2RlKQorSW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVJbkNhbGxGcmFtZSA9IGZ1bmN0aW9uKGNhbGxG
cmFtZUlkLCBjb2RlLCBvYmplY3RHcm91cCkKIHsKICAgICB2YXIgY2FsbEZyYW1lID0gSW5qZWN0
ZWRTY3JpcHQuX2NhbGxGcmFtZUZvcklkKGNhbGxGcmFtZUlkKTsKICAgICBpZiAoIWNhbGxGcmFt
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5fZXZh
bHVhdGVBbmRXcmFwKGNhbGxGcmFtZS5ldmFsdWF0ZSwgY2FsbEZyYW1lLCBjb2RlKTsKKyAgICBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUuZXZhbHVhdGUs
IGNhbGxGcmFtZSwgY29kZSwgb2JqZWN0R3JvdXApOwogfQogCiBJbmplY3RlZFNjcmlwdC5fY2Fs
bEZyYW1lRm9ySWQgPSBmdW5jdGlvbihpZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1BhbmVsLmpzCmluZGV4IGFlOTE4ZDEuLjA1ZWMxOTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMzU5LDcgKzM1OSw3IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gc2VsZWN0
ZWRDYWxsRnJhbWUuaWQ7CiAgICAgfSwKIAotICAgIGV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFt
ZTogZnVuY3Rpb24oY29kZSwgdXBkYXRlSW50ZXJmYWNlLCBjYWxsYmFjaykKKyAgICBldmFsdWF0
ZUluU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9uKGNvZGUsIHVwZGF0ZUludGVyZmFjZSwgb2Jq
ZWN0R3JvdXAsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGVkQ2FsbEZyYW1l
ID0gdGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNlbGVjdGVkQ2FsbEZyYW1lOwogICAgICAg
ICBpZiAoIXRoaXMuX3BhdXNlZCB8fCAhc2VsZWN0ZWRDYWxsRnJhbWUpCkBAIC0zNzUsMTcgKzM3
NSwxNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCiAgICAgICAgICAgICAgICAgc2VsZi5zaWRlYmFyUGFu
ZXMuc2NvcGVjaGFpbi51cGRhdGUoc2VsZWN0ZWRDYWxsRnJhbWUpOwogICAgICAgICB9Ci0gICAg
ICAgIHRoaXMuZG9FdmFsSW5DYWxsRnJhbWUoc2VsZWN0ZWRDYWxsRnJhbWUsIGNvZGUsIHVwZGF0
aW5nQ2FsbGJhY2tXcmFwcGVyKTsKKyAgICAgICAgdGhpcy5kb0V2YWxJbkNhbGxGcmFtZShzZWxl
Y3RlZENhbGxGcmFtZSwgY29kZSwgb2JqZWN0R3JvdXAsIHVwZGF0aW5nQ2FsbGJhY2tXcmFwcGVy
KTsKICAgICB9LAogCi0gICAgZG9FdmFsSW5DYWxsRnJhbWU6IGZ1bmN0aW9uKGNhbGxGcmFtZSwg
Y29kZSwgY2FsbGJhY2spCisgICAgZG9FdmFsSW5DYWxsRnJhbWU6IGZ1bmN0aW9uKGNhbGxGcmFt
ZSwgY29kZSwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24g
ZXZhbENhbGxiYWNrKHJlc3VsdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHJlc3VsdCkK
ICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUsIHJlc3VsdC5pc0V4Y2VwdGlv
bik7CiAgICAgICAgIH0KLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZXZhbHVhdGVJbkNh
bGxGcmFtZShjYWxsRnJhbWUuaWQsIGNvZGUsIGV2YWxDYWxsYmFjayk7CisgICAgICAgIEluamVj
dGVkU2NyaXB0QWNjZXNzLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lLmlkLCBjb2RlLCBv
YmplY3RHcm91cCwgZXZhbENhbGxiYWNrKTsKICAgICB9LAogCiAgICAgdmFyaWFibGVzSW5TZWxl
Y3RlZENhbGxGcmFtZTogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanMKaW5kZXggZDZkMWQ2
MS4uOTZhMjBhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dhdGNo
RXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCkBAIC03NSw2ICs3NSw4IEBAIFdlYklu
c3BlY3Rvci5XYXRjaEV4cHJlc3Npb25zU2VjdGlvbiA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmVk
aXRhYmxlID0gdHJ1ZTsKICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTsKICAgICB0aGlzLnByb3Bl
cnRpZXNFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIndhdGNoLWV4cHJlc3Npb25zIik7CisKKyAgICB0
aGlzLl93YXRjaE9iamVjdEdyb3VwSWQgPSAid2F0Y2gtZ3JvdXAiOwogfQogCiBXZWJJbnNwZWN0
b3IuV2F0Y2hFeHByZXNzaW9uc1NlY3Rpb24uTmV3V2F0Y2hFeHByZXNzaW9uID0gIlx4QTAiOwpA
QCAtMTE0LDYgKzExNiw3IEBAIFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25zU2VjdGlvbi5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKHByb3Bl
cnRpZXMsIFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25UcmVlRWxlbWVudCwgV2ViSW5zcGVj
dG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzKTsKICAgICAgICAg
fQogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIucmVsZWFzZVdyYXBwZXJPYmplY3RHcm91
cCh0aGlzLl93YXRjaE9iamVjdEdyb3VwSWQpCiAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107
CiAKICAgICAgICAgLy8gQ291bnQgdGhlIHByb3BlcnRpZXMsIHNvIHdlIGtub3duIHdoZW4gdG8g
Y2FsbCB0aGlzLnVwZGF0ZVByb3BlcnRpZXMoKQpAQCAtMTI5LDEwICsxMzIsMTAgQEAgV2ViSW5z
cGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8g
d2hpY2ggaXMgY2hlY2tlZCBpbiB0aGUgYXBwZW5kUmVzdWx0IGlubmVyIGZ1bmN0aW9uLgogICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMud2F0Y2hFeHByZXNzaW9ucy5sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLndhdGNoRXhwcmVzc2lvbnNb
aV07Ci0gICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pIAorICAgICAgICAgICAgaWYgKCFleHBy
ZXNzaW9uKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuY29uc29sZS5ldmFsSW5JbnNwZWN0ZWRXaW5kb3coIigiICsgZXhwcmVzc2lvbiArICIp
IiwgYXBwZW5kUmVzdWx0LmJpbmQodGhpcywgZXhwcmVzc2lvbiwgaSkpOworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmNvbnNvbGUuZXZhbEluSW5zcGVjdGVkV2luZG93KCIoIiArIGV4cHJlc3Np
b24gKyAiKSIsIHRoaXMuX3dhdGNoT2JqZWN0R3JvdXBJZCwgYXBwZW5kUmVzdWx0LmJpbmQodGhp
cywgZXhwcmVzc2lvbiwgaSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gbm90ZSB0aGlzIGlz
IHNldHRpbmcgdGhlIGV4cGFuc2lvbiBvZiB0aGUgdHJlZSwgbm90IHRoZSBzZWN0aW9uOwo=
</data>
<flag name="review"
          id="21533"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40592</attachid>
            <date>2009-10-04 00:29:14 -0700</date>
            <delta_ts>2009-10-04 06:25:28 -0700</delta_ts>
            <desc>patch with review comments addressed</desc>
            <filename>object_group</filename>
            <type>text/plain</type>
            <size>19239</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWRmNTZlYi4uMTk5YjMwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIyNzYsNiArMjI3Niw0OSBAQAogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFRpbW90aHkgSGF0Y2hlci4KIAorICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnRyb2R1Y2Ug
aW5zcGVjdGVkIG9iamVjdCBncm91cHMgZm9yIGNvbnNvbGUKKyAgICAgICAgYW5kIHdhdGNoIGV2
YWx1YXRpb24gcmVzdWx0cyBzbyB0aGF0IHRoZXkgY291bGQgYmUgcmVsZWFzZWQKKyAgICAgICAg
ZXhwbGljaXRseS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mjk4OTEKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OndyYXBPYmpl
Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
Y2tlbmQ6OnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXApOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnVud3JhcE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlV3JhcHBlck9iamVj
dEdyb3VwKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
b25zb2xlVmlldy5wcm90b3R5cGUuZXZhbEluSW5zcGVjdGVkV2luZG93KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuZG9FdmFsSW5XaW5kb3cpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZW50ZXJLZXlQcmVzc2VkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAg
ICAoSW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuX2V2
YWx1YXRlQW5kV3JhcCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZUluQ2FsbEZy
YW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmV2YWx1YXRlSW5TZWxl
Y3RlZENhbGxGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZS5kb0V2YWxJbkNhbGxGcmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9X
YXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuV2F0
Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5XYXRjaEV4
cHJlc3Npb25zU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlKToKKworMjAwOS0wOS0yOSAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBU
aW1vdGh5IEhhdGNoZXIuCisKICAgICAgICAgV2ViIEluc3BlY3RvcjogRW5jYXBzdWxhdGUgSlMg
bGlzdGVuZXJzIHNwZWNpZmljcyBpbnRvIFNjcmlwdEV2ZW50TGlzdGVuZXIuCiAKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODE2CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAKaW5kZXggNTgzZDk3
MS4uY2IxNWUzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJh
Y2tlbmRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNr
ZW5kQ3VzdG9tLmNwcApAQCAtMjk1LDEyICsyOTUsMTIgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckJh
Y2tlbmQ6Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAg
ICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChpbnNwZWN0ZWRXaW5kb3ct
Pmdsb2JhbEV4ZWMoKSwgdG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpKSwgbm9kZSkpOwogfQogCi1KU1ZhbHVl
IEpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQorSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OndyYXBPYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEp
CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKLSAgICByZXR1cm4gaW1wbCgpLT53cmFwT2JqZWN0KFNjcmlwdFZhbHVlKGFyZ3MuYXQoMCkp
KS5qc1ZhbHVlKCk7CisgICAgcmV0dXJuIGltcGwoKS0+d3JhcE9iamVjdChTY3JpcHRWYWx1ZShh
cmdzLmF0KDApKSwgYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSkuanNWYWx1ZSgpOwogfQogCiBK
U1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6dW53cmFwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCmluZGV4IGM4ZDZiZjIuLmQ0ODI5MmIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2Vu
ZEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JC
YWNrZW5kQ3VzdG9tLmNwcApAQCAtMjMyLDExICsyMzIsMTEgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KEluc3BlY3RvckJhY2tlbmROb2RlRm9ySWQpCiBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9y
QmFja2VuZFdyYXBPYmplY3QpCiB7CiAgICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLndy
YXBPYmplY3QoKSIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDIpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBJbnNw
ZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNL
RU5ELCBhcmdzLkhvbGRlcigpKTsKLSAgICByZXR1cm4gaW5zcGVjdG9yQmFja2VuZC0+d3JhcE9i
amVjdChTY3JpcHRWYWx1ZShhcmdzWzBdKSkudjhWYWx1ZSgpOworICAgIHJldHVybiBpbnNwZWN0
b3JCYWNrZW5kLT53cmFwT2JqZWN0KFNjcmlwdFZhbHVlKGFyZ3NbMF0pLCB0b1dlYkNvcmVTdHJp
bmdXaXRoTnVsbENoZWNrKGFyZ3NbMV0pKS52OFZhbHVlKCk7CiB9CiAKIENBTExCQUNLX0ZVTkNf
REVDTChJbnNwZWN0b3JCYWNrZW5kVW53cmFwT2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmNwcAppbmRleCA3NTJlYzBjLi5lOGI4ZDc2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtNDc3LDEwICs0NzcsMTAgQEAgTm9kZSogSW5zcGVjdG9y
QmFja2VuZDo6bm9kZUZvcklkKGxvbmcgbm9kZUlkKQogICAgIHJldHVybiAwOwogfQogCi1TY3Jp
cHRWYWx1ZSBJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBv
YmplY3QpCitTY3JpcHRWYWx1ZSBJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0KGNvbnN0IFNj
cmlwdFZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+d3JhcE9iamVjdChvYmplY3QpOworICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT53cmFwT2JqZWN0KG9iamVjdCwgb2JqZWN0R3JvdXApOwogICAgIHJldHVybiBTY3Jp
cHRWYWx1ZSgpOwogfQogCkBAIC00OTEsNiArNDkxLDEyIEBAIFNjcmlwdFZhbHVlIEluc3BlY3Rv
ckJhY2tlbmQ6OnVud3JhcE9iamVjdChjb25zdCBTdHJpbmcmIG9iamVjdElkKQogICAgIHJldHVy
biBTY3JpcHRWYWx1ZSgpOwogfQogCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbGVhc2VXcmFw
cGVyT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlbGVh
c2VXcmFwcGVyT2JqZWN0R3JvdXAob2JqZWN0R3JvdXApOworfQorCiBsb25nIEluc3BlY3RvckJh
Y2tlbmQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwgYm9vbCBzZWxlY3RJblVJ
KQogewogICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5k
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggNzIyNzhhMy4uZWM5OTdj
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtMTQ0LDggKzE0NCw5IEBA
IHB1YmxpYzoKICAgICAvLyBHZW5lcmljIGNvZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVu
dGF0aW9ucy4KICAgICB2b2lkIGhpZ2hsaWdodChsb25nIG5vZGVJZCk7CiAgICAgTm9kZSogbm9k
ZUZvcklkKGxvbmcgbm9kZUlkKTsKLSAgICBTY3JpcHRWYWx1ZSB3cmFwT2JqZWN0KGNvbnN0IFNj
cmlwdFZhbHVlJiBvYmplY3QpOworICAgIFNjcmlwdFZhbHVlIHdyYXBPYmplY3QoY29uc3QgU2Ny
aXB0VmFsdWUmIG9iamVjdCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CiAgICAgU2NyaXB0
VmFsdWUgdW53cmFwT2JqZWN0KGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIHZvaWQgcmVs
ZWFzZVdyYXBwZXJPYmplY3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKICAgICBs
b25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwgYm9vbCBzZWxlY3RJblVJKTsK
ICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRs
CmluZGV4IDVjNmJhYmIuLjlhMGUwMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsCkBAIC0xMTQsOCArMTE0LDkgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAgIC8vIENh
bGxlZCBmcm9tIEluamVjdGVkU2NyaXB0LgogICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgbm9k
ZUZvcklkKGluIGxvbmcgbm9kZUlkKTsKLSAgICAgICAgW0N1c3RvbV0gbG9uZyB3cmFwT2JqZWN0
KGluIERPTU9iamVjdCBvYmplY3QpOworICAgICAgICBbQ3VzdG9tXSBsb25nIHdyYXBPYmplY3Qo
aW4gRE9NT2JqZWN0IG9iamVjdCwgaW4gRE9NU3RyaW5nIG9iamVjdEdyb3VwKTsKICAgICAgICAg
W0N1c3RvbV0gRE9NT2JqZWN0IHVud3JhcE9iamVjdChpbiBsb25nIG9iamVjdElkKTsKKyAgICAg
ICAgdm9pZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGluIERPTVN0cmluZyBvYmplY3RHcm91
cCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGluIERPTU9i
amVjdCBub2RlLCBpbiBib29sZWFuIHNlbGVjdEluVUkpOwogICAgICAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogI2lmIGRlZmluZWQoRU5BQkxF
X0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggNmMyMjI5NS4uNWM4YWFmYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTM5MCw3ICszOTAsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKGJvb2wgY2xlYXJVSSkKICAgICBt
X2NvbnNvbGVNZXNzYWdlcy5jbGVhcigpOwogICAgIG1fcHJldmlvdXNNZXNzYWdlID0gMDsKICAg
ICBtX2dyb3VwTGV2ZWwgPSAwOwotICAgIG1faWRUb0NvbnNvbGVPYmplY3QuY2xlYXIoKTsKKyAg
ICByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKCJjb25zb2xlIik7CiAgICAgaWYgKG1fZG9tQWdl
bnQpCiAgICAgICAgIG1fZG9tQWdlbnQtPnJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAgICAgaWYg
KGNsZWFyVUkgJiYgbV9mcm9udGVuZCkKQEAgLTcwMCw2ICs3MDAsOCBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cygpCiAKICAgICBtX2Zyb250ZW5kLT5yZXNl
dCgpOwogICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KDApOworICAgIG1fb2JqZWN0R3JvdXBz
LmNsZWFyKCk7CisgICAgbV9pZFRvV3JhcHBlZE9iamVjdC5jbGVhcigpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCogcmVzb3VyY2VN
YXAsIERvY3VtZW50TG9hZGVyKiBsb2FkZXJUb0tlZXApCkBAIC0xNjQxLDE1ICsxNjQzLDE4IEBA
IEluc3BlY3RvckNvbnRyb2xsZXI6OlNwZWNpYWxQYW5lbHMgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNvCiAgICAgICAgIHJldHVybiBFbGVtZW50c1BhbmVsOwog
fQogCi1TY3JpcHRWYWx1ZSBJbnNwZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KGNvbnN0IFNj
cmlwdFZhbHVlJiBxdWFyYW50aW5lZE9iamVjdCkKK1NjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRy
b2xsZXI6OndyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIHF1YXJhbnRpbmVkT2JqZWN0LCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3NjcmlwdFN0YXRlLCBtX2luamVjdGVkU2NyaXB0T2JqLCAiY3JlYXRlUHJveHlPYmpl
Y3QiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChxdWFyYW50aW5lZE9iamVjdCk7CiAg
ICAgaWYgKHF1YXJhbnRpbmVkT2JqZWN0LmlzT2JqZWN0KCkpIHsKICAgICAgICAgbG9uZyBpZCA9
IG1fbGFzdEJvdW5kT2JqZWN0SWQrKzsKICAgICAgICAgU3RyaW5nIG9iamVjdElkID0gU3RyaW5n
Ojpmb3JtYXQoIm9iamVjdCMlbGQiLCBpZCk7Ci0gICAgICAgIG1faWRUb0NvbnNvbGVPYmplY3Qu
c2V0KG9iamVjdElkLCBxdWFyYW50aW5lZE9iamVjdCk7Ci0KKyAgICAgICAgbV9pZFRvV3JhcHBl
ZE9iamVjdC5zZXQob2JqZWN0SWQsIHF1YXJhbnRpbmVkT2JqZWN0KTsKKyAgICAgICAgT2JqZWN0
R3JvdXBzTWFwOjppdGVyYXRvciBpdCA9IG1fb2JqZWN0R3JvdXBzLmZpbmQob2JqZWN0R3JvdXAp
OworICAgICAgICBpZiAoaXQgPT0gbV9vYmplY3RHcm91cHMuZW5kKCkpCisgICAgICAgICAgICBp
dCA9IG1fb2JqZWN0R3JvdXBzLnNldChvYmplY3RHcm91cCwgVmVjdG9yPFN0cmluZz4oKSkuZmly
c3Q7CisgICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKG9iamVjdElkKTsKICAgICAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwogICAgIH0KICAgICBTY3JpcHRWYWx1ZSB3cmFw
cGVyID0gZnVuY3Rpb24uY2FsbCgpOwpAQCAtMTY1OCwxMiArMTY2MywyNCBAQCBTY3JpcHRWYWx1
ZSBJbnNwZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBxdWFy
YW50aW5lZE9iamVjdAogCiBTY3JpcHRWYWx1ZSBJbnNwZWN0b3JDb250cm9sbGVyOjp1bndyYXBP
YmplY3QoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBIYXNoTWFwPFN0cmluZywgU2Ny
aXB0VmFsdWU+OjppdGVyYXRvciBpdCA9IG1faWRUb0NvbnNvbGVPYmplY3QuZmluZChvYmplY3RJ
ZCk7Ci0gICAgaWYgKGl0ICE9IG1faWRUb0NvbnNvbGVPYmplY3QuZW5kKCkpCisgICAgSGFzaE1h
cDxTdHJpbmcsIFNjcmlwdFZhbHVlPjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9XcmFwcGVkT2JqZWN0
LmZpbmQob2JqZWN0SWQpOworICAgIGlmIChpdCAhPSBtX2lkVG9XcmFwcGVkT2JqZWN0LmVuZCgp
KQogICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsK
IH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3Vw
KGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCit7CisgICAgT2JqZWN0R3JvdXBzTWFwOjppdGVy
YXRvciBncm91cEl0ID0gbV9vYmplY3RHcm91cHMuZmluZChvYmplY3RHcm91cCk7CisgICAgaWYg
KGdyb3VwSXQgPT0gbV9vYmplY3RHcm91cHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFZlY3RvcjxTdHJpbmc+JiBncm91cElkcyA9IGdyb3VwSXQtPnNlY29uZDsKKyAgICBmb3IgKFZl
Y3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IGdyb3VwSWRzLmJlZ2luKCk7IGl0ICE9IGdyb3Vw
SWRzLmVuZCgpOyArK2l0KQorICAgICAgICBtX2lkVG9XcmFwcGVkT2JqZWN0LnJlbW92ZSgqaXQp
OworICAgIG1fb2JqZWN0R3JvdXBzLnJlbW92ZShncm91cEl0KTsKK30KKwogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZXNldEluamVjdGVkU2NyaXB0KCkKIHsKICAgICBTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV9pbmplY3RlZFNjcmlwdE9iaiwgInJlc2V0
Iik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNTliZTJmZi4u
Zjg4YmFhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtOTIs
NiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxGcmFtZT4sIFJl
c291cmNlc01hcCo+IEZyYW1lUmVzb3VyY2VzTWFwOwogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gPiBEYXRhYmFzZVJlc291cmNlc1NldDsKICAg
ICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBE
T01TdG9yYWdlUmVzb3VyY2VzU2V0OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3Rv
cjxTdHJpbmc+ID4gT2JqZWN0R3JvdXBzTWFwOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKICAgICAg
ICAgQ3VycmVudFBhbmVsLApAQCAtMjk4LDggKzI5OSw5IEBAIHByaXZhdGU6CiAgICAgLy8gRm9s
bG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yRnJvbnRlbmQgb25seS4gV2UgZG9uJ3Qgd2Fu
dCB0byBleHBvc2UgdGhlbSB0byB0aGUKICAgICAvLyByZXN0IG9mIHRoZSBJbnNwZWN0b3JDb250
cm9sbGVyIGNsaWVudHMuCiAgICAgLy8gVE9ETzogZXh0cmFjdCB0aGVzZSBpbnRvIGEgc2VwYXJh
dGUgaW50ZXJmYWNlLgotICAgIFNjcmlwdFZhbHVlIHdyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFs
dWUmIG9iamVjdCk7CisgICAgU2NyaXB0VmFsdWUgd3JhcE9iamVjdChjb25zdCBTY3JpcHRWYWx1
ZSYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKICAgICBTY3JpcHRWYWx1ZSB1
bndyYXBPYmplY3QoY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7CisgICAgdm9pZCByZWxlYXNlV3Jh
cHBlck9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogICAgIAogICAgIHZv
aWQgcmVzZXRJbmplY3RlZFNjcmlwdCgpOwogCkBAIC0zNjMsNyArMzY1LDkgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNl
VHJhY2tpbmdTZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9p
bnNwZWN0b3JCYWNrZW5kOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHRWYWx1ZT4gbV9pZFRv
Q29uc29sZU9iamVjdDsKKyAgICBIYXNoTWFwPFN0cmluZywgU2NyaXB0VmFsdWU+IG1faWRUb1dy
YXBwZWRPYmplY3Q7CisgICAgT2JqZWN0R3JvdXBzTWFwIG1fb2JqZWN0R3JvdXBzOworCiAgICAg
bG9uZyBtX2xhc3RCb3VuZE9iamVjdElkOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgIGJvb2wgbV9kZWJ1Z2dlckVuYWJsZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5jcHAKaW5kZXggNjNiYjZlMi4uMGYwOGViMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcApAQCAtODcsNyArODcsNyBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjphZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwg
Y29ucwogICAgICAgICAgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tpXSk7CiAg
ICAgfSBlbHNlIGlmICghd3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHdyYXBwZWRBcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQobV9pbnNwZWN0b3JDb250cm9sbGVyLT53
cmFwT2JqZWN0KHdyYXBwZWRBcmd1bWVudHNbaV0pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChtX2luc3BlY3RvckNvbnRyb2xsZXItPndyYXBPYmplY3Qod3JhcHBlZEFy
Z3VtZW50c1tpXSwgImNvbnNvbGUiKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChtZXNzYWdlKTsKICAgICBmdW5jdGlvbi0+Y2FsbCgpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCmluZGV4IDRmNTBlY2MuLjZjYjE0ZjEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKQEAgLTM5MSwx
NiArMzkxLDE2IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMucHJvbXB0LmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKICAgICB9LAogCi0gICAgZXZh
bEluSW5zcGVjdGVkV2luZG93OiBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxsYmFjaykKKyAgICBl
dmFsSW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBj
YWxsYmFjaykKICAgICB7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMg
JiYgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnBhdXNlZCkgewogICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHBy
ZXNzaW9uLCBmYWxzZSwgY2FsbGJhY2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIHRoaXMuZG9FdmFsSW5XaW5kb3coZXhwcmVzc2lvbiwgY2FsbGJhY2spOworICAg
ICAgICB0aGlzLmRvRXZhbEluV2luZG93KGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBjYWxsYmFj
ayk7CiAgICAgfSwKIAotICAgIGRvRXZhbEluV2luZG93OiBmdW5jdGlvbihleHByZXNzaW9uLCBj
YWxsYmFjaykKKyAgICBkb0V2YWxJbldpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXAsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKSB7CiAgICAg
ICAgICAgICAvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uLCBzbyB0aGUgY29tcGxldGlvbiBzaG91
bGQgaGFwcGVuIGFnYWluc3QgZ2xvYmFsIHByb3BlcnRpZXMuCkBAIC00MTEsNyArNDExLDcgQEAg
V2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgewogICAgICAg
ICAgICAgY2FsbGJhY2socmVzdWx0LnZhbHVlLCByZXN1bHQuaXNFeGNlcHRpb24pOwogICAgICAg
ICB9OwotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5ldmFsdWF0ZShleHByZXNzaW9uLCBl
dmFsQ2FsbGJhY2spOworICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5ldmFsdWF0ZShleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCwgZXZhbENhbGxiYWNrKTsKICAgICB9LAogCiAgICAgX2VudGVy
S2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC00MzksNyArNDM5LDcgQEAgV2ViSW5zcGVj
dG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYucHJvbXB0LnRl
eHQgPSAiIjsKICAgICAgICAgICAgIHNlbGYuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNv
bnNvbGVDb21tYW5kUmVzdWx0KHJlc3VsdCwgZXhjZXB0aW9uLCBjb21tYW5kTWVzc2FnZSkpOwog
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuZXZhbEluSW5zcGVjdGVkV2luZG93KHN0ciwgcHJpbnRS
ZXN1bHQpOworICAgICAgICB0aGlzLmV2YWxJbkluc3BlY3RlZFdpbmRvdyhzdHIsICJjb25zb2xl
IiwgcHJpbnRSZXN1bHQpOwogICAgIH0sCiAKICAgICBfZm9ybWF0OiBmdW5jdGlvbihvdXRwdXQs
IGZvcmNlT2JqZWN0Rm9ybWF0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVj
dGVkU2NyaXB0LmpzCmluZGV4IDg3MjkzYjguLjQwNTVkMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTUyOSwxNiArNTI5LDE2IEBAIElu
amVjdGVkU2NyaXB0LmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaW5jbHVk
ZUluc3BlY3RvckNvbW1hbmRMaW5lCiAgICAgcmV0dXJuIHByb3BzOwogfQogCi1JbmplY3RlZFNj
cmlwdC5ldmFsdWF0ZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pCitJbmplY3RlZFNjcmlwdC5ldmFs
dWF0ZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwKQogewotICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdC5fZXZhbHVhdGVBbmRXcmFwKEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5l
dmFsLCBJbmplY3RlZFNjcmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24pOworICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdC5fZXZhbHVhdGVBbmRXcmFwKEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5l
dmFsLCBJbmplY3RlZFNjcmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwKTsK
IH0KIAotSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlQW5kV3JhcCA9IGZ1bmN0aW9uKGV2YWxGdW5j
dGlvbiwgb2JqZWN0LCBleHByZXNzaW9uKQorSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlQW5kV3Jh
cCA9IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uLCBvYmplY3RHcm91
cCkKIHsKICAgICB2YXIgcmVzdWx0ID0ge307CiAgICAgdHJ5IHsKLSAgICAgICAgcmVzdWx0LnZh
bHVlID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFwT2JqZWN0KEluamVjdGVkU2NyaXB0Ll9ldmFs
dWF0ZU9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uKSk7CisgICAgICAgIHJlc3Vs
dC52YWx1ZSA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcE9iamVjdChJbmplY3RlZFNjcmlwdC5f
ZXZhbHVhdGVPbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiksIG9iamVjdEdyb3Vw
KTsKICAgICAgICAgLy8gSGFuZGxlIGVycm9yIHRoYXQgbWlnaHQgaGF2ZSBoYXBwZW5lZCB3aGls
ZSBkZXNjcmliaW5nIHJlc3VsdC4KICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZS5lcnJvclRleHQp
IHsKICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHJlc3VsdC52YWx1ZS5lcnJvclRleHQ7CkBA
IC04MzgsMTIgKzgzOCwxMiBAQCBJbmplY3RlZFNjcmlwdC5nZXRDYWxsRnJhbWVzID0gZnVuY3Rp
b24oKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUluamVjdGVkU2NyaXB0LmV2YWx1YXRlSW5D
YWxsRnJhbWUgPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY29kZSkKK0luamVjdGVkU2NyaXB0LmV2
YWx1YXRlSW5DYWxsRnJhbWUgPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY29kZSwgb2JqZWN0R3Jv
dXApCiB7CiAgICAgdmFyIGNhbGxGcmFtZSA9IEluamVjdGVkU2NyaXB0Ll9jYWxsRnJhbWVGb3JJ
ZChjYWxsRnJhbWVJZCk7CiAgICAgaWYgKCFjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUu
ZXZhbHVhdGUsIGNhbGxGcmFtZSwgY29kZSk7CisgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9l
dmFsdWF0ZUFuZFdyYXAoY2FsbEZyYW1lLmV2YWx1YXRlLCBjYWxsRnJhbWUsIGNvZGUsIG9iamVj
dEdyb3VwKTsKIH0KIAogSW5qZWN0ZWRTY3JpcHQuX2NhbGxGcmFtZUZvcklkID0gZnVuY3Rpb24o
aWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVs
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBh
ZTkxOGQxLi4wNWVjMTk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRz
UGFuZWwuanMKQEAgLTM1OSw3ICszNTksNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2FsbEZyYW1lLmlkOwogICAgIH0s
CiAKLSAgICBldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9uKGNvZGUsIHVwZGF0
ZUludGVyZmFjZSwgY2FsbGJhY2spCisgICAgZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lOiBm
dW5jdGlvbihjb2RlLCB1cGRhdGVJbnRlcmZhY2UsIG9iamVjdEdyb3VwLCBjYWxsYmFjaykKICAg
ICB7CiAgICAgICAgIHZhciBzZWxlY3RlZENhbGxGcmFtZSA9IHRoaXMuc2lkZWJhclBhbmVzLmNh
bGxzdGFjay5zZWxlY3RlZENhbGxGcmFtZTsKICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgfHwg
IXNlbGVjdGVkQ2FsbEZyYW1lKQpAQCAtMzc1LDE3ICszNzUsMTcgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAodXBkYXRlSW50ZXJmYWNl
KQogICAgICAgICAgICAgICAgIHNlbGYuc2lkZWJhclBhbmVzLnNjb3BlY2hhaW4udXBkYXRlKHNl
bGVjdGVkQ2FsbEZyYW1lKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmRvRXZhbEluQ2FsbEZy
YW1lKHNlbGVjdGVkQ2FsbEZyYW1lLCBjb2RlLCB1cGRhdGluZ0NhbGxiYWNrV3JhcHBlcik7Cisg
ICAgICAgIHRoaXMuZG9FdmFsSW5DYWxsRnJhbWUoc2VsZWN0ZWRDYWxsRnJhbWUsIGNvZGUsIG9i
amVjdEdyb3VwLCB1cGRhdGluZ0NhbGxiYWNrV3JhcHBlcik7CiAgICAgfSwKIAotICAgIGRvRXZh
bEluQ2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUsIGNvZGUsIGNhbGxiYWNrKQorICAgIGRv
RXZhbEluQ2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUsIGNvZGUsIG9iamVjdEdyb3VwLCBj
YWxsYmFjaykKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhyZXN1bHQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2socmVzdWx0LnZhbHVlLCByZXN1bHQuaXNFeGNlcHRpb24pOwogICAgICAgICB9Ci0gICAgICAg
IEluamVjdGVkU2NyaXB0QWNjZXNzLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lLmlkLCBj
b2RlLCBldmFsQ2FsbGJhY2spOworICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5ldmFsdWF0
ZUluQ2FsbEZyYW1lKGNhbGxGcmFtZS5pZCwgY29kZSwgb2JqZWN0R3JvdXAsIGV2YWxDYWxsYmFj
ayk7CiAgICAgfSwKIAogICAgIHZhcmlhYmxlc0luU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9u
KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Np
b25zU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHBy
ZXNzaW9uc1NpZGViYXJQYW5lLmpzCmluZGV4IGQ2ZDFkNjEuLjk2YTIwYWIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRl
YmFyUGFuZS5qcwpAQCAtNzUsNiArNzUsOCBAQCBXZWJJbnNwZWN0b3IuV2F0Y2hFeHByZXNzaW9u
c1NlY3Rpb24gPSBmdW5jdGlvbigpCiAgICAgdGhpcy5lZGl0YWJsZSA9IHRydWU7CiAgICAgdGhp
cy5leHBhbmRlZCA9IHRydWU7CiAgICAgdGhpcy5wcm9wZXJ0aWVzRWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJ3YXRjaC1leHByZXNzaW9ucyIpOworCisgICAgdGhpcy5fd2F0Y2hPYmplY3RHcm91cElk
ID0gIndhdGNoLWdyb3VwIjsKIH0KIAogV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0
aW9uLk5ld1dhdGNoRXhwcmVzc2lvbiA9ICJceEEwIjsKQEAgLTExNCw2ICsxMTYsNyBAQCBXZWJJ
bnNwZWN0b3IuV2F0Y2hFeHByZXNzaW9uc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgIHRoaXMudXBkYXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBXZWJJbnNwZWN0b3IuV2F0
Y2hFeHByZXNzaW9uVHJlZUVsZW1lbnQsIFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25zU2Vj
dGlvbi5Db21wYXJlUHJvcGVydGllcyk7CiAgICAgICAgIH0KIAorICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyLnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAodGhpcy5fd2F0Y2hPYmplY3RHcm91
cElkKQogICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOwogCiAgICAgICAgIC8vIENvdW50IHRo
ZSBwcm9wZXJ0aWVzLCBzbyB3ZSBrbm93biB3aGVuIHRvIGNhbGwgdGhpcy51cGRhdGVQcm9wZXJ0
aWVzKCkKQEAgLTEyOSwxMCArMTMyLDEwIEBAIFdlYkluc3BlY3Rvci5XYXRjaEV4cHJlc3Npb25z
U2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIHdoaWNoIGlzIGNoZWNrZWQgaW4gdGhl
IGFwcGVuZFJlc3VsdCBpbm5lciBmdW5jdGlvbi4KICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLndhdGNoRXhwcmVzc2lvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHZhciBl
eHByZXNzaW9uID0gdGhpcy53YXRjaEV4cHJlc3Npb25zW2ldOwotICAgICAgICAgICAgaWYgKCFl
eHByZXNzaW9uKSAKKyAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuZXZhbEluSW5z
cGVjdGVkV2luZG93KCIoIiArIGV4cHJlc3Npb24gKyAiKSIsIGFwcGVuZFJlc3VsdC5iaW5kKHRo
aXMsIGV4cHJlc3Npb24sIGkpKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLmV2
YWxJbkluc3BlY3RlZFdpbmRvdygiKCIgKyBleHByZXNzaW9uICsgIikiLCB0aGlzLl93YXRjaE9i
amVjdEdyb3VwSWQsIGFwcGVuZFJlc3VsdC5iaW5kKHRoaXMsIGV4cHJlc3Npb24sIGkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIG5vdGUgdGhpcyBpcyBzZXR0aW5nIHRoZSBleHBhbnNpb24g
b2YgdGhlIHRyZWUsIG5vdCB0aGUgc2VjdGlvbjsK
</data>
<flag name="review"
          id="21831"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>