<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>365</bug_id>
          
          <creation_ts>2008-12-09 12:33:21 +0100</creation_ts>
          <short_desc>Bug on javax.media.opengl.glu.GLU.gluBuild2DMipmaps</short_desc>
          <delta_ts>2013-10-13 00:08:15 +0200</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>util</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>windows</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Michael">michael.esemplare</assigned_to>
          <cc>gouessej</cc>
    
    <cc>michael.esemplare</cc>
    
    <cc>sgothel</cc>
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs>ed53220b4faccfd184b212bb89a075bfa53ea886
74c5332456c6faf48c0a81809969d54e056f346c</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>381</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:51:37 +0100</bug_when>
    <thetext>


---- Reported by brainbr 2008-12-09 12:33:21 ----

Exception in thread &quot;main&quot; java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
	at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:117)
	at
com.sun.opengl.impl.mipmap.ScaleInternal.scale_internal_ubyte(ScaleInternal.java:253)
	at
com.sun.opengl.impl.mipmap.BuildMipmap.gluBuild2DMipmapLevelsCore(BuildMipmap.java:535)
	at com.sun.opengl.impl.mipmap.Mipmap.gluBuild2DMipmaps(Mipmap.java:762)
	at javax.media.opengl.glu.GLU.gluBuild2DMipmapsJava(GLU.java:1526)
	at javax.media.opengl.glu.GLU.gluBuild2DMipmaps(GLU.java:1582)
	at com.sun.opengl.util.texture.Texture.updateImage(Texture.java:523)
	at com.sun.opengl.util.texture.Texture.updateImage(Texture.java:381)
	at com.sun.opengl.util.texture.Texture.&lt;init&gt;(Texture.java:182)
	at com.sun.opengl.util.texture.TextureIO.newTexture(TextureIO.java:445)
	at com.sun.opengl.util.texture.TextureIO.newTexture(TextureIO.java:465)
	at Mipmap.main(Mipmap.java:24)



---- Additional Comments From brainbr 2008-12-09 12:34:24 ----

Created an attachment
Test case




---- Additional Comments From brainbr 2008-12-09 12:36:02 ----

Created an attachment
Test image




---- Additional Comments From brainbr 2009-04-13 13:58:26 ----

Created an attachment
Here is my patch to fix this bug




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:51 EDT  ---

This bug was previously known as _bug_ 365 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=365
Imported an attachment (id=135)
Imported an attachment (id=136)
Imported an attachment (id=137)

The original submitter of attachment 135 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 136 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 137 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2377</commentid>
    <comment_count>1</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2013-03-28 12:19:49 +0100</bug_when>
    <thetext>I think this bug has already been fixed in JOGL 2.0. Someone should test again with the provided image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2564</commentid>
    <comment_count>2</comment_count>
      <attachid>459</attachid>
    <who name="Michael">michael.esemplare</who>
    <bug_when>2013-05-04 08:35:56 +0200</bug_when>
    <thetext>Created attachment 459
Updated testcase for Jogl 2.0

Tested against jogl2.0-rc11 on Windows. Same result:

java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Buffer.java:472)
	at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:219)
	at jogamp.opengl.glu.mipmap.ScaleInternal.scale_internal_ubyte(ScaleInternal.java:255)
	at jogamp.opengl.glu.mipmap.BuildMipmap.gluBuild2DMipmapLevelsCore(BuildMipmap.java:538)
	at jogamp.opengl.glu.mipmap.Mipmap.gluBuild2DMipmaps(Mipmap.java:773)
	at javax.media.opengl.glu.gl2.GLUgl2.gluBuild2DMipmapsJava(GLUgl2.java:442)
	at javax.media.opengl.glu.gl2.GLUgl2.gluBuild2DMipmaps(GLUgl2.java:498)
	at com.jogamp.opengl.util.texture.Texture.updateImage(Texture.java:583)
	at com.jogamp.opengl.util.texture.Texture.updateImage(Texture.java:417)
	at com.jogamp.opengl.util.texture.Texture.&lt;init&gt;(Texture.java:182)
	at com.jogamp.opengl.util.texture.TextureIO.newTexture(TextureIO.java:447)
	at com.jogamp.opengl.util.texture.TextureIO.newTexture(TextureIO.java:530)
	at com.kablab.jogl.test.Mipmap$1.init(Mipmap.java:42)
	at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:332)
	at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:352)
	at javax.media.opengl.awt.GLCanvas$6.run(GLCanvas.java:966)
	at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:653)
	at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:594)
	at javax.media.opengl.awt.GLCanvas$8.run(GLCanvas.java:996)
	at javax.media.opengl.Threading.invoke(Threading.java:193)
	at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:449)
	at javax.media.opengl.awt.GLCanvas.paint(GLCanvas.java:499)
	at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
	at sun.awt.RepaintArea.paint(RepaintArea.java:224)
	at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:308)
	at java.awt.Component.dispatchEventImpl(Component.java:4729)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:621)
	at java.awt.EventQueue$2.run(EventQueue.java:619)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2673</commentid>
    <comment_count>3</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-06-16 15:29:56 +0200</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created attachment 459 [details]
&gt; Updated testcase for Jogl 2.0
&gt; 
&gt; Tested against jogl2.0-rc11 on Windows. Same result:
&gt; 

Michael (== Mike on IRC?),
as I was asked on IRC: 
 (09:03:07 AM) [Mike]: sgothel: is there something you didn&apos;t like about the patch in https://jogamp.org/bugzilla/show_bug.cgi?id=365 ?
(09:05:52 AM) [Mike]: talk about a confusing class to walk through at first...

Yes, attachment 137 is not a patch and it seems that the maintainer of the patch is n/a.

I see your test in attachment 459, and I assume &apos;you know what you are doing and testing&apos;
in general. So if I could ask you to make your test a true jog unit test
and add another case which would pass w/o this patch (positive / negative).

Then it would be great to make attachment 137 a real unified patch,
best: unified diff incl. your unit tests. Even better git pull.

The git stuff is not that important, but whats important is one who is able to validate the change.

Hence I take the freedom and make you the maintainer of this bug, 
and I will merge your changes w/ above quality constraints.

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3056</commentid>
    <comment_count>4</comment_count>
      <attachid>508</attachid>
    <who name="Michael">michael.esemplare</who>
    <bug_when>2013-10-07 09:25:37 +0200</bug_when>
    <thetext>Created attachment 508
TestCase for ScaleInternal Problem

This test case run&apos;s through most of the ScaleInternal functions for a single column image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3107</commentid>
    <comment_count>5</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-10-13 00:08:15 +0200</bug_when>
    <thetext>Thank you Michael, merged your last pull request and
add your unit test manually (you are author).

I close this bug now - if this is not correct, pls re-open. 

Thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>135</attachid>
            <date>2008-12-09 12:34:00 +0100</date>
            <delta_ts>2008-12-09 12:34:00 +0100</delta_ts>
            <desc>Test case</desc>
            <filename>Mipmap.java</filename>
            <type>text/plain</type>
            <size>724</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">aW1wb3J0IGphdmEuYXd0LkJvcmRlckxheW91dDsNCmltcG9ydCBqYXZhLmF3dC5GcmFtZTsNCmlt
cG9ydCBqYXZhLmlvLkZpbGU7DQppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCg0KaW1wb3J0
IGphdmF4Lm1lZGlhLm9wZW5nbC5HTENhbnZhczsNCg0KaW1wb3J0IGNvbS5zdW4ub3BlbmdsLnV0
aWwudGV4dHVyZS5UZXh0dXJlSU87DQoNCnB1YmxpYyBjbGFzcyBNaXBtYXAgew0KDQoJcHVibGlj
IHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbiwNCgkJCUlPRXhjZXB0aW9uIHsNCg0KCQlTeXN0ZW0uc2V0UHJvcGVydHkoImpvZ2wu
dGV4dHVyZS5ub25wb3QiLCAidHJ1ZSIpOw0KCQkvLyBTeXN0ZW0uc2V0UHJvcGVydHkoImpvZ2wu
Z2x1Lm5vamF2YSIsICJ0cnVlIik7DQoNCgkJR0xDYW52YXMgY2FudmFzID0gbmV3IEdMQ2FudmFz
KCk7DQoJCUZyYW1lIGZyYW1lID0gbmV3IEZyYW1lKCk7DQoJCWZyYW1lLmFkZChjYW52YXMsIEJv
cmRlckxheW91dC5DRU5URVIpOw0KCQlmcmFtZS5hZGROb3RpZnkoKTsNCgkJY2FudmFzLmdldENv
bnRleHQoKS5tYWtlQ3VycmVudCgpOw0KDQoJCVRleHR1cmVJTy5uZXdUZXh0dXJlKG5ldyBGaWxl
KCJ0aWNrX2hvcl9tYWpvci5wbmciKSwgdHJ1ZSk7DQoNCgkJY2FudmFzLmdldENvbnRleHQoKS5y
ZWxlYXNlKCk7DQoJCWZyYW1lLmRpc3Bvc2UoKTsNCgl9DQoNCn0NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>136</attachid>
            <date>2008-12-09 12:36:00 +0100</date>
            <delta_ts>2008-12-09 12:36:00 +0100</delta_ts>
            <desc>Test image</desc>
            <filename>tick_hor_major.png</filename>
            <type>image/png</type>
            <size>75</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAAHCAYAAADJTCeUAAAAEklEQVR4nGP4X8+wn4kBCHASAEpT
AkqLE/n2AAAAAElFTkSuQmCC
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>137</attachid>
            <date>2009-04-13 13:58:00 +0200</date>
            <delta_ts>2009-04-13 13:58:00 +0200</delta_ts>
            <desc>Here is my patch to fix this bug</desc>
            <filename>ScaleInternal.java</filename>
            <type>text/plain</type>
            <size>101806</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoNCiAqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlv
