Improved and beautified the rich text display of the documentation viewer some more.

Sat, 21 Oct 2017 15:18:15 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 21 Oct 2017 15:18:15 +0200
changeset 5919
d0de2b378b24
parent 5918
d89cd224dd1b
child 5920
e47dd106c3d6

Improved and beautified the rich text display of the documentation viewer some more.

Preferences/ConfigurationPages/EditorDocViewerPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorDocViewerPage.ui file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
UI/CodeDocumentationViewer.py file | annotate | diff | comparison | revisions
UI/CodeDocumentationViewerTemplate.py file | annotate | diff | comparison | revisions
UI/data/codeDocumentationViewer_rc.py file | annotate | diff | comparison | revisions
UI/data/documentViewerStyle.css file | annotate | diff | comparison | revisions
--- a/Preferences/ConfigurationPages/EditorDocViewerPage.py	Sat Oct 21 15:13:56 2017 +0200
+++ b/Preferences/ConfigurationPages/EditorDocViewerPage.py	Sat Oct 21 15:18:15 2017 +0200
@@ -37,8 +37,10 @@
             self.providerComboBox.addItem(text, provider)
         
         # set initial values
+        self.parenthesisCheckBox.setChecked(
+            Preferences.getDocuViewer("ShowInfoOnOpenParenthesis"))
         self.richTextCheckBox.setChecked(
-            Preferences.getDocuViewer("ShowInfoAsMarkdown"))
+            Preferences.getDocuViewer("ShowInfoAsRichText"))
         
         provider = Preferences.getDocuViewer("Provider")
         self.viewerGroupBox.setChecked(provider != "disabled")
