<?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>113646</bug_id>
          
          <creation_ts>2013-03-30 17:17:56 -0700</creation_ts>
          <short_desc>fourthTier: FTL JIT should be able to compile the Array.prototype.findGraphNode function in Kraken/ai-astar</short_desc>
          <delta_ts>2013-03-31 16:08:41 -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>JavaScriptCore</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>
          
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866721</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 17:17:56 -0700</bug_when>
    <thetext>It&apos;s a super easy function to do compete type inference on and so it doesn&apos;t rely on either slow path calls or OSR exits.  Compiling it is just a matter of filling in more opcodes.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866728</commentid>
    <comment_count>1</comment_count>
      <attachid>195879</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 17:38:47 -0700</bug_when>
    <thetext>Created attachment 195879
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866736</commentid>
    <comment_count>2</comment_count>
      <attachid>195884</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 20:27:28 -0700</bug_when>
    <thetext>Created attachment 195884
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866802</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 12:33:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/147286</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866827</commentid>
    <comment_count>4</comment_count>
      <attachid>195884</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-03-31 14:44:47 -0700</bug_when>
    <thetext>Comment on attachment 195884
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:777
&gt; +    LValue lowObject(Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)

I assume &quot;low&quot; here means lower.  Why are you abbreviating it?  Or does it mean something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866831</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 16:08:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 195884 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195884&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:777
&gt; &gt; +    LValue lowObject(Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)
&gt; 
&gt; I assume &quot;low&quot; here means lower.  Why are you abbreviating it?  Or does it mean something else?

Three reasons:

1) It doesn&apos;t really mean lower; it usually means &quot;give me the value in a low-level form&quot;.  To me &quot;lowering&quot; is the act of compiling an instruction to a lower-level form; &quot;lowObject()&quot; doesn&apos;t compile any instructions, it mostly just looks up the LLVMValueRef corresponding to the result of a separately compiled (i.e. lowered) Node*.  Even if lowObject(), lowCell(), lowInt32(), and friends do some action before returning a value, that action is a check and not a lowering of the value itself.  More likely if they do some action, it&apos;ll involve a boxing conversion.  Hence the imperative &quot;lower&quot; is less applicable than the declarative &quot;low&quot;.  The most appropriate name might have been &quot;loweredObject()&quot;, but even that doesn&apos;t really capture what is going on.  Probably the full name would be &quot;speculateObjectAndGetLoweredValue&quot; but that starts to get pretty absurd.

2) lowInt32(node) makes sense to me as a getter: &apos;node&apos; intrinsically already has an int32 representation even if we haven&apos;t generated code to create it yet (because we tend to do so lazily), and this is a getter that gives us the LLVM version (i.e. the &quot;low level&quot; version, abbreviated to &quot;low&quot;) of the DFG version (i.e. the &quot;high level&quot; version, abbreviated in this code to &quot;high&quot; in other places) of the value.

3) I&apos;ve come to the conclusion that the verbose style of the DFG does more harm than good.  It usually means that the code looks more intense than it really is.  I&apos;ve made an effort to reduce the amount of typing required in the DFG itself in past patches.  In the FTL, I&apos;m taking the approach I&apos;ve taken before in compiler work: make the common things involve less typing.  This is why I call it &quot;lowInt32&quot; instead of &quot;loweredInt32&quot; or &quot;speculateObject&quot; or &quot;speculateObjectAndGetLoweredValue&quot;.

To put it more succinctly, throughout the FTL lowering code I use &quot;low&quot; to mean the already-lowered form of something, and &quot;high&quot; to mean that original DFG form of that same something.  We have things like m_highBlock and m_lowBlock.  Those are fields because we create the lowered BasicBlocks eagerly.  For Node*, we cannot create the corresponding LLVMValueRefs eagerly (that would be illegal due to how LLVM constructs SSA), so we have lazy getters for retrieving the low value (the LLVMValueRef) for the high value (Node*).  But even though it&apos;s lazy rather than eager, I stick to the &quot;low&quot; versus &quot;high&quot; naming, and reserve the word &quot;lower&quot; to be a synonym for &quot;compile to a lower-level representation&quot;.  Since doing lowObject(blah) doesn&apos;t compile blah, it doesn&apos;t make sense to call it lowerObject(blah).  Not to mention that I&apos;m not sure what it means to &quot;compile&quot; an object.  You can compile, or lower, a node - that makes sense - but compiling or lowering a value doesn&apos;t make sense to me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195879</attachid>
            <date>2013-03-30 17:38:47 -0700</date>
            <delta_ts>2013-03-30 20:27:28 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19453</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MjgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDEzLTAzLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogRlRMIEpJVCBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBBcnJheS5w