bnMgb2YgdGhpcyBmaWxlIGFyZQ0KICogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxp
Y2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQ0KICogU29mdHdhcmUgTGljZW5zZSBC
LCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzDQogKiBm
aWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlv
dSBtYXkgbm90IHVzZQ0KICogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQ0KICogb2YgdGhlIExpY2Vuc2UgYXQgU2ls
aWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDANCiAqIEFtcGhp
dGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoNCiAq
IA0KICogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCDQogKiANCiAqIE5vdGUgdGhh
dCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbg0KICogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBX
QVJSQU5USUVTIEFORCBDT05ESVRJT05TDQogKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhP
VVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQNCiAqIENPTkRJVElPTlMg
T0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQ0K
ICogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4NCiAqIA0KICogTk9U
RTogIFRoZSBPcmlnaW5hbCBDb2RlIChhcyBkZWZpbmVkIGJlbG93KSBoYXMgYmVlbiBsaWNlbnNl
ZCB0byBTdW4NCiAqIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpIHVuZGVyIHRoZSBTR0kgRnJl
ZSBTb2Z0d2FyZSBMaWNlbnNlIEINCiAqIChWZXJzaW9uIDEuMSksIHNob3duIGFib3ZlICgiU0dJ
IExpY2Vuc2UiKS4gICBQdXJzdWFudCB0byBTZWN0aW9uDQogKiAzLjIoMykgb2YgdGhlIFNHSSBM
aWNlbnNlLCBTdW4gaXMgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUgdG8NCiAqIHlvdSB1
bmRlciBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlICgiQWx0ZXJuYXRpdmUgTGljZW5zZSIpLiAgVGhp
cw0KICogQWx0ZXJuYXRpdmUgTGljZW5zZSBpbmNsdWRlcyBhbGwgb2YgdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIFNHSSBMaWNlbnNlDQogKiBleGNlcHQgdGhhdCBTZWN0aW9uIDIuMiBhbmQgMTEgYXJl
IG9taXR0ZWQuICBBbnkgZGlmZmVyZW5jZXMgYmV0d2Vlbg0KICogdGhlIEFsdGVybmF0aXZlIExp
Y2Vuc2UgYW5kIHRoZSBTR0kgTGljZW5zZSBhcmUgb2ZmZXJlZCBzb2xlbHkgYnkgU3VuDQogKiBh
bmQgbm90IGJ5IFNHSS4NCiAqDQogKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBp
czogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwNCiAqIFZlcnNpb24gMS4yLjEsIHJlbGVh
c2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLA0KICog
SW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29u
IEdyYXBoaWNzLCBJbmMuDQogKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkg
dGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQNCiAqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuDQogKiANCiAqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRo
ZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzDQogKiBlc3RhYmxpc2hlZCBieSBT
R0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlDQogKiBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCBy
ZWxlYXNlZA0KICogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0g
VXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uDQogKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAx
OTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgNCiAqIFdpbmRvdyBTeXN0ZW0o
UikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2Fy
ZQ0KICogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbg0KICogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBp
bmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nDQogKiBjb21wbGlhbnQgd2l0aCB0aGUgT3Bl
bkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4NCiAqLw0KDQpwYWNrYWdlIGNvbS5z
dW4ub3BlbmdsLmltcGwubWlwbWFwOw0KDQppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMOw0K
aW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5nbHUuR0xVOw0KaW1wb3J0IGphdmEubmlvLio7DQoN
Ci8qKg0KICoNCiAqIEBhdXRob3IgIEFkbWluaXN0cmF0b3INCiAqLw0KcHVibGljIGNsYXNzIFNj
YWxlSW50ZXJuYWwgew0KICANCiAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdCBVSU5UX01BWCA9
IChmbG9hdCkoMHgwMDAwMDAwMEZGRkZGRkZGKTsNCiAgDQogIHB1YmxpYyBzdGF0aWMgdm9pZCBz
Y2FsZV9pbnRlcm5hbCggaW50IGNvbXBvbmVudHMsIGludCB3aWR0aGluLCBpbnQgaGVpZ2h0aW4s
DQogICAgICAgICAgU2hvcnRCdWZmZXIgZGF0YWluLCBpbnQgd2lkdGhvdXQsIGludCBoZWlnaHRv
dXQsIFNob3J0QnVmZmVyIGRhdGFvdXQgKSB7DQogICAgZmxvYXQgeCwgbG93eCwgaGlnaHgsIGNv
bnZ4LCBoYWxmY29udng7DQogICAgZmxvYXQgeSwgbG93eSwgaGlnaHksIGNvbnZ5LCBoYWxmY29u
dnk7DQogICAgZmxvYXQgeHBlcmNlbnQsIHlwZXJjZW50Ow0KICAgIGZsb2F0IHBlcmNlbnQ7DQog
ICAgLy8gTWF4IGNvbXBvbmVudHMgaW4gYSBmb3JtYXQgaXMgNCwgc28uLi4NCiAgICBmbG9hdFtd
IHRvdGFscyA9IG5ldyBmbG9hdFs0XTsNCiAgICBmbG9hdCBhcmVhOw0KICAgIGludCBpLCBqLCBr
LCB5aW50LCB4aW50LCB4aW5kZXgsIHlpbmRleDsNCiAgICBpbnQgdGVtcDsNCiAgICANCiAgICBp
ZiggKHdpZHRoaW4gPT0gKHdpZHRob3V0ICogMikpICYmIChoZWlnaHRpbiA9PSAoaGVpZ2h0b3V0
ICogMikpICkgew0KICAgICAgSGFsdmVJbWFnZS5oYWx2ZUltYWdlKCBjb21wb25lbnRzLCB3aWR0
aGluLCBoZWlnaHRpbiwgZGF0YWluLCBkYXRhb3V0ICk7DQogICAgICByZXR1cm47DQogICAgfQ0K
ICAgIGNvbnZ5ID0gKGZsb2F0KWhlaWdodGluIC8gaGVpZ2h0b3V0Ow0KICAgIGNvbnZ4ID0gKGZs
b2F0KXdpZHRoaW4gLyB3aWR0aG91dDsNCiAgICBoYWxmY29udnggPSBjb252eCAvIDI7DQogICAg
aGFsZmNvbnZ5ID0gY29udnkgLyAyOw0KICAgIGZvciggaSA9IDA7IGkgPCBoZWlnaHRvdXQ7IGkr
KyApIHsNCiAgICAgIHkgPSBjb252eSAqICggaSArIDAuNWYgKTsNCiAgICAgIGlmKCBoZWlnaHRp
biA+IGhlaWdodG91dCApIHsNCiAgICAgICAgaGlnaHkgPSB5ICsgaGFsZmNvbnZ5Ow0KICAgICAg
ICBsb3d5ID0geSAtIGhhbGZjb252eTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGhpZ2h5ID0g
eSArIDAuNWY7DQogICAgICAgIGxvd3kgPSB5IC0gMC41ZjsNCiAgICAgIH0NCiAgICAgIGZvcigg
aiA9IDA7IGogPCB3aWR0aG91dDsgaisrICkgew0KICAgICAgICB4ID0gY29udnggKiAoIGogKyAw
LjVmICk7DQogICAgICAgIGlmKCB3aWR0aGluID4gd2lkdGhvdXQgKSB7DQogICAgICAgICAgaGln
aHggPSB4ICsgaGFsZmNvbnZ4Ow0KICAgICAgICAgIGxvd3ggPSB4IC0gaGFsZmNvbnZ4Ow0KICAg
ICAgICB9IGVsc2Ugew0KICAgICAgICAgIGhpZ2h4ID0geCArIDAuNWY7DQogICAgICAgICAgbG93
eCA9IHggLSAwLjVmOw0KICAgICAgICB9DQogICAgICAgIC8vIE9rLCBub3cgYXBwbHkgYm94IGZp
bHRlciB0byBib3ggdGhhdCBnb2VzIGZyb20gKGxvd3gsIGxvd3kpDQogICAgICAgIC8vIHRvICho
aWdoeCwgaGlnaHkpIG9uIGlucHV0IGRhdGEgaW50byB0aGlzIHBpeGVsIG9uIG91dHB1dA0KICAg
ICAgICAvLyBkYXRhLg0KICAgICAgICB0b3RhbHNbMF0gPSB0b3RhbHNbMV0gPSB0b3RhbHNbMl0g
PSB0b3RhbHNbM10gPSAwLjBmOw0KICAgICAgICBhcmVhID0gMC4wZjsNCiAgICAgICAgDQogICAg
ICAgIHkgPSBsb3d5Ow0KICAgICAgICB5aW50ID0gKGludClNYXRoLmZsb29yKCB5ICk7DQogICAg
ICAgIHdoaWxlKCB5IDwgaGlnaHkgKSB7DQogICAgICAgICAgeWluZGV4ID0gKCB5aW50ICsgaGVp
Z2h0aW4gKSAlIGhlaWdodGluOw0KICAgICAgICAgIGlmKCBoaWdoeSA8IHlpbnQgKyAxICkgew0K
ICAgICAgICAgICAgeXBlcmNlbnQgPSBoaWdoeSAtIHk7DQogICAgICAgICAgfSBlbHNlIHsNCiAg
ICAgICAgICAgIHlwZXJjZW50ID0geWludCArIDEgLSB5Ow0KICAgICAgICAgIH0NCiAgICAgICAg
ICANCiAgICAgICAgICB4ID0gbG93eDsNCiAgICAgICAgICB4aW50ID0gKGludClNYXRoLmZsb29y
KCB4ICk7DQogICAgICAgICAgDQogICAgICAgICAgd2hpbGUoIHggPCBoaWdoeCApIHsNCiAgICAg
ICAgICAgIHhpbmRleCA9ICggeGludCArIHdpZHRoaW4gKSAlIHdpZHRoaW47DQogICAgICAgICAg
ICBpZiggaGlnaHggPCB4aW50ICsgMSApIHsNCiAgICAgICAgICAgICAgeHBlcmNlbnQgPSBoaWdo
eCAteDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHhwZXJjZW50ID0geGlu
dCArIDEgLSB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBwZXJj
ZW50ID0geHBlcmNlbnQgKiB5cGVyY2VudDsNCiAgICAgICAgICAgIGFyZWEgKz0gcGVyY2VudDsN
CiAgICAgICAgICAgIHRlbXAgPSAoIHhpbmRleCArICggeWluZGV4ICogd2lkdGhpbikgKSAqIGNv
bXBvbmVudHM7DQogICAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkg
ew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldCggdGVtcCArIGsgKSAqIHBl
cmNlbnQ7IA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICB4aW50Kys7
DQogICAgICAgICAgICB4ID0geGludDsNCiAgICAgICAgICB9DQogICAgICAgICAgeWludCsrOw0K
ICAgICAgICAgIHkgPSB5aW50Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICB0ZW1wID0g
KCBqICsgKCBpICogd2lkdGhvdXQgKSApICogY29tcG9uZW50czsNCiAgICAgICAgZm9yKCBrID0g
MDsgayA8IGNvbXBvbmVudHM7IGsrKyApIHsNCiAgICAgICAgICAvLyB0b3RhbHNbXSBzaG91bGQg
YmUgcm91bmRlZCBpbiB0aGUgY2FzZSBvZiBlbmxhcmdpbmcgYW4gUkdCDQogICAgICAgICAgLy8g
cmFtcCB3aGVuIHRoZSB0eXBlIGlzIDMzMiBvciA0NDQ0DQogICAgICAgICAgZGF0YW91dC5wdXQo
ICB0ZW1wICsgaywgKHNob3J0KSgodG90YWxzW2tdICsgMC41ZikgLyBhcmVhKSApOw0KICAgICAg
ICB9DQogICAgICB9DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIHZvaWQgc2NhbGVf
aW50ZXJuYWxfdWJ5dGUoIGludCBjb21wb25lbnRzLCBpbnQgd2lkdGhpbiwgaW50IGhlaWdodGlu
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZUJ1ZmZlciBkYXRhaW4sIGludCB3
aWR0aG91dCwgaW50IGhlaWdodG91dCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
eXRlQnVmZmVyIGRhdGFvdXQsIGludCBlbGVtZW50X3NpemUsIGludCB5c2l6ZSwgaW50IGdyb3Vw
X3NpemUgKSB7DQogICAgZmxvYXQgeCwgY29udng7DQogICAgZmxvYXQgeSwgY29udnk7DQogICAg
ZmxvYXQgcGVyY2VudDsNCiAgICAvLyBNYXggY29tcG9uZW50cyBpbiBhIGZvcm1hdCBpcyA0LCBz
by4uLg0KICAgIGZsb2F0W10gdG90YWxzID0gbmV3IGZsb2F0WzRdOw0KICAgIGZsb2F0IGFyZWE7
DQogICAgaW50IGksIGosIGssIHhpbmRleDsNCiAgICANCiAgICBpbnQgdGVtcCwgdGVtcDA7DQog
ICAgaW50IHRlbXBfaW5kZXg7DQogICAgaW50IG91dGluZGV4Ow0KICAgIA0KICAgIGludCBsb3d4
X2ludCwgaGlnaHhfaW50LCBsb3d5X2ludCwgaGlnaHlfaW50Ow0KICAgIGZsb2F0IHhfcGVyY2Vu
dCwgeV9wZXJjZW50Ow0KICAgIGZsb2F0IGxvd3hfZmxvYXQsIGhpZ2h4X2Zsb2F0LCBsb3d5X2Zs
b2F0LCBoaWdoeV9mbG9hdDsNCiAgICBmbG9hdCBjb252eV9mbG9hdCwgY29udnhfZmxvYXQ7DQog
ICAgaW50IGNvbnZ5X2ludCwgY29udnhfaW50Ow0KICAgIGludCBsLCBtOw0KICAgIGludCBsZWZ0
LCByaWdodDsNCiAgICANCiAgICBpZiggKHdpZHRoaW4gPT0gKHdpZHRob3V0ICogMikpICYmICho
ZWlnaHRpbiA9PSAoaGVpZ2h0b3V0ICogMikpICkgew0KICAgICAgSGFsdmVJbWFnZS5oYWx2ZUlt
YWdlX3VieXRlKCBjb21wb25lbnRzLCB3aWR0aGluLCBoZWlnaHRpbiwgZGF0YWluLCBkYXRhb3V0
LCANCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfc2l6ZSwgeXNpemUsIGdyb3VwX3Np
emUgKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgY29udnkgPSAoZmxvYXQpaGVpZ2h0aW4g
LyBoZWlnaHRvdXQ7DQogICAgY29udnggPSAoZmxvYXQpd2lkdGhpbiAvIHdpZHRob3V0Ow0KICAg
IGNvbnZ5X2ludCA9IChpbnQpTWF0aC5mbG9vciggY29udnkgKTsNCiAgICBjb252eV9mbG9hdCA9
IGNvbnZ5IC0gY29udnlfaW50Ow0KICAgIGNvbnZ4X2ludCA9IChpbnQpTWF0aC5mbG9vciggY29u
dnggKTsNCiAgICBjb252eF9mbG9hdCA9IGNvbnZ4IC0gY29udnhfaW50Ow0KICAgIA0KICAgIGFy
ZWEgPSBjb252eCAqIGNvbnZ5Ow0KICAgIA0KICAgIGxvd3lfaW50ID0gMDsNCiAgICBsb3d5X2Zs
b2F0ID0gMC4wZjsNCiAgICBoaWdoeV9pbnQgPSBjb252eV9pbnQ7DQogICAgaGlnaHlfZmxvYXQg
PSBjb252eV9mbG9hdDsNCg0KICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVycnVu
IA0KICAgIGludCBkYXRhaW5fc2l6ZSA9IHdpZHRoaW4gKiBoZWlnaHRpbiAqIGNvbXBvbmVudHMg
KiBlbGVtZW50X3NpemU7DQogICAgDQogICAgZm9yKCBpID0gMDsgaSA8IGhlaWdodG91dDsgaSsr
ICkgew0KICAgICAgLy8gQ2xhbXAgaGVyZSB0byBiZSBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25k
IGlucHV0IGJ1ZmZlci4NCiAgICAgIGlmIChoaWdoeV9pbnQgPj0gaGVpZ2h0aW4pDQogICAgICAg
IGhpZ2h5X2ludCA9IGhlaWdodGluIC0gMTsNCiAgICAgIGxvd3hfaW50ID0gMDsNCiAgICAgIGxv
d3hfZmxvYXQgPSAwLjBmOw0KICAgICAgaGlnaHhfaW50ID0gY29udnhfaW50Ow0KICAgICAgaGln
aHhfZmxvYXQgPSBjb252eF9mbG9hdDsNCiAgICAgIA0KICAgICAgZm9yKCBqID0gMDsgaiA8IHdp
ZHRob3V0OyBqKysgKSB7DQogICAgICAgIA0KICAgICAgICAvLyBPaywgbm93IGFwcGx5IGJveCBm
aWx0ZXIgdG8gYm94IHRoYXQgZ29lcyBmcm9tIChsb3d4LCBsb3d5KQ0KICAgICAgICAvLyB0byAo
aGlnaHgsIGhpZ2h5KSBvbiBpbnB1dCBkYXRhIGludG8gdGhpcyBwaXhlbCBvbiBvdXRwdXQNCiAg
ICAgICAgLy8gZGF0YS4NCiAgICAgICAgdG90YWxzWzBdID0gdG90YWxzWzFdID0gdG90YWxzWzJd
ID0gdG90YWxzWzNdID0gMC4wZjsNCiAgICAgICAgDQogICAgICAgIC8vIGNhdWxhdGUgdGhlIHZh
bHVlIGZvciBwaXhlbHMgaW4gdGhlIDFzdCByb3cNCiAgICAgICAgeGluZGV4ID0gbG93eF9pbnQg
KiBncm91cF9zaXplOw0KDQogICAgICAgIGlmKCAoIGhpZ2h5X2ludCA+IGxvd3lfaW50ICkgJiYg
KCBoaWdoeF9pbnQgPiBsb3d4X2ludCApICkgew0KICAgICAgICAgIA0KICAgICAgICAgIHlfcGVy
Y2VudCA9IDEgLSBsb3d5X2Zsb2F0Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyBsb3d5X2lu
dCAqIHlzaXplOw0KICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiAoIDEgLSBsb3d4X2Zs
b2F0ICk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21w
b25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAg
ZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICB0b3RhbHNba10gKz0g
KCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgpICkgKiBwZXJjZW50Ow0KICAgICAgICAgIH0NCiAg
ICAgICAgICBsZWZ0ID0gdGVtcDsNCiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwg
PCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAg
ICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsg
aysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWlu
LnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4
MDAwMDAwRkYgJiBkYXRhaW4uZ2V0KCkgKSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICB9DQoNCiAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAgICAgICAgcmln
aHQgPSB0ZW1wOw0KICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9hdDsN
CiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICAgICAg
ICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1w
X2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50
X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0K
ICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgpICkg
KiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAg
ICAgICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVlIGZvciBwaXhlbHMgaW4gdGhlIGxhc3Qgcm93DQog
ICAgICAgICAgeV9wZXJjZW50ID0gaGlnaHlfZmxvYXQ7DQogICAgICAgICAgcGVyY2VudCA9IHlf
cGVyY2VudCAqICggMSAtIGxvd3hfZmxvYXQgKTsNCiAgICAgICAgICB0ZW1wID0geGluZGV4ICsg
aGlnaHlfaW50ICogeXNpemU7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRl
bXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0K
ICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICB0
b3RhbHNba10gKz0gKCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgpICkgKiBwZXJjZW50Ow0KICAg
ICAgICAgIH0NCiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7
IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICAgIGZv
ciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2lu
ZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0
ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMDAwRkYgJiBk
YXRhaW4uZ2V0KCkgKSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQog
ICAgICAgICAgDQogICAgICAgICAgdGVtcCArPSBncm91cF9zaXplOw0KICAgICAgICAgIHBlcmNl
bnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBh
dm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICAgICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7
DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVu
dHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRh
dGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0g
KCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgpICkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVl
IGZvciB0aGUgcGl4ZWxzIGluIHRoZSAxc3QgYW5kIGxhc3QgY29sdW1uDQogICAgICAgICAgZm9y
KCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGlnaHlfaW50OyBtKysgKSB7DQogICAgICAgICAgICBs
ZWZ0ICs9IHlzaXplOw0KICAgICAgICAgICAgcmlnaHQgKz0geXNpemU7DQogICAgICAgICAgICBm
b3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrLCBsZWZ0ICs9IGVsZW1lbnRfc2l6ZSwgcmln
aHQgKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBmbG9hdCBmID0gMC4wZjsNCiAg
ICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCBsZWZ0ICk7DQogICAgICAgICAgICAgIGYgPSAo
IDB4MDAwMDAwRkYgJiBkYXRhaW4uZ2V0KCkgKSAqICggMS4wZiAtIGxvd3hfZmxvYXQgKTsNCiAg
ICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCByaWdodCApOw0KICAgICAgICAgICAgICBmICs9
ICggMHgwMDAwMDBGRiAmIGRhdGFpbi5nZXQoKSApICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAg
ICAgIHRvdGFsc1trXSArPSBmOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAg
fSBlbHNlIGlmKCBoaWdoeV9pbnQgPiBsb3d5X2ludCApIHsNCiAgICAgICAgICB4X3BlcmNlbnQg
PSBoaWdoeF9mbG9hdCAtIGxvd3hfZmxvYXQ7DQogICAgICAgICAgcGVyY2VudCA9ICggMSAtIGxv
d3lfZmxvYXQpICogeF9wZXJjZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9p
bnQgKiB5c2l6ZSk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsg
PCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAg
ICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICB0b3RhbHNb
a10gKz0gKCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgpICkgKiBwZXJjZW50Ow0KICAgICAgICAg
IH0NCiAgICAgICAgICBmb3IoIG0gPSBsb3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyAp
IHsNCiAgICAgICAgICAgIHRlbXAgKz0geXNpemU7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0
ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVt
ZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCAp
Ow0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgp
ICkgKiB4X3BlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHBl
cmNlbnQgPSB4X3BlcmNlbnQgKiBoaWdoeV9mbG9hdDsNCiAgICAgICAgICB0ZW1wICs9IHlzaXpl
Ow0KICAgICAgICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgICAg
ICAgIGlmICh0ZW1wIDwgZGF0YWluX3NpemUpIHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRl
bXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1l
bnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7
DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMDAwRkYgJiBkYXRhaW4uZ2V0KCkg
KSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ug
aWYoIGhpZ2h4X2ludCA+IGxvd3hfaW50ICkgew0KICAgICAgICAgIHlfcGVyY2VudCA9IGhpZ2h5
X2Zsb2F0IC0gbG93eV9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0gbG93eF9mbG9h
dCApICogeV9wZXJjZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5
c2l6ZSk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21w
b25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAg
ZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICB0b3RhbHNba10gKz0g
KCAweDAwMDAwMEZGICYgZGF0YWluLmdldCgpICkgKiBwZXJjZW50Ow0KICAgICAgICAgIH0NCiAg
ICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAg
ICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRl
bXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1l
bnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7
DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMDAwRkYgJiBkYXRhaW4uZ2V0KCkg
KSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgdGVt
cCArPSBncm91cF9zaXplOw0KICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9m
bG9hdDsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAg
ICAgICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBmb3IoIGsgPSAw
LCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBl
bGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRl
eCApOw0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDAwMEZGICYgZGF0YWluLmdl
dCgpICkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICBwZXJjZW50ID0gKCBoaWdoeV9mbG9hdCAtIGxvd3lfZmxvYXQgKSAq
ICggaGlnaHhfZmxvYXQgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCAr
IChsb3d5X2ludCAqIHlzaXplKTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0g
dGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7
DQogICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAg
IHRvdGFsc1trXSArPSAoIDB4MDAwMDAwRkYgJiBkYXRhaW4uZ2V0KCkgKSAqIHBlcmNlbnQ7DQog
ICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gdGhpcyBpcyBmb3IgdGhlIHBpeGVs
cyBpbiB0aGUgYm9keQ0KICAgICAgICB0ZW1wMCA9IHhpbmRleCArIGdyb3VwX3NpemUgKyAoIGxv
d3lfaW50ICsgMSApICogeXNpemU7DQogICAgICAgIGZvciggbSA9IGxvd3lfaW50ICsgMTsgbSA8
IGhpZ2h5X2ludDsgbSsrICkgew0KICAgICAgICAgIHRlbXAgPSB0ZW1wMDsNCiAgICAgICAgICBm
b3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAg
IGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1w
X2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9u
KCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMDAwRkYg
JiBkYXRhaW4uZ2V0KCkgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRlbXAgKz0gZ3Jv
dXBfc2l6ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgdGVtcDAgKz0geXNpemU7DQogICAgICAg
IH0NCiAgICAgICAgDQogICAgICAgIG91dGluZGV4ID0gKCBqICsgKCBpICogd2lkdGhvdXQgKSAp
ICogY29tcG9uZW50czsNCiAgICAgICAgZm9yKCBrID0gMDsgayA8IGNvbXBvbmVudHM7IGsrKyAp
IHsNCiAgICAgICAgICBkYXRhb3V0LnBvc2l0aW9uKCBvdXRpbmRleCArIGsgKTsNCiAgICAgICAg
ICBkYXRhb3V0LnB1dCggKGJ5dGUpKHRvdGFsc1trXSAvIGFyZWEpICk7DQogICAgICAgIH0NCiAg
ICAgICAgbG93eF9pbnQgPSBoaWdoeF9pbnQ7DQogICAgICAgIGxvd3hfZmxvYXQgPSBoaWdoeF9m
bG9hdDsNCiAgICAgICAgaGlnaHhfaW50ICs9IGNvbnZ4X2ludDsNCiAgICAgICAgaGlnaHhfZmxv
YXQgKz0gY29udnhfZmxvYXQ7DQogICAgICAgIGlmKCBoaWdoeF9mbG9hdCA+IDEuMGYgKSB7DQog
ICAgICAgICAgaGlnaHhfZmxvYXQgLT0gMS4wZjsNCiAgICAgICAgICBoaWdoeF9pbnQrKzsNCiAg
ICAgICAgfQ0KDQogICAgICAgIC8vIENsYW1wIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBydW4gb2Zm
IHRoZSByaWdodCBlZGdlDQogICAgICAgIGlmIChoaWdoeF9pbnQgPiB3aWR0aGluIC0gMSkgew0K
ICAgICAgICAgIGludCBkZWx0YSA9IChoaWdoeF9pbnQgLSB3aWR0aGluICsgMSk7DQogICAgICAg
ICAgbG93eF9pbnQgLT0gZGVsdGE7DQogICAgICAgICAgaGlnaHhfaW50IC09IGRlbHRhOw0KICAg
ICAgICB9DQogICAgICB9DQogICAgICBsb3d5X2ludCA9IGhpZ2h5X2ludDsNCiAgICAgIGxvd3lf
ZmxvYXQgPSBoaWdoeV9mbG9hdDsNCiAgICAgIGhpZ2h5X2ludCArPSBjb252eV9pbnQ7DQogICAg
ICBoaWdoeV9mbG9hdCArPSBjb252eV9mbG9hdDsNCiAgICAgIGlmKCBoaWdoeV9mbG9hdCA+IDEu
MGYgKSB7DQogICAgICAgIGhpZ2h5X2Zsb2F0IC09IDEuMGY7DQogICAgICAgIGhpZ2h5X2ludCsr
Ow0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyB2b2lkIHNjYWxlX2lu
dGVybmFsX2J5dGUoIGludCBjb21wb25lbnRzLCBpbnQgd2lkdGhpbiwgaW50IGhlaWdodGluLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZUJ1ZmZlciBkYXRhaW4sIGludCB3aWR0
aG91dCwgaW50IGhlaWdodG91dCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRl
QnVmZmVyIGRhdGFvdXQsIGludCBlbGVtZW50X3NpemUsIGludCB5c2l6ZSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBncm91cF9zaXplICkgew0KICAgIGZsb2F0IHgsIGNvbnZ4
Ow0KICAgIGZsb2F0IHksIGNvbnZ5Ow0KICAgIGZsb2F0IHBlcmNlbnQ7DQogICAgLy8gTWF4IGNv
bXBvbmVudHMgaW4gYSBmb3JtYXQgaXMgNCwgc28uLi4NCiAgICBmbG9hdFtdIHRvdGFscyA9IG5l
dyBmbG9hdFs0XTsNCiAgICBmbG9hdCBhcmVhOw0KICAgIGludCBpLCBqLCBrLCB4aW5kZXg7DQog
ICAgDQogICAgaW50IHRlbXAsIHRlbXAwOw0KICAgIGludCB0ZW1wX2luZGV4Ow0KICAgIGludCBv
dXRpbmRleDsNCiAgICANCiAgICBpbnQgbG93eF9pbnQsIGhpZ2h4X2ludCwgbG93eV9pbnQsIGhp
Z2h5X2ludDsNCiAgICBmbG9hdCB4X3BlcmNlbnQsIHlfcGVyY2VudDsNCiAgICBmbG9hdCBsb3d4
X2Zsb2F0LCBoaWdoeF9mbG9hdCwgbG93eV9mbG9hdCwgaGlnaHlfZmxvYXQ7DQogICAgZmxvYXQg
Y29udnlfZmxvYXQsIGNvbnZ4X2Zsb2F0Ow0KICAgIGludCBjb252eV9pbnQsIGNvbnZ4X2ludDsN
CiAgICBpbnQgbCwgbTsNCiAgICBpbnQgbGVmdCwgcmlnaHQ7DQogICAgDQogICAgaWYoICh3aWR0
aGluID09ICh3aWR0aG91dCAqIDIpKSAmJiAoaGVpZ2h0aW4gPT0gKGhlaWdodG91dCAqIDIpKSAp
IHsNCiAgICAgIEhhbHZlSW1hZ2UuaGFsdmVJbWFnZV9ieXRlKCBjb21wb25lbnRzLCB3aWR0aGlu
LCBoZWlnaHRpbiwgZGF0YWluLCBkYXRhb3V0LCANCiAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRfc2l6ZSwgeXNpemUsIGdyb3VwX3NpemUgKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQog
ICAgY29udnkgPSAoZmxvYXQpaGVpZ2h0aW4gLyBoZWlnaHRvdXQ7DQogICAgY29udnggPSAoZmxv
YXQpd2lkdGhpbiAvIHdpZHRob3V0Ow0KICAgIGNvbnZ5X2ludCA9IChpbnQpTWF0aC5mbG9vcigg
Y29udnkgKTsNCiAgICBjb252eV9mbG9hdCA9IGNvbnZ5IC0gY29udnlfaW50Ow0KICAgIGNvbnZ4
X2ludCA9IChpbnQpTWF0aC5mbG9vciggY29udnggKTsNCiAgICBjb252eF9mbG9hdCA9IGNvbnZ4
IC0gY29udnhfaW50Ow0KICAgIA0KICAgIGFyZWEgPSBjb252eCAqIGNvbnZ5Ow0KICAgIA0KICAg
IGxvd3lfaW50ID0gMDsNCiAgICBsb3d5X2Zsb2F0ID0gMC4wZjsNCiAgICBoaWdoeV9pbnQgPSBj
b252eV9pbnQ7DQogICAgaGlnaHlfZmxvYXQgPSBjb252eV9mbG9hdDsNCiAgICANCiAgICAvLyBJ
c3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICBpbnQgZGF0YWluX3NpemUgPSB3
aWR0aGluICogaGVpZ2h0aW4gKiBjb21wb25lbnRzICogZWxlbWVudF9zaXplOw0KICAgIA0KICAg
IGZvciggaSA9IDA7IGkgPCBoZWlnaHRvdXQ7IGkrKyApIHsNCiAgICAgIC8vIENsYW1wIGhlcmUg
dG8gYmUgc3VyZSB3ZSBkb24ndCByZWFkIGJleW9uZCBpbnB1dCBidWZmZXIuDQogICAgICBpZiAo
aGlnaHlfaW50ID49IGhlaWdodGluKQ0KICAgICAgICBoaWdoeV9pbnQgPSBoZWlnaHRpbiAtIDE7
DQogICAgICBsb3d4X2ludCA9IDA7DQogICAgICBsb3d4X2Zsb2F0ID0gMC4wZjsNCiAgICAgIGhp
Z2h4X2ludCA9IGNvbnZ4X2ludDsNCiAgICAgIGhpZ2h4X2Zsb2F0ID0gY29udnhfZmxvYXQ7DQog
ICAgICANCiAgICAgIGZvciggaiA9IDA7IGogPCB3aWR0aG91dDsgaisrICkgew0KICAgICAgICAN
CiAgICAgICAgLy8gT2ssIG5vdyBhcHBseSBib3ggZmlsdGVyIHRvIGJveCB0aGF0IGdvZXMgZnJv
bSAobG93eCwgbG93eSkNCiAgICAgICAgLy8gdG8gKGhpZ2h4LCBoaWdoeSkgb24gaW5wdXQgZGF0
YSBpbnRvIHRoaXMgcGl4ZWwgb24gb3V0cHV0DQogICAgICAgIC8vIGRhdGEuDQogICAgICAgIHRv
dGFsc1swXSA9IHRvdGFsc1sxXSA9IHRvdGFsc1syXSA9IHRvdGFsc1szXSA9IDAuMGY7DQogICAg
ICAgIA0KICAgICAgICAvLyBjYXVsYXRlIHRoZSB2YWx1ZSBmb3IgcGl4ZWxzIGluIHRoZSAxc3Qg
cm93DQogICAgICAgIHhpbmRleCA9IGxvd3hfaW50ICogZ3JvdXBfc2l6ZTsNCiAgICAgICAgaWYo
ICggaGlnaHlfaW50ID4gbG93eV9pbnQgKSAmJiAoIGhpZ2h4X2ludCA+IGxvd3hfaW50ICkgKSB7
DQogICAgICAgICAgDQogICAgICAgICAgeV9wZXJjZW50ID0gMSAtIGxvd3lfZmxvYXQ7DQogICAg
ICAgICAgdGVtcCA9IHhpbmRleCArIGxvd3lfaW50ICogeXNpemU7DQogICAgICAgICAgcGVyY2Vu
dCA9IHlfcGVyY2VudCAqICggMSAtIGxvd3hfZmxvYXQgKTsNCiAgICAgICAgICBmb3IoIGsgPSAw
LCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBl
bGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXgg
KTsNCiAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0KCkgKiBwZXJjZW50Ow0KICAg
ICAgICAgIH0NCiAgICAgICAgICBsZWZ0ID0gdGVtcDsNCiAgICAgICAgICBmb3IoIGwgPSBsb3d4
X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gZ3Jv
dXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwg
Y29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAg
ICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIHRvdGFs
c1trXSArPSBkYXRhaW4uZ2V0KCkgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICByaWdodCA9IHRl
bXA7DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqIGhpZ2h4X2Zsb2F0Ow0KICAgICAg
ICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgICAgICAgIGlmICh0
ZW1wIDwgZGF0YWluX3NpemUpIHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXgg
PSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSAp
IHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAg
ICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0KCkgKiBwZXJjZW50Ow0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHZh
bHVlIGZvciBwaXhlbHMgaW4gdGhlIGxhc3Qgcm93DQogICAgICAgICAgeV9wZXJjZW50ID0gaGln
aHlfZmxvYXQ7DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqICggMSAtIGxvd3hfZmxv
YXQgKTsNCiAgICAgICAgICB0ZW1wID0geGluZGV4ICsgaGlnaHlfaW50ICogeXNpemU7DQogICAg
ICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyss
IHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0
aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldCgp
ICogcGVyY2VudDsNCiAgICAgICAgICB9DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQgKyAx
OyBsIDwgaGlnaHhfaW50OyBsKysgKSB7DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7
DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVu
dHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRh
dGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0g
ZGF0YWluLmdldCgpICogeV9wZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAg
ICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2Vu
dCAqIGhpZ2h4X2Zsb2F0Ow0KICAgICAgICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBv
dmVycnVuIA0KICAgICAgICAgIGlmICh0ZW1wIDwgZGF0YWluX3NpemUpIHsNCiAgICAgICAgICAg
IGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1w
X2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9u
KCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0KCkg
KiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAg
ICAgICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVlIGZvciB0aGUgcGl4ZWxzIGluIHRoZSAxc3QgYW5k
IGxhc3QgY29sdW1uDQogICAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGlnaHlf
aW50OyBtKysgKSB7DQogICAgICAgICAgICBsZWZ0ICs9IHlzaXplOw0KICAgICAgICAgICAgcmln
aHQgKz0geXNpemU7DQogICAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysr
LCBsZWZ0ICs9IGVsZW1lbnRfc2l6ZSwgcmlnaHQgKz0gZWxlbWVudF9zaXplICkgew0KICAgICAg
ICAgICAgICBmbG9hdCBmID0gMC4wZjsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCBs
ZWZ0ICk7DQogICAgICAgICAgICAgIGYgPSBkYXRhaW4uZ2V0KCkgKiAoIDEgLSBsb3d4X2Zsb2F0
ICk7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggcmlnaHQgKTsNCiAgICAgICAgICAg
ICAgZiArPSBkYXRhaW4uZ2V0KCkgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAgICAgICAgdG90YWxz
W2tdICs9IGY7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYo
IGhpZ2h5X2ludCA+IGxvd3lfaW50ICkgew0KICAgICAgICAgIHhfcGVyY2VudCA9IGhpZ2h4X2Zs
b2F0IC0gbG93eF9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0gbG93eV9mbG9hdCkg
KiB4X3BlcmNlbnQ7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCArIChsb3d5X2ludCAqIHlzaXpl
KTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVu
dHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBkYXRh
aW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRh
aW4uZ2V0KCkgKiBwZXJjZW50Ow0KICAgICAgICAgIH0NCiAgICAgICAgICBmb3IoIG0gPSBsb3d5
X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0geXNp
emU7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBv
bmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAg
IGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICB0b3RhbHNba10g
Kz0gZGF0YWluLmdldCgpICogeF9wZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICBwZXJjZW50ID0geF9wZXJjZW50ICogaGlnaHlfZmxvYXQ7DQogICAgICAgICAg
dGVtcCArPSB5c2l6ZTsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3Zl
cnJ1biANCiAgICAgICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBm
b3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9p
bmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbigg
dGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldCgpICog
cGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSBpZigg
aGlnaHhfaW50ID4gbG93eF9pbnQgKSB7DQogICAgICAgICAgeV9wZXJjZW50ID0gaGlnaHlfZmxv
YXQgLSBsb3d5X2Zsb2F0Ow0KICAgICAgICAgIHBlcmNlbnQgPSAoIDEgLSBsb3d4X2Zsb2F0ICkg
KiB5X3BlcmNlbnQ7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCArIChsb3d5X2ludCAqIHlzaXpl
KTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVu
dHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBkYXRh
aW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRh
aW4uZ2V0KCkgKiBwZXJjZW50Ow0KICAgICAgICAgIH0NCiAgICAgICAgICBmb3IoIGwgPSBsb3d4
X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gZ3Jv
dXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwg
Y29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAg
ICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIHRvdGFs
c1trXSArPSBkYXRhaW4uZ2V0KCkgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0g
eV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQg
bWVtb3J5IG92ZXJydW4gDQogICAgICAgICAgaWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAg
ICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBr
KyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4u
cG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFp
bi5nZXQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgIHBlcmNlbnQgPSAoIGhpZ2h5X2Zsb2F0IC0gbG93eV9mbG9hdCAp
ICogKCBoaWdoeF9mbG9hdCAtIGxvd3hfZmxvYXQgKTsNCiAgICAgICAgICB0ZW1wID0geGluZGV4
ICsgKGxvd3lfaW50ICogeXNpemUpOw0KICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXgg
PSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSAp
IHsNCiAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAg
ICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgfQ0KICAg
ICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyB0aGlzIGlzIGZvciB0aGUgcGl4ZWxzIGluIHRo
ZSBib2R5DQogICAgICAgIHRlbXAwID0geGluZGV4ICsgZ3JvdXBfc2l6ZSArICggbG93eV9pbnQg
KyAxICkgKiB5c2l6ZTsNCiAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGlnaHlf
aW50OyBtKysgKSB7DQogICAgICAgICAgdGVtcCA9IHRlbXAwOw0KICAgICAgICAgIGZvciggbCA9
IGxvd3hfaW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgZm9yKCBr
ID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXgg
Kz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBf
aW5kZXggKTsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXQoKTsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICB9DQog
ICAgICAgICAgdGVtcDAgKz0geXNpemU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIG91
dGluZGV4ID0gKCBqICsgKCBpICogd2lkdGhvdXQgKSApICogY29tcG9uZW50czsNCiAgICAgICAg
Zm9yKCBrID0gMDsgayA8IGNvbXBvbmVudHM7IGsrKyApIHsNCiAgICAgICAgICBkYXRhb3V0LnBv
c2l0aW9uKCBvdXRpbmRleCArIGsgKTsNCiAgICAgICAgICBkYXRhb3V0LnB1dCggKGJ5dGUpKHRv
dGFsc1trXSAvIGFyZWEpICk7DQogICAgICAgIH0NCiAgICAgICAgbG93eF9pbnQgPSBoaWdoeF9p
bnQ7DQogICAgICAgIGxvd3hfZmxvYXQgPSBoaWdoeF9mbG9hdDsNCiAgICAgICAgaGlnaHhfaW50
ICs9IGNvbnZ4X2ludDsNCiAgICAgICAgaGlnaHhfZmxvYXQgKz0gY29udnhfZmxvYXQ7DQogICAg
ICAgIGlmKCBoaWdoeF9mbG9hdCA+IDEuMGYgKSB7DQogICAgICAgICAgaGlnaHhfZmxvYXQgLT0g
MS4wZjsNCiAgICAgICAgICBoaWdoeF9pbnQrKzsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIENs
YW1wIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSByaWdodCBlZGdlDQogICAgICAg
IGlmIChoaWdoeF9pbnQgPiB3aWR0aGluIC0gMSkgew0KICAgICAgICAgIGludCBkZWx0YSA9ICho
aWdoeF9pbnQgLSB3aWR0aGluICsgMSk7DQogICAgICAgICAgbG93eF9pbnQgLT0gZGVsdGE7DQog
ICAgICAgICAgaGlnaHhfaW50IC09IGRlbHRhOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBs
b3d5X2ludCA9IGhpZ2h5X2ludDsNCiAgICAgIGxvd3lfZmxvYXQgPSBoaWdoeV9mbG9hdDsNCiAg
ICAgIGhpZ2h5X2ludCArPSBjb252eV9pbnQ7DQogICAgICBoaWdoeV9mbG9hdCArPSBjb252eV9m
bG9hdDsNCiAgICAgIGlmKCBoaWdoeV9mbG9hdCA+IDEuMGYgKSB7DQogICAgICAgIGhpZ2h5X2Zs
b2F0IC09IDEuMGY7DQogICAgICAgIGhpZ2h5X2ludCsrOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0K
ICANCiAgcHVibGljIHN0YXRpYyB2b2lkIHNjYWxlX2ludGVybmFsX3VzaG9ydCggaW50IGNvbXBv
bmVudHMsIGludCB3aWR0aGluLCBpbnQgaGVpZ2h0aW4sDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCeXRlQnVmZmVyIGRhdGFpbiwgaW50IHdpZHRob3V0LCBpbnQgaGVpZ2h0b3V0LCAN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3J0QnVmZmVyIGRhdGFvdXQsIGludCBl
bGVtZW50X3NpemUsIGludCB5c2l6ZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZ3JvdXBfc2l6ZSwgYm9vbGVhbiBteXN3YXBfYnl0ZXMgKSB7DQogICAgZmxvYXQgeCwgY29u
dng7DQogICAgZmxvYXQgeSwgY29udnk7DQogICAgZmxvYXQgcGVyY2VudDsNCiAgICAvLyBNYXgg
Y29tcG9uZW50cyBpbiBhIGZvcm1hdCBpcyA0LCBzby4uLg0KICAgIGZsb2F0W10gdG90YWxzID0g
bmV3IGZsb2F0WzRdOw0KICAgIGZsb2F0IGFyZWE7DQogICAgaW50IGksIGosIGssIHhpbmRleDsN
CiAgICANCiAgICBpbnQgdGVtcCwgdGVtcDA7DQogICAgaW50IHRlbXBfaW5kZXg7DQogICAgaW50
IG91dGluZGV4Ow0KICAgIA0KICAgIGludCBsb3d4X2ludCwgaGlnaHhfaW50LCBsb3d5X2ludCwg
aGlnaHlfaW50Ow0KICAgIGZsb2F0IHhfcGVyY2VudCwgeV9wZXJjZW50Ow0KICAgIGZsb2F0IGxv
d3hfZmxvYXQsIGhpZ2h4X2Zsb2F0LCBsb3d5X2Zsb2F0LCBoaWdoeV9mbG9hdDsNCiAgICBmbG9h
dCBjb252eV9mbG9hdCwgY29udnhfZmxvYXQ7DQogICAgaW50IGNvbnZ5X2ludCwgY29udnhfaW50
Ow0KICAgIGludCBsLCBtOw0KICAgIGludCBsZWZ0LCByaWdodDsNCiAgICANCiAgICBpZiggKHdp
ZHRoaW4gPT0gKHdpZHRob3V0ICogMikpICYmIChoZWlnaHRpbiA9PSAoaGVpZ2h0b3V0ICogMikp
ICkgew0KICAgICAgSGFsdmVJbWFnZS5oYWx2ZUltYWdlX3VzaG9ydCggY29tcG9uZW50cywgd2lk
dGhpbiwgaGVpZ2h0aW4sIGRhdGFpbiwgZGF0YW91dCwgDQogICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50X3NpemUsIHlzaXplLCBncm91cF9zaXplLCBteXN3YXBfYnl0ZXMgKTsNCiAgICAg
IHJldHVybjsNCiAgICB9DQogICAgY29udnkgPSAoZmxvYXQpaGVpZ2h0aW4gLyBoZWlnaHRvdXQ7
DQogICAgY29udnggPSAoZmxvYXQpd2lkdGhpbiAvIHdpZHRob3V0Ow0KICAgIGNvbnZ5X2ludCA9
IChpbnQpTWF0aC5mbG9vciggY29udnkgKTsNCiAgICBjb252eV9mbG9hdCA9IGNvbnZ5IC0gY29u
dnlfaW50Ow0KICAgIGNvbnZ4X2ludCA9IChpbnQpTWF0aC5mbG9vciggY29udnggKTsNCiAgICBj
b252eF9mbG9hdCA9IGNvbnZ4IC0gY29udnhfaW50Ow0KICAgIA0KICAgIGFyZWEgPSBjb252eCAq
IGNvbnZ5Ow0KICAgIA0KICAgIGxvd3lfaW50ID0gMDsNCiAgICBsb3d5X2Zsb2F0ID0gMC4wZjsN
CiAgICBoaWdoeV9pbnQgPSBjb252eV9pbnQ7DQogICAgaGlnaHlfZmxvYXQgPSBjb252eV9mbG9h
dDsNCiAgICANCiAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICBp
bnQgZGF0YWluX3NpemUgPSB3aWR0aGluICogaGVpZ2h0aW4gKiBjb21wb25lbnRzICogZWxlbWVu
dF9zaXplOw0KICAgIA0KICAgIGZvciggaSA9IDA7IGkgPCBoZWlnaHRvdXQ7IGkrKyApIHsNCiAg
ICAgIC8vIENsYW1wIGhlcmUgdG8gYmUgc3VyZSB3ZSBkb24ndCByZWFkIGJleW9uZCBpbnB1dCBi
dWZmZXIuDQogICAgICBpZiAoaGlnaHlfaW50ID49IGhlaWdodGluKQ0KICAgICAgICBoaWdoeV9p
bnQgPSBoZWlnaHRpbiAtIDE7DQogICAgICBsb3d4X2ludCA9IDA7DQogICAgICBsb3d4X2Zsb2F0
ID0gMC4wZjsNCiAgICAgIGhpZ2h4X2ludCA9IGNvbnZ4X2ludDsNCiAgICAgIGhpZ2h4X2Zsb2F0
ID0gY29udnhfZmxvYXQ7DQogICAgICANCiAgICAgIGZvciggaiA9IDA7IGogPCB3aWR0aG91dDsg
aisrICkgew0KICAgICAgICANCiAgICAgICAgLy8gT2ssIG5vdyBhcHBseSBib3ggZmlsdGVyIHRv
IGJveCB0aGF0IGdvZXMgZnJvbSAobG93eCwgbG93eSkNCiAgICAgICAgLy8gdG8gKGhpZ2h4LCBo
aWdoeSkgb24gaW5wdXQgZGF0YSBpbnRvIHRoaXMgcGl4ZWwgb24gb3V0cHV0DQogICAgICAgIC8v
IGRhdGEuDQogICAgICAgIHRvdGFsc1swXSA9IHRvdGFsc1sxXSA9IHRvdGFsc1syXSA9IHRvdGFs
c1szXSA9IDAuMGY7DQogICAgICAgIA0KICAgICAgICAvLyBjYXVsYXRlIHRoZSB2YWx1ZSBmb3Ig
cGl4ZWxzIGluIHRoZSAxc3Qgcm93DQogICAgICAgIHhpbmRleCA9IGxvd3hfaW50ICogZ3JvdXBf
c2l6ZTsNCiAgICAgICAgaWYoICggaGlnaHlfaW50ID4gbG93eV9pbnQgKSAmJiAoIGhpZ2h4X2lu
dCA+IGxvd3hfaW50ICkgKSB7DQogICAgICAgICAgDQogICAgICAgICAgeV9wZXJjZW50ID0gMSAt
IGxvd3lfZmxvYXQ7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCArIGxvd3lfaW50ICogeXNpemU7
DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqICggMSAtIGxvd3hfZmxvYXQgKTsNCiAg
ICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsr
KywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBkYXRhaW4ucG9z
aXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQog
ICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMEZGRkYgJiAoKGludClNaXBtYXAuR0xV
X1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkgKSkpICogcGVyY2VudDsNCiAgICAgICAg
ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMEZGRkYgJiBk
YXRhaW4uZ2V0U2hvcnQoKSApICogcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9
DQogICAgICAgICAgbGVmdCA9IHRlbXA7DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQgKyAx
OyBsIDwgaGlnaHhfaW50OyBsKysgKSB7DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7
DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVu
dHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRh
dGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5
dGVzICkgew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMEZGRkYgJiAoKGlu
dClNaXBtYXAuR0xVX1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkgKSkpICogeV9wZXJj
ZW50Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSAr
PSAoIDB4MDAwMEZGRkYgJiBkYXRhaW4uZ2V0U2hvcnQoKSkgKiB5X3BlcmNlbnQ7DQogICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgdGVtcCArPSBn
cm91cF9zaXplOw0KICAgICAgICAgIHJpZ2h0ID0gdGVtcDsNCiAgICAgICAgICBwZXJjZW50ID0g
eV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQg
bWVtb3J5IG92ZXJydW4gDQogICAgICAgICAgaWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAg
ICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBr
KyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4u
cG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyAp
IHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDBGRkZGICYgKE1pcG1hcC5H
TFVfU1dBUF8yX0JZVEVTKCBkYXRhaW4uZ2V0U2hvcnQoKSApKSkgKiBwZXJjZW50Ow0KICAgICAg
ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMEZG
RkYgJiBkYXRhaW4uZ2V0U2hvcnQoKSkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIA0KICAgICAgICAgIC8vIGNhbGN1bGF0
ZSB0aGUgdmFsdWUgZm9yIHBpeGVscyBpbiB0aGUgbGFzdCByb3cNCiAgICAgICAgICB5X3BlcmNl
bnQgPSBoaWdoeV9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogKCAxIC0g
bG93eF9mbG9hdCApOw0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyBoaWdoeV9pbnQgKiB5c2l6
ZTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVu
dHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBkYXRh
aW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMg
KSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoIDB4MDAwMEZGRkYgJiBNaXBtYXAuR0xV
X1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkpICkgKiBwZXJjZW50Ow0KICAgICAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICggMHgwMDAwRkZGRiAmIGRh
dGFpbi5nZXRTaG9ydCgpICkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsN
CiAgICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAs
IHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVs
ZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4
ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAg
dG90YWxzW2tdICs9ICggMHgwMDAwRkZGRiAmIE1pcG1hcC5HTFVfU1dBUF8yX0JZVEVTKCBkYXRh
aW4uZ2V0U2hvcnQoKSkgKSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg
ICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDBGRkZGICYgZGF0YWluLmdldFNob3J0
KCkpICogeV9wZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAg
ICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0g
eV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQg
bWVtb3J5IG92ZXJydW4gDQogICAgICAgICAgaWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAg
ICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBr
KyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4u
cG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyAp
IHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDBGRkZGICYgTWlwbWFwLkdM
VV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgpKSApICogcGVyY2VudDsNCiAgICAgICAg
ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKCAweDAwMDBGRkZG
ICYgZGF0YWluLmdldFNob3J0KCkpICogcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICAvLyBjYWxjdWxhdGUg
dGhlIHZhbHVlIGZvciB0aGUgcGl4ZWxzIGluIHRoZSAxc3QgYW5kIGxhc3QgY29sdW1uDQogICAg
ICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGlnaHlfaW50OyBtKysgKSB7DQogICAg
ICAgICAgICBsZWZ0ICs9IHlzaXplOw0KICAgICAgICAgICAgcmlnaHQgKz0geXNpemU7DQogICAg
ICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrLCBsZWZ0ICs9IGVsZW1lbnRf
c2l6ZSwgcmlnaHQgKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBpZiggbXlzd2Fw
X2J5dGVzICkgew0KICAgICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggbGVmdCApOw0KICAg
ICAgICAgICAgICAgIGZsb2F0IGYgPSAoMHgwMDAwRkZGRiAmIE1pcG1hcC5HTFVfU1dBUF8yX0JZ
VEVTKGRhdGFpbi5nZXRTaG9ydCgpKSkgKiAoIDEgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAgICAg
ICAgICAgZGF0YWluLnBvc2l0aW9uKCByaWdodCApOw0KICAgICAgICAgICAgICAgIGYgKz0gKCgw
eDAwMDBGRkZGICYgTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoZGF0YWluLmdldFNob3J0KCkpKSAq
IGhpZ2h4X2Zsb2F0KTsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gZjsNCiAgICAgICAg
ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIGxlZnQgKTsN
CiAgICAgICAgICAgICAgICBmbG9hdCBmID0gKCgweDAwMDBGRkZGICYgZGF0YWluLmdldFNob3J0
KCkpICogKCAxIC0gbG93eF9mbG9hdCApKTsNCiAgICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRp
b24oIHJpZ2h0ICk7DQogICAgICAgICAgICAgICAgZiArPSAoKDB4MDAwMEZGRkYgJiBkYXRhaW4u
Z2V0U2hvcnQoKSkgKiBoaWdoeF9mbG9hdCk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9
IGY7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAg
IH0gZWxzZSBpZiggaGlnaHlfaW50ID4gbG93eV9pbnQgKSB7DQogICAgICAgICAgeF9wZXJjZW50
ID0gaGlnaHhfZmxvYXQgLSBsb3d4X2Zsb2F0Ow0KICAgICAgICAgIHBlcmNlbnQgPSAoIDEgLSBs
b3d5X2Zsb2F0KSAqIHhfcGVyY2VudDsNCiAgICAgICAgICB0ZW1wID0geGluZGV4ICsgKGxvd3lf
aW50ICogeXNpemUpOw0KICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBr
IDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAg
ICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgaWYoIG15
c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgweDAwMDBGRkZGICYg
TWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgpICkpICogcGVyY2VudDsN
CiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAw
RkZGRiAmIGRhdGFpbi5nZXRTaG9ydCgpKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAg
ICAgICAgfQ0KICAgICAgICAgIGZvciggbSA9IGxvd3lfaW50ICsgMTsgbSA8IGhpZ2h5X2ludDsg
bSsrICkgew0KICAgICAgICAgICAgdGVtcCArPSB5c2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9
IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9
IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2lu
ZGV4ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9ICgweDAwMDBGRkZGICYgTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRh
dGFpbi5nZXRTaG9ydCgpKSApICogeF9wZXJjZW50Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0K
ICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAwRkZGRiAmIGRhdGFpbi5nZXRTaG9y
dCgpKSAqIHhfcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAg
ICAgIH0NCiAgICAgICAgICBwZXJjZW50ID0geF9wZXJjZW50ICogaGlnaHlfZmxvYXQ7DQogICAg
ICAgICAgdGVtcCArPSB5c2l6ZTsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1v
cnkgb3ZlcnJ1biANCiAgICAgICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAg
ICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywg
dGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3Np
dGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0K
ICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAwRkZGRiAmIE1pcG1hcC5HTFVfU1dB
UF8yX0JZVEVTKCBkYXRhaW4uZ2V0U2hvcnQoKSApKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgweDAwMDBGRkZGICYgZGF0
YWluLmdldFNob3J0KCkpICogcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmKCBoaWdoeF9pbnQgPiBsb3d4X2ludCAp
IHsNCiAgICAgICAgICB5X3BlcmNlbnQgPSBoaWdoeV9mbG9hdCAtIGxvd3lfZmxvYXQ7DQogICAg
ICAgICAgcGVyY2VudCA9ICggMSAtIGxvd3hfZmxvYXQgKSAqIHlfcGVyY2VudDsNCiAgICAgICAg
ICB0ZW1wID0geGluZGV4ICsgKGxvd3lfaW50ICogeXNpemUpOw0KICAgICAgICAgIGZvciggayA9
IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9
IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRl
eCApOw0KICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgdG90
YWxzW2tdICs9ICgweDAwMDBGRkZGICYgTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5n
ZXRTaG9ydCgpKSApICogcGVyY2VudDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg
ICAgIHRvdGFsc1trXSArPSAoMHgwMDAwRkZGRiAmIGRhdGFpbi5nZXRTaG9ydCgpKSAqIHBlcmNl
bnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGZvciggbCA9IGxvd3hf
aW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgdGVtcCArPSBncm91
cF9zaXplOw0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBj
b21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAg
ICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15
c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMEZGRkYg
JiBNaXBtYXAuR0xVX1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkpICkgKiB5X3BlcmNl
bnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9
ICgweDAwMDBGRkZGICYgZGF0YWluLmdldFNob3J0KCkpICogeV9wZXJjZW50Ow0KICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3Jv
dXBfc2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQog
ICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQgbWVtb3J5IG92ZXJydW4gDQogICAgICAgICAg
aWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9p
bmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9z
aXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAg
ICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNb
a10gKz0gKDB4MDAwMEZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNo
b3J0KCkpICkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg
ICAgIHRvdGFsc1trXSArPSAoMHgwMDAwRkZGRiAmIGRhdGFpbi5nZXRTaG9ydCgpKSAqIHBlcmNl
bnQ7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgcGVyY2VudCA9ICggaGlnaHlfZmxvYXQgLSBsb3d5X2Zsb2F0
ICkgKiAoIGhpZ2h4X2Zsb2F0IC0gbG93eF9mbG9hdCApOw0KICAgICAgICAgIHRlbXAgPSB4aW5k
ZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRl
eCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXpl
ICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAg
ICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4
MDAwMEZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkpICkg
KiBwZXJjZW50Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdG90YWxzW2td
ICs9ICgweDAwMDBGRkZGICYgZGF0YWluLmdldFNob3J0KCkpICogcGVyY2VudDsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIHRoaXMg
aXMgZm9yIHRoZSBwaXhlbHMgaW4gdGhlIGJvZHkNCiAgICAgICAgdGVtcDAgPSB4aW5kZXggKyBn
cm91cF9zaXplICsgKCBsb3d5X2ludCArIDEgKSAqIHlzaXplOw0KICAgICAgICBmb3IoIG0gPSBs
b3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsNCiAgICAgICAgICB0ZW1wID0gdGVt
cDA7DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQgKyAxOyBsIDwgaGlnaHhfaW50OyBsKysg
KSB7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBv
bmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAg
IGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2Fw
X2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAwRkZGRiAmIE1p
cG1hcC5HTFVfU1dBUF8yX0JZVEVTKCBkYXRhaW4uZ2V0U2hvcnQoKSkpOw0KICAgICAgICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAwRkZGRiAmIGRh
dGFpbi5nZXRTaG9ydCgpKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgdGVtcCArPSBncm91cF9zaXplOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0ZW1wMCAr
PSB5c2l6ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgb3V0aW5kZXggPSAoIGogKyAo
IGkgKiB3aWR0aG91dCApICkgKiBjb21wb25lbnRzOw0KICAgICAgICBmb3IoIGsgPSAwOyBrIDwg
Y29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgIGRhdGFvdXQucG9zaXRpb24oIG91dGluZGV4
ICsgayApOw0KICAgICAgICAgIGRhdGFvdXQucHV0KCAoc2hvcnQpKHRvdGFsc1trXSAvIGFyZWEp
ICk7DQogICAgICAgIH0NCiAgICAgICAgbG93eF9pbnQgPSBoaWdoeF9pbnQ7DQogICAgICAgIGxv
d3hfZmxvYXQgPSBoaWdoeF9mbG9hdDsNCiAgICAgICAgaGlnaHhfaW50ICs9IGNvbnZ4X2ludDsN
CiAgICAgICAgaGlnaHhfZmxvYXQgKz0gY29udnhfZmxvYXQ7DQogICAgICAgIGlmKCBoaWdoeF9m
bG9hdCA+IDEuMGYgKSB7DQogICAgICAgICAgaGlnaHhfZmxvYXQgLT0gMS4wZjsNCiAgICAgICAg
ICBoaWdoeF9pbnQrKzsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIENsYW1wIHRvIG1ha2Ugc3Vy
ZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSByaWdodCBlZGdlDQogICAgICAgIGlmIChoaWdoeF9pbnQg
PiB3aWR0aGluIC0gMSkgew0KICAgICAgICAgIGludCBkZWx0YSA9IChoaWdoeF9pbnQgLSB3aWR0
aGluICsgMSk7DQogICAgICAgICAgbG93eF9pbnQgLT0gZGVsdGE7DQogICAgICAgICAgaGlnaHhf
aW50IC09IGRlbHRhOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBsb3d5X2ludCA9IGhpZ2h5
X2ludDsNCiAgICAgIGxvd3lfZmxvYXQgPSBoaWdoeV9mbG9hdDsNCiAgICAgIGhpZ2h5X2ludCAr
PSBjb252eV9pbnQ7DQogICAgICBoaWdoeV9mbG9hdCArPSBjb252eV9mbG9hdDsNCiAgICAgIGlm
KCBoaWdoeV9mbG9hdCA+IDEuMGYgKSB7DQogICAgICAgIGhpZ2h5X2Zsb2F0IC09IDEuMGY7DQog
ICAgICAgIGhpZ2h5X2ludCsrOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICANCiAgcHVibGljIHN0
YXRpYyB2b2lkIHNjYWxlX2ludGVybmFsX3Nob3J0KCBpbnQgY29tcG9uZW50cywgaW50IHdpZHRo
aW4sIGludCBoZWlnaHRpbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVCdWZm
ZXIgZGF0YWluLCBpbnQgd2lkdGhvdXQsIGludCBoZWlnaHRvdXQsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaG9ydEJ1ZmZlciBkYXRhb3V0LCBpbnQgZWxlbWVudF9zaXplLCBpbnQg
eXNpemUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdyb3VwX3NpemUsIGJv
b2xlYW4gbXlzd2FwX2J5dGVzICkgew0KICAgIGZsb2F0IHgsIGNvbnZ4Ow0KICAgIGZsb2F0IHks
IGNvbnZ5Ow0KICAgIGZsb2F0IHBlcmNlbnQ7DQogICAgLy8gTWF4IGNvbXBvbmVudHMgaW4gYSBm
b3JtYXQgaXMgNCwgc28uLi4NCiAgICBmbG9hdFtdIHRvdGFscyA9IG5ldyBmbG9hdFs0XTsNCiAg
ICBmbG9hdCBhcmVhOw0KICAgIGludCBpLCBqLCBrLCB4aW5kZXg7DQogICAgDQogICAgaW50IHRl
bXAsIHRlbXAwOw0KICAgIGludCB0ZW1wX2luZGV4Ow0KICAgIGludCBvdXRpbmRleDsNCiAgICAN
CiAgICBpbnQgbG93eF9pbnQsIGhpZ2h4X2ludCwgbG93eV9pbnQsIGhpZ2h5X2ludDsNCiAgICBm
bG9hdCB4X3BlcmNlbnQsIHlfcGVyY2VudDsNCiAgICBmbG9hdCBsb3d4X2Zsb2F0LCBoaWdoeF9m
bG9hdCwgbG93eV9mbG9hdCwgaGlnaHlfZmxvYXQ7DQogICAgZmxvYXQgY29udnlfZmxvYXQsIGNv
bnZ4X2Zsb2F0Ow0KICAgIGludCBjb252eV9pbnQsIGNvbnZ4X2ludDsNCiAgICBpbnQgbCwgbTsN
CiAgICBpbnQgbGVmdCwgcmlnaHQ7DQogICAgDQogICAgaW50IHN3YXBidWY7IC8vIHVuc2lnbmVk
IGJ1ZmZlcg0KICAgIA0KICAgIGlmKCAod2lkdGhpbiA9PSAod2lkdGhvdXQgKiAyKSkgJiYgKGhl
aWdodGluID09IChoZWlnaHRvdXQgKiAyKSkgKSB7DQogICAgICBIYWx2ZUltYWdlLmhhbHZlSW1h
Z2Vfc2hvcnQoIGNvbXBvbmVudHMsIHdpZHRoaW4sIGhlaWdodGluLCBkYXRhaW4sIGRhdGFvdXQs
IA0KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9zaXplLCB5c2l6ZSwgZ3JvdXBfc2l6
ZSwgbXlzd2FwX2J5dGVzICk7DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIGNvbnZ5ID0gKGZs
b2F0KWhlaWdodGluIC8gaGVpZ2h0b3V0Ow0KICAgIGNvbnZ4ID0gKGZsb2F0KXdpZHRoaW4gLyB3
aWR0aG91dDsNCiAgICBjb252eV9pbnQgPSAoaW50KU1hdGguZmxvb3IoIGNvbnZ5ICk7DQogICAg
Y29udnlfZmxvYXQgPSBjb252eSAtIGNvbnZ5X2ludDsNCiAgICBjb252eF9pbnQgPSAoaW50KU1h
dGguZmxvb3IoIGNvbnZ4ICk7DQogICAgY29udnhfZmxvYXQgPSBjb252eCAtIGNvbnZ4X2ludDsN
CiAgICANCiAgICBhcmVhID0gY29udnggKiBjb252eTsNCiAgICANCiAgICBsb3d5X2ludCA9IDA7
DQogICAgbG93eV9mbG9hdCA9IDAuMGY7DQogICAgaGlnaHlfaW50ID0gY29udnlfaW50Ow0KICAg
IGhpZ2h5X2Zsb2F0ID0gY29udnlfZmxvYXQ7DQogICAgDQogICAgLy8gSXNzdWUgIzM2NTogYXZv
aWQgbWVtb3J5IG92ZXJydW4gDQogICAgaW50IGRhdGFpbl9zaXplID0gd2lkdGhpbiAqIGhlaWdo
dGluICogY29tcG9uZW50cyAqIGVsZW1lbnRfc2l6ZTsNCiAgICANCiAgICBmb3IoIGkgPSAwOyBp
IDwgaGVpZ2h0b3V0OyBpKysgKSB7DQogICAgICAvLyBDbGFtcCBoZXJlIHRvIGJlIHN1cmUgd2Ug
ZG9uJ3QgcmVhZCBiZXlvbmQgaW5wdXQgYnVmZmVyLg0KICAgICAgaWYgKGhpZ2h5X2ludCA+PSBo
ZWlnaHRpbikNCiAgICAgICAgaGlnaHlfaW50ID0gaGVpZ2h0aW4gLSAxOw0KICAgICAgbG93eF9p
bnQgPSAwOw0KICAgICAgbG93eF9mbG9hdCA9IDAuMGY7DQogICAgICBoaWdoeF9pbnQgPSBjb252
eF9pbnQ7DQogICAgICBoaWdoeF9mbG9hdCA9IGNvbnZ4X2Zsb2F0Ow0KICAgICAgDQogICAgICBm
b3IoIGogPSAwOyBqIDwgd2lkdGhvdXQ7IGorKyApIHsNCiAgICAgICAgDQogICAgICAgIC8vIE9r
LCBub3cgYXBwbHkgYm94IGZpbHRlciB0byBib3ggdGhhdCBnb2VzIGZyb20gKGxvd3gsIGxvd3kp
DQogICAgICAgIC8vIHRvIChoaWdoeCwgaGlnaHkpIG9uIGlucHV0IGRhdGEgaW50byB0aGlzIHBp
eGVsIG9uIG91dHB1dA0KICAgICAgICAvLyBkYXRhLg0KICAgICAgICB0b3RhbHNbMF0gPSB0b3Rh
bHNbMV0gPSB0b3RhbHNbMl0gPSB0b3RhbHNbM10gPSAwLjBmOw0KICAgICAgICANCiAgICAgICAg
Ly8gY2F1bGF0ZSB0aGUgdmFsdWUgZm9yIHBpeGVscyBpbiB0aGUgMXN0IHJvdw0KICAgICAgICB4
aW5kZXggPSBsb3d4X2ludCAqIGdyb3VwX3NpemU7DQogICAgICAgIGlmKCAoIGhpZ2h5X2ludCA+
IGxvd3lfaW50ICkgJiYgKCBoaWdoeF9pbnQgPiBsb3d4X2ludCApICkgew0KICAgICAgICAgIA0K
ICAgICAgICAgIHlfcGVyY2VudCA9IDEgLSBsb3d5X2Zsb2F0Ow0KICAgICAgICAgIHRlbXAgPSB4
aW5kZXggKyBsb3d5X2ludCAqIHlzaXplOw0KICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQg
KiAoIDEgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9
IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkg
ew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAg
ICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdM
VV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgpICk7DQogICAgICAgICAgICAgIHRvdGFs
c1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg
ICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0U2hvcnQoKSAqIHBlcmNlbnQ7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGxlZnQgPSB0ZW1wOw0KICAgICAgICAgIGZv
ciggbCA9IGxvd3hfaW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAg
dGVtcCArPSBncm91cF9zaXplOw0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9
IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkg
ew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAg
ICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICBzd2FwYnVmID0gTWlw
bWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgpICk7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRTaG9ydCgpICogeV9w
ZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAg
ICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICByaWdodCA9IHRlbXA7DQogICAg
ICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqIGhpZ2h4X2Zsb2F0Ow0KICAgICAgICAgIC8vIElz
c3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgICAgICAgIGlmICh0ZW1wIDwgZGF0
YWluX3NpemUpIHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBr
IDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAg
ICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIGlm
KCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9IE1pcG1hcC5HTFVf
U1dBUF8yX0JZVEVTKCBkYXRhaW4uZ2V0U2hvcnQoKSApOw0KICAgICAgICAgICAgICAgIHRvdGFs
c1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg
ICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldFNob3J0KCkgKiBwZXJjZW50Ow0KICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIA0KICAg
ICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgdmFsdWUgZm9yIHBpeGVscyBpbiB0aGUgbGFzdCByb3cN
CiAgICAgICAgICB5X3BlcmNlbnQgPSBoaWdoeV9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0g
eV9wZXJjZW50ICogKCAxIC0gbG93eF9mbG9hdCApOw0KICAgICAgICAgIHRlbXAgPSB4aW5kZXgg
KyBoaWdoeV9pbnQgKiB5c2l6ZTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0g
dGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7
DQogICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAg
IGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xV
X1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkgKTsNCiAgICAgICAgICAgICAgdG90YWxz
W2tdICs9IHN3YXBidWYgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg
ICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRTaG9ydCgpICogcGVyY2VudDsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQgKyAxOyBsIDwg
aGlnaHhfaW50OyBsKysgKSB7DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAg
ICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsr
KywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5w
b3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkg
ew0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfMl9CWVRFUyggZGF0
YWluLmdldFNob3J0KCkgKTsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gc3dhcGJ1ZiAq
IHlfcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b3Rh
bHNba10gKz0gZGF0YWluLmdldFNob3J0KCkgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0N
CiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgdGVtcCArPSBncm91cF9zaXpl
Ow0KICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAg
ICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICAgICAgICBpZiAodGVt
cCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0g
dGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7
DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAg
ICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBt
YXAuR0xVX1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkgKTsNCiAgICAgICAgICAgICAg
ICB0b3RhbHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7
DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRTaG9ydCgpICogcGVyY2Vu
dDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAg
ICANCiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVlIGZvciB0aGUgcGl4ZWxzIGluIHRo
ZSAxc3QgYW5kIGxhc3QgY29sdW1uDQogICAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBt
IDwgaGlnaHlfaW50OyBtKysgKSB7DQogICAgICAgICAgICBsZWZ0ICs9IHlzaXplOw0KICAgICAg
ICAgICAgcmlnaHQgKz0geXNpemU7DQogICAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9u
ZW50czsgaysrLCBsZWZ0ICs9IGVsZW1lbnRfc2l6ZSwgcmlnaHQgKz0gZWxlbWVudF9zaXplICkg
ew0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAgIGRh
dGFpbi5wb3NpdGlvbiggbGVmdCApOw0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAu
R0xVX1NXQVBfMl9CWVRFUyggZGF0YWluLmdldFNob3J0KCkgKTsNCiAgICAgICAgICAgICAgICB0
b3RhbHNba10gKz0gc3dhcGJ1ZiAqICggMSAtIGxvd3hfZmxvYXQgKTsNCiAgICAgICAgICAgICAg
ICBkYXRhaW4ucG9zaXRpb24oIHJpZ2h0ICk7DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9IE1p
cG1hcC5HTFVfU1dBUF8yX0JZVEVTKCBkYXRhaW4uZ2V0U2hvcnQoKSApOw0KICAgICAgICAgICAg
ICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgICAgIH0g
ZWxzZSB7DQogICAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCBsZWZ0ICk7DQogICAgICAg
ICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRTaG9ydCgpICogKCAxIC0gbG93eF9mbG9h
dCApOw0KICAgICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggcmlnaHQgKTsNCiAgICAgICAg
ICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldFNob3J0KCkgKiBoaWdoeF9mbG9hdDsNCiAg
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNl
IGlmKCBoaWdoeV9pbnQgPiBsb3d5X2ludCApIHsNCiAgICAgICAgICB4X3BlcmNlbnQgPSBoaWdo
eF9mbG9hdCAtIGxvd3hfZmxvYXQ7DQogICAgICAgICAgcGVyY2VudCA9ICggMSAtIGxvd3lfZmxv
YXQpICogeF9wZXJjZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5
c2l6ZSk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21w
b25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAg
ZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5
dGVzICkgew0KICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzJfQllURVMo
IGRhdGFpbi5nZXRTaG9ydCgpICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVm
ICogcGVyY2VudDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1tr
XSArPSBkYXRhaW4uZ2V0U2hvcnQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgfQ0KICAgICAgICAgIGZvciggbSA9IGxvd3lfaW50ICsgMTsgbSA8IGhpZ2h5X2ludDsgbSsr
ICkgew0KICAgICAgICAgICAgdGVtcCArPSB5c2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAs
IHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVs
ZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4
ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAg
c3dhcGJ1ZiA9IE1pcG1hcC5HTFVfU1dBUF8yX0JZVEVTKCBkYXRhaW4uZ2V0U2hvcnQoKSk7DQog
ICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB4X3BlcmNlbnQ7DQogICAgICAg
ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRT
aG9ydCgpICogeF9wZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg
ICAgICAgfQ0KICAgICAgICAgIHBlcmNlbnQgPSB4X3BlcmNlbnQgKiBoaWdoeV9mbG9hdDsNCiAg
ICAgICAgICB0ZW1wICs9IHlzaXplOw0KICAgICAgICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1l
bW9yeSBvdmVycnVuIA0KICAgICAgICAgIGlmICh0ZW1wIDwgZGF0YWluX3NpemUpIHsNCiAgICAg
ICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysr
LCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBv
c2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7
DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9IE1pcG1hcC5HTFVfU1dBUF8yX0JZVEVTKCBkYXRh
aW4uZ2V0U2hvcnQoKSApOw0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICog
cGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNb
a10gKz0gZGF0YWluLmdldFNob3J0KCkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYoIGhpZ2h4X2ludCA+IGxv
d3hfaW50ICkgew0KICAgICAgICAgIHlfcGVyY2VudCA9IGhpZ2h5X2Zsb2F0IC0gbG93eV9mbG9h
dDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0gbG93eF9mbG9hdCApICogeV9wZXJjZW50Ow0K
ICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAgICAgICAg
Zm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBf
aW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0
ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAg
ICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgp
ICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAgICAg
ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0U2hv
cnQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGZv
ciggbCA9IGxvd3hfaW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAg
dGVtcCArPSBncm91cF9zaXplOw0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9
IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkg
ew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAg
ICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICBzd2FwYnVmID0gTWlw
bWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgpICk7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRTaG9ydCgpICogeV9w
ZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAg
ICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50
ICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQgbWVtb3J5IG92
ZXJydW4gDQogICAgICAgICAgaWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAgICAgICAgICAg
Zm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBf
aW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24o
IHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAg
ICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRT
aG9ydCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiBwZXJjZW50
Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBk
YXRhaW4uZ2V0U2hvcnQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
IH0NCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcGVyY2VudCA9ICgg
aGlnaHlfZmxvYXQgLSBsb3d5X2Zsb2F0ICkgKiAoIGhpZ2h4X2Zsb2F0IC0gbG93eF9mbG9hdCAp
Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAgICAg
ICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRl
bXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9u
KCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAg
ICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9y
dCgpICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAg
ICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0
U2hvcnQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9
DQogICAgICAgIA0KICAgICAgICAvLyB0aGlzIGlzIGZvciB0aGUgcGl4ZWxzIGluIHRoZSBib2R5
DQogICAgICAgIHRlbXAwID0geGluZGV4ICsgZ3JvdXBfc2l6ZSArICggbG93eV9pbnQgKyAxICkg
KiB5c2l6ZTsNCiAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGlnaHlfaW50OyBt
KysgKSB7DQogICAgICAgICAgdGVtcCA9IHRlbXAwOw0KICAgICAgICAgIGZvciggbCA9IGxvd3hf
aW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgZm9yKCBrID0gMCwg
dGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxl
bWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXgg
KTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICBz
d2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzJfQllURVMoIGRhdGFpbi5nZXRTaG9ydCgpICk7DQog
ICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWY7DQogICAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRTaG9ydCgpOw0KICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3Np
emU7DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAwICs9IHlzaXplOw0KICAgICAgICB9DQog
ICAgICAgIA0KICAgICAgICBvdXRpbmRleCA9ICggaiArICggaSAqIHdpZHRob3V0ICkgKSAqIGNv
bXBvbmVudHM7DQogICAgICAgIGZvciggayA9IDA7IGsgPCBjb21wb25lbnRzOyBrKysgKSB7DQog
ICAgICAgICAgZGF0YW91dC5wb3NpdGlvbiggb3V0aW5kZXggKyBrICk7DQogICAgICAgICAgZGF0
YW91dC5wdXQoIChzaG9ydCkodG90YWxzW2tdIC8gYXJlYSkgKTsNCiAgICAgICAgfQ0KICAgICAg
ICBsb3d4X2ludCA9IGhpZ2h4X2ludDsNCiAgICAgICAgbG93eF9mbG9hdCA9IGhpZ2h4X2Zsb2F0
Ow0KICAgICAgICBoaWdoeF9pbnQgKz0gY29udnhfaW50Ow0KICAgICAgICBoaWdoeF9mbG9hdCAr
PSBjb252eF9mbG9hdDsNCiAgICAgICAgaWYoIGhpZ2h4X2Zsb2F0ID4gMS4wZiApIHsNCiAgICAg
ICAgICBoaWdoeF9mbG9hdCAtPSAxLjBmOw0KICAgICAgICAgIGhpZ2h4X2ludCsrOw0KICAgICAg
ICB9DQoNCiAgICAgICAgLy8gQ2xhbXAgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJ1biBvZmYgdGhl
IHJpZ2h0IGVkZ2UNCiAgICAgICAgaWYgKGhpZ2h4X2ludCA+IHdpZHRoaW4gLSAxKSB7DQogICAg
ICAgICAgaW50IGRlbHRhID0gKGhpZ2h4X2ludCAtIHdpZHRoaW4gKyAxKTsNCiAgICAgICAgICBs
b3d4X2ludCAtPSBkZWx0YTsNCiAgICAgICAgICBoaWdoeF9pbnQgLT0gZGVsdGE7DQogICAgICAg
IH0NCiAgICAgIH0NCiAgICAgIGxvd3lfaW50ID0gaGlnaHlfaW50Ow0KICAgICAgbG93eV9mbG9h
dCA9IGhpZ2h5X2Zsb2F0Ow0KICAgICAgaGlnaHlfaW50ICs9IGNvbnZ5X2ludDsNCiAgICAgIGhp
Z2h5X2Zsb2F0ICs9IGNvbnZ5X2Zsb2F0Ow0KICAgICAgaWYoIGhpZ2h5X2Zsb2F0ID4gMS4wZiAp
IHsNCiAgICAgICAgaGlnaHlfZmxvYXQgLT0gMS4wZjsNCiAgICAgICAgaGlnaHlfaW50Kys7DQog
ICAgICB9DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIHZvaWQgc2NhbGVfaW50ZXJu
YWxfdWludCggaW50IGNvbXBvbmVudHMsIGludCB3aWR0aGluLCBpbnQgaGVpZ2h0aW4sDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlQnVmZmVyIGRhdGFpbiwgaW50IHdpZHRob3V0
LCBpbnQgaGVpZ2h0b3V0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludEJ1ZmZl
ciBkYXRhb3V0LCBpbnQgZWxlbWVudF9zaXplLCBpbnQgeXNpemUsIA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGdyb3VwX3NpemUsIGJvb2xlYW4gbXlzd2FwX2J5dGVzICkgew0K
ICAgIGZsb2F0IHgsIGNvbnZ4Ow0KICAgIGZsb2F0IHksIGNvbnZ5Ow0KICAgIGZsb2F0IHBlcmNl
bnQ7DQogICAgLy8gTWF4IGNvbXBvbmVudHMgaW4gYSBmb3JtYXQgaXMgNCwgc28uLi4NCiAgICBm
bG9hdFtdIHRvdGFscyA9IG5ldyBmbG9hdFs0XTsNCiAgICBmbG9hdCBhcmVhOw0KICAgIGludCBp
LCBqLCBrLCB4aW5kZXg7DQogICAgDQogICAgaW50IHRlbXAsIHRlbXAwOw0KICAgIGludCB0ZW1w
X2luZGV4Ow0KICAgIGludCBvdXRpbmRleDsNCiAgICANCiAgICBpbnQgbG93eF9pbnQsIGhpZ2h4
X2ludCwgbG93eV9pbnQsIGhpZ2h5X2ludDsNCiAgICBmbG9hdCB4X3BlcmNlbnQsIHlfcGVyY2Vu
dDsNCiAgICBmbG9hdCBsb3d4X2Zsb2F0LCBoaWdoeF9mbG9hdCwgbG93eV9mbG9hdCwgaGlnaHlf
ZmxvYXQ7DQogICAgZmxvYXQgY29udnlfZmxvYXQsIGNvbnZ4X2Zsb2F0Ow0KICAgIGludCBjb252
eV9pbnQsIGNvbnZ4X2ludDsNCiAgICBpbnQgbCwgbTsNCiAgICBpbnQgbGVmdCwgcmlnaHQ7DQog
ICAgDQogICAgaWYoICh3aWR0aGluID09ICh3aWR0aG91dCAqIDIpKSAmJiAoaGVpZ2h0aW4gPT0g
KGhlaWdodG91dCAqIDIpKSApIHsNCiAgICAgIEhhbHZlSW1hZ2UuaGFsdmVJbWFnZV91aW50KCBj
b21wb25lbnRzLCB3aWR0aGluLCBoZWlnaHRpbiwgZGF0YWluLCBkYXRhb3V0LCANCiAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnRfc2l6ZSwgeXNpemUsIGdyb3VwX3NpemUsIG15c3dhcF9i
eXRlcyApOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBjb252eSA9IChmbG9hdCloZWlnaHRp
biAvIGhlaWdodG91dDsNCiAgICBjb252eCA9IChmbG9hdCl3aWR0aGluIC8gd2lkdGhvdXQ7DQog
ICAgY29udnlfaW50ID0gKGludClNYXRoLmZsb29yKCBjb252eSApOw0KICAgIGNvbnZ5X2Zsb2F0
ID0gY29udnkgLSBjb252eV9pbnQ7DQogICAgY29udnhfaW50ID0gKGludClNYXRoLmZsb29yKCBj
b252eCApOw0KICAgIGNvbnZ4X2Zsb2F0ID0gY29udnggLSBjb252eF9pbnQ7DQogICAgDQogICAg
YXJlYSA9IGNvbnZ4ICogY29udnk7DQogICAgDQogICAgbG93eV9pbnQgPSAwOw0KICAgIGxvd3lf
ZmxvYXQgPSAwLjBmOw0KICAgIGhpZ2h5X2ludCA9IGNvbnZ5X2ludDsNCiAgICBoaWdoeV9mbG9h
dCA9IGNvbnZ5X2Zsb2F0Ow0KICAgIA0KICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBv
dmVycnVuIA0KICAgIGludCBkYXRhaW5fc2l6ZSA9IHdpZHRoaW4gKiBoZWlnaHRpbiAqIGNvbXBv
bmVudHMgKiBlbGVtZW50X3NpemU7DQogICAgDQogICAgZm9yKCBpID0gMDsgaSA8IGhlaWdodG91
dDsgaSsrICkgew0KICAgICAgLy8gQ2xhbXAgaGVyZSB0byBiZSBzdXJlIHdlIGRvbid0IHJlYWQg
YmV5b25kIGlucHV0IGJ1ZmZlci4NCiAgICAgIGlmIChoaWdoeV9pbnQgPj0gaGVpZ2h0aW4pDQog
ICAgICAgIGhpZ2h5X2ludCA9IGhlaWdodGluIC0gMTsNCiAgICAgIGxvd3hfaW50ID0gMDsNCiAg
ICAgIGxvd3hfZmxvYXQgPSAwLjBmOw0KICAgICAgaGlnaHhfaW50ID0gY29udnhfaW50Ow0KICAg
ICAgaGlnaHhfZmxvYXQgPSBjb252eF9mbG9hdDsNCiAgICAgIA0KICAgICAgZm9yKCBqID0gMDsg
aiA8IHdpZHRob3V0OyBqKysgKSB7DQogICAgICAgIA0KICAgICAgICAvLyBPaywgbm93IGFwcGx5
IGJveCBmaWx0ZXIgdG8gYm94IHRoYXQgZ29lcyBmcm9tIChsb3d4LCBsb3d5KQ0KICAgICAgICAv
LyB0byAoaGlnaHgsIGhpZ2h5KSBvbiBpbnB1dCBkYXRhIGludG8gdGhpcyBwaXhlbCBvbiBvdXRw
dXQNCiAgICAgICAgLy8gZGF0YS4NCiAgICAgICAgdG90YWxzWzBdID0gdG90YWxzWzFdID0gdG90
YWxzWzJdID0gdG90YWxzWzNdID0gMC4wZjsNCiAgICAgICAgDQogICAgICAgIC8vIGNhdWxhdGUg
dGhlIHZhbHVlIGZvciBwaXhlbHMgaW4gdGhlIDFzdCByb3cNCiAgICAgICAgeGluZGV4ID0gbG93
eF9pbnQgKiBncm91cF9zaXplOw0KICAgICAgICBpZiggKCBoaWdoeV9pbnQgPiBsb3d5X2ludCAp
ICYmICggaGlnaHhfaW50ID4gbG93eF9pbnQgKSApIHsNCiAgICAgICAgICANCiAgICAgICAgICB5
X3BlcmNlbnQgPSAxIC0gbG93eV9mbG9hdDsNCiAgICAgICAgICB0ZW1wID0geGluZGV4ICsgbG93
eV9pbnQgKiB5c2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogKCAxIC0gbG93
eF9mbG9hdCApOw0KICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwg
Y29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAg
ICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgaWYoIG15c3dh
cF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgweDAwMDAwMDAwRkZGRkZG
RkYgJiBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpKSApICogcGVyY2Vu
dDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgw
MDAwMDAwMEZGRkZGRkZGICYgZGF0YWluLmdldEludCgpKSAqIHBlcmNlbnQ7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGxlZnQgPSB0ZW1wOw0KICAgICAgICAgIGZvcigg
bCA9IGxvd3hfaW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgdGVt
cCArPSBncm91cF9zaXplOw0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRl
bXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0K
ICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAg
ICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4
MDAwMDAwMDBGRkZGRkZGRiAmIE1pcG1hcC5HTFVfU1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0SW50
KCkpICkgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9ICgweDAwMDAwMDAwRkZGRkZGRkYgJiBkYXRhaW4uZ2V0SW50KCkpICog
eV9wZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0K
ICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICByaWdodCA9IHRlbXA7DQog
ICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqIGhpZ2h4X2Zsb2F0Ow0KICAgICAgICAgIC8v
IElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgICAgICAgIGlmICh0ZW1wIDwg
ZGF0YWluX3NpemUpIHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1w
OyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAg
ICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAg
IGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgweDAw
MDAwMDAwRkZGRkZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgp
KSApICogcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0
b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAmIGRhdGFpbi5nZXRJbnQoKSkgKiBwZXJj
ZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAg
ICAgIA0KICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgdmFsdWUgZm9yIHBpeGVscyBpbiB0aGUg
bGFzdCByb3cNCiAgICAgICAgICB5X3BlcmNlbnQgPSBoaWdoeV9mbG9hdDsNCiAgICAgICAgICBw
ZXJjZW50ID0geV9wZXJjZW50ICogKCAxIC0gbG93eF9mbG9hdCApOw0KICAgICAgICAgIHRlbXAg
PSB4aW5kZXggKyBoaWdoeV9pbnQgKiB5c2l6ZTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1w
X2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50
X3NpemUgKSB7DQogICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAg
ICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSAr
PSAoMHgwMDAwMDAwMEZGRkZGRkZGICYgTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5n
ZXRJbnQoKSkgKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg
ICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAmIGRhdGFpbi5nZXRJbnQoKSkgKiBw
ZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBmb3IoIGwgPSBs
b3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0g
Z3JvdXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBr
IDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAg
ICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIGlm
KCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgweDAwMDAw
MDAwRkZGRkZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpKSAp
ICogeV9wZXJjZW50Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRv
dGFsc1trXSArPSAoMHgwMDAwMDAwMEZGRkZGRkZGICYgZGF0YWluLmdldEludCgpKSAqIHlfcGVy
Y2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAg
ICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAq
IGhpZ2h4X2Zsb2F0Ow0KICAgICAgICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVy
cnVuIA0KICAgICAgICAgIGlmICh0ZW1wIDwgZGF0YWluX3NpemUpIHsNCiAgICAgICAgICAgIGZv
ciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2lu
ZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0
ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAg
ICAgICAgICAgdG90YWxzW2tdICs9ICgweDAwMDAwMDAwRkZGRkZGRkYgJiBNaXBtYXAuR0xVX1NX
QVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpKSApICogcGVyY2VudDsNCiAgICAgICAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZG
RiAmIGRhdGFpbi5nZXRJbnQoKSkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIA0KICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0
aGUgdmFsdWUgZm9yIHRoZSBwaXhlbHMgaW4gdGhlIDFzdCBhbmQgbGFzdCBjb2x1bW4NCiAgICAg
ICAgICBmb3IoIG0gPSBsb3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsNCiAgICAg
ICAgICAgIGxlZnQgKz0geXNpemU7DQogICAgICAgICAgICByaWdodCArPSB5c2l6ZTsNCiAgICAg
ICAgICAgIGZvciggayA9IDA7IGsgPCBjb21wb25lbnRzOyBrKyssIGxlZnQgKz0gZWxlbWVudF9z
aXplLCByaWdodCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBf
Ynl0ZXMgKSB7DQogICAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCBsZWZ0ICk7DQogICAg
ICAgICAgICAgICAgdG90YWxzW2tdICs9ICgoMHgwMDAwMDAwMEZGRkZGRkZGICYgTWlwbWFwLkdM
VV9TV0FQXzRfQllURVMoZGF0YWluLmdldEludCgpKSkgKiAoIDEgLSBsb3d4X2Zsb2F0ICkpOw0K
ICAgICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggcmlnaHQgKTsNCiAgICAgICAgICAgICAg
ICB0b3RhbHNba10gKz0gKCgweDAwMDAwMDAwRkZGRkZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfNF9C
WVRFUyhkYXRhaW4uZ2V0SW50KCkpKSAqIGhpZ2h4X2Zsb2F0KTsNCiAgICAgICAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIGxlZnQgKTsNCiAgICAgICAg
ICAgICAgICB0b3RhbHNba10gKz0gKCgweDAwMDAwMDAwRkZGRkZGRkYgJiBkYXRhaW4uZ2V0SW50
KCkpICogKCAxIC0gbG93eF9mbG9hdCApKTsNCiAgICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRp
b24oIHJpZ2h0ICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgoMHgwMDAwMDAwMEZG
RkZGRkZGICYgZGF0YWluLmdldEludCgpKSAqIGhpZ2h4X2Zsb2F0KTsNCiAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmKCBoaWdoeV9p
bnQgPiBsb3d5X2ludCApIHsNCiAgICAgICAgICB4X3BlcmNlbnQgPSBoaWdoeF9mbG9hdCAtIGxv
d3hfZmxvYXQ7DQogICAgICAgICAgcGVyY2VudCA9ICggMSAtIGxvd3lfZmxvYXQpICogeF9wZXJj
ZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAg
ICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyss
IHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0
aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAg
ICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAmIE1pcG1hcC5HTFVf
U1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0SW50KCkpKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAm
IGRhdGFpbi5nZXRJbnQoKSkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICBmb3IoIG0gPSBsb3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsN
CiAgICAgICAgICAgIHRlbXAgKz0geXNpemU7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1w
X2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50
X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0K
ICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHRvdGFs
c1trXSArPSAoMHgwMDAwMDAwMEZGRkZGRkZGICYgTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRh
dGFpbi5nZXRJbnQoKSkpICogeF9wZXJjZW50Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAwMDAwMEZGRkZGRkZGICYgZGF0YWluLmdl
dEludCgpKSAqIHhfcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAg
ICAgICAgIH0NCiAgICAgICAgICBwZXJjZW50ID0geF9wZXJjZW50ICogaGlnaHlfZmxvYXQ7DQog
ICAgICAgICAgdGVtcCArPSB5c2l6ZTsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBt
ZW1vcnkgb3ZlcnJ1biANCiAgICAgICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAg
ICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsr
KywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5w
b3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkg
ew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoMHgwMDAwMDAwMEZGRkZGRkZGICYgTWlw
bWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRJbnQoKSkpICogcGVyY2VudDsNCiAgICAg
ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAw
MDBGRkZGRkZGRiAmIGRhdGFpbi5nZXRJbnQoKSkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9
DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYoIGhpZ2h4X2lu
dCA+IGxvd3hfaW50ICkgew0KICAgICAgICAgIHlfcGVyY2VudCA9IGhpZ2h5X2Zsb2F0IC0gbG93
eV9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0gbG93eF9mbG9hdCApICogeV9wZXJj
ZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAg
ICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyss
IHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0
aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAg
ICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAmIE1pcG1hcC5HTFVf
U1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0SW50KCkpKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAm
IGRhdGFpbi5nZXRJbnQoKSkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsN
CiAgICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAs
IHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVs
ZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4
ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAg
dG90YWxzW2tdICs9ICgweDAwMDAwMDAwRkZGRkZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfNF9CWVRF
UyggZGF0YWluLmdldEludCgpKSkgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7
DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgweDAwMDAwMDAwRkZGRkZGRkYgJiBkYXRh
aW4uZ2V0SW50KCkpICogeV9wZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9
DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICBw
ZXJjZW50ID0geV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgLy8gSXNzdWUgIzM2
NTogYXZvaWQgbWVtb3J5IG92ZXJydW4gDQogICAgICAgICAgaWYgKHRlbXAgPCBkYXRhaW5fc2l6
ZSkgew0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21w
b25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAg
ICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dh
cF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZG
RkZGRiAmIE1pcG1hcC5HTFVfU1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0SW50KCkpKSAqIHBlcmNl
bnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9
ICgweDAwMDAwMDAwRkZGRkZGRkYgJiBkYXRhaW4uZ2V0SW50KCkpICogcGVyY2VudDsNCiAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsN
CiAgICAgICAgICBwZXJjZW50ID0gKCBoaWdoeV9mbG9hdCAtIGxvd3lfZmxvYXQgKSAqICggaGln
aHhfZmxvYXQgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCArIChsb3d5
X2ludCAqIHlzaXplKTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsg
ayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAg
ICAgICAgICBsb25nIHRlbXBJbnQwID0gKCAweEZGRkZGRkZGTCAmIGRhdGFpbi5nZXRJbnQoIHRl
bXBfaW5kZXggKSApOw0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7
DQogICAgICAgICAgICBsb25nIHRlbXBJbnQxID0gKCAweEZGRkZGRkZGTCAmIGRhdGFpbi5nZXRJ
bnQoKSApOw0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAg
ICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0g
KDB4MDAwMDAwMDBGRkZGRkZGRiAmIE1pcG1hcC5HTFVfU1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0
SW50KCkpKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0
b3RhbHNba10gKz0gKDB4MDAwMDAwMDBGRkZGRkZGRiAmIGRhdGFpbi5nZXRJbnQoKSkgKiBwZXJj
ZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAg
ICAgICAgLy8gdGhpcyBpcyBmb3IgdGhlIHBpeGVscyBpbiB0aGUgYm9keQ0KICAgICAgICB0ZW1w
MCA9IHhpbmRleCArIGdyb3VwX3NpemUgKyAoIGxvd3lfaW50ICsgMSApICogeXNpemU7DQogICAg
ICAgIGZvciggbSA9IGxvd3lfaW50ICsgMTsgbSA8IGhpZ2h5X2ludDsgbSsrICkgew0KICAgICAg
ICAgIHRlbXAgPSB0ZW1wMDsNCiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBo
aWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0
ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsN
CiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAg
ICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9ICgw
eDAwMDAwMDAwRkZGRkZGRkYgJiBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldElu
dCgpKSk7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2td
ICs9ICgweDAwMDAwMDAwRkZGRkZGRkYgJiBkYXRhaW4uZ2V0SW50KCkpOw0KICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAg
ICAgICAgfQ0KICAgICAgICAgIHRlbXAwICs9IHlzaXplOw0KICAgICAgICB9DQogICAgICAgIA0K
ICAgICAgICBvdXRpbmRleCA9ICggaiArICggaSAqIHdpZHRob3V0ICkgKSAqIGNvbXBvbmVudHM7
DQogICAgICAgIGZsb2F0IHZhbHVlID0gMC4wZjsNCiAgICAgICAgZm9yKCBrID0gMDsgayA8IGNv
bXBvbmVudHM7IGsrKyApIHsNCiAgICAgICAgICB2YWx1ZSA9IHRvdGFsc1trXSAvIGFyZWE7DQog
ICAgICAgICAgZGF0YW91dC5wb3NpdGlvbiggb3V0aW5kZXggKyBrICk7DQogICAgICAgICAgaWYo
IHZhbHVlID49IFVJTlRfTUFYICkgew0KICAgICAgICAgICAgZGF0YW91dC5wdXQoIChpbnQpdmFs
dWUgKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZGF0YW91dC5wdXQoIChpbnQp
KHRvdGFsc1trXSAvIGFyZWEpICk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGxv
d3hfaW50ID0gaGlnaHhfaW50Ow0KICAgICAgICBsb3d4X2Zsb2F0ID0gaGlnaHhfZmxvYXQ7DQog
ICAgICAgIGhpZ2h4X2ludCArPSBjb252eF9pbnQ7DQogICAgICAgIGhpZ2h4X2Zsb2F0ICs9IGNv
bnZ4X2Zsb2F0Ow0KICAgICAgICBpZiggaGlnaHhfZmxvYXQgPiAxLjBmICkgew0KICAgICAgICAg
IGhpZ2h4X2Zsb2F0IC09IDEuMGY7DQogICAgICAgICAgaGlnaHhfaW50Kys7DQogICAgICAgIH0N
Cg0KICAgICAgICAvLyBDbGFtcCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgcmln
aHQgZWRnZQ0KICAgICAgICBpZiAoaGlnaHhfaW50ID4gd2lkdGhpbiAtIDEpIHsNCiAgICAgICAg
ICBpbnQgZGVsdGEgPSAoaGlnaHhfaW50IC0gd2lkdGhpbiArIDEpOw0KICAgICAgICAgIGxvd3hf
aW50IC09IGRlbHRhOw0KICAgICAgICAgIGhpZ2h4X2ludCAtPSBkZWx0YTsNCiAgICAgICAgfQ0K
ICAgICAgfQ0KICAgICAgbG93eV9pbnQgPSBoaWdoeV9pbnQ7DQogICAgICBsb3d5X2Zsb2F0ID0g
aGlnaHlfZmxvYXQ7DQogICAgICBoaWdoeV9pbnQgKz0gY29udnlfaW50Ow0KICAgICAgaGlnaHlf
ZmxvYXQgKz0gY29udnlfZmxvYXQ7DQogICAgICBpZiggaGlnaHlfZmxvYXQgPiAxLjBmICkgew0K
ICAgICAgICBoaWdoeV9mbG9hdCAtPSAxLjBmOw0KICAgICAgICBoaWdoeV9pbnQrKzsNCiAgICAg
IH0NCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgdm9pZCBzY2FsZV9pbnRlcm5hbF9p
bnQoIGludCBjb21wb25lbnRzLCBpbnQgd2lkdGhpbiwgaW50IGhlaWdodGluLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQnl0ZUJ1ZmZlciBkYXRhaW4sIGludCB3aWR0aG91dCwgaW50
IGhlaWdodG91dCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRCdWZmZXIgZGF0
YW91dCwgaW50IGVsZW1lbnRfc2l6ZSwgaW50IHlzaXplLCANCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBncm91cF9zaXplLCBib29sZWFuIG15c3dhcF9ieXRlcyApIHsNCiAgICBm
bG9hdCB4LCBjb252eDsNCiAgICBmbG9hdCB5LCBjb252eTsNCiAgICBmbG9hdCBwZXJjZW50Ow0K
ICAgIC8vIE1heCBjb21wb25lbnRzIGluIGEgZm9ybWF0IGlzIDQsIHNvLi4uDQogICAgZmxvYXRb
XSB0b3RhbHMgPSBuZXcgZmxvYXRbNF07DQogICAgZmxvYXQgYXJlYTsNCiAgICBpbnQgaSwgaiwg
aywgeGluZGV4Ow0KICAgIA0KICAgIGludCB0ZW1wLCB0ZW1wMDsNCiAgICBpbnQgdGVtcF9pbmRl
eDsNCiAgICBpbnQgb3V0aW5kZXg7DQogICAgDQogICAgaW50IGxvd3hfaW50LCBoaWdoeF9pbnQs
IGxvd3lfaW50LCBoaWdoeV9pbnQ7DQogICAgZmxvYXQgeF9wZXJjZW50LCB5X3BlcmNlbnQ7DQog
ICAgZmxvYXQgbG93eF9mbG9hdCwgaGlnaHhfZmxvYXQsIGxvd3lfZmxvYXQsIGhpZ2h5X2Zsb2F0
Ow0KICAgIGZsb2F0IGNvbnZ5X2Zsb2F0LCBjb252eF9mbG9hdDsNCiAgICBpbnQgY29udnlfaW50
LCBjb252eF9pbnQ7DQogICAgaW50IGwsIG07DQogICAgaW50IGxlZnQsIHJpZ2h0Ow0KICAgIA0K
ICAgIGxvbmcgc3dhcGJ1ZjsgLy8gdW5zaWduZWQgYnVmZmVyDQogICAgDQogICAgaWYoICh3aWR0
aGluID09ICh3aWR0aG91dCAqIDIpKSAmJiAoaGVpZ2h0aW4gPT0gKGhlaWdodG91dCAqIDIpKSAp
IHsNCiAgICAgIEhhbHZlSW1hZ2UuaGFsdmVJbWFnZV9pbnQoIGNvbXBvbmVudHMsIHdpZHRoaW4s
IGhlaWdodGluLCBkYXRhaW4sIGRhdGFvdXQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudF9zaXplLCB5c2l6ZSwgZ3JvdXBfc2l6ZSwgbXlzd2FwX2J5dGVzICk7DQogICAgICByZXR1
cm47DQogICAgfQ0KICAgIGNvbnZ5ID0gKGZsb2F0KWhlaWdodGluIC8gaGVpZ2h0b3V0Ow0KICAg
IGNvbnZ4ID0gKGZsb2F0KXdpZHRoaW4gLyB3aWR0aG91dDsNCiAgICBjb252eV9pbnQgPSAoaW50
KU1hdGguZmxvb3IoIGNvbnZ5ICk7DQogICAgY29udnlfZmxvYXQgPSBjb252eSAtIGNvbnZ5X2lu
dDsNCiAgICBjb252eF9pbnQgPSAoaW50KU1hdGguZmxvb3IoIGNvbnZ4ICk7DQogICAgY29udnhf
ZmxvYXQgPSBjb252eCAtIGNvbnZ4X2ludDsNCiAgICANCiAgICBhcmVhID0gY29udnggKiBjb252
eTsNCiAgICANCiAgICBsb3d5X2ludCA9IDA7DQogICAgbG93eV9mbG9hdCA9IDAuMGY7DQogICAg
aGlnaHlfaW50ID0gY29udnlfaW50Ow0KICAgIGhpZ2h5X2Zsb2F0ID0gY29udnlfZmxvYXQ7DQog
ICAgDQogICAgLy8gSXNzdWUgIzM2NTogYXZvaWQgbWVtb3J5IG92ZXJydW4gDQogICAgaW50IGRh
dGFpbl9zaXplID0gd2lkdGhpbiAqIGhlaWdodGluICogY29tcG9uZW50cyAqIGVsZW1lbnRfc2l6
ZTsNCiAgICANCiAgICBmb3IoIGkgPSAwOyBpIDwgaGVpZ2h0b3V0OyBpKysgKSB7DQogICAgICAv
LyBDbGFtcCBoZXJlIHRvIGJlIHN1cmUgd2UgZG9uJ3QgcmVhZCBiZXlvbmQgaW5wdXQgYnVmZmVy
Lg0KICAgICAgaWYgKGhpZ2h5X2ludCA+PSBoZWlnaHRpbikNCiAgICAgICAgaGlnaHlfaW50ID0g
aGVpZ2h0aW4gLSAxOw0KICAgICAgbG93eF9pbnQgPSAwOw0KICAgICAgbG93eF9mbG9hdCA9IDAu
MGY7DQogICAgICBoaWdoeF9pbnQgPSBjb252eF9pbnQ7DQogICAgICBoaWdoeF9mbG9hdCA9IGNv
bnZ4X2Zsb2F0Ow0KICAgICAgDQogICAgICBmb3IoIGogPSAwOyBqIDwgd2lkdGhvdXQ7IGorKyAp
IHsNCiAgICAgICAgDQogICAgICAgIC8vIE9rLCBub3cgYXBwbHkgYm94IGZpbHRlciB0byBib3gg
dGhhdCBnb2VzIGZyb20gKGxvd3gsIGxvd3kpDQogICAgICAgIC8vIHRvIChoaWdoeCwgaGlnaHkp
IG9uIGlucHV0IGRhdGEgaW50byB0aGlzIHBpeGVsIG9uIG91dHB1dA0KICAgICAgICAvLyBkYXRh
Lg0KICAgICAgICB0b3RhbHNbMF0gPSB0b3RhbHNbMV0gPSB0b3RhbHNbMl0gPSB0b3RhbHNbM10g
PSAwLjBmOw0KICAgICAgICANCiAgICAgICAgLy8gY2F1bGF0ZSB0aGUgdmFsdWUgZm9yIHBpeGVs
cyBpbiB0aGUgMXN0IHJvdw0KICAgICAgICB4aW5kZXggPSBsb3d4X2ludCAqIGdyb3VwX3NpemU7
DQogICAgICAgIGlmKCAoIGhpZ2h5X2ludCA+IGxvd3lfaW50ICkgJiYgKCBoaWdoeF9pbnQgPiBs
b3d4X2ludCApICkgew0KICAgICAgICAgIA0KICAgICAgICAgIHlfcGVyY2VudCA9IDEgLSBsb3d5
X2Zsb2F0Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyBsb3d5X2ludCAqIHlzaXplOw0KICAg
ICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiAoIDEgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAg
ICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRl
bXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9u
KCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAg
ICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRJbnQo
KSApOw0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAg
ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldElu
dCgpICogcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgbGVm
dCA9IHRlbXA7DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQgKyAxOyBsIDwgaGlnaHhfaW50
OyBsKysgKSB7DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAgICAgICAgICBm
b3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9p
bmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbigg
dGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAg
ICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldElu
dCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB5X3BlcmNlbnQ7
DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRh
dGFpbi5nZXRJbnQoKSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIH0NCiAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAgICAgICAg
cmlnaHQgPSB0ZW1wOw0KICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9h
dDsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICAg
ICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0
ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVt
ZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCAp
Ow0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHN3
YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAg
ICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiBwZXJjZW50Ow0KICAgICAgICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0SW50KCkg
KiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0K
ICAgICAgICAgIA0KICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgdmFsdWUgZm9yIHBpeGVscyBp
biB0aGUgbGFzdCByb3cNCiAgICAgICAgICB5X3BlcmNlbnQgPSBoaWdoeV9mbG9hdDsNCiAgICAg
ICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogKCAxIC0gbG93eF9mbG9hdCApOw0KICAgICAgICAg
IHRlbXAgPSB4aW5kZXggKyBoaWdoeV9pbnQgKiB5c2l6ZTsNCiAgICAgICAgICBmb3IoIGsgPSAw
LCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBl
bGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXgg
KTsNCiAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgIHN3YXBi
dWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAgICAg
ICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0SW50KCkgKiBwZXJjZW50
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2lu
dCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gZ3JvdXBf
c2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29t
cG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAg
ICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3
YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9IE1pcG1hcC5HTFVfU1dBUF80
X0JZVEVTKCBkYXRhaW4uZ2V0SW50KCkgKTsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0g
c3dhcGJ1ZiAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
ICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldEludCgpICogeV9wZXJjZW50Ow0KICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3Jv
dXBfc2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQog
ICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQgbWVtb3J5IG92ZXJydW4gDQogICAgICAgICAg
aWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9p
bmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9z
aXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAg
ICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICBzd2FwYnVm
ID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRJbnQoKSApOw0KICAgICAgICAg
ICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldEludCgpICogcGVy
Y2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAg
ICAgICANCiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVlIGZvciB0aGUgcGl4ZWxzIGlu
IHRoZSAxc3QgYW5kIGxhc3QgY29sdW1uDQogICAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAx
OyBtIDwgaGlnaHlfaW50OyBtKysgKSB7DQogICAgICAgICAgICBsZWZ0ICs9IHlzaXplOw0KICAg
ICAgICAgICAgcmlnaHQgKz0geXNpemU7DQogICAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29t
cG9uZW50czsgaysrLCBsZWZ0ICs9IGVsZW1lbnRfc2l6ZSwgcmlnaHQgKz0gZWxlbWVudF9zaXpl
ICkgew0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAg
IGRhdGFpbi5wb3NpdGlvbiggbGVmdCApOw0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBt
YXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAgICAgICAgICAgICAg
dG90YWxzW2tdICs9IHN3YXBidWYgKiAoIDEgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAgICAgICAg
ICAgZGF0YWluLnBvc2l0aW9uKCByaWdodCApOw0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBN
aXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIGxlZnQgKTsNCiAgICAgICAg
ICAgICAgICB0b3RhbHNba10gKz0gKGRhdGFpbi5nZXRJbnQoKSAqICggMSAtIGxvd3hfZmxvYXQg
KSk7DQogICAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCByaWdodCApOw0KICAgICAgICAg
ICAgICAgIHRvdGFsc1trXSArPSAoZGF0YWluLmdldEludCgpICogaGlnaHhfZmxvYXQpOw0KICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ug
aWYoIGhpZ2h5X2ludCA+IGxvd3lfaW50ICkgew0KICAgICAgICAgIHhfcGVyY2VudCA9IGhpZ2h4
X2Zsb2F0IC0gbG93eF9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0gbG93eV9mbG9h
dCkgKiB4X3BlcmNlbnQ7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCArIChsb3d5X2ludCAqIHlz
aXplKTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBv
bmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICBk
YXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgIGlmKCBteXN3YXBfYnl0
ZXMgKSB7DQogICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUygg
ZGF0YWluLmdldEludCgpICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICog
cGVyY2VudDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSAr
PSBkYXRhaW4uZ2V0SW50KCkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICBmb3IoIG0gPSBsb3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsN
CiAgICAgICAgICAgIHRlbXAgKz0geXNpemU7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1w
X2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50
X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0K
ICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHN3YXBi
dWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAgICAg
ICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB4X3BlcmNlbnQ7DQogICAgICAgICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRJbnQoKSAq
IHhfcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICBwZXJjZW50ID0geF9wZXJjZW50ICogaGlnaHlfZmxvYXQ7DQogICAgICAgICAg
dGVtcCArPSB5c2l6ZTsNCiAgICAgICAgICAvLyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3Zl
cnJ1biANCiAgICAgICAgICBpZiAodGVtcCA8IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBm
b3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9p
bmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbigg
dGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAg
ICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldElu
dCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiBwZXJjZW50Ow0K
ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRh
aW4uZ2V0SW50KCkgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQog
ICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYoIGhpZ2h4X2ludCA+IGxvd3hfaW50ICkgew0K
ICAgICAgICAgIHlfcGVyY2VudCA9IGhpZ2h5X2Zsb2F0IC0gbG93eV9mbG9hdDsNCiAgICAgICAg
ICBwZXJjZW50ID0gKCAxIC0gbG93eF9mbG9hdCApICogeV9wZXJjZW50Ow0KICAgICAgICAgIHRl
bXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAgICAgICAgZm9yKCBrID0gMCwg
dGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxl
bWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7
DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICBzd2FwYnVm
ID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRJbnQoKSApOw0KICAgICAgICAg
ICAgICB0b3RhbHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldEludCgpICogcGVyY2VudDsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQg
KyAxOyBsIDwgaGlnaHhfaW50OyBsKysgKSB7DQogICAgICAgICAgICB0ZW1wICs9IGdyb3VwX3Np
emU7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBv
bmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAg
IGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2Fw
X2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9C
WVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3
YXBidWYgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRJbnQoKSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICB0ZW1wICs9IGdyb3Vw
X3NpemU7DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqIGhpZ2h4X2Zsb2F0Ow0KICAg
ICAgICAgIC8vIElzc3VlICMzNjU6IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgICAgICAgIGlm
ICh0ZW1wIDwgZGF0YWluX3NpemUpIHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5k
ZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6
ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAg
ICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9
IE1pcG1hcC5HTFVfU1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0SW50KCkgKTsNCiAgICAgICAgICAg
ICAgICB0b3RhbHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRJbnQoKSAqIHBlcmNl
bnQ7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgcGVyY2VudCA9ICggaGlnaHlfZmxvYXQgLSBsb3d5X2Zsb2F0
ICkgKiAoIGhpZ2h4X2Zsb2F0IC0gbG93eF9mbG9hdCApOw0KICAgICAgICAgIHRlbXAgPSB4aW5k
ZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRl
eCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXpl
ICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAg
ICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFw
LkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRJbnQoKSApOw0KICAgICAgICAgICAgICB0b3Rh
bHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAg
ICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldEludCgpICogcGVyY2VudDsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIHRoaXMg
aXMgZm9yIHRoZSBwaXhlbHMgaW4gdGhlIGJvZHkNCiAgICAgICAgdGVtcDAgPSB4aW5kZXggKyBn
cm91cF9zaXplICsgKCBsb3d5X2ludCArIDEgKSAqIHlzaXplOw0KICAgICAgICBmb3IoIG0gPSBs
b3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsNCiAgICAgICAgICB0ZW1wID0gdGVt
cDA7DQogICAgICAgICAgZm9yKCBsID0gbG93eF9pbnQgKyAxOyBsIDwgaGlnaHhfaW50OyBsKysg
KSB7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsgayA8IGNvbXBv
bmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAgICAgICAgICAg
IGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAgICBpZiggbXlzd2Fw
X2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBfNF9C
WVRFUyggZGF0YWluLmdldEludCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3
YXBidWY7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2td
ICs9IGRhdGFpbi5nZXRJbnQoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgdGVtcCArPSBncm91cF9zaXplOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0ZW1w
MCArPSB5c2l6ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgb3V0aW5kZXggPSAoIGog
KyAoIGkgKiB3aWR0aG91dCApICkgKiBjb21wb25lbnRzOw0KICAgICAgICBmb3IoIGsgPSAwOyBr
IDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgIGRhdGFvdXQucG9zaXRpb24oIG91dGlu
ZGV4ICsgayApOw0KICAgICAgICAgIGRhdGFvdXQucHV0KCAoaW50KSh0b3RhbHNba10gLyBhcmVh
KSApOw0KICAgICAgICB9DQogICAgICAgIGxvd3hfaW50ID0gaGlnaHhfaW50Ow0KICAgICAgICBs
b3d4X2Zsb2F0ID0gaGlnaHhfZmxvYXQ7DQogICAgICAgIGhpZ2h4X2ludCArPSBjb252eF9pbnQ7
DQogICAgICAgIGhpZ2h4X2Zsb2F0ICs9IGNvbnZ4X2Zsb2F0Ow0KICAgICAgICBpZiggaGlnaHhf
ZmxvYXQgPiAxLjBmICkgew0KICAgICAgICAgIGhpZ2h4X2Zsb2F0IC09IDEuMGY7DQogICAgICAg
ICAgaGlnaHhfaW50Kys7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBDbGFtcCB0byBtYWtlIHN1
cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgcmlnaHQgZWRnZQ0KICAgICAgICBpZiAoaGlnaHhfaW50
ID4gd2lkdGhpbiAtIDEpIHsNCiAgICAgICAgICBpbnQgZGVsdGEgPSAoaGlnaHhfaW50IC0gd2lk
dGhpbiArIDEpOw0KICAgICAgICAgIGxvd3hfaW50IC09IGRlbHRhOw0KICAgICAgICAgIGhpZ2h4
X2ludCAtPSBkZWx0YTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgbG93eV9pbnQgPSBoaWdo
eV9pbnQ7DQogICAgICBsb3d5X2Zsb2F0ID0gaGlnaHlfZmxvYXQ7DQogICAgICBoaWdoeV9pbnQg
Kz0gY29udnlfaW50Ow0KICAgICAgaGlnaHlfZmxvYXQgKz0gY29udnlfZmxvYXQ7DQogICAgICBp
ZiggaGlnaHlfZmxvYXQgPiAxLjBmICkgew0KICAgICAgICBoaWdoeV9mbG9hdCAtPSAxLjBmOw0K
ICAgICAgICBoaWdoeV9pbnQrKzsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBz
dGF0aWMgdm9pZCBzY2FsZV9pbnRlcm5hbF9mbG9hdCggaW50IGNvbXBvbmVudHMsIGludCB3aWR0
aGluLCBpbnQgaGVpZ2h0aW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlQnVm
ZmVyIGRhdGFpbiwgaW50IHdpZHRob3V0LCBpbnQgaGVpZ2h0b3V0LCANCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZsb2F0QnVmZmVyIGRhdGFvdXQsIGludCBlbGVtZW50X3NpemUsIGlu
dCB5c2l6ZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3JvdXBfc2l6ZSwg
Ym9vbGVhbiBteXN3YXBfYnl0ZXMgKSB7DQogICAgZmxvYXQgeCwgY29udng7DQogICAgZmxvYXQg
eSwgY29udnk7DQogICAgZmxvYXQgcGVyY2VudDsNCiAgICAvLyBNYXggY29tcG9uZW50cyBpbiBh
IGZvcm1hdCBpcyA0LCBzby4uLg0KICAgIGZsb2F0W10gdG90YWxzID0gbmV3IGZsb2F0WzRdOw0K
ICAgIGZsb2F0IGFyZWE7DQogICAgaW50IGksIGosIGssIHhpbmRleDsNCiAgICANCiAgICBpbnQg
dGVtcCwgdGVtcDA7DQogICAgaW50IHRlbXBfaW5kZXg7DQogICAgaW50IG91dGluZGV4Ow0KICAg
IA0KICAgIGludCBsb3d4X2ludCwgaGlnaHhfaW50LCBsb3d5X2ludCwgaGlnaHlfaW50Ow0KICAg
IGZsb2F0IHhfcGVyY2VudCwgeV9wZXJjZW50Ow0KICAgIGZsb2F0IGxvd3hfZmxvYXQsIGhpZ2h4
X2Zsb2F0LCBsb3d5X2Zsb2F0LCBoaWdoeV9mbG9hdDsNCiAgICBmbG9hdCBjb252eV9mbG9hdCwg
Y29udnhfZmxvYXQ7DQogICAgaW50IGNvbnZ5X2ludCwgY29udnhfaW50Ow0KICAgIGludCBsLCBt
Ow0KICAgIGludCBsZWZ0LCByaWdodDsNCiAgICANCiAgICBmbG9hdCBzd2FwYnVmOyAvLyB1bnNp
Z25lZCBidWZmZXINCiAgICANCiAgICBpZiggKHdpZHRoaW4gPT0gKHdpZHRob3V0ICogMikpICYm
IChoZWlnaHRpbiA9PSAoaGVpZ2h0b3V0ICogMikpICkgew0KICAgICAgSGFsdmVJbWFnZS5oYWx2
ZUltYWdlX2Zsb2F0KCBjb21wb25lbnRzLCB3aWR0aGluLCBoZWlnaHRpbiwgZGF0YWluLCBkYXRh
b3V0LCANCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfc2l6ZSwgeXNpemUsIGdyb3Vw
X3NpemUsIG15c3dhcF9ieXRlcyApOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBjb252eSA9
IChmbG9hdCloZWlnaHRpbiAvIGhlaWdodG91dDsNCiAgICBjb252eCA9IChmbG9hdCl3aWR0aGlu
IC8gd2lkdGhvdXQ7DQogICAgY29udnlfaW50ID0gKGludClNYXRoLmZsb29yKCBjb252eSApOw0K
ICAgIGNvbnZ5X2Zsb2F0ID0gY29udnkgLSBjb252eV9pbnQ7DQogICAgY29udnhfaW50ID0gKGlu
dClNYXRoLmZsb29yKCBjb252eCApOw0KICAgIGNvbnZ4X2Zsb2F0ID0gY29udnggLSBjb252eF9p
bnQ7DQogICAgDQogICAgYXJlYSA9IGNvbnZ4ICogY29udnk7DQogICAgDQogICAgbG93eV9pbnQg
PSAwOw0KICAgIGxvd3lfZmxvYXQgPSAwLjBmOw0KICAgIGhpZ2h5X2ludCA9IGNvbnZ5X2ludDsN
CiAgICBoaWdoeV9mbG9hdCA9IGNvbnZ5X2Zsb2F0Ow0KICAgIA0KICAgIC8vIElzc3VlICMzNjU6
IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgIGludCBkYXRhaW5fc2l6ZSA9IHdpZHRoaW4gKiBo
ZWlnaHRpbiAqIGNvbXBvbmVudHMgKiBlbGVtZW50X3NpemU7DQogICAgDQogICAgZm9yKCBpID0g
MDsgaSA8IGhlaWdodG91dDsgaSsrICkgew0KICAgICAgLy8gQ2xhbXAgaGVyZSB0byBiZSBzdXJl
IHdlIGRvbid0IHJlYWQgYmV5b25kIGlucHV0IGJ1ZmZlci4NCiAgICAgIGlmIChoaWdoeV9pbnQg
Pj0gaGVpZ2h0aW4pDQogICAgICAgIGhpZ2h5X2ludCA9IGhlaWdodGluIC0gMTsNCiAgICAgIGxv
d3hfaW50ID0gMDsNCiAgICAgIGxvd3hfZmxvYXQgPSAwLjBmOw0KICAgICAgaGlnaHhfaW50ID0g
Y29udnhfaW50Ow0KICAgICAgaGlnaHhfZmxvYXQgPSBjb252eF9mbG9hdDsNCiAgICAgIA0KICAg
ICAgZm9yKCBqID0gMDsgaiA8IHdpZHRob3V0OyBqKysgKSB7DQogICAgICAgIA0KICAgICAgICAv
LyBPaywgbm93IGFwcGx5IGJveCBmaWx0ZXIgdG8gYm94IHRoYXQgZ29lcyBmcm9tIChsb3d4LCBs
b3d5KQ0KICAgICAgICAvLyB0byAoaGlnaHgsIGhpZ2h5KSBvbiBpbnB1dCBkYXRhIGludG8gdGhp
cyBwaXhlbCBvbiBvdXRwdXQNCiAgICAgICAgLy8gZGF0YS4NCiAgICAgICAgdG90YWxzWzBdID0g
dG90YWxzWzFdID0gdG90YWxzWzJdID0gdG90YWxzWzNdID0gMC4wZjsNCiAgICAgICAgDQogICAg
ICAgIC8vIGNhdWxhdGUgdGhlIHZhbHVlIGZvciBwaXhlbHMgaW4gdGhlIDFzdCByb3cNCiAgICAg
ICAgeGluZGV4ID0gbG93eF9pbnQgKiBncm91cF9zaXplOw0KICAgICAgICBpZiggKCBoaWdoeV9p
bnQgPiBsb3d5X2ludCApICYmICggaGlnaHhfaW50ID4gbG93eF9pbnQgKSApIHsNCiAgICAgICAg
ICANCiAgICAgICAgICB5X3BlcmNlbnQgPSAxIC0gbG93eV9mbG9hdDsNCiAgICAgICAgICB0ZW1w
ID0geGluZGV4ICsgbG93eV9pbnQgKiB5c2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJj
ZW50ICogKCAxIC0gbG93eF9mbG9hdCApOw0KICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5k
ZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6
ZSApIHsNCiAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAg
ICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgc3dhcGJ1ZiA9IE1pcG1h
cC5HTFVfU1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0RmxvYXQoKSApOw0KICAgICAgICAgICAgICB0
b3RhbHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgICB0b3RhbHNba10gKz0gZGF0YWluLmdldEZsb2F0KCkgKiBwZXJjZW50Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBsZWZ0ID0gdGVtcDsNCiAgICAgICAg
ICBmb3IoIGwgPSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAg
ICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5k
ZXggPSB0ZW1wOyBrIDwgY29tcG9uZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6
ZSApIHsNCiAgICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAg
ICAgICAgICAgIGlmKCBteXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9
IE1pcG1hcC5HTFVfU1dBUF80X0JZVEVTKCBkYXRhaW4uZ2V0RmxvYXQoKSApOw0KICAgICAgICAg
ICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogeV9wZXJjZW50Ow0KICAgICAgICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0RmxvYXQoKSAq
IHlfcGVyY2VudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgICAgICB0ZW1wICs9IGdyb3VwX3NpemU7DQogICAgICAgICAgcmlnaHQgPSB0ZW1wOw0K
ICAgICAgICAgIHBlcmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAgICAv
LyBJc3N1ZSAjMzY1OiBhdm9pZCBtZW1vcnkgb3ZlcnJ1biANCiAgICAgICAgICBpZiAodGVtcCA8
IGRhdGFpbl9zaXplKSB7DQogICAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVt
cDsgayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQog
ICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggdGVtcF9pbmRleCApOw0KICAgICAgICAgICAg
ICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAu
R0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEZsb2F0KCkgKTsNCiAgICAgICAgICAgICAgICB0
b3RhbHNba10gKz0gc3dhcGJ1ZiAqIHBlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRGbG9hdCgpICogcGVyY2VudDsN
CiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICAN
CiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVlIGZvciBwaXhlbHMgaW4gdGhlIGxhc3Qg
cm93DQogICAgICAgICAgeV9wZXJjZW50ID0gaGlnaHlfZmxvYXQ7DQogICAgICAgICAgcGVyY2Vu
dCA9IHlfcGVyY2VudCAqICggMSAtIGxvd3hfZmxvYXQgKTsNCiAgICAgICAgICB0ZW1wID0geGlu
ZGV4ICsgaGlnaHlfaW50ICogeXNpemU7DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRl
eCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXpl
ICkgew0KICAgICAgICAgICAgZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAg
ICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0KICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFw
LkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRGbG9hdCgpICk7DQogICAgICAgICAgICAgIHRv
dGFsc1trXSArPSBzd2FwYnVmICogcGVyY2VudDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAg
ICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0RmxvYXQoKSAqIHBlcmNlbnQ7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGZvciggbCA9IGxvd3hfaW50ICsgMTsg
bCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgdGVtcCArPSBncm91cF9zaXplOw0K
ICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRz
OyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRh
aW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRl
cyApIHsNCiAgICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMo
IGRhdGFpbi5nZXRGbG9hdCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBi
dWYgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAg
dG90YWxzW2tdICs9IGRhdGFpbi5nZXRGbG9hdCgpICogeV9wZXJjZW50Ow0KICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3JvdXBf
c2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQogICAg
ICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQgbWVtb3J5IG92ZXJydW4gDQogICAgICAgICAgaWYg
KHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRl
eCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXpl
ICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAg
ICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICBzd2FwYnVmID0g
TWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRGbG9hdCgpICk7DQogICAgICAgICAg
ICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9IGVs
c2Ugew0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRhaW4uZ2V0RmxvYXQoKSAqIHBl
cmNlbnQ7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAg
ICAgICAgDQogICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHBpeGVscyBp
biB0aGUgMXN0IGFuZCBsYXN0IGNvbHVtbg0KICAgICAgICAgIGZvciggbSA9IGxvd3lfaW50ICsg
MTsgbSA8IGhpZ2h5X2ludDsgbSsrICkgew0KICAgICAgICAgICAgbGVmdCArPSB5c2l6ZTsNCiAg
ICAgICAgICAgIHJpZ2h0ICs9IHlzaXplOw0KICAgICAgICAgICAgZm9yKCBrID0gMDsgayA8IGNv
bXBvbmVudHM7IGsrKywgbGVmdCArPSBlbGVtZW50X3NpemUsIHJpZ2h0ICs9IGVsZW1lbnRfc2l6
ZSApIHsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAg
ICBkYXRhaW4ucG9zaXRpb24oIGxlZnQgKTsNCiAgICAgICAgICAgICAgICBzd2FwYnVmID0gTWlw
bWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRGbG9hdCgpICk7DQogICAgICAgICAgICAg
ICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiAoIDEgLSBsb3d4X2Zsb2F0ICk7DQogICAgICAgICAg
ICAgICAgZGF0YWluLnBvc2l0aW9uKCByaWdodCApOw0KICAgICAgICAgICAgICAgIHN3YXBidWYg
PSBNaXBtYXAuR0xVX1NXQVBfNF9CWVRFUyggZGF0YWluLmdldEZsb2F0KCkgKTsNCiAgICAgICAg
ICAgICAgICB0b3RhbHNba10gKz0gc3dhcGJ1ZiAqIGhpZ2h4X2Zsb2F0Ow0KICAgICAgICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggbGVmdCApOw0KICAg
ICAgICAgICAgICAgIHRvdGFsc1trXSArPSAoZGF0YWluLmdldEZsb2F0KCkgKiAoIDEgLSBsb3d4
X2Zsb2F0ICkpOw0KICAgICAgICAgICAgICAgIGRhdGFpbi5wb3NpdGlvbiggcmlnaHQgKTsNCiAg
ICAgICAgICAgICAgICB0b3RhbHNba10gKz0gKGRhdGFpbi5nZXRGbG9hdCgpICogaGlnaHhfZmxv
YXQpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAg
ICB9IGVsc2UgaWYoIGhpZ2h5X2ludCA+IGxvd3lfaW50ICkgew0KICAgICAgICAgIHhfcGVyY2Vu
dCA9IGhpZ2h4X2Zsb2F0IC0gbG93eF9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0g
bG93eV9mbG9hdCkgKiB4X3BlcmNlbnQ7DQogICAgICAgICAgdGVtcCA9IHhpbmRleCArIChsb3d5
X2ludCAqIHlzaXplKTsNCiAgICAgICAgICBmb3IoIGsgPSAwLCB0ZW1wX2luZGV4ID0gdGVtcDsg
ayA8IGNvbXBvbmVudHM7IGsrKywgdGVtcF9pbmRleCArPSBlbGVtZW50X3NpemUgKSB7DQogICAg
ICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgIGlmKCBt
eXN3YXBfYnl0ZXMgKSB7DQogICAgICAgICAgICAgIHN3YXBidWYgPSBNaXBtYXAuR0xVX1NXQVBf
NF9CWVRFUyggZGF0YWluLmdldEZsb2F0KCkgKTsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9
IHN3YXBidWYgKiBwZXJjZW50Ow0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg
dG90YWxzW2tdICs9IGRhdGFpbi5nZXRGbG9hdCgpICogcGVyY2VudDsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICB9DQogICAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGlnaHlf
aW50OyBtKysgKSB7DQogICAgICAgICAgICB0ZW1wICs9IHlzaXplOw0KICAgICAgICAgICAgZm9y
KCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5k
ZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRl
bXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAg
ICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRGbG9h
dCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB4X3BlcmNlbnQ7
DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRh
dGFpbi5nZXRGbG9hdCgpICogeF9wZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIHBlcmNlbnQgPSB4X3BlcmNlbnQgKiBoaWdoeV9m
bG9hdDsNCiAgICAgICAgICB0ZW1wICs9IHlzaXplOw0KICAgICAgICAgIC8vIElzc3VlICMzNjU6
IGF2b2lkIG1lbW9yeSBvdmVycnVuIA0KICAgICAgICAgIGlmICh0ZW1wIDwgZGF0YWluX3NpemUp
IHsNCiAgICAgICAgICAgIGZvciggayA9IDAsIHRlbXBfaW5kZXggPSB0ZW1wOyBrIDwgY29tcG9u
ZW50czsgaysrLCB0ZW1wX2luZGV4ICs9IGVsZW1lbnRfc2l6ZSApIHsNCiAgICAgICAgICAgICAg
ZGF0YWluLnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICAgIGlmKCBteXN3YXBf
Ynl0ZXMgKSB7DQogICAgICAgICAgICAgICAgc3dhcGJ1ZiA9IE1pcG1hcC5HTFVfU1dBUF80X0JZ
VEVTKCBkYXRhaW4uZ2V0RmxvYXQoKSApOw0KICAgICAgICAgICAgICAgIHRvdGFsc1trXSArPSBz
d2FwYnVmICogcGVyY2VudDsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg
ICB0b3RhbHNba10gKz0gZGF0YWluLmdldEZsb2F0KCkgKiBwZXJjZW50Ow0KICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYoIGhpZ2h4
X2ludCA+IGxvd3hfaW50ICkgew0KICAgICAgICAgIHlfcGVyY2VudCA9IGhpZ2h5X2Zsb2F0IC0g
bG93eV9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAxIC0gbG93eF9mbG9hdCApICogeV9w
ZXJjZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7DQog
ICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBr
KyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWluLnBv
c2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkgew0K
ICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5n
ZXRGbG9hdCgpICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogcGVyY2Vu
dDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBkYXRh
aW4uZ2V0RmxvYXQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAg
ICAgICAgIGZvciggbCA9IGxvd3hfaW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAg
ICAgICAgICAgdGVtcCArPSBncm91cF9zaXplOw0KICAgICAgICAgICAgZm9yKCBrID0gMCwgdGVt
cF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVu
dF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRlbXBfaW5kZXggKTsN
CiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAgICAgICAgICBzd2Fw
YnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRGbG9hdCgpICk7DQogICAg
ICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYgKiB5X3BlcmNlbnQ7DQogICAgICAgICAg
ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRGbG9h
dCgpICogeV9wZXJjZW50Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAg
ICAgfQ0KICAgICAgICAgIHRlbXAgKz0gZ3JvdXBfc2l6ZTsNCiAgICAgICAgICBwZXJjZW50ID0g
eV9wZXJjZW50ICogaGlnaHhfZmxvYXQ7DQogICAgICAgICAgLy8gSXNzdWUgIzM2NTogYXZvaWQg
bWVtb3J5IG92ZXJydW4gDQogICAgICAgICAgaWYgKHRlbXAgPCBkYXRhaW5fc2l6ZSkgew0KICAg
ICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBr
KyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4u
cG9zaXRpb24oIHRlbXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyAp
IHsNCiAgICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRh
dGFpbi5nZXRGbG9hdCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWYg
KiBwZXJjZW50Ow0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRvdGFs
c1trXSArPSBkYXRhaW4uZ2V0RmxvYXQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICAgIH0NCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcGVy
Y2VudCA9ICggaGlnaHlfZmxvYXQgLSBsb3d5X2Zsb2F0ICkgKiAoIGhpZ2h4X2Zsb2F0IC0gbG93
eF9mbG9hdCApOw0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyAobG93eV9pbnQgKiB5c2l6ZSk7
DQogICAgICAgICAgZm9yKCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRz
OyBrKyssIHRlbXBfaW5kZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgZGF0YWlu
LnBvc2l0aW9uKCB0ZW1wX2luZGV4ICk7DQogICAgICAgICAgICBpZiggbXlzd2FwX2J5dGVzICkg
ew0KICAgICAgICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFp
bi5nZXRGbG9hdCgpICk7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBzd2FwYnVmICogcGVy
Y2VudDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBk
YXRhaW4uZ2V0RmxvYXQoKSAqIHBlcmNlbnQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyB0aGlzIGlzIGZvciB0aGUgcGl4ZWxzIGlu
IHRoZSBib2R5DQogICAgICAgIHRlbXAwID0geGluZGV4ICsgZ3JvdXBfc2l6ZSArICggbG93eV9p
bnQgKyAxICkgKiB5c2l6ZTsNCiAgICAgICAgZm9yKCBtID0gbG93eV9pbnQgKyAxOyBtIDwgaGln
aHlfaW50OyBtKysgKSB7DQogICAgICAgICAgdGVtcCA9IHRlbXAwOw0KICAgICAgICAgIGZvcigg
bCA9IGxvd3hfaW50ICsgMTsgbCA8IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgZm9y
KCBrID0gMCwgdGVtcF9pbmRleCA9IHRlbXA7IGsgPCBjb21wb25lbnRzOyBrKyssIHRlbXBfaW5k
ZXggKz0gZWxlbWVudF9zaXplICkgew0KICAgICAgICAgICAgICBkYXRhaW4ucG9zaXRpb24oIHRl
bXBfaW5kZXggKTsNCiAgICAgICAgICAgICAgaWYoIG15c3dhcF9ieXRlcyApIHsNCiAgICAgICAg
ICAgICAgICBzd2FwYnVmID0gTWlwbWFwLkdMVV9TV0FQXzRfQllURVMoIGRhdGFpbi5nZXRGbG9h
dCgpICk7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IHN3YXBidWY7DQogICAgICAgICAg
ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFpbi5nZXRGbG9h
dCgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0ZW1wICs9
IGdyb3VwX3NpemU7DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAwICs9IHlzaXplOw0KICAg
ICAgICB9DQogICAgICAgIA0KICAgICAgICBvdXRpbmRleCA9ICggaiArICggaSAqIHdpZHRob3V0
ICkgKSAqIGNvbXBvbmVudHM7DQogICAgICAgIGZvciggayA9IDA7IGsgPCBjb21wb25lbnRzOyBr
KysgKSB7DQogICAgICAgICAgZGF0YW91dC5wb3NpdGlvbiggb3V0aW5kZXggKyBrICk7DQogICAg
ICAgICAgZGF0YW91dC5wdXQoICh0b3RhbHNba10gLyBhcmVhKSApOw0KICAgICAgICB9DQogICAg
ICAgIGxvd3hfaW50ID0gaGlnaHhfaW50Ow0KICAgICAgICBsb3d4X2Zsb2F0ID0gaGlnaHhfZmxv
YXQ7DQogICAgICAgIGhpZ2h4X2ludCArPSBjb252eF9pbnQ7DQogICAgICAgIGhpZ2h4X2Zsb2F0
ICs9IGNvbnZ4X2Zsb2F0Ow0KICAgICAgICBpZiggaGlnaHhfZmxvYXQgPiAxLjBmICkgew0KICAg
ICAgICAgIGhpZ2h4X2Zsb2F0IC09IDEuMGY7DQogICAgICAgICAgaGlnaHhfaW50Kys7DQogICAg
ICAgIH0NCg0KICAgICAgICAvLyBDbGFtcCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0
aGUgcmlnaHQgZWRnZQ0KICAgICAgICBpZiAoaGlnaHhfaW50ID4gd2lkdGhpbiAtIDEpIHsNCiAg
ICAgICAgICBpbnQgZGVsdGEgPSAoaGlnaHhfaW50IC0gd2lkdGhpbiArIDEpOw0KICAgICAgICAg
IGxvd3hfaW50IC09IGRlbHRhOw0KICAgICAgICAgIGhpZ2h4X2ludCAtPSBkZWx0YTsNCiAgICAg
ICAgfQ0KICAgICAgfQ0KICAgICAgbG93eV9pbnQgPSBoaWdoeV9pbnQ7DQogICAgICBsb3d5X2Zs
b2F0ID0gaGlnaHlfZmxvYXQ7DQogICAgICBoaWdoeV9pbnQgKz0gY29udnlfaW50Ow0KICAgICAg
aGlnaHlfZmxvYXQgKz0gY29udnlfZmxvYXQ7DQogICAgICBpZiggaGlnaHlfZmxvYXQgPiAxLjBm
ICkgew0KICAgICAgICBoaWdoeV9mbG9hdCAtPSAxLjBmOw0KICAgICAgICBoaWdoeV9pbnQrKzsN
CiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgdm9pZCBzY2FsZUludGVy
bmFsUGFja2VkUGl4ZWwoIGludCBjb21wb25lbnRzLCBFeHRyYWN0IGV4dHJhY3QsIA0KICAgICAg
ICAgICAgICBpbnQgd2lkdGhJbiwgaW50IGhlaWdodEluLCBCeXRlQnVmZmVyIGRhdGFJbiwgaW50
IHdpZHRoT3V0LA0KICAgICAgICAgICAgICBpbnQgaGVpZ2h0T3V0LCBCeXRlQnVmZmVyIGRhdGFP
dXQsIGludCBwaXhlbFNpemVJbkJ5dGVzLA0KICAgICAgICAgICAgICBpbnQgcm93U2l6ZUluQnl0
ZXMsIGJvb2xlYW4gaXNTd2FwICkgew0KICAgIGZsb2F0IHgsIGNvbnZ4Ow0KICAgIGZsb2F0IHks
IGNvbnZ5Ow0KICAgIGZsb2F0IHBlcmNlbnQ7DQogICAgDQogICAgLy8gbWF4IGNvbXBvbmVudHMg
aW4gYSBmb3JtYXQgaXMgNCwgc28NCiAgICBmbG9hdFtdIHRvdGFscyA9IG5ldyBmbG9hdFs0XTsN
CiAgICBmbG9hdFtdIGV4dHJhY3RUb3RhbHMgPSBuZXcgZmxvYXRbNF07DQogICAgZmxvYXRbXSBl
eHRyYWN0TW9yZVRvdGFscyA9IG5ldyBmbG9hdFs0XTsNCiAgICBmbG9hdFtdIHNob3ZlVG90YWxz
ID0gbmV3IGZsb2F0WzRdOw0KICAgIA0KICAgIGZsb2F0IGFyZWE7DQogICAgaW50IGksIGosIGss
IHhpbmRleDsNCiAgICANCiAgICBpbnQgdGVtcCwgdGVtcDA7DQogICAgaW50IHRlbXBfaW5kZXg7
DQogICAgaW50IG91dEluZGV4ID0gMDsNCiAgICANCiAgICBpbnQgbG93eF9pbnQsIGhpZ2h4X2lu
dCwgbG93eV9pbnQsIGhpZ2h5X2ludDsNCiAgICBmbG9hdCB4X3BlcmNlbnQsIHlfcGVyY2VudDsN
CiAgICBmbG9hdCBsb3d4X2Zsb2F0LCBoaWdoeF9mbG9hdCwgbG93eV9mbG9hdCwgaGlnaHlfZmxv
YXQ7DQogICAgZmxvYXQgY29udnlfZmxvYXQsIGNvbnZ4X2Zsb2F0Ow0KICAgIGludCBjb252eV9p
bnQsIGNvbnZ4X2ludDsNCiAgICBpbnQgbCwgbTsNCiAgICBpbnQgbGVmdCwgcmlnaHQ7DQogICAg
DQogICAgaWYoIHdpZHRoSW4gPT0gd2lkdGhPdXQgKiAyICYmIGhlaWdodEluID09IGhlaWdodE91
dCAqIDIgKSB7DQogICAgICBIYWx2ZUltYWdlLmhhbHZlSW1hZ2VQYWNrZWRQaXhlbCggY29tcG9u
ZW50cywgZXh0cmFjdCwgd2lkdGhJbiwgaGVpZ2h0SW4sIGRhdGFJbiwgZGF0YU91dCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsU2l6ZUluQnl0ZXMsIHJvd1NpemVJbkJ5dGVz
LCBpc1N3YXAgKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgY29udnkgPSAoZmxvYXQpaGVp
Z2h0SW4gLyAoZmxvYXQpaGVpZ2h0T3V0Ow0KICAgIGNvbnZ4ID0gKGZsb2F0KXdpZHRoSW4gLyAo
ZmxvYXQpd2lkdGhPdXQ7DQogICAgY29udnlfaW50ID0gKGludClNYXRoLmZsb29yKCBjb252eSAp
Ow0KICAgIGNvbnZ5X2Zsb2F0ID0gY29udnkgLSBjb252eV9pbnQ7DQogICAgY29udnhfaW50ID0g
KGludClNYXRoLmZsb29yKCBjb252eCApOw0KICAgIGNvbnZ4X2Zsb2F0ID0gY29udnggLSBjb252
eF9pbnQ7DQogICAgDQogICAgYXJlYSA9IGNvbnZ4ICogY29udnk7DQogICAgDQogICAgbG93eV9p
bnQgPSAwOw0KICAgIGxvd3lfZmxvYXQgPSAwLjBmOw0KICAgIGhpZ2h5X2ludCA9IGNvbnZ5X2lu
dDsNCiAgICBoaWdoeV9mbG9hdCA9IGNvbnZ4X2Zsb2F0Ow0KICAgIA0KICAgIGZvciggaSA9IDA7
IGkgPCBoZWlnaHRPdXQ7IGkrKyApIHsNCiAgICAgIC8vIENsYW1wIGhlcmUgdG8gYmUgc3VyZSB3
ZSBkb24ndCByZWFkIGJleW9uZCBpbnB1dCBidWZmZXIuDQogICAgICBpZiAoaGlnaHlfaW50ID49
IGhlaWdodEluKQ0KICAgICAgICBoaWdoeV9pbnQgPSBoZWlnaHRJbiAtIDE7DQogICAgICBsb3d4
X2ludCA9IDA7DQogICAgICBsb3d4X2Zsb2F0ID0gMC4wZjsNCiAgICAgIGhpZ2h4X2ludCA9IGNv
bnZ4X2ludDsNCiAgICAgIGhpZ2h4X2Zsb2F0ID0gY29udnhfZmxvYXQ7DQogICAgICANCiAgICAg
IGZvciggaiA9IDA7IGogPCB3aWR0aE91dDsgaisrICkgew0KICAgICAgICAvLyBvayBub3cgYXBw
bHkgYm94IGZpbHRlciB0byBib3ggdGhhdCBnb2VzIGZyb20oIGxvd3gsIGxvd3kgKQ0KICAgICAg
ICAvLyB0byAoIGhpZ2h4LCBoaWdoeSApIG9uIGlucHV0IGRhdGEgaW50byB0aGlzIHBpeGVsIG9u
IG91dHB1dCBkYXRhDQogICAgICAgIHRvdGFsc1swXSA9IHRvdGFsc1sxXSA9IHRvdGFsc1syXSA9
IHRvdGFsc1szXSA9IDAuMGY7DQogICAgICAgIA0KICAgICAgICAvLyBjYWxjdWxhdGUgdGhhdCB2
YWx1ZSBmb3IgcGl4ZWxzIGluIHRoZSAxc3Qgcm93DQogICAgICAgIHhpbmRleCA9IGxvd3hfaW50
ICogcGl4ZWxTaXplSW5CeXRlczsNCiAgICAgICAgaWYoIChoaWdoeV9pbnQgPiBsb3d5X2ludCkg
JiYgKGhpZ2h4X2ludCA+IGxvd3hfaW50KSApIHsNCiAgICAgICAgICANCiAgICAgICAgICB5X3Bl
cmNlbnQgPSAxIC0gbG93eV9mbG9hdDsNCiAgICAgICAgICB0ZW1wID0geGluZGV4ICsgbG93eV9p
bnQgKiByb3dTaXplSW5CeXRlczsNCiAgICAgICAgICBwZXJjZW50ID0geV9wZXJjZW50ICogKCAx
IC0gbG93eF9mbG9hdCApOw0KICAgICAgICAgIGRhdGFJbi5wb3NpdGlvbiggdGVtcCApOw0KICAg
ICAgICAgIGV4dHJhY3QuZXh0cmFjdCggaXNTd2FwLCBkYXRhSW4sIGV4dHJhY3RUb3RhbHMgKTsN
CiAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAg
ICAgdG90YWxzW2tdICs9IGV4dHJhY3RUb3RhbHNba10gKiBwZXJjZW50Ow0KICAgICAgICAgIH0N
CiAgICAgICAgICBsZWZ0ID0gdGVtcDsNCiAgICAgICAgICBmb3IoIGwgPSBsb3d4X2ludCArIDE7
IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gcGl4ZWxTaXplSW5C
eXRlczsNCiAgICAgICAgICAgIGRhdGFJbi5wb3NpdGlvbiggdGVtcCApOw0KICAgICAgICAgICAg
ZXh0cmFjdC5leHRyYWN0KCBpc1N3YXAsIGRhdGFJbiwgZXh0cmFjdFRvdGFscyApOw0KICAgICAg
ICAgICAgZm9yKCBrID0gMDsgayA8IGNvbXBvbmVudHM7IGsrKyApIHsNCiAgICAgICAgICAgICAg
dG90YWxzW2tdICs9IGV4dHJhY3RUb3RhbHNba10gKiB5X3BlcmNlbnQ7DQogICAgICAgICAgICB9
DQogICAgICAgICAgfQ0KICAgICAgICAgIHRlbXAgKz0gcGl4ZWxTaXplSW5CeXRlczsNCiAgICAg
ICAgICByaWdodCA9IHRlbXA7DQogICAgICAgICAgcGVyY2VudCA9IHlfcGVyY2VudCAqIGhpZ2h4
X2Zsb2F0Ow0KICAgICAgICAgIGRhdGFJbi5wb3NpdGlvbiggdGVtcCApOw0KICAgICAgICAgIGV4
dHJhY3QuZXh0cmFjdCggaXNTd2FwLCBkYXRhSW4sIGV4dHJhY3RUb3RhbHMgKTsNCiAgICAgICAg
ICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgICAgdG90YWxz
W2tdICs9IGV4dHJhY3RUb3RhbHNba10gKiBwZXJjZW50Ow0KICAgICAgICAgIH0NCiAgICAgICAg
ICAvLyBjYWxjdWxhdGUgdGhlIHZhbHVlIGZvciBwaXhlbHMgaW4gdGhlIGxhc3Qgcm93DQogICAg
ICAgICAgDQogICAgICAgICAgeV9wZXJjZW50ID0gaGlnaHlfZmxvYXQ7DQogICAgICAgICAgcGVy
Y2VudCA9IHlfcGVyY2VudCAqICggMSAtIGxvd3hfZmxvYXQgKTsNCiAgICAgICAgICB0ZW1wID0g
eGluZGV4ICsgaGlnaHlfaW50ICogcm93U2l6ZUluQnl0ZXM7DQogICAgICAgICAgZGF0YUluLnBv
c2l0aW9uKCB0ZW1wICk7DQogICAgICAgICAgZXh0cmFjdC5leHRyYWN0KCBpc1N3YXAsIGRhdGFJ
biwgZXh0cmFjdFRvdGFscyApOw0KICAgICAgICAgIGZvciggayA9IDA7IGsgPCBjb21wb25lbnRz
OyBrKysgKSB7DQogICAgICAgICAgICB0b3RhbHNba10gKz0gZXh0cmFjdFRvdGFsc1trXSAqIHBl
cmNlbnQ7DQogICAgICAgICAgfQ0KICAgICAgICAgIGZvciggbCA9IGxvd3hfaW50ICsgMTsgbCA8
IGhpZ2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgdGVtcCArPSBwaXhlbFNpemVJbkJ5dGVz
Ow0KICAgICAgICAgICAgZGF0YUluLnBvc2l0aW9uKCB0ZW1wICk7DQogICAgICAgICAgICBleHRy
YWN0LmV4dHJhY3QoIGlzU3dhcCwgZGF0YUluLCBleHRyYWN0VG90YWxzICk7DQogICAgICAgICAg
ICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgICAgICB0b3Rh
bHNba10gKz0gZXh0cmFjdFRvdGFsc1trXSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICB9DQogICAgICAgICAgdGVtcCArPSBwaXhlbFNpemVJbkJ5dGVzOw0KICAgICAgICAg
IHBlcmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAgICBkYXRhSW4ucG9z
aXRpb24oIHRlbXAgKTsNCiAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysr
ICkgew0KICAgICAgICAgICAgdG90YWxzW2tdICs9IGV4dHJhY3RUb3RhbHNba10gKiBwZXJjZW50
Ow0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIHZh
bHVlIGZvciBwaXhlbHMgaW4gdGhlIDFzdCBhbmQgbGFzdCBjb2x1bW4NCiAgICAgICAgICBmb3Io
IG0gPSBsb3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7IG0rKyApIHsNCiAgICAgICAgICAgIGxl
ZnQgKz0gcm93U2l6ZUluQnl0ZXM7DQogICAgICAgICAgICByaWdodCArPSByb3dTaXplSW5CeXRl
czsNCiAgICAgICAgICAgIGRhdGFJbi5wb3NpdGlvbiggbGVmdCApOw0KICAgICAgICAgICAgZXh0
cmFjdC5leHRyYWN0KCBpc1N3YXAsIGRhdGFJbiwgZXh0cmFjdFRvdGFscyApOw0KICAgICAgICAg
ICAgZGF0YUluLnBvc2l0aW9uKCByaWdodCApOw0KICAgICAgICAgICAgZXh0cmFjdC5leHRyYWN0
KCBpc1N3YXAsIGRhdGFJbiwgZXh0cmFjdE1vcmVUb3RhbHMgKTsNCiAgICAgICAgICAgIGZvcigg
ayA9IDA7IGsgPCBjb21wb25lbnRzOyBrKysgKSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSAr
PSAoIGV4dHJhY3RUb3RhbHNba10gKiAoIDEgLSBsb3d4X2Zsb2F0ICkgKyBleHRyYWN0TW9yZVRv
dGFsc1trXSAqIGhpZ2h4X2Zsb2F0ICk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAg
ICAgICB9IGVsc2UgaWYoIGhpZ2h5X2ludCA+IGxvd3lfaW50ICkgew0KICAgICAgICAgIHhfcGVy
Y2VudCA9IGhpZ2h4X2Zsb2F0IC0gbG93eF9mbG9hdDsNCiAgICAgICAgICBwZXJjZW50ID0gKCAx
IC0gbG93eV9mbG9hdCApICogeF9wZXJjZW50Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyBs
b3d5X2ludCAqIHJvd1NpemVJbkJ5dGVzOw0KICAgICAgICAgIGRhdGFJbi5wb3NpdGlvbiggdGVt
cCApOw0KICAgICAgICAgIGV4dHJhY3QuZXh0cmFjdCggaXNTd2FwLCBkYXRhSW4sIGV4dHJhY3RU
b3RhbHMgKTsNCiAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0K
ICAgICAgICAgICAgdG90YWxzW2tdICs9IGV4dHJhY3RUb3RhbHNba10gKiBwZXJjZW50Ow0KICAg
ICAgICAgIH0NCiAgICAgICAgICBmb3IoIG0gPSBsb3d5X2ludCArIDE7IG0gPCBoaWdoeV9pbnQ7
IG0rKyApIHsNCiAgICAgICAgICAgIHRlbXAgKz0gcm93U2l6ZUluQnl0ZXM7DQogICAgICAgICAg
ICBkYXRhSW4ucG9zaXRpb24oIHRlbXAgKTsNCiAgICAgICAgICAgIGV4dHJhY3QuZXh0cmFjdCgg
aXNTd2FwLCBkYXRhSW4sIGV4dHJhY3RUb3RhbHMgKTsNCiAgICAgICAgICAgIGZvciggayA9IDA7
IGsgPCBjb21wb25lbnRzOyBrKysgKSB7DQogICAgICAgICAgICAgIHRvdGFsc1trXSArPSBleHRy
YWN0VG90YWxzW2tdICogeF9wZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAg
ICAgICAgICBwZXJjZW50ID0geF9wZXJjZW50ICogaGlnaHlfZmxvYXQ7DQogICAgICAgICAgdGVt
cCArPSByb3dTaXplSW5CeXRlczsNCiAgICAgICAgICBkYXRhSW4ucG9zaXRpb24oIHRlbXAgKTsN
CiAgICAgICAgICBleHRyYWN0LmV4dHJhY3QoIGlzU3dhcCwgZGF0YUluLCBleHRyYWN0VG90YWxz
ICk7DQogICAgICAgICAgZm9yKCBrID0gMDsgayA8IGNvbXBvbmVudHM7IGsrKyApIHsNCiAgICAg
ICAgICAgIHRvdGFsc1trXSArPSBleHRyYWN0VG90YWxzW2tdICogcGVyY2VudDsNCiAgICAgICAg
ICB9DQogICAgICAgIH0gZWxzZSBpZiggaGlnaHhfaW50ID4gbG93eF9pbnQgKSB7DQogICAgICAg
ICAgeV9wZXJjZW50ID0gaGlnaHlfZmxvYXQgLSBsb3d5X2Zsb2F0Ow0KICAgICAgICAgIHBlcmNl
bnQgPSAoIDEgLSBsb3d4X2Zsb2F0ICkgKiB5X3BlcmNlbnQ7DQogICAgICAgICAgdGVtcCA9IHhp
bmRleCArIGxvd3lfaW50ICogcm93U2l6ZUluQnl0ZXM7DQogICAgICAgICAgZGF0YUluLnBvc2l0
aW9uKCB0ZW1wICk7DQogICAgICAgICAgZXh0cmFjdC5leHRyYWN0KCBpc1N3YXAsIGRhdGFJbiwg
ZXh0cmFjdFRvdGFscyApOw0KICAgICAgICAgIGZvciggayA9IDA7IGsgPCBjb21wb25lbnRzOyBr
KysgKSB7DQogICAgICAgICAgICB0b3RhbHNba10gKz0gZXh0cmFjdFRvdGFsc1trXSAqIHBlcmNl
bnQ7DQogICAgICAgICAgfQ0KICAgICAgICAgIGZvciggbCA9IGxvd3hfaW50ICsgMTsgbCA8IGhp
Z2h4X2ludDsgbCsrICkgew0KICAgICAgICAgICAgdGVtcCArPSBwaXhlbFNpemVJbkJ5dGVzOw0K
ICAgICAgICAgICAgZGF0YUluLnBvc2l0aW9uKCB0ZW1wICk7DQogICAgICAgICAgICBleHRyYWN0
LmV4dHJhY3QoIGlzU3dhcCwgZGF0YUluLCBleHRyYWN0VG90YWxzICk7DQogICAgICAgICAgICBm
b3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgICAgICB0b3RhbHNb
a10gKz0gZXh0cmFjdFRvdGFsc1trXSAqIHlfcGVyY2VudDsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgICB9DQogICAgICAgICAgdGVtcCArPSBwaXhlbFNpemVJbkJ5dGVzOw0KICAgICAgICAgIHBl
cmNlbnQgPSB5X3BlcmNlbnQgKiBoaWdoeF9mbG9hdDsNCiAgICAgICAgICBkYXRhSW4ucG9zaXRp
b24oIHRlbXAgKTsNCiAgICAgICAgICBleHRyYWN0LmV4dHJhY3QoIGlzU3dhcCwgZGF0YUluLCBl
eHRyYWN0VG90YWxzICk7DQogICAgICAgICAgZm9yKCBrID0gMDsgayA8IGNvbXBvbmVudHM7IGsr
KyApIHsNCiAgICAgICAgICAgIHRvdGFsc1trXSArPSBleHRyYWN0VG90YWxzW2tdICogcGVyY2Vu
dDsNCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcGVyY2VudCA9ICgg
aGlnaHlfZmxvYXQgLSBsb3d5X2Zsb2F0ICkgKiAoIGhpZ2h4X2Zsb2F0IC0gbG93eF9mbG9hdCAp
Ow0KICAgICAgICAgIHRlbXAgPSB4aW5kZXggKyBsb3d5X2ludCAqIHJvd1NpemVJbkJ5dGVzOw0K
ICAgICAgICAgIGRhdGFJbi5wb3NpdGlvbiggdGVtcCApOw0KICAgICAgICAgIGV4dHJhY3QuZXh0
cmFjdCggaXNTd2FwLCBkYXRhSW4sIGV4dHJhY3RUb3RhbHMgKTsNCiAgICAgICAgICBmb3IoIGsg
PSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgICAgdG90YWxzW2tdICs9IGV4
dHJhY3RUb3RhbHNba10gKiBwZXJjZW50Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
ICANCiAgICAgICAgLy8gdGhpcyBpcyBmb3IgdGhlIHBpeGVscyBpbiB0aGUgYm9keQ0KICAgICAg
ICB0ZW1wMCA9IHhpbmRleCArIHBpeGVsU2l6ZUluQnl0ZXMgKyAoIGxvd3lfaW50ICsgMSApICog
cm93U2l6ZUluQnl0ZXM7DQogICAgICAgIGZvciggbSA9IGxvd3lfaW50ICsgMTsgbSA8IGhpZ2h5
X2ludDsgbSsrICkgew0KICAgICAgICAgIHRlbXAgPSB0ZW1wMDsNCiAgICAgICAgICBmb3IoIGwg
PSBsb3d4X2ludCArIDE7IGwgPCBoaWdoeF9pbnQ7IGwrKyApIHsNCiAgICAgICAgICAgIGRhdGFJ
bi5wb3NpdGlvbiggdGVtcCApOw0KICAgICAgICAgICAgZXh0cmFjdC5leHRyYWN0KCBpc1N3YXAs
IGRhdGFJbiwgZXh0cmFjdFRvdGFscyApOw0KICAgICAgICAgICAgZm9yKCBrID0gMDsgayA8IGNv
bXBvbmVudHM7IGsrKyApIHsNCiAgICAgICAgICAgICAgdG90YWxzW2tdICs9IGV4dHJhY3RUb3Rh
bHNba10gKiBwZXJjZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGVtcCArPSBwaXhl
bFNpemVJbkJ5dGVzOw0KICAgICAgICAgIH0NCiAgICAgICAgICB0ZW1wMCArPSByb3dTaXplSW5C
eXRlczsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgb3V0SW5kZXggPSAoIGogKyAoIGkg
KiB3aWR0aE91dCApICk7DQogICAgICAgIGZvciggayA9IDA7IGsgPCBjb21wb25lbnRzOyBrKysg
KSB7DQogICAgICAgICAgc2hvdmVUb3RhbHNba10gPSB0b3RhbHNba10gLyBhcmVhOw0KICAgICAg
ICB9DQogICAgICAgIGV4dHJhY3Quc2hvdmUoIHNob3ZlVG90YWxzLCBvdXRJbmRleCwgZGF0YU91
dCApOw0KICAgICAgICBsb3d4X2ludCA9IGhpZ2h4X2ludDsNCiAgICAgICAgbG93eF9mbG9hdCA9
IGhpZ2h4X2Zsb2F0Ow0KICAgICAgICBoaWdoeF9pbnQgKz0gY29udnhfaW50Ow0KICAgICAgICBo
aWdoeF9mbG9hdCArPSBjb252eF9mbG9hdDsNCiAgICAgICAgaWYoIGhpZ2h4X2Zsb2F0ID4gMS4w
ZiApIHsNCiAgICAgICAgICBoaWdoeF9mbG9hdCAtPSAxLjBmOw0KICAgICAgICAgIGhpZ2h4X2lu
dCsrOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQ2xhbXAgdG8gbWFrZSBzdXJlIHdlIGRvbid0
IHJ1biBvZmYgdGhlIHJpZ2h0IGVkZ2UNCiAgICAgICAgaWYgKGhpZ2h4X2ludCA+IHdpZHRoSW4g
LSAxKSB7DQogICAgICAgICAgaW50IGRlbHRhID0gKGhpZ2h4X2ludCAtIHdpZHRoSW4gKyAxKTsN
CiAgICAgICAgICBsb3d4X2ludCAtPSBkZWx0YTsNCiAgICAgICAgICBoaWdoeF9pbnQgLT0gZGVs
dGE7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGxvd3lfaW50ID0gaGlnaHlfaW50Ow0KICAg
ICAgbG93eV9mbG9hdCA9IGhpZ2h5X2Zsb2F0Ow0KICAgICAgaGlnaHlfaW50ICs9IGNvbnZ5X2lu
dDsNCiAgICAgIGhpZ2h5X2Zsb2F0ICs9IGNvbnZ5X2Zsb2F0Ow0KICAgICAgaWYoIGhpZ2h5X2Zs
b2F0ID4gMS4wZiApIHsNCiAgICAgICAgaGlnaHlfZmxvYXQgLT0gMS4wZjsNCiAgICAgICAgaGln
aHlfaW50Kys7DQogICAgICB9DQogICAgfQ0KICAgIGFzc2VydCggb3V0SW5kZXggPT0gKCB3aWR0
aE91dCAqIGhlaWdodE91dCAtIDEpICk7DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgdm9pZCBz
Y2FsZUludGVybmFsM0QoIGludCBjb21wb25lbnRzLCBpbnQgd2lkdGhJbiwgaW50IGhlaWdodElu
LA0KICAgICAgICAgIGludCBkZXB0aEluLCBTaG9ydEJ1ZmZlciBkYXRhSW4sIGludCB3aWR0aE91
dCwgaW50IGhlaWdodE91dCwNCiAgICAgICAgICBpbnQgZGVwdGhPdXQsIFNob3J0QnVmZmVyIGRh
dGFPdXQgKSB7DQogICAgZmxvYXQgeCwgbG93eCwgaGlnaHgsIGNvbnZ4LCBoYWxmY29udng7DQog
ICAgZmxvYXQgeSwgbG93eSwgaGlnaHksIGNvbnZ5LCBoYWxmY29udnk7DQogICAgZmxvYXQgeiwg
bG93eiwgaGlnaHosIGNvbnZ6LCBoYWxmY29udno7DQogICAgZmxvYXQgeHBlcmNlbnQsIHlwZXJj
ZW50LCB6cGVyY2VudDsNCiAgICBmbG9hdCBwZXJjZW50Ow0KICAgIC8vIG1heCBjb21wbmVudHMg
aW4gYSBmb3JtYXQgaXMgNA0KICAgIGZsb2F0W10gdG90YWxzID0gbmV3IGZsb2F0WzRdOw0KICAg
IGZsb2F0IHZvbHVtZTsNCiAgICBpbnQgaSwgaiwgZCwgaywgemludCwgeWludCwgeGludCwgeGlu
ZGV4LCB5aW5kZXgsIHppbmRleDsNCiAgICBpbnQgdGVtcDsNCiAgICANCiAgICBsb3d5ID0gaGln
aHkgPSBsb3d4ID0gaGlnaHggPSAwLjBmOw0KICAgIA0KICAgIGNvbnZ6ID0gKGZsb2F0KWRlcHRo
SW4gLyBkZXB0aE91dDsNCiAgICBjb252eSA9IChmbG9hdCloZWlnaHRJbiAvIGhlaWdodE91dDsN
CiAgICBjb252eCA9IChmbG9hdCl3aWR0aEluIC8gd2lkdGhPdXQ7DQogICAgaGFsZmNvbnZ6ID0g
Y29udnogLyAyLjBmOw0KICAgIGhhbGZjb252eSA9IGNvbnZ5IC8gMi4wZjsNCiAgICBoYWxmY29u
dnggPSBjb252eCAvIDIuMGY7DQogICAgZm9yKCBkID0gMDsgZCA8IGRlcHRoT3V0OyBkKysgKSB7
DQogICAgICB6ID0gY29udnogKiAoIGQgKyAwLjVmICk7DQogICAgICBpZiggZGVwdGhJbiA+IGRl
cHRoT3V0ICkgew0KICAgICAgICBoaWdoeiA9IHogKyBoYWxmY29udno7DQogICAgICAgIGxvd3og
PSB6IC0gaGFsZmNvbnZ6Ow0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaGlnaHogPSB6ICsgMC41
ZjsNCiAgICAgICAgbG93eiA9IHogLSAwLjVmOw0KICAgICAgfQ0KICAgICAgZm9yKCBpID0gMDsg
aSA8IGhlaWdodE91dDsgaSsrICkgew0KICAgICAgICB5ID0gY29udnkgKiAoIGkgKyAwLjVmICk7
DQogICAgICAgIGlmKCBoZWlnaHRJbiA+IGhlaWdodE91dCApIHsNCiAgICAgICAgICBoaWdoeiA9
IHkgKyBoYWxmY29udnk7DQogICAgICAgICAgbG93eiA9IHkgLSBoYWxmY29udnk7DQogICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgaGlnaHogPSB5ICsgMC41ZjsNCiAgICAgICAgICBsb3d6ID0g
eSAtIDAuNWY7DQogICAgICAgIH0NCiAgICAgICAgZm9yKCBqID0gMDsgaiA8IHdpZHRoT3V0OyBq
KysgKSB7DQogICAgICAgICAgeCA9IGNvbnZ4ICogKCBqICsgMC41ZiApOw0KICAgICAgICAgIGlm
KCBkZXB0aEluID4gZGVwdGhPdXQgKSB7DQogICAgICAgICAgICBoaWdoeiA9IHggKyBoYWxmY29u
dng7DQogICAgICAgICAgICBsb3d6ID0geCAtIGhhbGZjb252eDsNCiAgICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgaGlnaHogPSB4ICsgMC41ZjsNCiAgICAgICAgICAgIGxvd3ogPSB4IC0g
MC41ZjsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgLy8gT2ssIG5vdyBhcHBs
eSBib3ggZmlsdGVyIHRvIGJveCB0aGF0IGdvZXMgZnJvbSAoIGxvd3gsIGxvd3ksIGxvd3ogKQ0K
ICAgICAgICAgIC8vIHRvICggaGlnaHgsIGhpZ2h5LCBoaWdoeiApIG9uIGlucHV0IGRhdGEgaW50
byB0aGlzIHBpeGVsIG9uIG91dHB1dCBkYXRhDQogICAgICAgICAgDQogICAgICAgICAgdG90YWxz
WzBdID0gdG90YWxzWzFdID0gdG90YWxzWzJdID0gdG90YWxzWzNdID0gMC4wZjsNCiAgICAgICAg
ICB2b2x1bWUgPSAwLjBmOw0KICAgICAgICAgIA0KICAgICAgICAgIHogPSBsb3d6Ow0KICAgICAg
ICAgIHppbnQgPSAoaW50KShNYXRoLmZsb29yKCB6ICkgKTsNCiAgICAgICAgICB3aGlsZSggeiA8
IGhpZ2h6ICkgew0KICAgICAgICAgICAgemluZGV4ID0gKCB6aW50ICsgZGVwdGhJbiApICUgZGVw
dGhJbjsNCiAgICAgICAgICAgIGlmKCBoaWdoeiA8IHppbnQgKyAxICkgew0KICAgICAgICAgICAg
ICB6cGVyY2VudCA9IGhpZ2h6IC0gejsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg
ICAgIHpwZXJjZW50ID0gemludCArIDEgLSB6Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
DQogICAgICAgICAgICB5ID0gbG93eTsNCiAgICAgICAgICAgIHlpbnQgPSAoaW50KShNYXRoLmZs
b29yKCB5ICkgKTsNCiAgICAgICAgICAgIHdoaWxlKCB5IDwgaGlnaHkgKSB7DQogICAgICAgICAg
ICAgIHlpbmRleCA9ICggeWludCArIGhlaWdodEluICkgJSBoZWlnaHRJbjsNCiAgICAgICAgICAg
ICAgaWYoIGhpZ2h5IDwgeWludCArIDEgKSB7DQogICAgICAgICAgICAgICAgeXBlcmNlbnQgPSBo
aWdoeSAtIHk7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgeXBlcmNl
bnQgPSB5aW50ICsgMSAtIHk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgDQogICAg
ICAgICAgICAgIHggPSBsb3d4Ow0KICAgICAgICAgICAgICB4aW50ID0gKGludCkoTWF0aC5mbG9v
ciggeCApICk7DQogICAgICAgICAgICAgIA0KICAgICAgICAgICAgICB3aGlsZSggeCA8IGhpZ2h4
ICkgew0KICAgICAgICAgICAgICAgIHhpbmRleCA9ICh4aW50ICsgd2lkdGhJbiApICUgd2lkdGhJ
bjsNCiAgICAgICAgICAgICAgICBpZiggaGlnaHggPCB4aW50ICsgMSApIHsNCiAgICAgICAgICAg
ICAgICAgIHhwZXJjZW50ID0gaGlnaHggLSB4Ow0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgICAgICAgICB4cGVyY2VudCA9IHhpbnQgKyAxIC0geDsNCiAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgcGVyY2VudCA9IHhwZXJjZW50
ICogeXBlcmNlbnQgKiB6cGVyY2VudDsNCiAgICAgICAgICAgICAgICB2b2x1bWUgKz0gcGVyY2Vu
dDsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB0ZW1wID0gKHhpbmRleCArICgg
eWluZGV4ICp3aWR0aEluKSArICh6aW5kZXggKiB3aWR0aEluICpoZWlnaHRJbikpICogY29tcG9u
ZW50czsNCiAgICAgICAgICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkg
ew0KICAgICAgICAgICAgICAgICAgYXNzZXJ0KCAwIDw9ICh0ZW1wK2spICYmICh0ZW1wK2spIDwg
KHdpZHRoSW4gKiBoZWlnaHRJbiAqIGRlcHRoSW4gKiBjb21wb25lbnRzKSApOw0KICAgICAgICAg
ICAgICAgICAgdG90YWxzW2tdICs9IGRhdGFJbi5nZXQoIHRlbXAgKyBrICkgKiBwZXJjZW50Ow0K
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB4aW50Kys7DQogICAgICAgICAgICAg
ICAgeCA9IHhpbnQ7DQogICAgICAgICAgICAgIH0gLy8gd2hpbGUgeA0KICAgICAgICAgICAgICB5
aW50Kys7DQogICAgICAgICAgICAgIHkgPSB5aW50Ow0KICAgICAgICAgICAgfSAvLyB3aGlsZSB5
DQogICAgICAgICAgICB6aW50Kys7DQogICAgICAgICAgICB6ID0gemludDsNCiAgICAgICAgICB9
IC8vIHdoaWxlIHoNCiAgICAgICAgICANCiAgICAgICAgICB0ZW1wID0gKCBqICsgKCBpICogd2lk
dGhPdXQgKSArIChkICogd2lkdGhPdXQgKiBoZWlnaHRPdXQgKSApICogY29tcG9uZW50czsNCiAg
ICAgICAgICBmb3IoIGsgPSAwOyBrIDwgY29tcG9uZW50czsgaysrICkgew0KICAgICAgICAgICAg
Ly8gdG90YWxzIHNob3VsZCBiZSByb3VuZGVkIGluIHRoZSBjYXNlIG9mIGVubGFyZ2luZyBhbiBy
Z2IgcmFtcCB3aGVuIHRoZSB0eXBlIGlzIDMzMiBvciA0NDQ0DQogICAgICAgICAgICBhc3NlcnQo
IDAgPD0gKCB0ZW1wICsgayApICYmICggdGVtcCArIGsgKSA8ICh3aWR0aE91dCAqIGhlaWdodE91
dCogZGVwdGhPdXQgKiBjb21wb25lbnRzKSApOw0KICAgICAgICAgICAgZGF0YU91dC5wdXQoIHRl
bXAgKyBrLCAoc2hvcnQpKCh0b3RhbHNba10gKyAwLjVmKSAvIHZvbHVtZSApICk7DQogICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgc3RhdGlj
IGludCBnbHVTY2FsZUltYWdlM0QoIEdMIGdsLCBpbnQgZm9ybWF0LCBpbnQgd2lkdGhJbiwgaW50
IGhlaWdodEluLCANCiAgICAgICAgICBpbnQgZGVwdGhJbiwgaW50IHR5cGVJbiwgQnl0ZUJ1ZmZl
ciBkYXRhSW4sIGludCB3aWR0aE91dCwgaW50IGhlaWdodE91dCwgDQogICAgICAgICAgaW50IGRl
cHRoT3V0LCBpbnQgdHlwZU91dCwgQnl0ZUJ1ZmZlciBkYXRhT3V0ICkgew0KICAgIGludCBjb21w
b25lbnRzOw0KICAgIFNob3J0QnVmZmVyIGJlZm9yZUltYWdlLCBhZnRlckltYWdlOw0KICAgIFBp
eGVsU3RvcmFnZU1vZGVzIHBzbSA9IG5ldyBQaXhlbFN0b3JhZ2VNb2RlcygpOw0KICAgIA0KICAg
IGlmKCB3aWR0aEluID09IDAgfHwgaGVpZ2h0SW4gPT0gMCB8fCBkZXB0aEluID09IDAgfHwNCiAg
ICAgICAgICAgIHdpZHRoT3V0ID09IDAgfHwgaGVpZ2h0T3V0ID09IDAgfHwgZGVwdGhPdXQgPT0g
MCApIHsNCiAgICAgIHJldHVybiggMCApOw0KICAgIH0NCiAgICANCiAgICBpZiggd2lkdGhJbiA8
IDAgfHwgaGVpZ2h0SW4gPCAwIHx8IGRlcHRoSW4gPCAwIHx8DQogICAgICAgICAgICB3aWR0aE91
dCA8IDAgfHwgaGVpZ2h0T3V0IDwgMCB8fCBkZXB0aE91dCA8IDAgKSB7DQogICAgICByZXR1cm4o
IEdMVS5HTFVfSU5WQUxJRF9WQUxVRSApOw0KICAgIH0NCiAgICANCiAgICBpZiggIU1pcG1hcC5s
ZWdhbEZvcm1hdChmb3JtYXQpIHx8ICFNaXBtYXAubGVnYWxUeXBlKHR5cGVJbikgfHwgDQogICAg
ICAgICAgICAhTWlwbWFwLmxlZ2FsVHlwZSh0eXBlT3V0KSB8fCB0eXBlSW4gPT0gR0wuR0xfQklU
TUFQIHx8DQogICAgICAgICAgICB0eXBlT3V0ID09IEdMLkdMX0JJVE1BUCApIHsNCiAgICAgIHJl
dHVybiggR0xVLkdMVV9JTlZBTElEX0VOVU0gKTsNCiAgICB9DQogICAgDQogICAgaWYoICFNaXBt
YXAuaXNMZWdhbEZvcm1hdEZvclBhY2tlZFBpeGVsVHlwZSggZm9ybWF0LCB0eXBlSW4gKSApIHsN
CiAgICAgIHJldHVybiggR0xVLkdMVV9JTlZBTElEX09QRVJBVElPTiApOw0KICAgIH0NCiAgICAN
CiAgICBpZiggIU1pcG1hcC5pc0xlZ2FsRm9ybWF0Rm9yUGFja2VkUGl4ZWxUeXBlKCBmb3JtYXQs
IHR5cGVPdXQgKSApIHsNCiAgICAgIHJldHVybiggR0xVLkdMVV9JTlZBTElEX09QRVJBVElPTiAp
Ow0KICAgIH0NCiAgICANCiAgICB0cnkgew0KICAgIGJlZm9yZUltYWdlID0gQnl0ZUJ1ZmZlci5h
bGxvY2F0ZURpcmVjdCggTWlwbWFwLmltYWdlU2l6ZTNEKCB3aWR0aEluLCANCiAgICAgICAgICAg
IGhlaWdodEluLCBkZXB0aEluLCBmb3JtYXQsIEdMLkdMX1VOU0lHTkVEX1NIT1JUICkgKS5vcmRl
ciggDQogICAgICAgICAgICBCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSApLmFzU2hvcnRCdWZmZXIo
KTsNCiAgICBhZnRlckltYWdlID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCggTWlwbWFwLmlt
YWdlU2l6ZTNEKCB3aWR0aEluLCANCiAgICAgICAgICAgIGhlaWdodEluLCBkZXB0aEluLCBmb3Jt
YXQsIEdMLkdMX1VOU0lHTkVEX1NIT1JUICkgKS5vcmRlciggDQogICAgICAgICAgICBCeXRlT3Jk
ZXIubmF0aXZlT3JkZXIoKSApLmFzU2hvcnRCdWZmZXIoKTsNCiAgICB9IGNhdGNoKCBPdXRPZk1l
bW9yeUVycm9yIGVyciApIHsNCiAgICAgIHJldHVybiggR0xVLkdMVV9PVVRfT0ZfTUVNT1JZICk7
DQogICAgfQ0KICAgIE1pcG1hcC5yZXRyaWV2ZVN0b3JlTW9kZXMzRCggZ2wsIHBzbSApOw0KICAg
IA0KICAgIEltYWdlLmZpbGxJbWFnZTNEKCBwc20sIHdpZHRoSW4sIGhlaWdodEluLCBkZXB0aElu
LCBmb3JtYXQsIHR5cGVJbiwNCiAgICAgICAgICAgIE1pcG1hcC5pc19pbmRleCggZm9ybWF0ICks
IGRhdGFJbiwgYmVmb3JlSW1hZ2UgKTsNCiAgICBjb21wb25lbnRzID0gTWlwbWFwLmVsZW1lbnRz
X3Blcl9ncm91cCggZm9ybWF0LCAwICk7DQogICAgU2NhbGVJbnRlcm5hbC5zY2FsZUludGVybmFs
M0QoIGNvbXBvbmVudHMsIHdpZHRoSW4sIGhlaWdodEluLCBkZXB0aEluLA0KICAgICAgICAgICAg
YmVmb3JlSW1hZ2UsIHdpZHRoT3V0LCBoZWlnaHRPdXQsIGRlcHRoT3V0LCBhZnRlckltYWdlICk7
DQogICAgSW1hZ2UuZW1wdHlJbWFnZTNEKCBwc20sIHdpZHRoT3V0LCBoZWlnaHRPdXQsIGRlcHRo
T3V0LCBmb3JtYXQsIHR5cGVPdXQsDQogICAgICAgICAgICBNaXBtYXAuaXNfaW5kZXgoIGZvcm1h
dCApLCBhZnRlckltYWdlLCBkYXRhT3V0ICk7DQogICAgDQogICAgcmV0dXJuKCAwICk7DQogIH0N
Cn0NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>459</attachid>
            <date>2013-05-04 08:35:56 +0200</date>
            <delta_ts>2013-05-04 08:35:56 +0200</delta_ts>
            <desc>Updated testcase for Jogl 2.0</desc>
            <filename>Mipmap.java</filename>
            <type>text/x-java-source</type>
            <size>2091</size>
            <attacher name="Michael">michael.esemplare</attacher>
            
              <data encoding="base64">DQppbXBvcnQgamF2YS5hd3QuQm9yZGVyTGF5b3V0Ow0KaW1wb3J0IGphdmEuYXd0LkZyYW1lOw0K