@@ -54,7 +56,11 @@
         enabled = self.viewerGroupBox.isChecked()
         if enabled:
             Preferences.setDocuViewer(
-                "ShowInfoAsMarkdown", self.richTextCheckBox.isChecked())
+                "ShowInfoOnOpenParenthesis",
+                self.parenthesisCheckBox.isChecked())
+            Preferences.setDocuViewer(
+                "ShowInfoAsRichText",
+                self.richTextCheckBox.isChecked())
             Preferences.setDocuViewer(
                 "Provider",
                 self.providerComboBox.itemData(
--- a/Preferences/ConfigurationPages/EditorDocViewerPage.ui	Sat Oct 21 15:13:56 2017 +0200
+++ b/Preferences/ConfigurationPages/EditorDocViewerPage.ui	Sat Oct 21 15:18:15 2017 +0200
@@ -44,6 +44,16 @@
      </property>
      <layout class="QVBoxLayout" name="verticalLayout">
       <item>
+       <widget class="QCheckBox" name="parenthesisCheckBox">
+        <property name="toolTip">
+         <string>Select to show documentation when entering a '(' character</string>
+        </property>
+        <property name="text">
+         <string>Show documentation upon '('</string>
+        </property>
+       </widget>
+      </item>
+      <item>
        <widget class="QCheckBox" name="richTextCheckBox">
         <property name="toolTip">
          <string>Select to show code documentation as rich text</string>
@@ -100,6 +110,7 @@
  </widget>
  <tabstops>
   <tabstop>viewerGroupBox</tabstop>
+  <tabstop>parenthesisCheckBox</tabstop>
   <tabstop>richTextCheckBox</tabstop>
   <tabstop>providerComboBox</tabstop>
  </tabstops>
--- a/Preferences/__init__.py	Sat Oct 21 15:13:56 2017 +0200
+++ b/Preferences/__init__.py	Sat Oct 21 15:18:15 2017 +0200
@@ -429,9 +429,6 @@
         "CallTipsScintillaOnFail": False,
         # show QScintilla calltips, if plug-in fails
         
-        "ShowInfoOnOpenParenthesis": True,
-        # TODO: add to editor configuration page
-        
         "AutoCheckSyntax": True,
         "OnlineSyntaxCheck": True,
         "OnlineSyntaxCheckInterval": 5,
@@ -1467,8 +1464,9 @@
     
     # defaults for Code Documentation Viewer
     docuViewerDefaults = {
-        "ShowInfoAsMarkdown": False,
+        "ShowInfoAsRichText": False,
         "Provider": "disabled",
+        "ShowInfoOnOpenParenthesis": True,
     }
 
 
@@ -3576,7 +3574,7 @@
     @param prefClass preferences class used as the storage area
     @return the requested editor colour
     """
-    if key in ["ShowInfoAsMarkdown"]:
+    if key in ["ShowInfoAsRichText", "ShowInfoOnOpenParenthesis"]:
         return toBool(prefClass.settings.value(
             "CodeDocumentationViewer/" + key,
             prefClass.docuViewerDefaults[key]))
--- a/QScintilla/Editor.py	Sat Oct 21 15:13:56 2017 +0200
+++ b/QScintilla/Editor.py	Sat Oct 21 15:18:15 2017 +0200
@@ -5004,7 +5004,8 @@
         @param charNumber value of the character entered (integer)
         """
         char = chr(charNumber)
-        if char == "(" and Preferences.getEditor("ShowInfoOnOpenParenthesis"):
+        if char == "(" and \
+           Preferences.getDocuViewer("ShowInfoOnOpenParenthesis"):
             self.vm.showEditorInfo(self)
     
     def __showCodeInfo(self):
--- a/UI/CodeDocumentationViewer.py	Sat Oct 21 15:13:56 2017 +0200
+++ b/UI/CodeDocumentationViewer.py	Sat Oct 21 15:18:15 2017 +0200
@@ -24,6 +24,7 @@
 
 from .CodeDocumentationViewerTemplate import \
     prepareDocumentationViewerHtmlDocument, \
+    prepareDocumentationViewerHtmlDocWarningDocument, \
     prepareDocumentationViewerHtmlWarningDocument
 
 from .data import codeDocumentationViewer_rc    # __IGNORE_WARNING__
@@ -213,6 +214,7 @@
         
         self.__processingThread = DocumentProcessingThread()
         self.__processingThread.htmlReady.connect(self.__setHtml)
+        self.__processingThread.warning.connect(self.__setHtmlWarning)
     
     def __setupUi(self):
         """
@@ -299,7 +301,7 @@
         """
         Public method to finalize the setup of the documentation viewer.
         """
-        self.__showTextViewer(Preferences.getDocuViewer("ShowInfoAsMarkdown"))
+        self.__showTextViewer(Preferences.getDocuViewer("ShowInfoAsRichText"))
         
         self.__startingUp = False
         provider = Preferences.getDocuViewer("Provider")
@@ -408,7 +410,8 @@
             self.__providers[self.__selectedProvider][0](editor)
     
     # TODO: document this hook in the plug-in document
-    def documentationReady(self, documentationInfo, isWarning=False):
+    def documentationReady(self, documentationInfo, isWarning=False,
+                           isDocWarning=False):
         """
         Public method to provide the documentation info to the viewer.
         
@@ -425,6 +428,8 @@
         @type dict or str
         @param isWarning flag indicating a warning page
         @type bool
+        @param isDocWarning flag indicating a documentation warning page
+        @type bool
         """
         self.__ui.activateCodeDocumentationViewer(switchFocus=False)
         
@@ -437,13 +442,16 @@
                                             isWarning=True)
                 else:
                     self.documentationReady(self.__noDocumentationString,
-                                            isWarning=True)
+                                            isDocWarning=True)
                 return
             
             if self.__showMarkdown:
                 if isWarning:
                     html = prepareDocumentationViewerHtmlWarningDocument(
                         documentationInfo)
+                elif isDocWarning:
+                    html = prepareDocumentationViewerHtmlDocWarningDocument(
+                        documentationInfo)
                 elif isinstance(documentationInfo, dict):
                     html = prepareDocumentationViewerHtmlDocument(
                         documentationInfo)
@@ -496,6 +504,16 @@
         """
         self.__richTextViewer.setHtml(html)
     
+    def __setHtmlWarning(self, warningText):
+        """
+        Private slot to set a display message.
+        
+        @param warningText text to be shown as a warning
+        @type str
+        """
+        html = prepareDocumentationViewerHtmlWarningDocument(warningText)
+        self.__richTextViewer.setHtml(html)
+    
     @pyqtSlot(int)
     def on_providerComboBox_currentIndexChanged(self, index):
         """
@@ -529,7 +547,7 @@
         """
         Public slot to handle a change of preferences.
         """
-        showMarkdown = Preferences.getDocuViewer("ShowInfoAsMarkdown")
+        showMarkdown = Preferences.getDocuViewer("ShowInfoAsRichText")
         if showMarkdown != self.__showMarkdown:
             self.__showTextViewer(showMarkdown)
         
@@ -560,7 +578,7 @@
         
         self.documentationReady(self.__lastDocumentation)
         
-        Preferences.setDocuViewer("ShowInfoAsMarkdown", richText)
+        Preferences.setDocuViewer("ShowInfoAsRichText", richText)
 
 
 class DocumentProcessingThread(QThread):
@@ -570,8 +588,10 @@
     
     @signal htmlReady(str) emitted with the processed HTML to signal the
         availability of the processed HTML
+    @signal warning(str) emitted with an error or warning message
     """
     htmlReady = pyqtSignal(str)
+    warning = pyqtSignal(str)
     
     def __init__(self, parent=None):
         """
@@ -604,12 +624,11 @@
         
         if language == "markdown":
             html = self.__convertMarkdown(text, True, "html5")
+            self.htmlReady.emit(html)
         else:
-            html = "<html><body><p>"
-            html += self.tr("Format '{0}' is not supported.").format(language)
-            html += "</p></body></html>"
-        
-        self.htmlReady.emit(html)
+            html = self.tr("Format <b>{0}</b> is not supported.")\
+                .format(language)
+            self.warning.emit(html)
     
     def __convertMarkdown(self, text, convertNewLineToBreak, htmlFormat):
         """
--- a/UI/CodeDocumentationViewerTemplate.py	Sat Oct 21 15:13:56 2017 +0200
+++ b/UI/CodeDocumentationViewerTemplate.py	Sat Oct 21 15:18:15 2017 +0200
@@ -9,6 +9,11 @@
 
 from __future__ import unicode_literals
 
+from PyQt5.QtCore import QCoreApplication
+
+import Utilities
+
+
 def prepareDocumentationViewerHtmlDocument(documentationInfo):
     """
     Public function to prepare the HTML document.
@@ -69,9 +74,15 @@
         title = titleTemplate.replace("@NAME@", name)
         if documentationInfo["argspec"] or documentationInfo["note"]:
             if documentationInfo["argspec"]:
+                argspec = Utilities.html_encode(documentationInfo["argspec"])
+                for char in ['=', ',', '(', ')', '*', '**']:
+                    argspec = argspec.replace(
+                        char,
+                        '<span class="argspec-highlight">{0}</span>'.format(
+                            char))
                 argspec = argspecTemplate\
                     .replace("@NAME@", name)\
-                    .replace("@ARGSPEC@", documentationInfo["argspec"])
+                    .replace("@ARGSPEC@", argspec)
             else:
                 argspec = ""
             if documentationInfo["note"]:
@@ -98,13 +109,18 @@
             .replace("\r", "<br/>")
         docstring = docstringTemplate.replace("@DOCSTRING@", docstring)
     else:
-        docstring = ""
+        docstring = \
+            """<div class="hr"></div><div id="doc-warning">{0}</div>"""\
+            .format(QCoreApplication.translate(
+                "CodeDocumentationViewer",
+                "No further documentation available"))
     
     return mainTemplate\
         .replace("@HEADER@", header)\
         .replace("@DOCSTRING@", docstring)
 
-def prepareDocumentationViewerHtmlWarningDocument(text):
+
+def prepareDocumentationViewerHtmlDocWarningDocument(text):
     """
     Public function to prepare a HTML warning document.
     
@@ -128,3 +144,29 @@
     """
     
     return mainTemplate.replace("@TEXT@", text)
+
+
+def prepareDocumentationViewerHtmlWarningDocument(text):
+    """
+    Public function to prepare a HTML warning document.
+    
+    @param text warning text to be shown
+    @type str
+    @return prepared HTML document
+    @rtype str
+    """
+    mainTemplate = """
+        <!DOCTYPE html>
+        <html>
+        <head>
+        <meta http-equiv="content-type" content="text/html; charset=utf-8">
+        <link rel="stylesheet" href="qrc:documentViewerStyle.css"
+            type="text/css" />
+        </head>
+        <body>
+            <div id="warning">@TEXT@</div>
+        </body>
+        </html>
+    """
+    
+    return mainTemplate.replace("@TEXT@", text)
--- a/UI/data/codeDocumentationViewer_rc.py	Sat Oct 21 15:13:56 2017 +0200
+++ b/UI/data/codeDocumentationViewer_rc.py	Sat Oct 21 15:18:15 2017 +0200
@@ -9,316 +9,321 @@
 from PyQt5 import QtCore
 
 qt_resource_data = b"\
-\x00\x00\x13\x3e\
-\x62\
-\x6f\x64\x79\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\
-\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x77\x68\x69\x74\
-\x65\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\
-\x62\x28\x35\x31\x2c\x20\x35\x31\x2c\x20\x35\x31\x29\x3b\x0a\x20\
-\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x70\x78\x20\x32\
-\x35\x70\x78\x20\x31\x35\x70\x78\x20\x32\x35\x70\x78\x3b\x0a\x7d\
-\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x54\x69\x74\x6c\x65\x20\
+\x00\x00\x13\x8d\
+\x2f\
+\x2a\x0a\x20\x2a\x20\x54\x68\x69\x73\x20\x73\x74\x79\x6c\x65\x20\
+\x64\x65\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x69\x73\x20\x62\x61\
+\x73\x65\x64\x20\x6f\x6e\x20\x74\x68\x65\x20\x73\x74\x79\x6c\x65\
+\x20\x73\x68\x65\x65\x74\x20\x66\x69\x6c\x65\x20\x6f\x66\x20\x53\
+\x70\x79\x64\x65\x72\x2e\x0a\x20\x2a\x2f\x0a\x20\x0a\x62\x6f\x64\
+\x79\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x77\x68\x69\x74\x65\x3b\
+\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\
+\x35\x31\x2c\x20\x35\x31\x2c\x20\x35\x31\x29\x3b\x0a\x20\x20\x20\
+\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x70\x78\x20\x31\x30\x70\
+\x78\x20\x31\x30\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\
+\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x54\x69\x74\x6c\x65\x20\x73\x74\
+\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x64\x69\x76\x2e\x74\
+\x69\x74\x6c\x65\x20\x68\x31\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\
+\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x33\x30\x25\x3b\x0a\x20\
+\x20\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\
+\x27\x54\x72\x65\x62\x75\x63\x68\x65\x74\x20\x4d\x53\x27\x2c\x20\
+\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x20\x20\
+\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x23\x38\x35\x37\x37\x34\x41\x3b\x0a\x20\x20\x20\x20\x62\
+\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x69\x6d\x61\x67\x65\x3a\
+\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x67\x72\x61\x64\x69\x65\x6e\
+\x74\x28\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x69\x6e\x65\x61\
+\x72\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x30\x20\x30\x2c\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x30\x20\x31\x30\x30\x25\x2c\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x28\x23\x38\x35\
+\x37\x37\x34\x41\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x6f\x6c\x6f\x72\x2d\x73\x74\x6f\x70\x28\x36\x30\x25\x2c\x20\x23\
+\x62\x39\x61\x35\x36\x37\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x74\x6f\x28\x23\x65\x31\x63\x38\x37\x64\x29\x0a\x20\x20\x20\
+\x20\x29\x3b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x73\x68\x61\
+\x64\x6f\x77\x3a\x20\x30\x70\x78\x20\x31\x70\x78\x20\x31\x70\x78\
+\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x30\
+\x2e\x32\x29\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\
+\x69\x67\x68\x74\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\
+\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x36\x70\x78\x20\x30\
+\x70\x78\x20\x36\x70\x78\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x20\
+\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x70\x78\x20\x2d\x32\x35\
+\x70\x78\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\
+\x46\x46\x46\x46\x46\x46\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x0a\x20\x2a\
+\x20\x54\x68\x65\x20\x6e\x65\x78\x74\x20\x74\x77\x6f\x20\x73\x74\
+\x79\x6c\x65\x73\x20\x61\x72\x65\x20\x6e\x65\x65\x64\x65\x64\x20\
+\x74\x6f\x0a\x20\x2a\x20\x6d\x6f\x64\x69\x66\x79\x20\x74\x68\x65\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x70\x72\x65\x73\x65\x6e\x74\
+\x20\x6f\x6e\x20\x74\x68\x65\x0a\x20\x2a\x20\x74\x69\x74\x6c\x65\
+\x20\x6f\x66\x20\x70\x61\x67\x65\x73\x20\x6c\x69\x6b\x65\x20\x73\
+\x63\x69\x70\x79\x2e\x73\x74\x61\x74\x73\x20\x6f\x72\x0a\x20\x2a\
+\x20\x73\x63\x69\x70\x79\x2e\x69\x6f\x0a\x20\x2a\x2f\x0a\x64\x69\
+\x76\x2e\x74\x69\x74\x6c\x65\x20\x68\x31\x20\x61\x20\x7b\x0a\x20\
+\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x74\x72\x61\x6e\x73\x70\
+\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x63\x75\x72\x73\x6f\
+\x72\x3a\x20\x64\x65\x66\x61\x75\x6c\x74\x3b\x0a\x7d\x0a\x0a\x64\
+\x69\x76\x2e\x74\x69\x74\x6c\x65\x20\x68\x31\x20\x74\x74\x20\x7b\
+\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\
+\x39\x35\x25\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x74\x72\x61\x6e\x73\
+\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\
+\x72\x3a\x20\x23\x46\x46\x46\x46\x46\x46\x3b\x0a\x7d\x0a\x0a\x0a\
+\x2f\x2a\x20\x2d\x2d\x2d\x20\x4d\x65\x74\x61\x64\x61\x74\x61\x20\
 \x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x64\x69\x76\
-\x2e\x74\x69\x74\x6c\x65\x20\x68\x31\x20\x7b\x0a\x20\x20\x20\x20\
-\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x33\x30\x25\x3b\
-\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\
-\x3a\x20\x27\x54\x72\x65\x62\x75\x63\x68\x65\x74\x20\x4d\x53\x27\
-\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\
-\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\
-\x6f\x72\x3a\x20\x23\x38\x35\x37\x37\x34\x41\x3b\x0a\x20\x20\x20\
-\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x69\x6d\x61\x67\
-\x65\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x67\x72\x61\x64\x69\
-\x65\x6e\x74\x28\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x69\x6e\
-\x65\x61\x72\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x30\x20\x30\
-\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x30\x20\x31\x30\x30\x25\
-\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x28\x23\
-\x38\x35\x37\x37\x34\x41\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\
-\x20\x63\x6f\x6c\x6f\x72\x2d\x73\x74\x6f\x70\x28\x36\x30\x25\x2c\
-\x20\x23\x62\x39\x61\x35\x36\x37\x29\x2c\x0a\x20\x20\x20\x20\x20\
-\x20\x20\x20\x74\x6f\x28\x23\x65\x31\x63\x38\x37\x64\x29\x0a\x20\
-\x20\x20\x20\x29\x3b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x73\
-\x68\x61\x64\x6f\x77\x3a\x20\x30\x70\x78\x20\x31\x70\x78\x20\x31\
-\x70\x78\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\
-\x20\x30\x2e\x32\x29\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\
+\x2e\x6d\x65\x74\x61\x64\x61\x74\x61\x20\x7b\x0a\x20\x20\x20\x20\
+\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\x30\x70\x78\
+\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x62\x6f\x74\
+\x74\x6f\x6d\x3a\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\x6d\
+\x61\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\x3a\x20\x31\x70\x78\
+\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\
+\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x34\x64\
+\x38\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\
+\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x43\x39\x43\x39\x43\x39\
+\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\
+\x69\x75\x73\x3a\x20\x36\x70\x78\x20\x36\x70\x78\x20\x36\x70\x78\
+\x20\x36\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\
+\x61\x64\x6f\x77\x3a\x20\x31\x70\x78\x20\x31\x70\x78\x20\x37\x70\
+\x78\x20\x23\x43\x41\x43\x41\x43\x41\x3b\x0a\x7d\x0a\x0a\x64\x69\
+\x76\x2e\x6d\x65\x74\x61\x64\x61\x74\x61\x20\x70\x20\x7b\x0a\x20\
+\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x37\x70\x78\x20\x30\
+\x70\x78\x20\x37\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\
+\x73\x70\x61\x6e\x2e\x64\x65\x66\x20\x7b\x0a\x20\x20\x20\x20\x66\
+\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x6d\x6f\x6e\x6f\
+\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\
+\x73\x69\x7a\x65\x3a\x20\x39\x30\x25\x3b\x0a\x7d\x0a\x0a\x73\x70\
+\x61\x6e\x2e\x61\x72\x67\x73\x70\x65\x63\x2d\x68\x69\x67\x68\x6c\
+\x69\x67\x68\x74\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x62\x6c\x75\x65\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\
+\x2d\x73\x69\x7a\x65\x3a\x20\x31\x31\x30\x25\x3b\x0a\x20\x20\x20\
+\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x39\x30\
+\x30\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x44\x6f\
+\x63\x73\x74\x72\x69\x6e\x67\x20\x64\x69\x76\x20\x73\x74\x79\x6c\
+\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x64\x69\x76\x2e\x64\x6f\x63\
+\x73\x74\x72\x69\x6e\x67\x20\x7b\x0a\x20\x20\x20\x20\x6d\x61\x72\
+\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x2d\x31\x70\x78\x3b\x0a\x7d\
+\x0a\x0a\x64\x69\x76\x2e\x64\x6f\x63\x73\x74\x72\x69\x6e\x67\x20\
+\x70\x20\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\
+\x20\x30\x70\x78\x20\x32\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\
+\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x48\x65\x61\x64\x65\x72\x73\
+\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x68\x32\
+\x2c\x20\x68\x33\x2c\x20\x68\x34\x20\x7b\x0a\x20\x20\x20\x20\x66\
+\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x27\x48\x65\x6c\
+\x76\x65\x74\x69\x63\x61\x27\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\
+\x72\x69\x66\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x72\x67\x62\x28\x34\x39\x2c\x20\x31\x32\x36\x2c\x20\x31\x37\x32\
+\x29\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\
+\x70\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\
+\x67\x69\x6e\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x30\x70\x78\
+\x3b\x0a\x7d\x0a\x0a\x68\x32\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\
+\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x30\x25\x3b\x0a\x20\
+\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\
+\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
+\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\
+\x6f\x6c\x69\x64\x20\x72\x67\x62\x28\x32\x32\x30\x2c\x20\x32\x32\
+\x30\x2c\x20\x32\x32\x30\x29\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\
+\x64\x69\x6e\x67\x3a\x20\x34\x70\x78\x20\x30\x70\x78\x20\x34\x70\
+\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\x68\x33\x20\x7b\x0a\x20\
+\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x31\
+\x30\x25\x3b\x0a\x7d\x0a\x0a\x68\x34\x20\x7b\x0a\x20\x20\x20\x20\
+\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x30\x25\x3b\
+\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\
+\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\
 \x77\x65\x69\x67\x68\x74\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\
-\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x36\x70\x78\
-\x20\x30\x70\x78\x20\x36\x70\x78\x20\x32\x30\x70\x78\x3b\x0a\x20\
-\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x70\x78\x20\x2d\
-\x32\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\
-\x20\x23\x46\x46\x46\x46\x46\x46\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x0a\
-\x20\x2a\x20\x54\x68\x65\x20\x6e\x65\x78\x74\x20\x74\x77\x6f\x20\
-\x73\x74\x79\x6c\x65\x73\x20\x61\x72\x65\x20\x6e\x65\x65\x64\x65\
-\x64\x20\x74\x6f\x0a\x20\x2a\x20\x6d\x6f\x64\x69\x66\x79\x20\x74\
-\x68\x65\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x70\x72\x65\x73\x65\
-\x6e\x74\x20\x6f\x6e\x20\x74\x68\x65\x0a\x20\x2a\x20\x74\x69\x74\
-\x6c\x65\x20\x6f\x66\x20\x70\x61\x67\x65\x73\x20\x6c\x69\x6b\x65\
-\x20\x73\x63\x69\x70\x79\x2e\x73\x74\x61\x74\x73\x20\x6f\x72\x0a\
-\x20\x2a\x20\x73\x63\x69\x70\x79\x2e\x69\x6f\x0a\x20\x2a\x2f\x0a\
-\x64\x69\x76\x2e\x74\x69\x74\x6c\x65\x20\x68\x31\x20\x61\x20\x7b\
-\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x74\x72\x61\x6e\
-\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x63\x75\x72\
-\x73\x6f\x72\x3a\x20\x64\x65\x66\x61\x75\x6c\x74\x3b\x0a\x7d\x0a\
-\x0a\x64\x69\x76\x2e\x74\x69\x74\x6c\x65\x20\x68\x31\x20\x74\x74\
-\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\
-\x3a\x20\x39\x35\x25\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\
-\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x74\x72\x61\
-\x6e\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x63\x6f\
-\x6c\x6f\x72\x3a\x20\x23\x46\x46\x46\x46\x46\x46\x3b\x0a\x7d\x0a\
-\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4d\x65\x74\x61\x64\x61\x74\
-\x61\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x64\
-\x69\x76\x2e\x6d\x65\x74\x61\x64\x61\x74\x61\x20\x7b\x0a\x20\x20\
-\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\x30\
-\x70\x78\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x62\
-\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x20\
-\x20\x6d\x61\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\x3a\x20\x31\
-\x70\x78\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\
-\x20\x31\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\
-\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\
-\x34\x63\x35\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\
-\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x43\x39\x43\x39\
-\x43\x39\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\
-\x61\x64\x69\x75\x73\x3a\x20\x36\x70\x78\x20\x36\x70\x78\x20\x36\
-\x70\x78\x20\x36\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\
-\x73\x68\x61\x64\x6f\x77\x3a\x20\x31\x70\x78\x20\x31\x70\x78\x20\
-\x37\x70\x78\x20\x23\x43\x41\x43\x41\x43\x41\x3b\x0a\x7d\x0a\x0a\
-\x64\x69\x76\x2e\x6d\x65\x74\x61\x64\x61\x74\x61\x20\x70\x20\x7b\
-\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x37\x70\x78\
-\x20\x30\x70\x78\x20\x37\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x7d\
-\x0a\x0a\x73\x70\x61\x6e\x2e\x64\x65\x66\x20\x7b\x0a\x20\x20\x20\
-\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x6d\x6f\
-\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\
-\x74\x2d\x73\x69\x7a\x65\x3a\x20\x39\x30\x25\x3b\x0a\x7d\x0a\x0a\
-\x73\x70\x61\x6e\x2e\x61\x72\x67\x73\x70\x65\x63\x2d\x68\x69\x67\
-\x68\x6c\x69\x67\x68\x74\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\
-\x6f\x72\x3a\x20\x72\x65\x64\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\
-\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x31\x30\x25\x3b\x0a\x20\x20\
-\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x39\
-\x30\x30\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x44\
-\x6f\x63\x73\x74\x72\x69\x6e\x67\x20\x64\x69\x76\x20\x73\x74\x79\
-\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x64\x69\x76\x2e\x64\x6f\
-\x63\x73\x74\x72\x69\x6e\x67\x20\x7b\x0a\x20\x20\x20\x20\x6d\x61\
-\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x2d\x31\x70\x78\x3b\x0a\
-\x7d\x0a\x0a\x64\x69\x76\x2e\x64\x6f\x63\x73\x74\x72\x69\x6e\x67\
-\x20\x70\x20\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\
-\x3a\x20\x30\x70\x78\x20\x32\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\
-\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x48\x65\x61\x64\x65\x72\
-\x73\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x68\
-\x32\x2c\x20\x68\x33\x2c\x20\x68\x34\x20\x7b\x0a\x20\x20\x20\x20\
-\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x27\x48\x65\
-\x6c\x76\x65\x74\x69\x63\x61\x27\x2c\x20\x73\x61\x6e\x73\x2d\x73\
-\x65\x72\x69\x66\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\
-\x20\x72\x67\x62\x28\x34\x39\x2c\x20\x31\x32\x36\x2c\x20\x31\x37\
-\x32\x29\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\
-\x6f\x70\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x20\x20\x6d\x61\
-\x72\x67\x69\x6e\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x30\x70\
-\x78\x3b\x0a\x7d\x0a\x0a\x68\x32\x20\x7b\x0a\x20\x20\x20\x20\x66\
-\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x30\x25\x3b\x0a\
-\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\
-\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\
-\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\
-\x73\x6f\x6c\x69\x64\x20\x72\x67\x62\x28\x32\x32\x30\x2c\x20\x32\
-\x32\x30\x2c\x20\x32\x32\x30\x29\x3b\x0a\x20\x20\x20\x20\x70\x61\
-\x64\x64\x69\x6e\x67\x3a\x20\x34\x70\x78\x20\x30\x70\x78\x20\x34\
-\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\x68\x33\x20\x7b\x0a\
-\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\
-\x31\x35\x25\x3b\x0a\x7d\x0a\x0a\x68\x34\x20\x7b\x0a\x20\x20\x20\
-\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x30\x25\
-\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\
-\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\
-\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\
-\x0a\x7d\x0a\x0a\x64\x6c\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x20\
-\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\
-\x70\x78\x20\x31\x30\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\
-\x64\x69\x76\x2e\x73\x65\x63\x74\x69\x6f\x6e\x20\x70\x20\x7b\x0a\
-\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x70\x78\
-\x20\x32\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\x23\x77\x61\
-\x72\x6e\x69\x6e\x67\x20\x7b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\
-\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x20\
-\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\
-\x72\x3a\x20\x23\x46\x46\x45\x34\x45\x34\x3b\x0a\x20\x20\x20\x20\
-\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\
-\x64\x20\x23\x46\x36\x36\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\
-\x69\x6e\x67\x3a\x20\x34\x70\x78\x20\x38\x70\x78\x20\x34\x70\x78\
-\x20\x38\x70\x78\x3b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x61\
-\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x7d\x0a\
-\x0a\x23\x64\x6f\x63\x2d\x77\x61\x72\x6e\x69\x6e\x67\x20\x7b\x0a\
-\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\
-\x31\x36\x70\x78\x3b\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\
-\x20\x34\x35\x25\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\
-\x2d\x6c\x65\x66\x74\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x20\
-\x20\x6d\x61\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\x3a\x20\x61\
-\x75\x74\x6f\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
-\x72\x67\x62\x28\x31\x38\x35\x2c\x20\x37\x34\x2c\x20\x37\x32\x29\
-\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\x32\x34\x32\x2c\
-\x20\x32\x32\x32\x2c\x20\x32\x32\x32\x29\x3b\x0a\x20\x20\x20\x20\
-\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\
-\x64\x20\x72\x67\x62\x28\x32\x33\x38\x2c\x20\x32\x31\x31\x2c\x20\
-\x32\x31\x35\x29\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\
-\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x20\x34\x70\x78\
-\x20\x34\x70\x78\x20\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x70\x61\
-\x64\x64\x69\x6e\x67\x3a\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x20\
-\x20\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\
-\x74\x65\x72\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\
-\x69\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x20\x20\x20\x20\
-\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x35\x25\x3b\
-\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4c\x69\x6e\x6b\
-\x73\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x61\x20\x7b\x0a\x20\x20\x20\
-\x20\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\
-\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\
-\x72\x3a\x20\x72\x67\x62\x61\x28\x34\x30\x2c\x20\x31\x33\x30\x2c\
-\x20\x31\x38\x30\x2c\x20\x31\x29\x3b\x0a\x7d\x0a\x0a\x61\x3a\x68\
-\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\
-\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x3a\x20\x75\x6e\x64\x65\
-\x72\x6c\x69\x6e\x65\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\
-\x2d\x20\x49\x6d\x61\x67\x65\x73\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\
-\x69\x6d\x67\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\
-\x61\x64\x6f\x77\x3a\x20\x30\x70\x78\x20\x32\x70\x78\x20\x36\x70\
-\x78\x20\x23\x63\x61\x63\x61\x63\x61\x3b\x0a\x20\x20\x20\x20\x62\
+\x7d\x0a\x0a\x64\x6c\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x20\x7b\
+\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x70\
+\x78\x20\x31\x30\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\x64\
+\x69\x76\x2e\x73\x65\x63\x74\x69\x6f\x6e\x20\x70\x20\x7b\x0a\x20\
+\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x70\x78\x20\
+\x32\x70\x78\x20\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\x23\x77\x61\x72\
+\x6e\x69\x6e\x67\x20\x7b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\
+\x6e\x2d\x74\x6f\x70\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\
+\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x23\x46\x46\x45\x34\x45\x34\x3b\x0a\x20\x20\x20\x20\x62\
+\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\
+\x20\x23\x46\x36\x36\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\
+\x6e\x67\x3a\x20\x34\x70\x78\x20\x38\x70\x78\x20\x34\x70\x78\x20\
+\x38\x70\x78\x3b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x61\x6c\
+\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x7d\x0a\x0a\
+\x23\x64\x6f\x63\x2d\x77\x61\x72\x6e\x69\x6e\x67\x20\x7b\x0a\x20\
+\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\
+\x36\x70\x78\x3b\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\
+\x34\x35\x25\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\
+\x6c\x65\x66\x74\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x20\x20\
+\x6d\x61\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\x3a\x20\x61\x75\
+\x74\x6f\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x72\
+\x67\x62\x28\x31\x38\x35\x2c\x20\x37\x34\x2c\x20\x37\x32\x29\x3b\
+\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\x32\x34\x32\x2c\x20\
+\x32\x32\x32\x2c\x20\x32\x32\x32\x29\x3b\x0a\x20\x20\x20\x20\x62\
 \x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\
-\x20\x23\x63\x39\x63\x39\x63\x39\x3b\x0a\x7d\x0a\x0a\x69\x6d\x67\
-\x2e\x61\x6c\x69\x67\x6e\x2d\x63\x65\x6e\x74\x65\x72\x20\x7b\x0a\
-\x20\x20\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\
-\x63\x6b\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\
-\x65\x66\x74\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x20\x20\x6d\
-\x61\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\x3a\x20\x61\x75\x74\
-\x6f\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4c\x69\
-\x73\x74\x73\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\
-\x0a\x6f\x6c\x2e\x61\x72\x61\x62\x69\x63\x20\x7b\x0a\x20\x20\x20\
-\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x2d\x31\
-\x30\x70\x78\x3b\x0a\x7d\x0a\x0a\x75\x6c\x20\x7b\x0a\x20\x20\x20\
-\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x2d\x35\
-\x70\x78\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4c\x69\
-\x74\x65\x72\x61\x6c\x20\x62\x6c\x6f\x63\x6b\x73\x20\x73\x74\x79\
-\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x70\x72\x65\x2e\x6c\x69\
-\x74\x65\x72\x61\x6c\x2d\x62\x6c\x6f\x63\x6b\x20\x7b\x0a\x20\x20\
-\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x2d\x6c\x65\x66\x74\x3a\x20\
-\x33\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\
-\x69\x7a\x65\x3a\x20\x39\x35\x25\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\
-\x20\x2d\x2d\x2d\x20\x44\x6f\x63\x75\x74\x69\x6c\x73\x20\x74\x61\
+\x20\x72\x67\x62\x28\x32\x33\x38\x2c\x20\x32\x31\x31\x2c\x20\x32\
+\x31\x35\x29\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\
+\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x20\x34\x70\x78\x20\
+\x34\x70\x78\x20\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\
+\x64\x69\x6e\x67\x3a\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\
+\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\
+\x65\x72\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\
+\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x20\x20\x20\x20\x66\
+\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x35\x25\x3b\x0a\
+\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4c\x69\x6e\x6b\x73\
+\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x61\x20\x7b\x0a\x20\x20\x20\x20\
+\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x3a\
+\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x72\x67\x62\x61\x28\x34\x30\x2c\x20\x31\x33\x30\x2c\x20\
+\x31\x38\x30\x2c\x20\x31\x29\x3b\x0a\x7d\x0a\x0a\x61\x3a\x68\x6f\
+\x76\x65\x72\x20\x7b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x64\
+\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x3a\x20\x75\x6e\x64\x65\x72\
+\x6c\x69\x6e\x65\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\
+\x20\x49\x6d\x61\x67\x65\x73\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x69\
+\x6d\x67\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\
+\x64\x6f\x77\x3a\x20\x30\x70\x78\x20\x32\x70\x78\x20\x36\x70\x78\
+\x20\x23\x63\x61\x63\x61\x63\x61\x3b\x0a\x20\x20\x20\x20\x62\x6f\
+\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\
+\x23\x63\x39\x63\x39\x63\x39\x3b\x0a\x7d\x0a\x0a\x69\x6d\x67\x2e\
+\x61\x6c\x69\x67\x6e\x2d\x63\x65\x6e\x74\x65\x72\x20\x7b\x0a\x20\
+\x20\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\x63\
+\x6b\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\
+\x66\x74\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x20\x20\x6d\x61\
+\x72\x67\x69\x6e\x2d\x72\x69\x67\x68\x74\x3a\x20\x61\x75\x74\x6f\
+\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4c\x69\x73\
+\x74\x73\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\
+\x6f\x6c\x2e\x61\x72\x61\x62\x69\x63\x20\x7b\x0a\x20\x20\x20\x20\
+\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x2d\x31\x30\
+\x70\x78\x3b\x0a\x7d\x0a\x0a\x75\x6c\x20\x7b\x0a\x20\x20\x20\x20\
+\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x2d\x35\x70\
+\x78\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x4c\x69\x74\
+\x65\x72\x61\x6c\x20\x62\x6c\x6f\x63\x6b\x73\x20\x73\x74\x79\x6c\
+\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x70\x72\x65\x2e\x6c\x69\x74\
+\x65\x72\x61\x6c\x2d\x62\x6c\x6f\x63\x6b\x20\x7b\x0a\x20\x20\x20\
+\x20\x70\x61\x64\x64\x69\x6e\x67\x2d\x6c\x65\x66\x74\x3a\x20\x33\
+\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\
+\x7a\x65\x3a\x20\x39\x35\x25\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\
+\x2d\x2d\x2d\x20\x44\x6f\x63\x75\x74\x69\x6c\x73\x20\x74\x61\x62\
+\x6c\x65\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\
+\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x20\x7b\
+\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6c\
+\x61\x70\x73\x65\x3a\x20\x63\x6f\x6c\x6c\x61\x70\x73\x65\x3b\x0a\
+\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x73\x70\x61\x63\x69\
+\x6e\x67\x3a\x20\x30\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\
+\x72\x3a\x20\x23\x44\x44\x44\x44\x44\x44\x3b\x0a\x20\x20\x20\x20\
+\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x61\x75\x74\
+\x6f\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x72\x69\
+\x67\x68\x74\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x20\x20\x6d\
+\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\x37\x70\x78\x3b\
+\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x62\x6f\x74\x74\
+\x6f\x6d\x3a\x20\x31\x37\x70\x78\x3b\x0a\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x20\x39\x30\x25\x3b\x0a\x7d\x0a\x0a\x74\x61\x62\
+\x6c\x65\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x20\x74\x64\x20\x7b\
+\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\
+\x78\x3b\x0a\x7d\x0a\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\
+\x74\x69\x6c\x73\x20\x74\x72\x2e\x72\x6f\x77\x2d\x6f\x64\x64\x20\
+\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\x32\x34\x39\x2c\
+\x20\x32\x34\x39\x2c\x20\x32\x34\x39\x29\x3b\x0a\x7d\x0a\x0a\x0a\
+\x2f\x2a\x20\x2d\x2d\x2d\x20\x44\x6f\x63\x75\x74\x69\x6c\x73\x20\
+\x74\x61\x62\x6c\x65\x20\x68\x65\x61\x64\x65\x72\x73\x20\x2d\x2d\
+\x2d\x20\x2a\x2f\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\
+\x69\x6c\x73\x20\x74\x68\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\
+\x45\x45\x45\x45\x45\x45\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
+\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x2d\x63\x6f\x6c\x6f\x72\x3a\
+\x20\x23\x44\x44\x44\x44\x44\x44\x3b\x0a\x20\x20\x20\x20\x62\x6f\
+\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x2d\x73\x74\x79\x6c\
+\x65\x3a\x20\x73\x6f\x6c\x69\x64\x3b\x0a\x20\x20\x20\x20\x62\x6f\
+\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x2d\x77\x69\x64\x74\
+\x68\x3a\x20\x31\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
+\x65\x72\x2d\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\
+\x44\x44\x44\x44\x44\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\
+\x72\x2d\x74\x6f\x70\x2d\x73\x74\x79\x6c\x65\x3a\x20\x73\x6f\x6c\
+\x69\x64\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x74\
+\x6f\x70\x2d\x77\x69\x64\x74\x68\x3a\x20\x31\x70\x78\x3b\x0a\x20\
+\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\
+\x62\x6f\x6c\x64\x3b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\x61\
+\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\
+\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x36\x70\x78\x20\x30\
+\x70\x78\x20\x36\x70\x78\x20\x38\x70\x78\x3b\x0a\x20\x20\x20\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\x36\x35\x2c\x20\x36\
+\x35\x2c\x20\x36\x35\x29\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\
+\x2d\x2d\x20\x46\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\x74\x61\
 \x62\x6c\x65\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\
-\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x20\
-\x7b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\
-\x6c\x61\x70\x73\x65\x3a\x20\x63\x6f\x6c\x6c\x61\x70\x73\x65\x3b\
-\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x73\x70\x61\x63\
-\x69\x6e\x67\x3a\x20\x30\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
-\x65\x72\x3a\x20\x23\x44\x44\x44\x44\x44\x44\x3b\x0a\x20\x20\x20\
-\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\x66\x74\x3a\x20\x61\x75\
-\x74\x6f\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x72\
-\x69\x67\x68\x74\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x20\x20\
-\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\x37\x70\x78\
-\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x62\x6f\x74\
-\x74\x6f\x6d\x3a\x20\x31\x37\x70\x78\x3b\x0a\x20\x20\x20\x20\x77\
-\x69\x64\x74\x68\x3a\x20\x39\x30\x25\x3b\x0a\x7d\x0a\x0a\x74\x61\
-\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x20\x74\x64\x20\
-\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\
-\x70\x78\x3b\x0a\x7d\x0a\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\
-\x75\x74\x69\x6c\x73\x20\x74\x72\x2e\x72\x6f\x77\x2d\x6f\x64\x64\
-\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
-\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\x32\x34\x39\
-\x2c\x20\x32\x34\x39\x2c\x20\x32\x34\x39\x29\x3b\x0a\x7d\x0a\x0a\
-\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x44\x6f\x63\x75\x74\x69\x6c\x73\
-\x20\x74\x61\x62\x6c\x65\x20\x68\x65\x61\x64\x65\x72\x73\x20\x2d\
-\x2d\x2d\x20\x2a\x2f\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\
-\x74\x69\x6c\x73\x20\x74\x68\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\
+\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\x2e\
+\x66\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\x7b\x0a\x20\x20\x20\
+\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x38\x30\x25\x3b\
+\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6c\
+\x61\x70\x73\x65\x3a\x20\x63\x6f\x6c\x6c\x61\x70\x73\x65\x3b\x0a\
+\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x6c\x65\x66\x74\x3a\
+\x20\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\
+\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x69\x67\x68\x74\x3a\x20\
+\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\
+\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\x35\x70\
+\x78\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\x65\
+\x66\x74\x3a\x20\x34\x30\x70\x78\x3b\x0a\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x20\x38\x33\x25\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\
+\x20\x2d\x2d\x2d\x20\x46\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\
+\x74\x61\x62\x6c\x65\x20\x68\x65\x61\x64\x65\x72\x73\x20\x2d\x2d\
+\x2d\x20\x2a\x2f\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\
+\x69\x6c\x73\x2e\x66\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\x74\
+\x68\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x74\x72\x61\x6e\x73\x70\
+\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\
+\x72\x2d\x74\x6f\x70\x3a\x20\x74\x72\x61\x6e\x73\x70\x61\x72\x65\
+\x6e\x74\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\
+\x6f\x74\x74\x6f\x6d\x3a\x20\x74\x72\x61\x6e\x73\x70\x61\x72\x65\
+\x6e\x74\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x62\
+\x6c\x61\x63\x6b\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\
+\x65\x69\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x20\x20\x20\
+\x20\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x6c\x65\x66\
+\x74\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\
+\x34\x70\x78\x20\x30\x70\x78\x20\x34\x70\x78\x20\x38\x70\x78\x3b\
+\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x53\x70\x61\x63\
+\x69\x6e\x67\x20\x61\x72\x6f\x75\x6e\x64\x20\x65\x78\x61\x6d\x70\
+\x6c\x65\x20\x63\x6f\x64\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\x64\
+\x69\x76\x2e\x68\x69\x67\x68\x6c\x69\x67\x68\x74\x20\x70\x72\x65\
+\x20\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\
+\x39\x70\x78\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x61\
 \x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\
-\x23\x45\x45\x45\x45\x45\x45\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\
-\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x2d\x63\x6f\x6c\x6f\x72\
-\x3a\x20\x23\x44\x44\x44\x44\x44\x44\x3b\x0a\x20\x20\x20\x20\x62\
-\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x2d\x73\x74\x79\
-\x6c\x65\x3a\x20\x73\x6f\x6c\x69\x64\x3b\x0a\x20\x20\x20\x20\x62\
-\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x2d\x77\x69\x64\
-\x74\x68\x3a\x20\x31\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\
-\x64\x65\x72\x2d\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\
-\x44\x44\x44\x44\x44\x44\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
-\x65\x72\x2d\x74\x6f\x70\x2d\x73\x74\x79\x6c\x65\x3a\x20\x73\x6f\
-\x6c\x69\x64\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\
-\x74\x6f\x70\x2d\x77\x69\x64\x74\x68\x3a\x20\x31\x70\x78\x3b\x0a\
-\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\
-\x20\x62\x6f\x6c\x64\x3b\x0a\x20\x20\x20\x20\x74\x65\x78\x74\x2d\
-\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\
-\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x36\x70\x78\x20\
-\x30\x70\x78\x20\x36\x70\x78\x20\x38\x70\x78\x3b\x0a\x20\x20\x20\
-\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x28\x36\x35\x2c\x20\
-\x36\x35\x2c\x20\x36\x35\x29\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\
-\x2d\x2d\x2d\x20\x46\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\x74\
-\x61\x62\x6c\x65\x20\x73\x74\x79\x6c\x65\x20\x2d\x2d\x2d\x20\x2a\
-\x2f\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\x74\x69\x6c\x73\
-\x2e\x66\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\x7b\x0a\x20\x20\
-\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x38\x30\x25\
-\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\
-\x6c\x61\x70\x73\x65\x3a\x20\x63\x6f\x6c\x6c\x61\x70\x73\x65\x3b\
-\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x6c\x65\x66\x74\
-\x3a\x20\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\
-\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x69\x67\x68\x74\x3a\
-\x20\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\
-\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x31\x35\
-\x70\x78\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x6c\
-\x65\x66\x74\x3a\x20\x34\x30\x70\x78\x3b\x0a\x20\x20\x20\x20\x77\
-\x69\x64\x74\x68\x3a\x20\x38\x33\x25\x3b\x0a\x7d\x0a\x0a\x0a\x2f\
-\x2a\x20\x2d\x2d\x2d\x20\x46\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\
-\x20\x74\x61\x62\x6c\x65\x20\x68\x65\x61\x64\x65\x72\x73\x20\x2d\
-\x2d\x2d\x20\x2a\x2f\x0a\x74\x61\x62\x6c\x65\x2e\x64\x6f\x63\x75\
-\x74\x69\x6c\x73\x2e\x66\x69\x65\x6c\x64\x2d\x6c\x69\x73\x74\x20\
-\x74\x68\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x74\x72\x61\x6e\x73\
-\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
-\x65\x72\x2d\x74\x6f\x70\x3a\x20\x74\x72\x61\x6e\x73\x70\x61\x72\
-\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\
-\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x74\x72\x61\x6e\x73\x70\x61\x72\
-\x65\x6e\x74\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
-\x62\x6c\x61\x63\x6b\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\
-\x77\x65\x69\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x20\x20\
-\x20\x20\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x6c\x65\
-\x66\x74\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\
-\x20\x34\x70\x78\x20\x30\x70\x78\x20\x34\x70\x78\x20\x38\x70\x78\
-\x3b\x0a\x7d\x0a\x0a\x0a\x2f\x2a\x20\x2d\x2d\x2d\x20\x53\x70\x61\
-\x63\x69\x6e\x67\x20\x61\x72\x6f\x75\x6e\x64\x20\x65\x78\x61\x6d\
-\x70\x6c\x65\x20\x63\x6f\x64\x65\x20\x2d\x2d\x2d\x20\x2a\x2f\x0a\
-\x64\x69\x76\x2e\x68\x69\x67\x68\x6c\x69\x67\x68\x74\x20\x70\x72\
-\x65\x20\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\
-\x20\x39\x70\x78\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\
-\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\
-\x20\x72\x67\x62\x28\x32\x34\x37\x2c\x20\x32\x34\x37\x2c\x20\x32\
-\x34\x39\x29\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\
-\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x20\x34\x70\x78\x20\
-\x34\x70\x78\x20\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\
-\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\
-\x67\x62\x28\x32\x32\x35\x2c\x20\x32\x32\x35\x2c\x20\x32\x33\x32\
-\x29\x3b\x0a\x7d\x0a\x0a\x64\x69\x76\x2e\x68\x69\x67\x68\x6c\x69\
-\x67\x68\x74\x20\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\
-\x67\x3a\x20\x30\x70\x78\x20\x31\x30\x70\x78\x20\x30\x70\x78\x3b\
-\x0a\x7d\x0a\x0a\x64\x74\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x6e\
-\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\
-\x20\x20\x20\x20\x2f\x2a\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\
-\x20\x31\x36\x70\x78\x3b\x2a\x2f\x0a\x7d\x0a\x0a\x2e\x63\x6c\x61\
-\x73\x73\x69\x66\x69\x65\x72\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2a\
-\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x70\x74\x3b\
-\x2a\x2f\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\
-\x68\x74\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x7d\x0a\x0a\x74\
-\x74\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\
-\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x45\x43\x46\x30\x46\
-\x33\x3b\x0a\x20\x20\x20\x20\x2f\x2a\x66\x6f\x6e\x74\x2d\x73\x69\
-\x7a\x65\x3a\x20\x39\x35\x25\x3b\x2a\x2f\x0a\x20\x20\x20\x20\x70\
-\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x70\x78\x20\x31\x70\x78\x3b\
-\x0a\x7d\x0a\x0a\x0a\x0a\x64\x69\x76\x2e\x61\x64\x6d\x6f\x6e\x69\
-\x74\x69\x6f\x6e\x2e\x6e\x6f\x74\x65\x20\x7b\x0a\x20\x20\x20\x20\
-\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x30\x2e\x39\x35\x65\
-\x6d\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x31\
-\x2e\x33\x65\x6d\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\
-\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x42\x43\x45\
-\x38\x46\x31\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x39\x45\x44\
-\x46\x37\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\
-\x20\x30\x70\x78\x20\x35\x70\x78\x20\x30\x20\x35\x70\x78\x3b\x0a\
-\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x41\x38\x37\
-\x41\x44\x3b\x0a\x7d\x0a\x0a\x64\x69\x76\x2e\x61\x64\x6d\x6f\x6e\
-\x69\x74\x69\x6f\x6e\x20\x70\x2e\x61\x64\x6d\x6f\x6e\x69\x74\x69\
-\x6f\x6e\x2d\x74\x69\x74\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x66\
-\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x65\x6d\x3b\x0a\x20\
-\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x37\
-\x70\x78\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\
-\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x7d\x0a\
+\x72\x67\x62\x28\x32\x34\x37\x2c\x20\x32\x34\x37\x2c\x20\x32\x34\
+\x39\x29\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\
+\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x20\x34\x70\x78\x20\x34\
+\x70\x78\x20\x34\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
+\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\x67\
+\x62\x28\x32\x32\x35\x2c\x20\x32\x32\x35\x2c\x20\x32\x33\x32\x29\
+\x3b\x0a\x7d\x0a\x0a\x64\x69\x76\x2e\x68\x69\x67\x68\x6c\x69\x67\
+\x68\x74\x20\x7b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\
+\x3a\x20\x30\x70\x78\x20\x31\x30\x70\x78\x20\x30\x70\x78\x3b\x0a\
+\x7d\x0a\x0a\x64\x74\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\
+\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x20\
+\x20\x20\x20\x2f\x2a\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\
+\x31\x36\x70\x78\x3b\x2a\x2f\x0a\x7d\x0a\x0a\x2e\x63\x6c\x61\x73\
+\x73\x69\x66\x69\x65\x72\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2a\x66\
+\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x70\x74\x3b\x2a\
+\x2f\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\
+\x74\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x7d\x0a\x0a\x74\x74\
+\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x45\x43\x46\x30\x46\x33\
+\x3b\x0a\x20\x20\x20\x20\x2f\x2a\x66\x6f\x6e\x74\x2d\x73\x69\x7a\
+\x65\x3a\x20\x39\x35\x25\x3b\x2a\x2f\x0a\x20\x20\x20\x20\x70\x61\
+\x64\x64\x69\x6e\x67\x3a\x20\x30\x70\x78\x20\x31\x70\x78\x3b\x0a\
+\x7d\x0a\x0a\x0a\x0a\x64\x69\x76\x2e\x61\x64\x6d\x6f\x6e\x69\x74\
+\x69\x6f\x6e\x2e\x6e\x6f\x74\x65\x20\x7b\x0a\x20\x20\x20\x20\x66\
+\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x30\x2e\x39\x35\x65\x6d\
+\x3b\x0a\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x31\x2e\
+\x33\x65\x6d\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\
+\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x42\x43\x45\x38\
+\x46\x31\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x39\x45\x44\x46\
+\x37\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\
+\x30\x70\x78\x20\x35\x70\x78\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\
+\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x41\x38\x37\x41\
+\x44\x3b\x0a\x7d\x0a\x0a\x64\x69\x76\x2e\x61\x64\x6d\x6f\x6e\x69\
+\x74\x69\x6f\x6e\x20\x70\x2e\x61\x64\x6d\x6f\x6e\x69\x74\x69\x6f\
+\x6e\x2d\x74\x69\x74\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\
+\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x65\x6d\x3b\x0a\x20\x20\
+\x20\x20\x6d\x61\x72\x67\x69\x6e\x2d\x74\x6f\x70\x3a\x20\x37\x70\
+\x78\x3b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\
+\x68\x74\x3a\x20\x62\x6f\x6c\x64\x3b\x0a\x7d\x0a\
 "
 
 qt_resource_name = b"\
@@ -338,7 +343,7 @@
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
 \x00\x00\x00\x00\x00\x00\x00\x00\
 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x5f\x34\x43\xab\x1e\
+\x00\x00\x01\x5f\x38\xf2\x66\x2e\
 "
 
 qt_version = QtCore.qVersion().split('.')
--- a/UI/data/documentViewerStyle.css	Sat Oct 21 15:13:56 2017 +0200
+++ b/UI/data/documentViewerStyle.css	Sat Oct 21 15:18:15 2017 +0200
@@ -1,7 +1,11 @@
+/*
+ * This style definition is based on the style sheet file of Spyder.
+ */
+ 
 body {
     background-color: white;
     color: rgb(51, 51, 51);
-    margin: 0px 25px 15px 25px;
+    margin: 0px 10px 10px 10px;
 }
 
 
@@ -49,7 +53,7 @@
     margin-bottom: 15px;
     margin-right: 1px;
     padding: 1px;
-    background-color: #fff4c5;
+    background-color: #fff4d8;
     border: 1px solid #C9C9C9;
     border-radius: 6px 6px 6px 6px;
     box-shadow: 1px 1px 7px #CACACA;
@@ -65,7 +69,7 @@
 }
 
 span.argspec-highlight {
-    color: red;
+    color: blue;
     font-size: 110%;
     font-weight: 900;
 }
@@ -90,14 +94,14 @@
 }
 
 h2 {
-    font-size: 140%;
+    font-size: 120%;
     font-weight: normal;
     border-bottom: 1px solid rgb(220, 220, 220);
     padding: 4px 0px 4px 0px;
 }
 
 h3 {
-    font-size: 115%;
+    font-size: 110%;
 }
 
 h4 {

eric ide

mercurial