cm90b3R5cGUuZmluZEdyYXBoTm9kZSBmdW5jdGlvbiBLcmFrZW4vYWktYXN0YXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzY0NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBw
cm9ncmVzcy4KKworICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnRyYW5zZmVyQW5kQ2hlY2tB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9k
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0cnVj
dHVyZSk6CisgICAgICAgIChMb3dlckRGR1RvTExWTSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6bG93SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dDZWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93T2JqZWN0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Qm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0pTVmFsdWUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6aXNOb3RJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmlzTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omlz
Tm90Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUNlbGwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVPYmplY3QpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphY2NvdW50ZWRQb2ludGVyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6d2Vha1BvaW50ZXIpOgorICAgICAgICAqIGZ0
bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Ok91dHB1dCk6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjppbnNlcnROZXdCbG9ja3NCZWZvcmUpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6YXBwZW5kVG8pOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmJhc2VJbmRleCk6CisKIDIwMTMtMDMtMjkgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBGVEwgSklUIHNob3Vs
ZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIE1hcnNhZ2xpYSByYW5kb20gbnVtYmVyIGdlbmVyYXRv
cgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTQ3MjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw5IEBAIGJvb2wgY2FuQ29t
cGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAg
ICAgICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBCb29s
ZWFuVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBj
YXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNzUsNiArNzgsOSBAQCBib29sIGNhbkNv
bXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgY2FzZSBCaXRPcjoKICAgICAgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgogICAgICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFy
ZSBPSy4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6
CkBAIC04Myw2ICs4OSwzNyBAQCBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSW50MzJVc2UpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgR2V0QnlWYWw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkuc3BlY3VsYXRpb24oKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OlNhbmVDaGFpbjoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5
OjpJbkJvdW5kczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29tcGFyZUVx
OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNC
aW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE0NzI4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzEsMTggKzE3MSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZSwgbm9kZSwgY2hlY2tOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90SW50MzIoanNWYWx1
ZSkpOwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwg
bV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgY2hl
Y2tOb3RDZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dh
cmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpz
VmFsdWUsIG5vZGUsIGNoZWNrTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90Qm9vbGVh
bihqc1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEJvb2xlYW4o
anNWYWx1ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4NSw2
ICsyODUsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgICAg
ICBjb21waWxlQml0TFNoaWZ0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAg
Y29tcGlsZUdldEJ1dHRlcmZseSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlR2V0QXJyYXlMZW5ndGgoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeU9mZnNldCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVF
cSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAg
ICAgICAgICBjb21waWxlQ29tcGFyZUxlc3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTE3
LDYgKzUzNSwxMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCisgICAgeworICAgICAgICBM
VmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAg
ICBFeGl0S2luZCBleGl0S2luZDsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkg
PT0gV2Vha0pTQ29uc3RhbnQpCisgICAgICAgICAgICBleGl0S2luZCA9IEJhZFdlYWtDb25zdGFu
dENhY2hlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IG1fb3V0LmxvYWRQdHIoY2VsbCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBjZWxsLCAwLAorICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKVsw
XSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KGNvbnRpbnVhdGlvbik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25vZGUt
PnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbmV4dFN0cnVjdHVyZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlLCB3ZWFrUG9pbnRl
cihtX25vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSksCisgICAgICAgICAgICAgICAgY29udGludWF0
aW9uLCBuZXh0U3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1
Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAg
ICAgICBleGl0S2luZCwgY2VsbCwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVj
dHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAg
IG1fc3RvcmFnZVZhbHVlcy5hZGQoCisgICAgICAgICAgICBtX25vZGUsIG1fb3V0LmxvYWRQdHIo
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCisg
ICAgICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2FkMzIobG93U3RvcmFnZShtX25vZGUtPmNo
aWxkMigpKSwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG1f
b3V0LmxvYWQzMihzdG9yYWdlLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmxvYWQ2NChtX291dC5iYXNlSW5kZXgoc3RvcmFnZSwgaW5kZXgsIFNjYWxlRWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCAwLCAwLCBtX291dC5pc1plcm82
NChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRCeU9mZnNldCgp
CisgICAgeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPQor
ICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW21fbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQo
CisgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBtX291dC5sb2FkNjQoCisgICAgICAg
ICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcSgpCisgICAgeworICAgICAgICBpZiAo
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CisgICAgICAgICAgICBtX2Jvb2xl
YW5WYWx1ZXMuYWRkKAorICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgICAgICBt
X291dC5lcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsKKyAgICAgICAg
ICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCisgICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd09iamVjdChtX25vZGUtPmNoaWxkMSgpKSwgbG93T2Jq
ZWN0KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVMZXNzKCkKICAgICB7CiAgICAgICAgIGlmICht
X25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKQEAgLTYxMCw3ICs3NDgsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlm
IChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkg
ewotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soYm94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNJbnQz
MiwgY2hlY2tOb3RJbnQzMihib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hF
Q0soYm94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNJbnQzMiwgaXNOb3RJbnQzMihib3hlZFJlc3VsdCkp
OwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94SW50MzIoYm94ZWRSZXN1bHQpOwog
ICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjI2LDcgKzc2NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24g
fHwgaXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVl
IHVuY2hlY2tlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0g
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmNoZWNrZWRSZXN1bHQsIGVkZ2UsIFNwZWNDZWxs
LCBjaGVja05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9D
SEVDSyh1bmNoZWNrZWRSZXN1bHQsIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2Vk
UmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIApAQCAtNjM1LDYgKzc3MywxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
bV9vdXQuaW50UHRyWmVybzsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGxvd09iamVjdChFZGdl
IGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVj
dWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKTsKKyAg
ICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOworICAg
ICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCiAgICAgTFZhbHVlIGxvd0Jvb2xlYW4oRWRnZSBlZGdlLCBPcGVyYW5k
U3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAg
ewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpOwpAQCAtNjQzLDggKzc5MCwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmJveGVkUmVzdWx0LCBlZGdl
LCBTcGVjQm9vbGVhbiwgY2hlY2tOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKLSAgICAgICAg
ICAgIHJldHVybiB1bmJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7CisgICAgICAgICAgICBGVExf
VFlQRV9DSEVDSyh1bmJveGVkUmVzdWx0LCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFu
KHVuYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEJvb2xl
YW4odW5ib3hlZFJlc3VsdCk7CisgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKGVkZ2Uu
bm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSku
bV90eXBlICYgU3BlY0Jvb2xlYW4pKTsKQEAgLTY1OSwxNyArODA4LDMzIEBAIHByaXZhdGU6CiAg
ICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgaWYgKExW
YWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGJveEludDMyKHVuYm94ZWRSZXN1bHQpOworICAgICAgICBpZiAoTFZh
bHVlIHVuYm94ZWRSZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih1bmJveGVkUmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZh
bHVlIHVuYm94ZWRSZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOworICAgICAgICBpZiAo
TFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkg
eworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7
CisgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
ICAgIAotICAgIExWYWx1ZSBjaGVja05vdEludDMyKExWYWx1ZSBqc1ZhbHVlKQorICAgIExWYWx1
ZSBsb3dTdG9yYWdlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0
ID0gbV9zdG9yYWdlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7
CisgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdEludDMyKExW
YWx1ZSBqc1ZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KGpzVmFsdWUs
IG1fdGFnVHlwZU51bWJlcik7CiAgICAgfQpAQCAtNjgyLDEyICs4NDcsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIG1fb3V0LmFkZChtX291dC56ZXJvRXh0KHZhbHVlLCBtX291dC5pbnQ2
NCksIG1fdGFnVHlwZU51bWJlcik7CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBjaGVja05vdENl
bGwoTFZhbHVlIGpzVmFsdWUpCisgICAgTFZhbHVlIGlzTm90Q2VsbChMVmFsdWUganNWYWx1ZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUsIG1fdGFn
TWFzayk7CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBjaGVja05vdEJvb2xlYW4oTFZhbHVlIGpz
VmFsdWUpCisgICAgTFZhbHVlIGlzTm90Qm9vbGVhbihMVmFsdWUganNWYWx1ZSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KAogICAgICAgICAgICAgbV9vdXQuYml0
WG9yKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpLApAQCAtNzE2LDYgKzg4
MSwxNSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgc3Bl
Y3VsYXRlSW50MzIoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxs
VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIEFTU0VSVCghbV9zdGF0
ZS5uZWVkc1R5cGVDaGVjayhlZGdlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAgLTczMSw2ICs5MDUsMzYgQEAgcHJpdmF0ZToK
ICAgICAgICAgbG93SW50MzIoZWRnZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3BlY3VsYXRl
Q2VsbChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBsb3dDZWxsKGVkZ2UpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAg
IHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBjZWxsLCBlZGdlLCBTcGVj
T2JqZWN0LAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBhY2NvdW50ZWRQb2ludGVyKGdsb2JhbERhdGEoKS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICB9
CisgICAgCisgICAgTFZhbHVlIGFjY291bnRlZFBvaW50ZXIoSlNDZWxsKiBwb2ludGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlcikpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgd2Vha1BvaW50ZXIoSlNDZWxs
KiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgY29kZUJsb2NrKCktPmFwcGVuZFdlYWtSZWZlcmVu
Y2UocG9pbnRlcik7CisgICAgICAgIHJldHVybiBhY2NvdW50ZWRQb2ludGVyKHBvaW50ZXIpOwor
ICAgIH0KKyAgICAKICAgICBMVmFsdWUgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJh
bmQpCiAgICAgewogICAgICAgICByZXR1cm4gbV9vdXQuYWRkKGJhc2UsIG1fb3V0LmNvbnN0SW50
UHRyKG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE0NzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogLy8gVGhlc2UgdHJhbnNsYXRlIHRoZSBwb2lu
dGVyICsgb2Zmc2V0IGludG8gYSByZWZlcmVuY2UgKG9yLCBhIHBvaW50ZXIgaW4gTExWTS1zcGVh
aykKIC8vIGFuZCB1c2UgZ2V0IGFuZCBzZXQgb24gdGhlbSAob3IsIGxvYWQgYW5kIHN0b3JlIGlu
IExMVk0tc3BlYWspLgogCitlbnVtIFNjYWxlIHsgU2NhbGVPbmUsIFNjYWxlVHdvLCBTY2FsZUZv
dXIsIFNjYWxlRWlnaHQsIFNjYWxlUHRyIH07CisKIGNsYXNzIE91dHB1dCB7CiBwdWJsaWM6CiAg
ICAgT3V0cHV0KCkKQEAgLTY3LDYgKzY5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLCBpbnQzMlpl
cm8oY29uc3RJbnQoaW50MzIsIDAsIFNpZ25FeHRlbmQpKQogICAgICAgICAsIGludDY0WmVybyhj
b25zdEludChpbnQ2NCwgMCwgU2lnbkV4dGVuZCkpCiAgICAgICAgICwgaW50UHRyWmVybyhjb25z
dEludChpbnRQdHIsIDAsIFNpZ25FeHRlbmQpKQorICAgICAgICAsIGludFB0ck9uZShjb25zdElu
dChpbnRQdHIsIDEsIFNpZ25FeHRlbmQpKQorICAgICAgICAsIGludFB0clR3byhjb25zdEludChp
bnRQdHIsIDIsIFNpZ25FeHRlbmQpKQorICAgICAgICAsIGludFB0clRocmVlKGNvbnN0SW50KGlu
dFB0ciwgMywgU2lnbkV4dGVuZCkpCisgICAgICAgICwgaW50UHRyRm91cihjb25zdEludChpbnRQ
dHIsIDQsIFNpZ25FeHRlbmQpKQorICAgICAgICAsIGludFB0ckVpZ2h0KGNvbnN0SW50KGludFB0
ciwgOCwgU2lnbkV4dGVuZCkpCisgICAgICAgICwgaW50UHRyUHRyKGNvbnN0SW50KGludFB0ciwg
c2l6ZW9mKHZvaWQqKSwgU2lnbkV4dGVuZCkpCiAgICAgICAgICwgbV9mdW5jdGlvbigwKQogICAg
ICAgICAsIG1fYnVpbGRlcihMTFZNQ3JlYXRlQnVpbGRlcigpKQogICAgICAgICAsIG1fYmxvY2so
MCkKQEAgLTg3LDE1ICs5NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZnVuY3Rpb24gPSBmdW5j
dGlvbjsKICAgICB9CiAgICAgCi0gICAgTEJhc2ljQmxvY2sgYXBwZW5kVG8oTEJhc2ljQmxvY2sg
YmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jaykKKyAgICBMQmFzaWNCbG9jayBpbnNlcnROZXdC
bG9ja3NCZWZvcmUoTEJhc2ljQmxvY2sgbmV4dEJsb2NrKQogICAgIHsKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHRCbG9jayA9IG1fbmV4dEJsb2NrOwogICAgICAgICBtX25leHRCbG9jayA9
IG5leHRCbG9jazsKLSAgICAgICAgCi0gICAgICAgIGFwcGVuZFRvKGJsb2NrKTsKICAgICAgICAg
cmV0dXJuIGxhc3ROZXh0QmxvY2s7CiAgICAgfQogICAgIAorICAgIExCYXNpY0Jsb2NrIGFwcGVu
ZFRvKExCYXNpY0Jsb2NrIGJsb2NrLCBMQmFzaWNCbG9jayBuZXh0QmxvY2spCisgICAgeworICAg
ICAgICBhcHBlbmRUbyhibG9jayk7CisgICAgICAgIHJldHVybiBpbnNlcnROZXdCbG9ja3NCZWZv
cmUobmV4dEJsb2NrKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBhcHBlbmRUbyhMQmFzaWNCbG9j
ayBibG9jaykKICAgICB7CiAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKQEAgLTE1NCw2ICsxNjYs
MzIgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcmU2NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2lu
dGVyLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkgeyBzdG9yZSh2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0
LCByZWY2NCk7IH0KICAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50
ZXIsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCBvZmZzZXQs
IHJlZlB0cik7IH0KICAgICAKKyAgICBMVmFsdWUgYmFzZUluZGV4KExWYWx1ZSBiYXNlLCBMVmFs
dWUgaW5kZXgsIFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBhY2N1bXVsYXRlZE9mZnNldDsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
c2NhbGUpIHsKKyAgICAgICAgY2FzZSBTY2FsZU9uZToKKyAgICAgICAgICAgIGFjY3VtdWxhdGVk
T2Zmc2V0ID0gaW5kZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTY2FsZVR3
bzoKKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT2Zmc2V0ID0gc2hsKGluZGV4LCBpbnRQdHJPbmUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2NhbGVGb3VyOgorICAgICAgICAg
ICAgYWNjdW11bGF0ZWRPZmZzZXQgPSBzaGwoaW5kZXgsIGludFB0clR3byk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTY2FsZUVpZ2h0OgorICAgICAgICBjYXNlIFNjYWxlUHRy
OgorICAgICAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgPSBzaGwoaW5kZXgsIGludFB0clRocmVl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
b2Zmc2V0KQorICAgICAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgPSBhZGQoYWNjdW11bGF0ZWRP
ZmZzZXQsIGNvbnN0SW50UHRyKG9mZnNldCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFk
ZChiYXNlLCBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBlcXVh
bChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVy
LCBMTFZNSW50RVEsIGxlZnQsIHJpZ2h0KTsgfQogICAgIExWYWx1ZSBub3RFcXVhbChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50
TkUsIGxlZnQsIHJpZ2h0KTsgfQogICAgIExWYWx1ZSBhYm92ZShMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50VUdULCBsZWZ0LCBy
aWdodCk7IH0KQEAgLTIxOCw2ICsyNTYsMTIgQEAgcHVibGljOgogICAgIGNvbnN0IExWYWx1ZSBp
bnQzMlplcm87CiAgICAgY29uc3QgTFZhbHVlIGludDY0WmVybzsKICAgICBjb25zdCBMVmFsdWUg
aW50UHRyWmVybzsKKyAgICBjb25zdCBMVmFsdWUgaW50UHRyT25lOworICAgIGNvbnN0IExWYWx1
ZSBpbnRQdHJUd287CisgICAgY29uc3QgTFZhbHVlIGludFB0clRocmVlOworICAgIGNvbnN0IExW
YWx1ZSBpbnRQdHJGb3VyOworICAgIGNvbnN0IExWYWx1ZSBpbnRQdHJFaWdodDsKKyAgICBjb25z
dCBMVmFsdWUgaW50UHRyUHRyOwogICAgIAogICAgIExNb2R1bGUgbV9tb2R1bGU7CiAgICAgTFZh
bHVlIG1fZnVuY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195884</attachid>
            <date>2013-03-30 20:27:28 -0700</date>
            <delta_ts>2013-03-31 14:44:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20291</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MjgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEzLTAzLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogRlRMIEpJVCBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBBcnJheS5w