aW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50Ow0KaW1wb3J0IGphdmEuYXd0LmV2ZW50
LldpbmRvd0xpc3RlbmVyOw0KaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoNCmltcG9ydCBq
YXZheC5tZWRpYS5vcGVuZ2wuR0xBdXRvRHJhd2FibGU7DQppbXBvcnQgamF2YXgubWVkaWEub3Bl
bmdsLkdMQ2FwYWJpbGl0aWVzOw0KaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTEV2ZW50TGlz
dGVuZXI7DQppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMUHJvZmlsZTsNCmltcG9ydCBqYXZh
eC5tZWRpYS5vcGVuZ2wuYXd0LkdMQ2FudmFzOw0KDQppbXBvcnQgY29tLmpvZ2FtcC5vcGVuZ2wu
dXRpbC50ZXh0dXJlLlRleHR1cmVJTzsNCg0KcHVibGljIGNsYXNzIE1pcG1hcCB7DQoNCglwdWJs
aWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uLA0KCQkJSU9FeGNlcHRpb24gew0KDQoJCVN5c3RlbS5zZXRQcm9wZXJ0eSgiam9n
bC50ZXh0dXJlLm5vbnBvdCIsICJ0cnVlIik7DQoJCQ0KCQlHTFByb2ZpbGUgZ2xwID0gR0xQcm9m
aWxlLmdldERlZmF1bHQoKTsNCgkJR0xDYXBhYmlsaXRpZXMgY2FwcyA9IG5ldyBHTENhcGFiaWxp
dGllcyhnbHApOw0KCQlmaW5hbCBHTENhbnZhcyBjYW52YXMgPSBuZXcgR0xDYW52YXMoY2Fwcyk7
DQoJCWZpbmFsIEZyYW1lIGZyYW1lID0gbmV3IEZyYW1lKCk7DQoJCWZyYW1lLnNldFNpemUoMjU2
LCAyNTYpOw0KCQlmcmFtZS5hZGQoY2FudmFzLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsNCgkJZnJh
bWUuYWRkTm90aWZ5KCk7DQoJCWZyYW1lLnNldFZpc2libGUodHJ1ZSk7DQoJCQ0KCQljYW52YXMu
YWRkR0xFdmVudExpc3RlbmVyKG5ldyBHTEV2ZW50TGlzdGVuZXIoKSB7DQoJCQkNCgkJCXB1Ymxp
YyB2b2lkIHJlc2hhcGUoR0xBdXRvRHJhd2FibGUgZHJhd2FibGUsIGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLA0KCQkJCQlpbnQgaGVpZ2h0KSB7DQoJCQl9DQoJCQkNCgkJCUBPdmVycmlkZQ0KCQkJ
cHVibGljIHZvaWQgaW5pdChHTEF1dG9EcmF3YWJsZSBkcmF3YWJsZSkgew0KCQkJCXRyeSB7DQoJ
CQkJCVRleHR1cmVJTy5uZXdUZXh0dXJlKGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRS
ZXNvdXJjZSgiY29tL2thYmxhYi9qb2dsL3Rlc3QvdGlja19ob3JfbWFqb3IucG5nIiksIHRydWUs
ICJwbmciKTsNCgkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KCQkJCQllLnByaW50U3RhY2tU
cmFjZSgpOw0KCQkJCX0gDQoJCQl9DQoJCQkNCgkJCUBPdmVycmlkZQ0KCQkJcHVibGljIHZvaWQg
ZGlzcG9zZShHTEF1dG9EcmF3YWJsZSBkcmF3YWJsZSkgew0KCQkJfQ0KCQkJDQoJCQlAT3ZlcnJp
ZGUNCgkJCXB1YmxpYyB2b2lkIGRpc3BsYXkoR0xBdXRvRHJhd2FibGUgZHJhd2FibGUpIHsNCgkJ
CX0NCgkJfSk7DQoJCQ0KCQlmcmFtZS5hZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93TGlzdGVu
ZXIoKSB7DQoJCQkNCgkJCUBPdmVycmlkZQ0KCQkJcHVibGljIHZvaWQgd2luZG93T3BlbmVkKFdp
bmRvd0V2ZW50IGUpIHsNCgkJCX0NCgkJCQ0KCQkJQE92ZXJyaWRlDQoJCQlwdWJsaWMgdm9pZCB3
aW5kb3dJY29uaWZpZWQoV2luZG93RXZlbnQgZSkgew0KCQkJfQ0KCQkJDQoJCQlAT3ZlcnJpZGUN
CgkJCXB1YmxpYyB2b2lkIHdpbmRvd0RlaWNvbmlmaWVkKFdpbmRvd0V2ZW50IGUpIHsNCgkJCX0N
CgkJCQ0KCQkJQE92ZXJyaWRlDQoJCQlwdWJsaWMgdm9pZCB3aW5kb3dEZWFjdGl2YXRlZChXaW5k
b3dFdmVudCBlKSB7DQoJCQl9DQoJCQkNCgkJCUBPdmVycmlkZQ0KCQkJcHVibGljIHZvaWQgd2lu
ZG93Q2xvc2luZyhXaW5kb3dFdmVudCBlKSB7DQoJCQkJZS5nZXRXaW5kb3coKS5kaXNwb3NlKCk7
DQoJCQl9DQoJCQkNCgkJCXB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NlZChXaW5kb3dFdmVudCBlKSB7
DQoJCQl9DQoJCQkNCgkJCUBPdmVycmlkZQ0KCQkJcHVibGljIHZvaWQgd2luZG93QWN0aXZhdGVk
KFdpbmRvd0V2ZW50IGUpIHsNCgkJCX0NCgkJfSk7DQoJfQ0KDQp9
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>508</attachid>
            <date>2013-10-07 09:25:37 +0200</date>
            <delta_ts>2013-10-07 09:25:37 +0200</delta_ts>
            <desc>TestCase for ScaleInternal Problem</desc>
            <filename>TestBug365TextureGenerateMipMaps.java</filename>
            <type>text/x-java</type>
            <size>8539</size>
            <attacher name="Michael">michael.esemplare</attacher>
            
              <data encoding="base64">cGFja2FnZSBjb20uam9nYW1wLm9wZW5nbC50ZXN0Lmp1bml0LmpvZ2wuZ2x1Ow0KDQppbXBvcnQg
amF2YS5uaW8uQnl0ZUJ1ZmZlcjsNCg0KaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTDI7DQpp
bXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMQ2FwYWJpbGl0aWVzOw0KaW1wb3J0IGphdmF4Lm1l
ZGlhLm9wZW5nbC5HTENvbnRleHQ7DQppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMRHJhd2Fi
bGVGYWN0b3J5Ow0KaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTE9mZnNjcmVlbkF1dG9EcmF3
YWJsZTsNCmltcG9ydCBqYXZheC5tZWRpYS5vcGVuZ2wuR0xQcm9maWxlOw0KDQppbXBvcnQgb3Jn
Lmp1bml0LkFmdGVyQ2xhc3M7DQppbXBvcnQgb3JnLmp1bml0LkFzc2VydDsNCmltcG9ydCBvcmcu
anVuaXQuQmVmb3JlQ2xhc3M7DQppbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQoNCmltcG9ydCBqb2dh
bXAub3BlbmdsLmdsdS5taXBtYXAuTWlwbWFwOw0KaW1wb3J0IGpvZ2FtcC5vcGVuZ2wuZ2x1Lm1p
cG1hcC5TY2FsZUludGVybmFsOw0KDQppbXBvcnQgY29tLmpvZ2FtcC5jb21tb24ubmlvLkJ1ZmZl
cnM7DQppbXBvcnQgY29tLmpvZ2FtcC5vcGVuZ2wudXRpbC50ZXh0dXJlLlRleHR1cmU7DQppbXBv
cnQgY29tLmpvZ2FtcC5vcGVuZ2wudXRpbC50ZXh0dXJlLlRleHR1cmVEYXRhOw0KaW1wb3J0IGNv
bS5qb2dhbXAub3BlbmdsLnV0aWwudGV4dHVyZS5UZXh0dXJlSU87DQoNCi8qKg0KICogVGhpcyB0
ZXN0IGNyZWF0ZXMgYSB7QGxpbmsgVGV4dHVyZX0gZnJvbSB7QGxpbmsgVGV4dHVyZURhdGF9IG9m
IHZhcmlvdXMgcGl4ZWwgZm9ybWF0cw0KICogYW5kIHBpeGVsIHR5cGVzIHdpdGggYXV0byBnZW5l
cmF0ZSBtaXBtYXBzIHNldCB0byB7QGNvZGUgdHJ1ZX0uDQogKiA8YnI+PC9icj4NCiAqIEJ1ZyBS
ZWZlcmVuY2U6IGh0dHBzOi8vam9nYW1wLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MzY1
DQogKiA8YnI+PC9icj4NCiAqIFRoZSBidWcgcGVydGFpbnMgdG8gbWlwbWFwIGdlbmVyYXRpb24g
ZnJvbSBhIFRleHR1cmUgYW5kIGV4aXN0cyBpbiB7QGxpbmsgU2NhbGVJbnRlcm5hbH0gDQogKiB3
aGVyZSBhIHtAbGluayBqYXZhLm5pby5CdWZmZXJVbmRlcmZsb3dFeGNlcHRpb259IGlzIHRocm93
bi4NCiAqIDxicj48L2JyPg0KICogPHVsPlRoaXMgc3VpdGUgb2YgdGVzdCBjYXNlcyB0ZXN0Og0K
ICogPGxpPntAbGluayBTY2FsZUludGVybmFsI3NjYWxlX2ludGVybmFsX3VieXRlKGludCwgaW50
LCBpbnQsIEJ5dGVCdWZmZXIsIGludCwgaW50LCBCeXRlQnVmZmVyLCBpbnQsIGludCwgaW50KX08
L2xpPg0KICogPGxpPntAbGluayBTY2FsZUludGVybmFsI3NjYWxlX2ludGVybmFsX2J5dGUoaW50
LCBpbnQsIGludCwgQnl0ZUJ1ZmZlciwgaW50LCBpbnQsIEJ5dGVCdWZmZXIsIGludCwgaW50LCBp
bnQpfTwvbGk+DQogKiA8bGk+e0BsaW5rIFNjYWxlSW50ZXJuYWwjc2NhbGVfaW50ZXJuYWxfdXNo
b3J0KGludCwgaW50LCBpbnQsIEJ5dGVCdWZmZXIsIGludCwgaW50LCBqYXZhLm5pby5TaG9ydEJ1
ZmZlciwgaW50LCBpbnQsIGludCwgYm9vbGVhbil9PC9saT4NCiAqIDxsaT57QGxpbmsgU2NhbGVJ
bnRlcm5hbCNzY2FsZV9pbnRlcm5hbF9zaG9ydChpbnQsIGludCwgaW50LCBCeXRlQnVmZmVyLCBp
bnQsIGludCwgamF2YS5uaW8uU2hvcnRCdWZmZXIsIGludCwgaW50LCBpbnQsIGJvb2xlYW4pfTwv
bGk+DQogKiA8bGk+e0BsaW5rIFNjYWxlSW50ZXJuYWwjc2NhbGVfaW50ZXJuYWxfdWludChpbnQs
IGludCwgaW50LCBCeXRlQnVmZmVyLCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBpbnQs
IGludCwgaW50LCBib29sZWFuKX08L2xpPg0KICogPGxpPntAbGluayBTY2FsZUludGVybmFsI3Nj
YWxlX2ludGVybmFsX2ludChpbnQsIGludCwgaW50LCBCeXRlQnVmZmVyLCBpbnQsIGludCwgamF2
YS5uaW8uSW50QnVmZmVyLCBpbnQsIGludCwgaW50LCBib29sZWFuKX08L2xpPg0KICogPGxpPntA
bGluayBTY2FsZUludGVybmFsI3NjYWxlX2ludGVybmFsX2Zsb2F0KGludCwgaW50LCBpbnQsIEJ5
dGVCdWZmZXIsIGludCwgaW50LCBqYXZhLm5pby5GbG9hdEJ1ZmZlciwgaW50LCBpbnQsIGludCwg
Ym9vbGVhbil9PC9saT4NCiAqIDwvdWw+DQogKiANCiAqIEBhdXRob3IgTWljaGFlbCBFc2VtcGxh
cmUNCiAqDQogKi8NCnB1YmxpYyBjbGFzcyBUZXN0QnVnMzY1VGV4dHVyZUdlbmVyYXRlTWlwTWFw
cyB7DQoJc3RhdGljIEdMT2Zmc2NyZWVuQXV0b0RyYXdhYmxlIGRyYXdhYmxlOw0KCQ0KCUBCZWZv
cmVDbGFzcw0KICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cCgpIHRocm93cyBUaHJvd2FibGUg
ew0KCQkvLyBkaXNhYmxlTlBPVA0KCQlTeXN0ZW0uc2V0UHJvcGVydHkoImpvZ2wudGV4dHVyZS5u
b25wb3QiLCAidHJ1ZSIpOw0KICAgICAgICB0cnkgew0KICAgICAgICAJc2V0VXBPZmZzY3JlZW5B
dXRvRHJhd2FibGUoKTsNCiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsNCiAgICAgICAg
ICAgIHRocm93IHQ7DQogICAgICAgIH0NCiAgICB9DQoJDQogICAgQEFmdGVyQ2xhc3MNCiAgICBw
dWJsaWMgc3RhdGljIHZvaWQgdGVhcmRvd24oKSB7DQogICAgICAgIHRlYXJEb3duT2Zmc2NyZWVu
QXV0b0RyYXdhYmxlKCk7DQogICAgfQ0KICAgIA0KICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0
VXBPZmZzY3JlZW5BdXRvRHJhd2FibGUoKSB0aHJvd3MgVGhyb3dhYmxlIHsNCiAgICAJR0xQcm9m
aWxlIGdscCA9IEdMUHJvZmlsZS5nZXREZWZhdWx0KCk7DQoJCUdMQ2FwYWJpbGl0aWVzIGNhcHMg
PSBuZXcgR0xDYXBhYmlsaXRpZXMoZ2xwKTsNCgkJDQoJCUdMRHJhd2FibGVGYWN0b3J5IGZhY3Rv
cnkgPSBHTERyYXdhYmxlRmFjdG9yeS5nZXRGYWN0b3J5KGdscCk7DQoJCQ0KCQkvLyBNYWtlIGEg
ZHJhd2FibGUgdG8gZ2V0IGFuIG9mZnNjcmVlbiBjb250ZXh0DQoJICAgIGRyYXdhYmxlID0gZmFj
dG9yeS5jcmVhdGVPZmZzY3JlZW5BdXRvRHJhd2FibGUobnVsbCwgY2FwcywgbnVsbCwgMiwgMiwg
bnVsbCk7DQoJICAgIA0KCSAgICBkcmF3YWJsZS5zZXRSZWFsaXplZCh0cnVlKTsNCg0KCSAgICBH
TENvbnRleHQgZ2xDb250ZXh0ID0gZHJhd2FibGUuZ2V0Q29udGV4dCgpOw0KCSAgICB0cnkgew0K
CSAgICAJQXNzZXJ0LmFzc2VydFRydWUoIkNvdWxkIG5vdCBtYWtlIGNvbnRleHQgY3VycmVudCIs
IEdMQ29udGV4dC5DT05URVhUX05PVF9DVVJSRU5UIDwgZ2xDb250ZXh0Lm1ha2VDdXJyZW50KCkp
Ow0KCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgew0KCSAgICAJdGVhckRvd25PZmZzY3JlZW5B
dXRvRHJhd2FibGUoKTsNCiAgICAgICAgICAgIHRocm93IHQ7DQogICAgICAgIH0NCiAgICB9DQog
ICAgDQogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0ZWFyRG93bk9mZnNjcmVlbkF1dG9EcmF3YWJs
ZSgpIHsNCiAgICAgICAgaWYoZHJhd2FibGUgIT0gbnVsbCkgew0KICAgICAgICAJZHJhd2FibGUu
Z2V0Q29udGV4dCgpLnJlbGVhc2UoKTsNCiAgICAgICAgCWRyYXdhYmxlLmRlc3Ryb3koKTsNCgkg
ICAgCWRyYXdhYmxlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBwcml2YXRl
IHN0YXRpYyB2b2lkIHRlc3RUZXh0dXJlTWlwTWFwR2VuZXJhdGlvbihpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IHBpeGVsVHlwZSkgew0KCQlpbnQgaW50ZXJuYWxG
b3JtYXQgPSBwaXhlbEZvcm1hdDsNCgkJaW50IGJvcmRlciA9IDA7DQoJCWJvb2xlYW4gbWlwbWFw
ID0gdHJ1ZTsNCgkJYm9vbGVhbiBkYXRhSXNDb21wcmVzc2VkID0gZmFsc2U7DQoJCWJvb2xlYW4g
bXVzdEZsaXBWZXJ0aWNhbGx5ID0gZmFsc2U7DQoJCQ0KCQlpbnQgbWVtUmVxID0gTWlwbWFwLmlt
YWdlX3NpemUoIHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUgKTsNCgkJQnl0
ZUJ1ZmZlciBidWZmZXIgPSBCdWZmZXJzLm5ld0RpcmVjdEJ5dGVCdWZmZXIoIG1lbVJlcSApOw0K
CQkNCgkJVGV4dHVyZURhdGEgZGF0YSA9IG5ldyBUZXh0dXJlRGF0YShkcmF3YWJsZS5nZXRHTFBy
b2ZpbGUoKSwgDQoJCQkJaW50ZXJuYWxGb3JtYXQsIA0KCQkJCXdpZHRoLCANCgkJCQloZWlnaHQs
IA0KCQkJCWJvcmRlciwgDQoJCQkJcGl4ZWxGb3JtYXQsIA0KCQkJCXBpeGVsVHlwZSwgDQoJCQkJ
bWlwbWFwLCANCgkJCQlkYXRhSXNDb21wcmVzc2VkLCANCgkJCQltdXN0RmxpcFZlcnRpY2FsbHks
IA0KCQkJCWJ1ZmZlciwgDQoJCQkJbnVsbCk7DQoJCQ0KCQlUZXh0dXJlIHRleHR1cmUgPSBUZXh0
dXJlSU8ubmV3VGV4dHVyZShkcmF3YWJsZS5nZXRHTCgpLCBkYXRhKTsNCgkJLy8gQ2xlYW51cA0K
CQl0ZXh0dXJlLmRlc3Ryb3koZHJhd2FibGUuZ2V0R0woKSk7DQoJCWRhdGEuZGVzdHJveSgpOw0K
CQlidWZmZXIuY2xlYXIoKTsNCgkJYnVmZmVyID0gbnVsbDsNCiAgICB9DQogICAgDQogICAgQFRl
c3QNCiAgICBwdWJsaWMgdm9pZCB0ZXN0MDBfTWlwTWFwX1NjYWxlSW50ZXJuYWxfUkdCX1VCWVRF
ICgpIHsNCiAgICAJaW50IHdpZHRoID0gMTsNCiAgICAJaW50IGhlaWdodCA9IDc7DQogICAgCWlu
dCBwaXhlbEZvcm1hdCA9IEdMMi5HTF9SR0I7DQogICAgCWludCBwaXhlbFR5cGUgPSBHTDIuR0xf
VU5TSUdORURfQllURTsNCiAgICAJDQogICAgCXRlc3RUZXh0dXJlTWlwTWFwR2VuZXJhdGlvbih3
aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlKTsNCiAgICB9DQogICAgDQogICAg
QFRlc3QNCiAgICBwdWJsaWMgdm9pZCB0ZXN0MDFfTWlwTWFwX1NjYWxlSW50ZXJuYWxfUkdCQV9V
QllURSAoKSB7DQogICAgCWludCB3aWR0aCA9IDE7DQogICAgCWludCBoZWlnaHQgPSA3Ow0KICAg
IAlpbnQgcGl4ZWxGb3JtYXQgPSBHTDIuR0xfUkdCQTsNCiAgICAJaW50IHBpeGVsVHlwZSA9IEdM
Mi5HTF9VTlNJR05FRF9CWVRFOw0KICAgIAkNCiAgICAJdGVzdFRleHR1cmVNaXBNYXBHZW5lcmF0
aW9uKHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUpOw0KICAgIH0NCiAgICAN
CiAgICBAVGVzdA0KICAgIHB1YmxpYyB2b2lkIHRlc3QwMl9NaXBNYXBfU2NhbGVJbnRlcm5hbF9S
R0JfQllURSAoKSB7DQogICAgCWludCB3aWR0aCA9IDE7DQogICAgCWludCBoZWlnaHQgPSA3Ow0K
ICAgIAlpbnQgcGl4ZWxGb3JtYXQgPSBHTDIuR0xfUkdCOw0KICAgIAlpbnQgcGl4ZWxUeXBlID0g
R0wyLkdMX0JZVEU7DQogICAgCQ0KICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24od2lk
dGgsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KICAgIA0KICAgIEBU
ZXN0DQogICAgcHVibGljIHZvaWQgdGVzdDAzX01pcE1hcF9TY2FsZUludGVybmFsX1JHQkFfQllU
RSAoKSB7DQogICAgCWludCB3aWR0aCA9IDE7DQogICAgCWludCBoZWlnaHQgPSA3Ow0KICAgIAlp
bnQgcGl4ZWxGb3JtYXQgPSBHTDIuR0xfUkdCQTsNCiAgICAJaW50IHBpeGVsVHlwZSA9IEdMMi5H
TF9CWVRFOw0KICAgIAkNCiAgICAJdGVzdFRleHR1cmVNaXBNYXBHZW5lcmF0aW9uKHdpZHRoLCBo
ZWlnaHQsIHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUpOw0KICAgIH0NCiAgICANCiAgICBAVGVzdA0K
ICAgIHB1YmxpYyB2b2lkIHRlc3QwNF9NaXBNYXBfU2NhbGVJbnRlcm5hbF9SR0JfVVNIT1JUICgp
IHsNCiAgICAJaW50IHdpZHRoID0gMTsNCiAgICAJaW50IGhlaWdodCA9IDc7DQogICAgCWludCBw
aXhlbEZvcm1hdCA9IEdMMi5HTF9SR0I7DQogICAgCWludCBwaXhlbFR5cGUgPSBHTDIuR0xfVU5T
SUdORURfU0hPUlQ7DQogICAgCQ0KICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24od2lk
dGgsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KICAgIA0KICAgIEBU
ZXN0DQogICAgcHVibGljIHZvaWQgdGVzdDA1X01pcE1hcF9TY2FsZUludGVybmFsX1JHQkFfVVNI
T1JUICgpIHsNCiAgICAJaW50IHdpZHRoID0gMTsNCiAgICAJaW50IGhlaWdodCA9IDc7DQogICAg
CWludCBwaXhlbEZvcm1hdCA9IEdMMi5HTF9SR0JBOw0KICAgIAlpbnQgcGl4ZWxUeXBlID0gR0wy
LkdMX1VOU0lHTkVEX1NIT1JUOw0KICAgIAkNCiAgICAJdGVzdFRleHR1cmVNaXBNYXBHZW5lcmF0
aW9uKHdpZHRoLCBoZWlnaHQsIHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUpOw0KICAgIH0NCiAgICAN
CiAgICBAVGVzdA0KICAgIHB1YmxpYyB2b2lkIHRlc3QwNl9NaXBNYXBfU2NhbGVJbnRlcm5hbF9S
R0JfU0hPUlQgKCkgew0KICAgIAlpbnQgd2lkdGggPSAxOw0KICAgIAlpbnQgaGVpZ2h0ID0gNzsN
CiAgICAJaW50IHBpeGVsRm9ybWF0ID0gR0wyLkdMX1JHQjsNCiAgICAJaW50IHBpeGVsVHlwZSA9
IEdMMi5HTF9TSE9SVDsNCiAgICAJDQogICAgCXRlc3RUZXh0dXJlTWlwTWFwR2VuZXJhdGlvbih3
aWR0aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlKTsNCiAgICB9DQogICAgDQogICAg
QFRlc3QNCiAgICBwdWJsaWMgdm9pZCB0ZXN0MDdfTWlwTWFwX1NjYWxlSW50ZXJuYWxfUkdCQV9T
SE9SVCAoKSB7DQogICAgCWludCB3aWR0aCA9IDE7DQogICAgCWludCBoZWlnaHQgPSA3Ow0KICAg
IAlpbnQgcGl4ZWxGb3JtYXQgPSBHTDIuR0xfUkdCQTsNCiAgICAJaW50IHBpeGVsVHlwZSA9IEdM
Mi5HTF9TSE9SVDsNCiAgICAJDQogICAgCXRlc3RUZXh0dXJlTWlwTWFwR2VuZXJhdGlvbih3aWR0
aCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlKTsNCiAgICB9DQogICAgDQogICAgQFRl
c3QNCiAgICBwdWJsaWMgdm9pZCB0ZXN0MDhfTWlwTWFwX1NjYWxlSW50ZXJuYWxfUkdCX1VJTlQg
KCkgew0KICAgIAlpbnQgd2lkdGggPSAxOw0KICAgIAlpbnQgaGVpZ2h0ID0gNzsNCiAgICAJaW50
IHBpeGVsRm9ybWF0ID0gR0wyLkdMX1JHQjsNCiAgICAJaW50IHBpeGVsVHlwZSA9IEdMMi5HTF9V
TlNJR05FRF9JTlQ7DQogICAgCQ0KICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24od2lk
dGgsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KICAgIA0KICAgIEBU
ZXN0DQogICAgcHVibGljIHZvaWQgdGVzdDA5X01pcE1hcF9TY2FsZUludGVybmFsX1JHQkFfVUlO
VCAoKSB7DQogICAgCWludCB3aWR0aCA9IDE7DQogICAgCWludCBoZWlnaHQgPSA3Ow0KICAgIAlp
bnQgcGl4ZWxGb3JtYXQgPSBHTDIuR0xfUkdCQTsNCiAgICAJaW50IHBpeGVsVHlwZSA9IEdMMi5H
TF9VTlNJR05FRF9JTlQ7DQogICAgCQ0KICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24o
d2lkdGgsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KICAgIA0KICAg
IEBUZXN0DQogICAgcHVibGljIHZvaWQgdGVzdDEwX01pcE1hcF9TY2FsZUludGVybmFsX1JHQl9J
TlQgKCkgew0KICAgIAlpbnQgd2lkdGggPSAxOw0KICAgIAlpbnQgaGVpZ2h0ID0gNzsNCiAgICAJ
aW50IHBpeGVsRm9ybWF0ID0gR0wyLkdMX1JHQjsNCiAgICAJaW50IHBpeGVsVHlwZSA9IEdMMi5H
TF9JTlQ7DQogICAgCQ0KICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24od2lkdGgsIGhl
aWdodCwgcGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KICAgIA0KICAgIEBUZXN0DQog
ICAgcHVibGljIHZvaWQgdGVzdDExX01pcE1hcF9TY2FsZUludGVybmFsX1JHQkFfSU5UICgpIHsN
CiAgICAJaW50IHdpZHRoID0gMTsNCiAgICAJaW50IGhlaWdodCA9IDc7DQogICAgCWludCBwaXhl
bEZvcm1hdCA9IEdMMi5HTF9SR0JBOw0KICAgIAlpbnQgcGl4ZWxUeXBlID0gR0wyLkdMX0lOVDsN
CiAgICAJDQogICAgCXRlc3RUZXh0dXJlTWlwTWFwR2VuZXJhdGlvbih3aWR0aCwgaGVpZ2h0LCBw
aXhlbEZvcm1hdCwgcGl4ZWxUeXBlKTsNCiAgICB9DQogICAgDQogICAgQFRlc3QNCiAgICBwdWJs
aWMgdm9pZCB0ZXN0MTJfTWlwTWFwX1NjYWxlSW50ZXJuYWxfUkdCX0ZMT0FUICgpIHsNCiAgICAJ
aW50IHdpZHRoID0gMTsNCiAgICAJaW50IGhlaWdodCA9IDc7DQogICAgCWludCBwaXhlbEZvcm1h
dCA9IEdMMi5HTF9SR0I7DQogICAgCWludCBwaXhlbFR5cGUgPSBHTDIuR0xfRkxPQVQ7DQogICAg
CQ0KICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24od2lkdGgsIGhlaWdodCwgcGl4ZWxG
b3JtYXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KICAgIA0KICAgIEBUZXN0DQogICAgcHVibGljIHZv
aWQgdGVzdDEzX01pcE1hcF9TY2FsZUludGVybmFsX1JHQkFfRkxPQVQgKCkgew0KICAgIAlpbnQg
d2lkdGggPSAxOw0KICAgIAlpbnQgaGVpZ2h0ID0gNzsNCiAgICAJaW50IHBpeGVsRm9ybWF0ID0g
R0wyLkdMX1JHQkE7DQogICAgCWludCBwaXhlbFR5cGUgPSBHTDIuR0xfRkxPQVQ7DQogICAgCQ0K
ICAgIAl0ZXN0VGV4dHVyZU1pcE1hcEdlbmVyYXRpb24od2lkdGgsIGhlaWdodCwgcGl4ZWxGb3Jt
YXQsIHBpeGVsVHlwZSk7DQogICAgfQ0KDQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5n
W10gYXJncykgew0KCQlvcmcuanVuaXQucnVubmVyLkpVbml0Q29yZS5tYWluKFRlc3RCdWczNjVU
ZXh0dXJlR2VuZXJhdGVNaXBNYXBzLmNsYXNzLmdldE5hbWUoKSk7DQoJfQ0KfQ==
</data>

          </attachment>
      

    </bug>

</bugzilla>