cm90b3R5cGUuZmluZEdyYXBoTm9kZSBmdW5jdGlvbiBLcmFrZW4vYWktYXN0YXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzY0NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRz
IGVub3VnaCBGVEwgc3VwcG9ydCB0byBjb21waWxlIEFycmF5LnByb3RvdHlwZS5maW5kR3JhcGhO
b2RlLiBUaGlzIGlzbid0CisgICAgICAgIGEgc3BlZWQtdXAsIHlldCwgYmVjYXVzZSBmaW5kR3Jh
cGhOb2RlIHRlbmRzIHRvIGJlIGFnZ3Jlc3NpdmVseSBpbmxpbmVkIGJ5IHRoZSBERkcsCisgICAg
ICAgIGFuZCB0aGUgRlRMIGNhbid0IHlldCBjb21waWxlIHRoZSB0aGluZ3MgaW50byB3aGljaCBp
dCB3YXMgaW5saW5lZC4gSW4gZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2Ugd2lsbCBnZXQgdG8g
YSBwb2ludCB3aGVyZSB3ZSBjYW4gY29tcGlsZSB0aGUgY2FsbGVycywgYW5kIHRoZW4gd2UnbGwg
YmUKKyAgICAgICAgYWJsZSB0byBzZWUgd2hhdCB0aGUgcGVyZm9ybWFuY2UgZWZmZWN0cyBhcmUu
CisgICAgICAgIAorICAgICAgICBCdXQgdGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgaXQg
aXNuJ3QgYSBzbG93LWRvd24sIGVpdGhlci4gVGhpcyBpbXBsaWVzIHRoYXQKKyAgICAgICAgZXZl
biBpZiB3ZSBGVEwgY29tcGlsZSBhIENvZGVCbG9jayB0aGF0IHdlIHNob3VsZG4ndCBoYXZlICh0
aGUgZmFjdCB0aGF0IHdlCisgICAgICAgIGNvbXBpbGluZyB0aGluZ3MgdGhhdCBlbmQgdXAgYmVp
bmcgaW5saW5lZCBpcyBkdW1iLCBhbmQgdGhlIGZhY3QgdGhhdCB0aGUgY3VycmVudAorICAgICAg
ICBGVEwgdGllcmluZyBzdHJhdGVneSBsYXVuY2hlcyBMTFZNIGZvciB0aG9zZSB0aGluZ3MgaXMg
ZXZlbiBkdW1iZXIpLCB3ZSBzdGlsbCBydW4KKyAgICAgICAgYXQgT0sgcGVyZm9ybWFuY2UuCisK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUpOgorICAg
ICAgICAoTG93ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUNvbXBhcmVFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd09iamVjdCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6bG93U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmlzTm90SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc05v
dENlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc05vdEJvb2xlYW4p
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6YWNjb3VudGVkUG9pbnRlcik6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OndlYWtQb2ludGVyKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0
Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpPdXRwdXQpOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmFwcGVuZFRvKToKKyAgICAgICAgKE91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0OjpiYXNlSW5kZXgpOgorCiAyMDEzLTAzLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogRlRMIEpJVCBzaG91bGQgYmUgYWJsZSB0
byBjb21waWxlIHRoZSBNYXJzYWdsaWEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDE0NzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOSBAQCBib29sIGNhbkNvbXBpbGUoR3JhcGgm
IGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICAgICAg
Y2FzZSBLbm93bkludDMyVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAg
ICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNl
bGxVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTc1LDYgKzc4LDkgQEAgYm9vbCBjYW5Db21waWxlKEdyYXBo
JiBncmFwaCkKICAgICAgICAgICAgIGNhc2UgQml0T3I6CiAgICAgICAgICAgICBjYXNlIEJpdFJT
aGlmdDoKICAgICAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlQWRkOgpAQCAtODMsNiAr
ODksMzcgQEAgYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEludDMyVXNlKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAg
ICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5VmFs
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLnNwZWN1bGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IEFycmF5OjpTYW5lQ2hhaW46CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6SW5Cb3VuZHM6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2lu
ZChPYmplY3RVc2UpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNDcyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDE4
ICsxNzEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGNo
ZWNrTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNr
d2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94SW50MzIoanNWYWx1ZSksIG1fbG9jYWxzMzIu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGNoZWNrTm90Q2VsbChq
c1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUs
IGpzVmFsdWUsIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LnNldChqc1ZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2Rl
LCBjaGVja05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hCb29sZWFuKGpzVmFsdWUpLCBt
X2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0yODUsNiArMjg1LDI0IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICAgICAgY29tcGlsZUJp
dExTaGlmdCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRC
dXR0ZXJmbHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEFycmF5TGVu
Z3RoOgorICAgICAgICAgICAgY29tcGlsZUdldEFycmF5TGVuZ3RoKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlRXEoKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICAgICAgY29t
cGlsZUNvbXBhcmVMZXNzKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUxNyw2ICs1MzUsMTI3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGNlbGwg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgRXhpdEtpbmQg
ZXhpdEtpbmQ7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0Nv
bnN0YW50KQorICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRXZWFrQ29uc3RhbnRDYWNoZTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBtX291dC5sb2FkUHRyKGNlbGwsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJl
U2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
ICAgICBleGl0S2luZCwgY2VsbCwgMCwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChz
dHJ1Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRp
b24pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1
Y3R1cmUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5z
dHJ1Y3R1cmVTZXQoKVtpXSkpLAorICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbiwgbmV4dFN0
cnVjdHVyZSk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgZXhpdEtp
bmQsIGNlbGwsIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmUsIHdlYWtQ
b2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgpCisgICAgeworICAgICAgICBtX3N0b3JhZ2VW
YWx1ZXMuYWRkKAorICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2FkUHRyKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAorICAgICAgICAgICAg
ICAgIG1fbm9kZSwgbV9vdXQubG9hZDMyKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFs
dWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgT3V0T2ZCb3VuZHMsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFi
b3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzIo
c3RvcmFnZSwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5sb2FkNjQoCisg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChzdG9yYWdlLCBtX291dC56ZXJvRXh0
KGluZGV4LCBtX291dC5pbnRQdHIpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKExvYWRGcm9tSG9sZSwgMCwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CisgICAg
ICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0KKyAgICAgICAgICAgIG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07
CisgICAgICAgIAorICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKAorICAgICAgICAgICAgbV9u
b2RlLAorICAgICAgICAgICAgbV9vdXQubG9hZDY0KAorICAgICAgICAgICAgICAgIGxvd1N0b3Jh
Z2UobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEu
b2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVDb21wYXJlRXEoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEludDMyVXNlKSkgeworICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKKyAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CisgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1
ZXMuYWRkKAorICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgICAgICBtX291dC5l
cXVhbChsb3dPYmplY3QobV9ub2RlLT5jaGlsZDEoKSksIGxvd09iamVjdChtX25vZGUtPmNoaWxk
MigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNv
bXBpbGVDb21wYXJlTGVzcygpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50MzJVc2UpKSB7CkBAIC02MTAsNyArNzQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVlIGJveGVkUmVz
dWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIEZU
TF9UWVBFX0NIRUNLKGJveGVkUmVzdWx0LCBlZGdlLCBTcGVjSW50MzIsIGNoZWNrTm90SW50MzIo
Ym94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGJveGVkUmVzdWx0LCBl
ZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0KTsKICAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTYyNiw3ICs3NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlRfVU5VU0VE
KG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVz
ZUtpbmQoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0sodW5jaGVja2VkUmVzdWx0LCBlZGdlLCBTcGVjQ2VsbCwgY2hlY2tOb3RDZWxsKHVu
Y2hlY2tlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5jaGVja2VkUmVz
dWx0LCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFJlc3VsdCkpOwogICAgICAg
ICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTYz
NSw2ICs3NzQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87
CiAgICAgfQogICAgIAorICAgIExWYWx1ZSBsb3dPYmplY3QoRWRnZSBlZGdlLCBPcGVyYW5kU3Bl
Y3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVzZSk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2RlKTsKKyAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KGVkZ2UsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAog
ICAgIExWYWx1ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKQEAgLTY0Myw4ICs3OTEsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVlIHVu
Ym94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5ib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0Jvb2xlYW4sIGNo
ZWNrTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gdW5ib3hC
b29sZWFuKHVuYm94ZWRSZXN1bHQpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5ib3hl
ZFJlc3VsdCwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7
CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQp
OworICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNCb29s
ZWFuKSk7CkBAIC02NTksMTcgKzgwOSwzMyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoTFZhbHVl
IHJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3Vs
dCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBi
b3hJbnQzMih1bmJveGVkUmVzdWx0KTsKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0
ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gYm94SW50MzIodW5ib3hlZFJlc3VsdCk7CisgICAgICAgICAgICBtX2pzVmFsdWVW
YWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0
ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4g
Ym94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVz
dWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOworICAgICAgICAgICAgbV9q
c1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUg
Y2hlY2tOb3RJbnQzMihMVmFsdWUganNWYWx1ZSkKKyAgICBMVmFsdWUgbG93U3RvcmFnZShFZGdl
IGVkZ2UpCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fc3RvcmFnZVZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBtX3N0b3Jh
Z2VWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaXNOb3RJbnQzMihMVmFsdWUganNWYWx1ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX291dC5iZWxvdyhqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIp
OwogICAgIH0KQEAgLTY4MiwxMiArODQ4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBt
X291dC5hZGQobV9vdXQuemVyb0V4dCh2YWx1ZSwgbV9vdXQuaW50NjQpLCBtX3RhZ1R5cGVOdW1i
ZXIpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgY2hlY2tOb3RDZWxsKExWYWx1ZSBqc1ZhbHVl
KQorICAgIExWYWx1ZSBpc05vdENlbGwoTFZhbHVlIGpzVmFsdWUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9vdXQudGVzdE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ01hc2spOwogICAgIH0KICAg
ICAKLSAgICBMVmFsdWUgY2hlY2tOb3RCb29sZWFuKExWYWx1ZSBqc1ZhbHVlKQorICAgIExWYWx1
ZSBpc05vdEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9v
dXQudGVzdE5vblplcm82NCgKICAgICAgICAgICAgIG1fb3V0LmJpdFhvcihqc1ZhbHVlLCBtX291
dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKSwKQEAgLTcxNiw2ICs4ODIsMTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyKGVkZ2Up
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBL
bm93bkNlbGxVc2U6CisgICAgICAgICAgICBBU1NFUlQoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2so
ZWRnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CkBAIC03MzEsNiArOTA2LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0ludDMy
KGVkZ2UpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbG93Q2VsbChlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVj
dWxhdGVPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9U
WVBFX0NIRUNLKAorICAgICAgICAgICAgY2VsbCwgZWRnZSwgU3BlY09iamVjdCwKKyAgICAgICAg
ICAgIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoY2VsbCwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgYWNjb3VudGVkUG9pbnRl
cihnbG9iYWxEYXRhKCkuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzcGVj
dWxhdGVPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBhY2NvdW50ZWRQb2ludGVyKEpTQ2VsbCogcG9pbnRlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKKyAg
ICB9CisgICAgCisgICAgTFZhbHVlIHdlYWtQb2ludGVyKEpTQ2VsbCogcG9pbnRlcikKKyAgICB7
CisgICAgICAgIGNvZGVCbG9jaygpLT5hcHBlbmRXZWFrUmVmZXJlbmNlKHBvaW50ZXIpOworICAg
ICAgICByZXR1cm4gYWNjb3VudGVkUG9pbnRlcihwb2ludGVyKTsKKyAgICB9CisgICAgCiAgICAg
TFZhbHVlIGFkZHJlc3NGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fb3V0LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CShyZXZpc2lvbiAxNDcyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIC8vIFRoZXNlIHRyYW5zbGF0ZSB0aGUgcG9pbnRlciArIG9mZnNldCBpbnRv
IGEgcmVmZXJlbmNlIChvciwgYSBwb2ludGVyIGluIExMVk0tc3BlYWspCiAvLyBhbmQgdXNlIGdl
dCBhbmQgc2V0IG9uIHRoZW0gKG9yLCBsb2FkIGFuZCBzdG9yZSBpbiBMTFZNLXNwZWFrKS4KIAor
ZW51bSBTY2FsZSB7IFNjYWxlT25lLCBTY2FsZVR3bywgU2NhbGVGb3VyLCBTY2FsZUVpZ2h0LCBT
Y2FsZVB0ciB9OworCiBjbGFzcyBPdXRwdXQgewogcHVibGljOgogICAgIE91dHB1dCgpCkBAIC02
Nyw2ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgaW50MzJaZXJvKGNvbnN0SW50KGludDMy
LCAwLCBTaWduRXh0ZW5kKSkKICAgICAgICAgLCBpbnQ2NFplcm8oY29uc3RJbnQoaW50NjQsIDAs
IFNpZ25FeHRlbmQpKQogICAgICAgICAsIGludFB0clplcm8oY29uc3RJbnQoaW50UHRyLCAwLCBT
aWduRXh0ZW5kKSkKKyAgICAgICAgLCBpbnRQdHJPbmUoY29uc3RJbnQoaW50UHRyLCAxLCBTaWdu
RXh0ZW5kKSkKKyAgICAgICAgLCBpbnRQdHJUd28oY29uc3RJbnQoaW50UHRyLCAyLCBTaWduRXh0
ZW5kKSkKKyAgICAgICAgLCBpbnRQdHJUaHJlZShjb25zdEludChpbnRQdHIsIDMsIFNpZ25FeHRl
bmQpKQorICAgICAgICAsIGludFB0ckZvdXIoY29uc3RJbnQoaW50UHRyLCA0LCBTaWduRXh0ZW5k
KSkKKyAgICAgICAgLCBpbnRQdHJFaWdodChjb25zdEludChpbnRQdHIsIDgsIFNpZ25FeHRlbmQp
KQorICAgICAgICAsIGludFB0clB0cihjb25zdEludChpbnRQdHIsIHNpemVvZih2b2lkKiksIFNp
Z25FeHRlbmQpKQogICAgICAgICAsIG1fZnVuY3Rpb24oMCkKICAgICAgICAgLCBtX2J1aWxkZXIo
TExWTUNyZWF0ZUJ1aWxkZXIoKSkKICAgICAgICAgLCBtX2Jsb2NrKDApCkBAIC04NywxNSArOTUs
MTkgQEAgcHVibGljOgogICAgICAgICBtX2Z1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgfQogICAg
IAotICAgIExCYXNpY0Jsb2NrIGFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrLCBMQmFzaWNCbG9j
ayBuZXh0QmxvY2spCisgICAgTEJhc2ljQmxvY2sgaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKExCYXNp
Y0Jsb2NrIG5leHRCbG9jaykKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0Qmxv
Y2sgPSBtX25leHRCbG9jazsKICAgICAgICAgbV9uZXh0QmxvY2sgPSBuZXh0QmxvY2s7Ci0gICAg
ICAgIAotICAgICAgICBhcHBlbmRUbyhibG9jayk7CiAgICAgICAgIHJldHVybiBsYXN0TmV4dEJs
b2NrOwogICAgIH0KICAgICAKKyAgICBMQmFzaWNCbG9jayBhcHBlbmRUbyhMQmFzaWNCbG9jayBi
bG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG8oYmxv
Y2spOworICAgICAgICByZXR1cm4gaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKG5leHRCbG9jayk7Cisg
ICAgfQorICAgIAogICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCiAgICAgewog
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CkBAIC0xNTQsNiArMTY2LDMyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9m
ZnNldCA9IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmNjQpOyB9CiAgICAg
dm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zm
c2V0ID0gMCkgeyBzdG9yZSh2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0LCByZWZQdHIpOyB9CiAgICAg
CisgICAgTFZhbHVlIGJhc2VJbmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSBz
Y2FsZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBMVmFsdWUgYWNjdW11
bGF0ZWRPZmZzZXQ7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAg
IGNhc2UgU2NhbGVPbmU6CisgICAgICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IGluZGV4Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2NhbGVUd286CisgICAgICAgICAgICBh
Y2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRleCwgaW50UHRyT25lKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNjYWxlRm91cjoKKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT2Zm
c2V0ID0gc2hsKGluZGV4LCBpbnRQdHJUd28pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2NhbGVFaWdodDoKKyAgICAgICAgY2FzZSBTY2FsZVB0cjoKKyAgICAgICAgICAgIGFj
Y3VtdWxhdGVkT2Zmc2V0ID0gc2hsKGluZGV4LCBpbnRQdHJUaHJlZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG9mZnNldCkKKyAgICAgICAg
ICAgIGFjY3VtdWxhdGVkT2Zmc2V0ID0gYWRkKGFjY3VtdWxhdGVkT2Zmc2V0LCBjb25zdEludFB0
cihvZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBhZGQoYmFzZSwgYWNjdW11bGF0
ZWRPZmZzZXQpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgZXF1YWwoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludEVRLCBsZWZ0
LCByaWdodCk7IH0KICAgICBMVmFsdWUgbm90RXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludE5FLCBsZWZ0LCByaWdodCk7
IH0KICAgICBMVmFsdWUgYWJvdmUoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
YnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludFVHVCwgbGVmdCwgcmlnaHQpOyB9CkBAIC0yMTgs
NiArMjU2LDEyIEBAIHB1YmxpYzoKICAgICBjb25zdCBMVmFsdWUgaW50MzJaZXJvOwogICAgIGNv
bnN0IExWYWx1ZSBpbnQ2NFplcm87CiAgICAgY29uc3QgTFZhbHVlIGludFB0clplcm87CisgICAg
Y29uc3QgTFZhbHVlIGludFB0ck9uZTsKKyAgICBjb25zdCBMVmFsdWUgaW50UHRyVHdvOworICAg
IGNvbnN0IExWYWx1ZSBpbnRQdHJUaHJlZTsKKyAgICBjb25zdCBMVmFsdWUgaW50UHRyRm91cjsK
KyAgICBjb25zdCBMVmFsdWUgaW50UHRyRWlnaHQ7CisgICAgY29uc3QgTFZhbHVlIGludFB0clB0
cjsKICAgICAKICAgICBMTW9kdWxlIG1fbW9kdWxlOwogICAgIExWYWx1ZSBtX2Z1bmN0aW9uOwo=
</data>
<flag name="review"
          id="217847"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>