Browse Source

完成菜单栏 – Report – Report Clocks;
新增主窗口任务栏图标 robot-two.png

mrh 3 years ago
parent
commit
88661bdfd2
18 changed files with 714 additions and 46 deletions
  1. 1 1
      GuiShell.py
  2. 1 1
      gui.py
  3. 2 1
      main_windows.py
  4. 27 3
      sub_windows.py
  5. 9 1
      ui/Form.ui
  6. 0 1
      ui/LineEdit.ui
  7. 4 0
      ui/MainWindows.ui
  8. 24 0
      ui/ReportClocks.py
  9. 166 0
      ui/ReportClocks.ui
  10. 0 1
      ui/SideBar.ui
  11. 1 0
      ui/img.qrc
  12. 315 4
      ui/img_rc.py
  13. BIN
      ui/resource/robot-two.png
  14. 3 3
      ui/ui_Form.py
  15. 0 3
      ui/ui_LineEdit.py
  16. 27 24
      ui/ui_MainWindows.py
  17. 134 0
      ui/ui_ReportClocks.py
  18. 0 3
      ui/ui_SideBar.py

+ 1 - 1
GuiShell.py

@@ -193,7 +193,7 @@ class _GuiMain():
         rows = [["CLKA", "DFFA/Q", "CLKB", "DFFB/D", "Sync"],
             ["CLKB", "DFFB/Q", "CLKA", "DFFA/D", "Async"]]
         form = _GuiForm(fixed_row, rows)
-        return _GuiWinForm(title, form)
+        return gui.signale(_GuiWinForm(title, form))
 
     def ReportVirtualTiming(self, from_type, from_, thru_type, thru, to_type, to, flat, limit):
         assert from_type in ("", "Clocks", "Pins", "Registers")

+ 1 - 1
gui.py

@@ -25,7 +25,7 @@ def run_forever(GUI):
     mainWindows = MainWindow(GUI)
     mainWindows.sig.connect(handle_signal)
     GUI.Elaborate("top", True)
-    mainWindows.reportException()
+    mainWindows.reportClocks()
     app.exec_()
     
 def run_in_thread(GUI:QObject):

+ 2 - 1
main_windows.py

@@ -16,6 +16,7 @@ from ui.About import AboutWindow
 from ui.Elaborate import Elaborate
 from ui.Read_Timing_Constraint import ReadTimeWindow
 from ui.ReportException import ReportExceptionWindow
+from ui.ReportClocks import ReportClocks
 import GuiType
 
 
@@ -280,7 +281,7 @@ class MainWindow(Ui_MainWindow, QMainWindow):
         d.exec_()
     
     def reportClocks(self):
-        d = ReportExceptionWindow(self)
+        d = ReportClocks(self)
         d.exec_()
     
     def outputWritten(self, text):

+ 27 - 3
sub_windows.py

@@ -30,7 +30,9 @@ def get_sub_win_list(mdiArea:QMdiArea, class_type):
             win_list.append(mid_sub_win)
     return win_list
 
-def ensure_subwin_in_midarea(mdiArea:QMdiArea, win:QWidget, pos:QPoint):
+def ensure_subwin_in_midarea(mdiArea:QMdiArea, win:QWidget, pos:QPoint=None):
+    if pos ==None:
+        pos = win.pos()
     if pos.x() in range(int(win.width()*0.3),mdiArea.width()-win.width()):
         x = pos.x()-win.width()*0.3
     elif pos.x() < 0:
@@ -82,11 +84,15 @@ class FormWindow(Ui_Form, MdiSubWindow):
         self.instan = instan
         self.setWindowTitle(instan.Title)
         self.tableView.setModel(FormWindow.get_form_model(self.instan.Form))
+        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
         
         self.mdisubwin:QMdiSubWindow = mainWindow.mdiArea.addSubWindow(self)
         self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
+        self.mdisubwin.setWindowIcon(QIcon(":/icon/resource/todo-line.png"))
         # mdisubwin.move(mdiArea.x()+(mdiArea.width()-self.width())/2 + self.width()*0.8,mdiArea.y()+(mdiArea.height()-self.height())/2)
         self.mdisubwin.show()
+        width = FormWindow.get_table_width(self.tableView, self)
+        self.mdisubwin.resize(width, self.height())
         # 必须要show之后才能 ensure_subwin_in_midarea,因为没有显示时Form窗口大小是不正确的
         # 移动到鼠标 pos 位置
         if pos:
@@ -101,7 +107,15 @@ class FormWindow(Ui_Form, MdiSubWindow):
             model.appendRow(row_items)
         return model
 
-
+    def get_table_width(tableView:QTableView, win):
+        # 表格与窗口的边距宽度
+        width = 28
+        for i in range(tableView.horizontalHeader().count()):
+            width += tableView.columnWidth(i)
+        if width < win.width():
+            width = win.width()
+        return width
+        
 class MultiFormWin(Ui_Form, MdiSubWindow):
     def __init__(self, mainWindow, instan:GuiType._GuiWinFormMulti) -> None:
         super().__init__(mainWindow)
@@ -114,9 +128,10 @@ class MultiFormWin(Ui_Form, MdiSubWindow):
         self.sheets.activated.connect(lambda index: MultiFormWin.activate_table_sheet(self.tableView, self.instan.Forms, index))
         self.reportButton.clicked.connect(self.report_table)
 
-        width = self.tableView.horizontalHeader().width() * self.tableView.horizontalHeader().count() + 25
         mdiArea:QMdiArea = mainWindow.mdiArea
         mdisub = mdiArea.addSubWindow(self)
+        width = self.tableView.horizontalHeader().width() * self.tableView.horizontalHeader().count() + 25
+        mdisub.setWindowIcon(QIcon(":/icon/resource/todo-line.png"))
         mdisub.resize(width, self.height())
         mdisub.show()
         
@@ -189,6 +204,7 @@ class LineEditWin(Ui_LineEdit, MdiSubWindow):
         mdiArea:QMdiArea = mainWindow.mdiArea
         self.mdisubwin:QMdiSubWindow = mdiArea.addSubWindow(self)
         self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
+        self.mdisubwin.setWindowIcon(QIcon(":/icon/resource/todo-line.png"))
         self.mdisubwin.resize(self.width(), mdiArea.height())
         self.mdisubwin.show()
 
@@ -241,6 +257,7 @@ class SideBarWin(Ui_SideBar, MdiSubWindow):
         self.mdiArea:QMdiArea = mdiArea
         self.mdisubwin:QMdiSubWindow = mdiArea.addSubWindow(self)
         self.mdisubwin.setAttribute(Qt.WA_DeleteOnClose)
+        self.mdisubwin.setWindowIcon(QIcon(":/icon/resource/node-tree.png"))
         # self.mdisubwin 是用于管理子窗口的,在子窗口中,是由 mdiArea 来管理显示/隐藏、大小、关闭等
         self.mdisubwin.resize(self.width(), mdiArea.height())
         self.mdisubwin.show()
@@ -417,6 +434,13 @@ class SubWindows(QObject):
         win.tableView.setModel(win.models[win.sheets.currentIndex()])
     
     def add_windows(self, instance):
+        win_info = {
+            GuiType._GuiWinFormMulti: lambda: MultiFormWin(self.ui, instance),
+            GuiType._GuiSideBar: lambda: self.side_bar.init_win_data(instance),
+            GuiType._GuiWinForm: lambda: FormWindow(self.ui, instance),
+        }
+        win_info.get(type(instance))()
+        return
         if isinstance(instance, GuiType._GuiWinFormMulti):
             MultiFormWin(self.ui, instance)
         elif isinstance(instance, GuiType._GuiSideBar):

+ 9 - 1
ui/Form.ui

@@ -23,9 +23,18 @@
      <layout class="QVBoxLayout" name="verticalLayout" stretch="12,1">
       <item>
        <widget class="QTableView" name="tableView">
+        <property name="contextMenuPolicy">
+         <enum>Qt::CustomContextMenu</enum>
+        </property>
         <property name="editTriggers">
          <set>QAbstractItemView::NoEditTriggers</set>
         </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::SingleSelection</enum>
+        </property>
+        <property name="selectionBehavior">
+         <enum>QAbstractItemView::SelectRows</enum>
+        </property>
         <attribute name="verticalHeaderVisible">
          <bool>false</bool>
         </attribute>
@@ -88,7 +97,6 @@
     </rect>
    </property>
   </widget>
-  <widget class="QStatusBar" name="statusbar"/>
  </widget>
  <resources>
   <include location="img.qrc"/>

+ 0 - 1
ui/LineEdit.ui

@@ -48,7 +48,6 @@
     </rect>
    </property>
   </widget>
-  <widget class="QStatusBar" name="statusbar"/>
  </widget>
  <resources>
   <include location="img.qrc"/>

+ 4 - 0
ui/MainWindows.ui

@@ -13,6 +13,10 @@
   <property name="windowTitle">
    <string>MainWindow</string>
   </property>
+  <property name="windowIcon">
+   <iconset resource="img.qrc">
+    <normaloff>:/icon/resource/robot-two.png</normaloff>:/icon/resource/robot-two.png</iconset>
+  </property>
   <widget class="QWidget" name="centralwidget">
    <layout class="QGridLayout" name="gridLayout">
     <item row="1" column="0">

+ 24 - 0
ui/ReportClocks.py

@@ -0,0 +1,24 @@
+import threading
+from PySide2.QtWidgets import *
+from PySide2.QtCore import *
+from PySide2.QtGui import *
+from ui.ui_ReportClocks import Ui_ReportClocks
+
+class ReportClocks(Ui_ReportClocks, QDialog):
+    def __init__(self, mainWindow) -> None:
+        super().__init__()
+        self.setupUi(self)
+        self.btn_ok.clicked.connect(self.report_clocks)
+        self.mainWindow = mainWindow
+        self.move(mainWindow.x()+(mainWindow.width()-self.width())/2,mainWindow.y()+(mainWindow.height()-self.height())/2)
+
+    def report_clocks(self):
+        start = self.start_point.text()
+        end = self.end_point.text()
+        exclude = self.exclude.text()
+        autogen = self.auto_include.isChecked()
+        include_async = self.include_ascync.isChecked()
+        # ReportClocks(self, start, end, exclude, autogen, include_async):
+        thread = threading.Thread(target=self.mainWindow.GUI.ReportClocks, args=(start, end, exclude, autogen, include_async))
+        thread.start()
+        self.close()

+ 166 - 0
ui/ReportClocks.ui

@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ReportClocks</class>
+ <widget class="QDialog" name="ReportClocks">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>266</width>
+    <height>177</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>ReportClocks</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <layout class="QGridLayout" name="gridLayout_2">
+         <item row="1" column="0">
+          <widget class="QLabel" name="end_point">
+           <property name="text">
+            <string>Endpoint Clocks</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="0">
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>Startpoint Clocks</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="exclude">
+           <property name="text">
+            <string>Exclude Clocks</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QLineEdit" name="start_point"/>
+         </item>
+         <item row="1" column="1">
+          <widget class="QLineEdit" name="lineEdit_2"/>
+         </item>
+         <item row="2" column="1">
+          <widget class="QLineEdit" name="lineEdit_3"/>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="horizontalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="auto_include">
+       <property name="text">
+        <string>Auto Include Generated Clocks</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="include_ascync">
+       <property name="text">
+        <string>Include Asynchronous Clock Relations</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <spacer name="horizontalSpacer_3">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btn_ok">
+         <property name="text">
+          <string>OK</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btn_cancel">
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="horizontalSpacer_4">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 0 - 1
ui/SideBar.ui

@@ -74,7 +74,6 @@
     </rect>
    </property>
   </widget>
-  <widget class="QStatusBar" name="statusbar"/>
  </widget>
  <resources>
   <include location="img.qrc"/>

+ 1 - 0
ui/img.qrc

@@ -1,5 +1,6 @@
 <RCC>
   <qresource prefix="icon">
+    <file>resource/robot-two.png</file>
     <file>resource/Elaborate.png</file>
     <file>resource/todo-line.png</file>
     <file>resource/node-tree.png</file>

+ 315 - 4
ui/img_rc.py

@@ -3805,6 +3805,311 @@ Y!\xc41\xd7v\xa4\xb2t\x1b\x03\x92Ek9\xe5\
 `@\x1c\xef`n\x9e\x99\x06\x18\x103\xfdqn\xc7\
 5\xf0\xff\xa9#\x10\x8c)QW~\x00\x00\x00\x00I\
 END\xaeB`\x82\
+\x00\x00\x12\xee\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\xc8\x00\x00\x00\xc8\x08\x06\x00\x00\x00\xadX\xae\x9e\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x12\
+\xa8IDATx^\xed\x9d\x7f\x90^Uy\xc7\x9f\
+\xe7\xdd\xe4\xdd\x1f\xe3\xae\xa8e\x8a\x820\xd9\x84\x0eF\
+\xc2d\xef\xbd;\xdbLLM\xa2\x14\xc7R\xa7\x15\x96\
+@\xab\x11\x84\xd2j3N\x18Kt\xa4\x0d\x01-\xb6\
+\xa0\x96\xe2\xd8j\xad`;e\x04\x22EZ\xad-\xd5\
+!\x16\xb7;\xc3\x9eswI(\xa5I\x97\x12\xea\x08\
+\x1dh\xd0\xee@\xcc&\xef}:\x87\xdee\xd25\xc9\
+\xbe\xf7\x9c\xe7\xbe\xef\xb9\xf7<\xef\xbf{\x9f\xe7<\xe7\
+\xfb=\x9f=\xef\xbd\xef=\xe7 \xc8G\x14\x10\x05N\
+\xaa\x00\x8a6\xa2\x80(pr\x05\x04\x10\x19\x1d\xa2\xc0\
+)\x14\x10@dx\x88\x02\x02\x88\x8c\x01Q\xc0N\x01\
+\x99A\xect\x93\xa8@\x14\x10@\x021Z\xbai\xa7\
+\x80\x00b\xa7\x9bD\x05\xa2\x80\x00\x12\x88\xd1\xd2M;\
+\x05\x04\x10;\xdd$*\x10\x05\x04\x90@\x8c\x96n\xda\
+) \x80\xd8\xe9&Q\x81( \x80\x04b\xb4t\xd3\
+N\x01\x01\xc4N7\x89\x0aD\x01\x01$\x10\xa3\xa5\x9b\
+v\x0a\x08 v\xbaIT \x0a\x08 \x81\x18\xcd\xd5\
+\xcd\xb1\xb1\xb1\xa1,\xcb\xce'\xa2&WN\x87</\
+(\xa5\x1ew\x88_2T\x00YR\x22\xb9`\xed\xda\
+\xb5\xe7.[\xb6\xec\xb3D\xf4\xf3\x00p\xba\x87\x8a\xcc\
+\x02\xc0\x03\xcdfs\xe7\xe4\xe4\xe4a\xce\xfa\x04\x10N\
+5k\x96k||\xbcgvv\xf6c\x88\xb8\x13\x00\
+z+\xd0\xbd\x83D\xf4\xfe4M\x1f\xe1\xaaU\x00\xe1\
+R\xb2fyV\xaf^\xdd\x1c\x18\x18x\x90\x88\xdeU\
+\xb1\xae\x11\x22nPJMp\xd4-\x80p\xa8X\xb3\
+\x1c\x15\x86c\xc1\x89\x83G\x8f\x1e}\xeb\xde\xbd{_\
+r\xb5F\x00qU\xb0f\xf15\x80c\xc1\x91/j\
+\xad?\xe4j\x8f\x00\xe2\xaa`\x8d\xe2k\x04\x87q\xe5\
+\x98\xd6\xda<i#\x17\x8b\x04\x10\x17\xf5j\x14[3\
+8^q\xa6\xd5j\xad\x98\x99\x99y\xda\xc5&\x01\xc4\
+E\xbd\x9a\xc4\xd6\x11\x8e\xdc\x9a\xcdZ\xeb\x87]l\xea\
+\x18 k\xd6\xacy]\xb3\xd9|;\x00\x8c\x01\xc0\xf9\
+\x000\x0c\x00o\x04\x80A\x00X\x06\x00G\x00\xe0E\
+D\xfc\x01\x11\xedG\xc4\xc7\x88\xe8\x9f\xb5\xd6\xdfw\xe9\
+\xa0\xc4\x9eZ\x81\x1a\xc3\x01\x88\xf86\xd7\xa7Y\xa5\x02\
+\xb2j\xd5\xaa\xde\xa1\xa1\xa1\xad\x888\x0e\x00\x17Z\x0e\
+\xd6C\x88h\x1e7\xde\xa3\xb5~\xc82\x87\x84\x9d@\
+\x81:\xc3a\xba\xdbl6\x07\x5c\x7f8,\x05\x908\
+\x8e\x7f\x06\x00>\x0a\x00\x1f\x06\x80!\xc6\xd19MD\
+\x9fO\xd3\xf4.\xc6\x9cA\xa6\xaa;\x1c\x00\xf0\xa4\xd6\
+\xfa-\xae\xe6\xb2\x03\x92$\xc9\x0e\x22\xba\x11\x00\x06\x5c\
+\x8b;Y<\x22*\x00\xd8\xa9\x94\xfavYm\xd49\
+o\x00p\x18\xfb\xb6k\xad\xff\xd8\xd5G6@\xe28\
+\x8e\x00\xe0\x0e\x00X\xefZT\xbb\xf1\x88\xf8\x05\xa5\xd4\
+\xb6v\xaf\x97\xeb\x00\x02\x81\xe3q\xad\xf5\x05\xae\x8fx\
+\xcdxa\x01$\x8a\xa2\xab\x10\xf1\xcen\x0c@3\x9b\
+ \xe2\x95SSS\xff\xd2\x8d\xf6\xab\xd4f p\x10\
+\x11\x8d\xa6i\xaa9\xbcq\x06$\x8e\xe3\xdf\x03\x80\x9b\
+9\x8aq\xc8q(\xcb\xb2\xcb\xa6\xa7\xa7\xbf\xeb\x90\xa3\
+\xd6\xa1\x81\xc0\xe1\xd7\xcb\x8aq\x1c\x7f\x12\x00~\xd7\x93\
+\x91u\x0c\x00~I\x9et\x9d\xd8\x8d8\x8e\xff\x16\x00\
+.\xf6\xc4+\xee2f\x89\xe8\xfe\xde\xde\xde]\xaeO\
+\xad\x16\x17f=\x83\xe47\xe3\x7f\xc8\xddS\xc7|/\
+5\x1a\x8dMSSSS\x8eyj\x15\x1e\xc7\xf17\
+\xcd?\x8f\x92:\xf5_\x00p5\x22:\xbf\x18hQ\
+\x9f\x9f\x0b\xa6\x92$\xb9\x94\x88v[t\xa8\x13!\xfb\
+[\xad\xd6\xd8\xcc\xcc\xcc\x8f:\xd1\x98\xcfmt\xe0k\
+\xd5sD\xb4!M\xd3\x7f\xf7Y\x07\x97\xda\x0a\xcf \
+q\x1c\x9f\x0d\x003\x00\xf0:\x97\x86\xcb\x8cE\xc4{\
+\x95R\x97\x97\xd9\x86\xef\xb9\x05\x0e\x1e\x87\x0a\x03\x12E\
+\xd1\xd7\x11\xf1\x12\x9e\xe6K\xcd\xf2\x1bZ\xeb?/\xb5\
+\x05O\x93\x0b\x1c|\xc6\x14\x02$\x8a\xa2-\x88x\x0f\
+_\xf3\xa5fz\xbe\xaf\xafo\xe5\xc4\xc4\xc4\x5c\xa9\xad\
+x\x96\x5c\xe0\xe05\xa4\x10 q\x1c\xef\x05\x805\xbc\
+%\x94\x9a\xed\xd3Z\xebO\x94\xda\x82G\xc9\x05\x0e~\
+3\xda\x06$I\x92\xadD\xf4\x17\xfc%\x94\x9a\xf1H\
+\xab\xd5:#\x84\x1bv\x81\xa3\x9cq\xd46 q\x1c\
+\x9b\xd7\xce;\xf6\x1a\x09Ww\x89hG\x9a\xa6\xb7q\
+\xe5\xf31\x8f\xc0Q\x9e+m\x01\x92\xbfg\xc5\xf2\xd3\
+\xfd\xa2\xae\x98\xfd\x8c\x9e\x04\x80\x97\x01\xc0\xbc\x01<\x02\
+\x00\xa71w\xf7\x19\x00\xf8\x1d\xe6\x9c\xde\xa4CD\xb3\
+\x96\xc6\xbc \xba\xb6\xa4\xa2j\xff(\xf7T\xba\xb5\x0b\
+\x08\xf7/\xe6\x7f\x9ae\xd9\x97\xa6\xa7\xa7\x1f[\x5c\x5c\
+\x92$\xef!\xa2\xed\x00\xb0\xa9$\xc3%m\xfb\x0a\x04\
+\x0d\x87\x91\xa9-@\x92$\x99\x22\xa2\xa4}]Oz\
+\xe5\xb3\x8dFc\xeb\xd4\xd4\xd4w\x96\xca\x15\xc7\xf1\xc7\
+\x01\xe0\xd3K]'\x7f/M\x81\xe0\xe1h\x0b\x90|\
+\xa9\xec!\x06\x1b~\x94e\xd9\xc6\x13\xcd\x1a'\xcb\x1d\
+\xc7\xf1G\x00\xc0\xf9\x9d~\x86\xdaCK!p\xe4\x8e\
+/9\x83\x8c\x8c\x8c\xbc\xa3\xd1h,\xf9\x1f\x7f\xa9\x11\
+\x84\x88\xbf\xa6\x94\xfa\xdaR\xd7-\xfe{\x1c\xc7\xe6\xc9\
+\xd9\xd6\xa2qr\xbd\xb5\x02\x02\xc7q\xd2-\x09H\x92\
+$\xdb\xcc2Wk\xb9\xff/\xf0a\xad\xf5f\x9b\x1c\
+f\xe3\xe4\x9e\x9e\x9e\xfd6\xb1\x12SX\x01\x81c\x91\
+d\xed\x00r+\x11]_X\xea\xe3)D\xbcF)\
+\xf5\x15\xdb\x1cq\x1c\x7f\x0b\x00\xdem\x1b/qm)\
+ p\x9c@\xa6%\x01\x89\xe3\xd8l\x90pe[\x12\
+\x9f\xe4\x22\x22:\xd7\xe5\x8d\xcf(\x8a>\x8f\x88\xb2\xb4\
+\xd6\xc5\x84S\xc7\x0a\x1c'\xd1\xa7\x1d@\xee\x05\x80\xcb\
+\x5c\xbc\x19\x1c\x1c\x5c\xbeg\xcf\x1e\xb3\xa0\xc9\xea\x13E\
+\xd1\xe7\x10\xf1:\xab`\x09ZJ\x01\x81\xe3\x14\x0a\x09\
+ K\x0d\x9f\xfa\xff\xfdID\xfc\x15\xa5\xd4\xbf\xd5\xbf\
+\xab\xc5{\xd8\x0e \xf2\x15\xab\xb8\xaeU\x8b\x90Y\xc4\
+\xf6+V\x92$r\x93^\xb5\xe1nW\xaf@bs\
+\x93.\x8fy\xedF[E\xa3\x04\x92E\xc6-\xf9\x15\
+K~(\xac\xe8P\xb7/[ 9N\xbb%\x01\x91\
+WM\xecGZ\x85#\x05\x92\xdc\xbc%\x011\xd7\xc9\
+\xcb\x8a\x15\x1e\xea\xf6\xa5\x0b$\xed\xbe\xcd\x1bE\xd1\xa7\
+\x10\xf1\x06{\xad\x7f*R^wg\x14\xb3\xc4T\xc1\
+C\xd2\xd6\x0c\x22\x0b\xa6J\x1c\x82\x8e\xa9e\xc1\x94\xa3\
+\x80K\x84\xb7\x05\x88\xc9!Kn\xcb5\xc2%\xbb,\
+\xb9uQ\xef\xd4\xb1m\x03\x22\x9b6\x94g\x02Gf\
+\x81\x84C\xc5\x9f\xce\xd16 \xf9,\x22\xdb\xfe\x94\xe3\
+\x03KV\x81\x84E\xc6\xff\x97\xa4\x10 \xb2q\x1c\xbf\
+\x01\xdc\x19\x05\x12^E\x0b\x01b\x9a\x96\xadGy\x0d\
+(#\x9b@\xc2\xa7ja@d\xf3j>\xf1\xcb\xcc\
+$\x90\xf0\xa8[\x18\x10\xd3\xac\x1c\x7f\xc0#~\xd9Y\
+\x04\x12w\x85\xad\x00\xc9!1\x9b\x95\xc9\x01:\xee\x1e\
+\x94\x9e\xa1\xe4\xd3\xa5\x9eC\xc4\xab\xf3\xcd\xffJ\xef\xcb\
+\xa2\x06\xfc<@g\xa1H\xcf\x8e`\x03D\xbcI)\
+\xb5\xab\xd3.U\xa1\xbd\x92!\xe9\xb6\x04f\x87\xce\x07\
+\x9a\xcd\xe6No\x8e`;\x0e\x12\x1f\x0e\xf1|\xa5\x1c\
+s\xe2\xadRj\xb4\xdbn\xf9\xd8~\x07\xben\xf9\xd0\
+m\xbf\x0e\xf1\x5cP\xa4\x9b\xc7@\x9f\xc0\x95\xcdZ\xeb\
+\x87}p\xcb\xb7\x1a\x02\x81\x84\x10q\x83Rj\x82C\
+\x7f\xeb{\x90\xc5\x8d\xe7\xefk\xdd\xe1\xc1\x0e\xf0\xff\xa0\
+\xb5~\x17\x878u\xcc\x11\x08$\x07\x8f\x1e=\xfa\xd6\
+\xbd{\xf7:\x1f,\xca\x06\xc8\xc2`\xcaO\xbf\xbd\x11\
+\x00\x06\xba5\xc0\x10q\x8dR\xea\xf1n\xb5\xef{\xbb\
+\x81@\xf2E\xad\xf5\x87\x5c\xbd`\x07\xc4\x14\x14\xc7\xb1\
+9\xca\xe0\xa3\x00\xf0a\x00\x18r-\xd2\x22\xfe>\xad\
+\xf5\x16\x8b\xb8`B\x02\x80\xe4\x98\xd6\xba\x09\x00\xe4b\
+j)\x80,\x14\xb4j\xd5\xaa\xde\xa1\xa1\xa1\xad\x888\
+\x0e\x00\x17\xba\x14Z06k\xb5Z+gff\x9e\
+.\x18\x17\xd4\xe5u\x87\xa4\xd5j\xadp\x1d\x03\xa5\x02\
+r\xfch\xcb\x97\xee\xbe\x1d\x00\xc6\x00\xe0|\x00\x18\x06\
+\x807\x02\xc0 \x00\x98C`\x8e\x00\xc0\x8b\x00\xf0z\
+\x000\xe4;}\x10\xf1\xcf\x94R\xbf\xe9\x94$\x90\xe0\
+$I\xfe\x86\x88~\xb9n\xddE\xc4MJ\xa9=.\
+\xfd\xea\x18 \xed\x16\x19E\xd1\xb5\x88\xf8\xa5v\xaf?\
+\xc5u\xf3Y\x96\x9d5==\xfd<C\xaeZ\xa7\xa8\
+\xebL\x82\x88os}\x9a\xe5\x1d \xc6\xac\xfe\xfe\xfe\
+\x1f\x00\xc0\xe9\xae\xa3\x12\x11oSJ\xedp\xcd\x13B\
+|\x1d!i6\x9b\x03\xae?\x1cz\x07\x88\x19\x8cQ\
+\x14]\x8f\x88\xb72\x0c\xcc\xb9\xbe\xbe\xbe3C;+\
+\xddV\xb7\x9aA\xf2\xa4\xd6\xfa-\xb6Z,\xc4y\x09\
+\xc8\xea\xd5\xab_\xd3\xdf\xdf\xff,\x00\xbc\xc6\xb5\x83D\
+tC\x9a\xa6\xb7\xb8\xe6\x09%\xbeF\x90l\xd7Z;\
+\x9fN\xe6% \xf9,\xc2\xb5\x93\xca\xf3\x87\x0f\x1f>\
+\xeb\x89'\x9e\x98\x0fe\x90\xbb\xf6\xb3\x06\x90<\xae\xb5\
+\xbe\xc0\xf5\x11\xaf\xd1\xd1[@FFFNo4\x1a\
+\x07\x01\xa0\xdf\xd5p\x00\xf8m\xad\xf5\x9f0\xe4\x09&\
+E\x85!!\x22\x1aM\xd3\x94\xe5\xd8ro\x01\xc9g\
+\x11\xae\x83s\x9e\xd6Z\xaf\x04\x80,\x98\x11\xce\xd0\xd1\
+\xf1\xf1\xf1\x9e\xa7\x9ez\xca\x9c.f\xde\x90\xeeeH\
+Yv\x0a?_V,\xab\xd7###o\xcag\x11\
+\xf3;\x89\xd3\x87\x88\xde\x97\xa6\xe9\xddNI\x02\x0d\xce\
+\xcf\x89\xbc\x1d\x00\xcc\x9b\xd2\xceO\x17K\x90q\x96\x88\
+\xee\xef\xed\xed\xdd\xe5\xfa\xd4jqm^\xcf \xf9,\
+\xf2\x97\x88\xf8~\x06Q\xcd\xf7\xd25\x0cy\x82N1\
+666\x94e\xd9\xf9D\xe4\xfcc.\x83\x90~/\
+\x98b\xe8\xe0\x92)\xf2\xff^\xe6\xf4#\x0e\x98/\xd6\
+Z\x9b\x03A\xe5#\x0a\xb4\xa5\x00\xc7\xa0k\xab!\x97\
+\x8b\xa2(z\x10\x11\xdf\xe3\x92#\x8f\xfd\xbe\xd6z\x03\
+C\x1eI\x11\x88\x02U\x01$6\xab\x059<\xe1x\
+\xfd\x80\xa3\x0e\xc9Q\x0d\x05*\x01\x88\x912\x8ec\xb3\
+Jp#\x83\xac\xdf\xd2Z_\xcc\x90GR\x04\xa0@\
+e\x00\x89\xa2\xe8\x22D\xfc{\x0eOdA\x15\x87\x8a\
+a\xe4\xa8\x0c \xf9,\xb2/\x7fU\xde\xd5\x9d\xbb\xb5\
+\xd6\xefsM\x22\xf1\xf5W\xa0R\x80DQt\x19\x22\
+\xde\xcb`\x8b,\xa8b\x101\x84\x14\x95\x02\x04\x00\x1a\
+q\x1c?\x05\x00\xe7\xb8\x9a\x83\x88_PJms\xcd\
+#\xf1\xf5V\xa0j\x80\x98\x9b\xf5k\x00\xe0\xcb\x0c\xb6\
+\xc8\x82*\x06\x11\xeb\x9e\xa2r\x80\xe4\x0b\xaa\xfe\x03\x00\
+\xde\xe4j\x0e\x22\xde\xa2\x94\xe2<{\xd1\xb5$\x89\xf7\
+L\x81\xca\x01\x92\xdf\xac\x9b\x1dS>\xc3\xa0\xa5,\xa8\
+b\x10\xb1\xce)*\x09\xc8\xbau\xeb\xfa\xe7\xe7\xe7\x7f\
+\x08\x00\xa7\xb9\x9aCD;\xd24\xbd\xcd5\x8f\xc4\xd7\
+S\x81J\x02\x92\xcf\x227\x03\x80\xd9\x17\xd8\xf5#\x0b\
+\xaa\x5c\x15\xacq|e\x01Y\xbbv\xedi===\
+f\x16q^PED\xd7\xa6i\xcaq\xe3_\xe3\xa1\
+\x12f\xd7*\x0bH>\x8b\x985\xc7\x1fa\xb0N\x16\
+T1\x88X\xc7\x14\x95\x06\x84yA\xd5\x964M\xef\
+\xab\xa3\xc9\xd2'{\x05*\x0dH>\x8b|\x15\x00>\
+`/\xc1\xab\x91\xb2\xa0\x8aA\xc4\xba\xa5\xa8< \xcc\
+\x0b\xaa.\xd2Z?T7\x93\xa5?\xf6\x0aT\x1e\x90\
+|\x16\xf9k\x00\xf8U{\x19^\x8d|Xk\xbd\x99\
+!\x8f\xa4\xa8\x89\x02\xb5\x00$\x8a\x22\xb6\x05UY\x96\
+\x8dNOO\xb3,\xce\xaa\xc9\x18\x09\xba\x1b\xb5\x00$\
+\x9fE\xbe\x0b\x00\x1c\xff\xfd\x1f\xd0Z\xbf7\xe8Q!\
+\x9d\x7fU\x81\xda\x00\x92$\xc9\x85D\xc4q\xff@=\
+==\xe7=\xfa\xe8\xa3\xfbe\x9c\x88\x02\xb5\x01$\x9f\
+E\xb8\x16T}Uk}\x95\x0c\x0fQ\xa0V\x80$\
+Ir)\x11\xedf\xb0\xf5X\x96e\xe7LOO\x9b\
+_\xea\xe5\x13\xb0\x02\xb5\x02\xc4\xec\x9d\x15\xc7\xb1\xd9C\
+\xeb\x5cWO\x11\xf1v\xa5\xd4u\xaey$\xbe\xda\x0a\
+\xd4\x0d\x10H\x92\xe4\x83D\xf4\x15\x06[\x0e\xcf\xcf\xcf\
+\x9f\xb9o\xdf>s,\x9c|\x02U\xa0v\x80l\xdc\
+\xb8q\xd9\xdc\xdc\x9c\xd9\x15\xdeyA\x15\x11\xedJ\xd3\
+\xf4\xa6@\xc7\x86t\x9bi;O\xef\x84L\x92\xe4:\
+\x22\xfa\x1cCa/6\x9b\xcd3\xb97Df\xa8K\
+RtH\x81\xda\xcd F7\xe6\x05U\xd7\xa5ij\
+v6\x97O\x80\x0a\xd4\x12\x10\xe3c\x92$\xbb\x88\xe8\
+F\x06O\x7f888x\xce\x9e={\x8e1\xe4\x92\
+\x14\x15S\xa0\xb6\x800/\xa8\xba*MS\xf3\xd6\xb0\
+|\x02S\xa0\xb6\x80\xe4\xb3\xc8\x1f\x11\xd1v\x06O\xf7\
+k\xad\xcf\xe38\xf3\x8e\xa1\x16I\xd1A\x05j\x0d\x08\
+\xe7\x82*\xf3\xb6\xb0\xd6\xfa\x1b\x1d\xf4F\x9a\xf2@\x81\
+Z\x03\x92\xcf\x22w\x12\x91\xf3k#\xe6\xf8\x05\xa5\x94\
+9\x82L>\x01)P{@\x98\x17Tm\xd6Z\x9b\
+c\x18\xe4\x13\x88\x02\xb5\x07\xc4\xf8\x18E\xd1\xd7\x11\xf1\
+\x12\x06O\x1f\xd2Z_\xc4\x90GRTD\x81P\x00\
+a[P%g\x8bTdd3\x95\x19\x04 \xf9,\
+\xf2\x8f\x88\xf8N\x06\xdd\xee\xd3Zoa\xc8#)*\
+\xa0@0\x80\x8c\x8c\x8c\xbc\xa3\xd1h|\x87\xc1\x139\
+[\x84A\xc4\xaa\xa4\x08\x06\x10cH\x1c\xc7f\xady\
+\xcc`\xce\x97\xb5\xd6\xd72\xe4\x91\x14\x9e+\x10\x14 \
+Q\x14\xbd\x17\x11\xefg\xf0D\xce\x16a\x10\xb1\x0a)\
+\x82\x02\x84yA\xd5mJ\xa9\x1dU0Yj\xb4W\
+ 4@\xcc#\xdf+\x11\xf1.{\xc9^\x8d\x94\xb3\
+E\x18D\xf4=Ep\x800/\xa8\xba!M\xd3[\
+|7Y\xea\xb3W\xa0\xe3\x80\x8c\x8e\x8e\x9e\x91e\xd9\
+\xe9\xf6%\xb3D\xfe:\x00|\x8c!\x93Y\x8ek\x1e\
+\x1d\x1fe\xc8%)N\xa1@\xab\xd5\xfaI\x7f\x7f\xff\
+\x7fONN\x1e\xea\xa4P\xa5\x02\xb2~\xfd\xfa\xc1\xf9\
+\xf9\xf9\xf3\x88hS\x96eo\x06\x80\x01D|C\xde\
+\xc1\xd5\x000\xd8\xc9\xce\x1e\xd7\x96\xe9\xb7\x81\xb4\xc1\xd0\
+\xfe\xff\x00\xc0\xcb\x0cy$\xc5\xc9\x15x\x1e\x00\xcc\xe9\
+\xc6@D\x87\x01\xe0\x85F\xa3\xf1\x9fD\xf4\xed\xbe\xbe\
+\xbe\xa7'&&\xe6\xca\x12\xaf\x14@\xcc,AD\xef\
+&\x22\xf3\x83\xda\xba.\x82P\x96n\x92\xd7\x0f\x05\xcc\
+l\xa2\x10\xf1\xde\xe5\xcb\x97\x7fcrr\xd2\xcc\xe8\xc4\
+Y\x1a+ f\xc68r\xe4\xc8\x07\x88\xe8z\x008\
+\x9b\xb3P\xc9%\x0a,\xa1\xc0\x01D\xfc\x83\xde\xde\xde\
+\xdd\x9c3\x0a\x1b q\x1c\x1b \xcc1f\xbf(V\
+\x8a\x02]T\xe0\xc1F\xa3\xf1[SSS\xcfq\xd4\
+\xc0\x02\xc8\xe8\xe8\xe8h\x96ewsl\xd8\xc6\xd1)\
+\xc9\x11\xbc\x02\x07\x00\xe0\x12\xad\xb5\xd9\x8a\xd6\xe9\xe3\x0c\
+H\xbe\xdeB\xcb}\x86\x93\x0f\x12\xcc\xaf\xc0s\xadV\
+\xeb\x17fff\x0c,\xd6\x1f'@\xd6\xad[\xf7\xfa\
+\xf9\xf9\xf9=\x00\xb0\xc6\xba\x02\x09\x14\x05\xcaS`_\
+\xb3\xd9\xdc\xe8\xf2h\xd8\x09\x90(\x8a\xbe\x86\x88\xe6I\
+\x95S\x9e\xf2\xf4\x91\xcc\x81+@DtW\x9a\xa6\xd7\
+\xd8>\xdd\xb2\x1e\xd8\xf9}\xc7\xf78\xce)\x0f\xdcD\
+\xe9~\xb9\x0a\x98G\xc1W\xd8\x9e=i\x05\xc8\xf8\xf8\
+x\xcf\xec\xec\xec$\x22\xca&\x06\xe5\x9a+\xd9y\x14\
+xdxxx\xd3\xee\xdd\xbb[E\xd3Y\x01\x12\xc7\
+\xb1y\x94\xfbM\x00X^\xb4A\xb9^\x14\xe8\x82\x02\
+\x87\x11\xf1\x0a\xa5\xd4\x83E\xdb\xb6\x02$\xbf\xf7\xb8\xbc\
+hcr\xbd(\xd0-\x05\x88\xe8\x9e4M\xaf(\xda\
+~a@\xf2\x8d\xa1\xcd{1g\x14mL\xae\x17\x05\
+\xba\xa8\xc03\xc3\xc3\xc3\xc3E\xbff\x15\x06$\xff\xdd\
+\xe3_\x01\xa0\xa7\x8b\x9d\x95\xa6E\x81\xa2\x0a\xcc\xb5Z\
+\xad\xb8\xe8\xef\x22\x85\x01\xc9\xef?\xfeN\x00)\xea\x8f\
+\x5c\xdfe\x05\xcc\x1b\xbf\x97\x16}\x9aU\x18\x90$I\
+.'\xa2\xbf\x12@\xbal\xb74_T\x819D\xdc\
+\xae\x942\xabI\xdb~\xe3\xd7\x06\x90m\xf9\xe9M.\
+O\xb0\x0c\xcd\xe6e\xb2\x9f\x14\xede\xa7\xafG\xc4\xd3\
+\x88\xe8\xb5D\xd4\x83\x88\xe61\xe1\x11\x22z\x09\x11_\
+\x02\x80\xac\xd3\xf5\x04\xda^_~\xcf\xeb\xb2~\xa8\x85\
+\x88\x9fX\xb1b\xc5g\x8b\xdc\x87\xd8\x00\xb2\x83\x88>\
+\xe5\xf2\x88\xb7\xd9l\x0e\xc8\xb1f\x81\x0eu\xcbn\xe7\
++Q\x9f\xb5\x0c\x7f%\x8c\x88nB\xc4\xdf\xd7Z\xb7\
+\xbd\x02\xb4+\x80\xb4Z\xad\x9f+z\xb3\xe4\x22\x8c\xc4\
+V_\x81(\x8a6 \xe2?\xb9\xf4D\x00qQO\
+b\xbdV@\x00\xf1\xda\x1e)\xae\xdb\x0a\x08 \xddv\
+@\xda\xf7Z\x01\x01\xc4k{\xa4\xb8n+ \x80t\
+\xdb\x01i\xdfk\x05\x04\x10\xaf\xed\x91\xe2\xba\xad\x80\x00\
+\xd2m\x07\xa4}\xaf\x15\x10@\xbc\xb6G\x8a\xeb\xb6\x02\
+\x02H\xb7\x1d\x90\xf6\xbdV@\x00\xf1\xda\x1e)\xae\xdb\
+\x0a\x08 \xddv@\xda\xf7Z\x01\x01\xc4k{\xa4\xb8\
+n+ \x80t\xdb\x01i\xdfk\x05\x04\x10\xaf\xed\x91\
+\xe2\xba\xad\x80\x00\xd2m\x07\xa4}\xaf\x15\x10@\xbc\xb6\
+G\x8a\xeb\xb6\x02\x02H\xb7\x1d\x90\xf6\xbdV (@\
+\x9a\xcd\xe6\x1b\x5cv\xdc\xf6\xdaI)\xae\x14\x05\xf2\x03\
+\x9a\x0e\xba$\xaf\xcc\x8aB\x22\xba\xd5\x1c\xc2h\x0e\xf5\
+t\xe9\xb0\xc4\x06\xa3\xc0\x0bY\x96\x8d \xe26\x97\x1e\
+W\x06\x10\x97NJ\xac(`\xab\x80\x00b\xab\x9c\xc4\
+\x05\xa1\x80\x00\x12\x84\xcd\xd2I[\x05\x04\x10[\xe5$\
+.\x08\x05\x04\x90 l\x96N\xda* \x80\xd8*'\
+qA( \x80\x04a\xb3t\xd2V\x01\x03\xc8\xca\x95\
++?\xd9\x89\xbdyo\x91\xdd\xddmm\x92\xb8.)\
+0g6]O\xd3\xf4\xa6\xb2ww\x97\xe3\x0f\xba\xe4\
+\xb04\xeb\xa4\x809\xa7p\x9bR\xea\xce\x22Y\x0ao\
+^\x1d\xc7\xf1\x1a\x00xL\xceF/\x22\xb3\x5c\xeb\x81\
+\x02\xe6\xc8\x8d\xf5Z\xeb}Ej\xb1\x01\xc4\x9c\x0b\xf2\
+c9\x1f\xbd\x88\xccr\xad\x07\x0a\xcc5\x9b\xcd\x9f-\
+z\xecFa@LG\xe5\x94[\x0f\xec\x96\x12\x0a)\
+@Dw\xa6izu\xa1 \xdb\xafI\xf9\x9b\x95\x8f\
+\x00\xc0\xd9E\x1b\x94\xebE\x81.(p\x00\x00\xde\xa9\
+\xb5~\xa6h\xdbV3\x88i$I\x92\x0f\x12\xd1\xed\
+\x00\xe0r,V\xd1z\xe5zQ\xa0\xa8\x02\x87\x10\xf1\
+\xfa\xa27\xe7\x0b\x8dX\x03bf\x9f$I\xb6\x10\xd1\
+\xcd\x00pn\xd1\xaa\xe5zQ\xa0\x03\x0a\x1c@\xc4\x9d\
+J\xa9{l\xdbr\x01\xe4\x956\xcd\xb9\xe9\x8dF\xe3\
+\xe3\x888\x0a\x00\xaf\x05\x807\xdb~u\xb3\xed\x84\xc4\
+\x89\x02\xb9\x02\xe6\xecAs\x8e\xe1\x8f\x89\xe8{Y\x96\
+\xdd\xe1z\xd4\x9f3 \x0b\xd6\xe4\x87,^\x80\x88g\
+\xe5\x0b\xa1d1\x94\x8c\xdbN*\xf02\x00\xbc\x9ce\
+\xd9\x81\xfe\xfe\xfe\x99\x89\x89\x09\xf3X\xd7\xf9\xc3\x06\x88\
+s%\x92@\x14\xf0P\x01\x01\xc4CS\xa4$\x7f\x14\
+\x10@\xfc\xf1B*\xf1P\x01\x01\xc4CS\xa4$\x7f\
+\x14\x10@\xfc\xf1B*\xf1P\x01\x01\xc4CS\xa4$\
+\x7f\x14\x10@\xfc\xf1B*\xf1P\x01\x01\xc4CS\xa4\
+$\x7f\x14\x10@\xfc\xf1B*\xf1P\x01\x01\xc4CS\
+\xa4$\x7f\x14\x10@\xfc\xf1B*\xf1P\x01\x01\xc4C\
+S\xa4$\x7f\x14\x10@\xfc\xf1B*\xf1P\x01\x01\xc4\
+CS\xa4$\x7f\x14\x10@\xfc\xf1B*\xf1P\x01\x01\
+\xc4CS\xa4$\x7f\x14\xf8_u\xe9\xbbA&\xceS\
+\x98\x00\x00\x00\x00IEND\xaeB`\x82\
 \x00\x00\x18\xb0\
 \x89\
 PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -4730,6 +5035,10 @@ qt_resource_name = b"\
 \x00R\
 \x00e\x00l\x00o\x00a\x00d\x00 \x00D\x00e\x00s\x00i\x00g\x00n\x00.\x00p\x00n\x00g\
 \
+\x00\x0d\
+\x09\x94\x98'\
+\x00r\
+\x00o\x00b\x00o\x00t\x00-\x00t\x00w\x00o\x00.\x00p\x00n\x00g\
 \x00\x0b\
 \x01\x98\xc7\xc7\
 \x00A\
@@ -4745,7 +5054,7 @@ qt_resource_struct = b"\
 \x00\x00\x00\x00\x00\x00\x00\x00\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
 \x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x0e\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x03\
+\x00\x00\x00\x0e\x00\x02\x00\x00\x00\x0d\x00\x00\x00\x03\
 \x00\x00\x00\x00\x00\x00\x00\x00\
 \x00\x00\x00T\x00\x00\x00\x00\x00\x01\x00\x00\x22\x96\
 \x00\x00\x01\x85|\xdc\x9eO\
@@ -4753,13 +5062,13 @@ qt_resource_struct = b"\
 \x00\x00\x01\x85|\xdc\x9e\xc6\
 \x00\x00\x012\x00\x00\x00\x00\x00\x01\x00\x00\xd2\xb3\
 \x00\x00\x01\x85|\xdc\x9e\xbb\
-\x00\x00\x01v\x00\x00\x00\x00\x00\x01\x00\x01\x04\xe3\
+\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x01\x17\xd5\
 \x00\x00\x01\x86\xb0\xeb\x8a\xf1\
-\x00\x00\x01v\x00\x00\x00\x00\x00\x01\x00\x01\x13\xb2\
+\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x01&\xa4\
 \x00\x00\x01\x86\xb0\xeb\x8a\xf1\
 \x00\x00\x00$\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
 \x00\x00\x01\x85|\xdc\x9d\xd6\
-\x00\x00\x01Z\x00\x00\x00\x00\x00\x01\x00\x00\xec/\
+\x00\x00\x01z\x00\x00\x00\x00\x00\x01\x00\x00\xff!\
 \x00\x00\x01\x85|\xdc\x9d\xfc\
 \x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x5c\xd9\
 \x00\x00\x01\x86\xb0\xf2\x7f\x97\
@@ -4769,6 +5078,8 @@ qt_resource_struct = b"\
 \x00\x00\x01\x85|\xdc\x9e0\
 \x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00A\xcd\
 \x00\x00\x01\x85|\xdc\x9e3\
+\x00\x00\x01Z\x00\x00\x00\x00\x00\x01\x00\x00\xec/\
+\x00\x00\x01\x86\xcaot\x94\
 \x00\x00\x00\xa4\x00\x00\x00\x00\x00\x01\x00\x00NU\
 \x00\x00\x01\x86\xb0\xf2\x03e\
 "

BIN
ui/resource/robot-two.png


+ 3 - 3
ui/ui_Form.py

@@ -33,7 +33,10 @@ class Ui_Form(object):
         self.verticalLayout.setObjectName(u"verticalLayout")
         self.tableView = QTableView(self.centralwidget)
         self.tableView.setObjectName(u"tableView")
+        self.tableView.setContextMenuPolicy(Qt.CustomContextMenu)
         self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
+        self.tableView.setSelectionMode(QAbstractItemView.SingleSelection)
+        self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
         self.tableView.verticalHeader().setVisible(False)
 
         self.verticalLayout.addWidget(self.tableView)
@@ -74,9 +77,6 @@ class Ui_Form(object):
         self.menubar.setObjectName(u"menubar")
         self.menubar.setGeometry(QRect(0, 0, 396, 23))
         Form.setMenuBar(self.menubar)
-        self.statusbar = QStatusBar(Form)
-        self.statusbar.setObjectName(u"statusbar")
-        Form.setStatusBar(self.statusbar)
 
         self.retranslateUi(Form)
 

+ 0 - 3
ui/ui_LineEdit.py

@@ -47,9 +47,6 @@ class Ui_LineEdit(object):
         self.menubar.setObjectName(u"menubar")
         self.menubar.setGeometry(QRect(0, 0, 460, 23))
         LineEdit.setMenuBar(self.menubar)
-        self.statusbar = QStatusBar(LineEdit)
-        self.statusbar.setObjectName(u"statusbar")
-        LineEdit.setStatusBar(self.statusbar)
 
         self.retranslateUi(LineEdit)
 

+ 27 - 24
ui/ui_MainWindows.py

@@ -22,26 +22,29 @@ class Ui_MainWindow(object):
         if not MainWindow.objectName():
             MainWindow.setObjectName(u"MainWindow")
         MainWindow.resize(1056, 871)
+        icon = QIcon()
+        icon.addFile(u":/icon/resource/robot-two.png", QSize(), QIcon.Normal, QIcon.Off)
+        MainWindow.setWindowIcon(icon)
         self.actionStop_GUI = QAction(MainWindow)
         self.actionStop_GUI.setObjectName(u"actionStop_GUI")
         self.actionExit = QAction(MainWindow)
         self.actionExit.setObjectName(u"actionExit")
         self.actionCopy = QAction(MainWindow)
         self.actionCopy.setObjectName(u"actionCopy")
-        icon = QIcon()
-        icon.addFile(u":/icon/resource/Copy.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionCopy.setIcon(icon)
+        icon1 = QIcon()
+        icon1.addFile(u":/icon/resource/Copy.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionCopy.setIcon(icon1)
         self.actionCopy.setVisible(True)
         self.actionPast = QAction(MainWindow)
         self.actionPast.setObjectName(u"actionPast")
-        icon1 = QIcon()
-        icon1.addFile(u":/icon/resource/Past.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionPast.setIcon(icon1)
+        icon2 = QIcon()
+        icon2.addFile(u":/icon/resource/Past.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionPast.setIcon(icon2)
         self.actionSelect_all = QAction(MainWindow)
         self.actionSelect_all.setObjectName(u"actionSelect_all")
-        icon2 = QIcon()
-        icon2.addFile(u":/icon/resource/Select All.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionSelect_all.setIcon(icon2)
+        icon3 = QIcon()
+        icon3.addFile(u":/icon/resource/Select All.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionSelect_all.setIcon(icon3)
         self.actionIncr_Font = QAction(MainWindow)
         self.actionIncr_Font.setObjectName(u"actionIncr_Font")
         self.actionDecr_Font = QAction(MainWindow)
@@ -68,32 +71,32 @@ class Ui_MainWindow(object):
         self.actionPreferences.setObjectName(u"actionPreferences")
         self.actionAnalyze = QAction(MainWindow)
         self.actionAnalyze.setObjectName(u"actionAnalyze")
-        icon3 = QIcon()
-        icon3.addFile(u":/icon/resource/Analyze.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionAnalyze.setIcon(icon3)
+        icon4 = QIcon()
+        icon4.addFile(u":/icon/resource/Analyze.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionAnalyze.setIcon(icon4)
         self.actionElaborate = QAction(MainWindow)
         self.actionElaborate.setObjectName(u"actionElaborate")
-        icon4 = QIcon()
-        icon4.addFile(u":/icon/resource/Elaborate.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionElaborate.setIcon(icon4)
+        icon5 = QIcon()
+        icon5.addFile(u":/icon/resource/Elaborate.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionElaborate.setIcon(icon5)
         self.actionRead_Timing_Constraint = QAction(MainWindow)
         self.actionRead_Timing_Constraint.setObjectName(u"actionRead_Timing_Constraint")
-        icon5 = QIcon()
-        icon5.addFile(u":/icon/resource/Read Timing Constraint.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionRead_Timing_Constraint.setIcon(icon5)
+        icon6 = QIcon()
+        icon6.addFile(u":/icon/resource/Read Timing Constraint.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionRead_Timing_Constraint.setIcon(icon6)
         self.actionRead_Power_Intent = QAction(MainWindow)
         self.actionRead_Power_Intent.setObjectName(u"actionRead_Power_Intent")
         self.actionRead_Power_Intent.setEnabled(False)
-        icon6 = QIcon()
-        icon6.addFile(u":/icon/resource/Read Power Intent.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionRead_Power_Intent.setIcon(icon6)
+        icon7 = QIcon()
+        icon7.addFile(u":/icon/resource/Read Power Intent.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionRead_Power_Intent.setIcon(icon7)
         font = QFont()
         self.actionRead_Power_Intent.setFont(font)
         self.actionReload_Design = QAction(MainWindow)
         self.actionReload_Design.setObjectName(u"actionReload_Design")
-        icon7 = QIcon()
-        icon7.addFile(u":/icon/resource/Reload Design.png", QSize(), QIcon.Normal, QIcon.On)
-        self.actionReload_Design.setIcon(icon7)
+        icon8 = QIcon()
+        icon8.addFile(u":/icon/resource/Reload Design.png", QSize(), QIcon.Normal, QIcon.On)
+        self.actionReload_Design.setIcon(icon8)
         self.actionReport_Exceptions = QAction(MainWindow)
         self.actionReport_Exceptions.setObjectName(u"actionReport_Exceptions")
         self.actionReport_Clocks = QAction(MainWindow)

+ 134 - 0
ui/ui_ReportClocks.py

@@ -0,0 +1,134 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'ReportClocks.ui'
+##
+## Created by: Qt User Interface Compiler version 5.15.0
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
+    QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
+from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
+    QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
+    QPixmap, QRadialGradient)
+from PySide2.QtWidgets import *
+
+
+class Ui_ReportClocks(object):
+    def setupUi(self, ReportClocks):
+        if not ReportClocks.objectName():
+            ReportClocks.setObjectName(u"ReportClocks")
+        ReportClocks.resize(266, 177)
+        self.gridLayout = QGridLayout(ReportClocks)
+        self.gridLayout.setObjectName(u"gridLayout")
+        self.verticalLayout = QVBoxLayout()
+        self.verticalLayout.setObjectName(u"verticalLayout")
+        self.horizontalLayout = QHBoxLayout()
+        self.horizontalLayout.setObjectName(u"horizontalLayout")
+        self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+        self.horizontalLayout.addItem(self.horizontalSpacer)
+
+        self.gridLayout_2 = QGridLayout()
+        self.gridLayout_2.setObjectName(u"gridLayout_2")
+        self.end_point = QLabel(ReportClocks)
+        self.end_point.setObjectName(u"end_point")
+
+        self.gridLayout_2.addWidget(self.end_point, 1, 0, 1, 1)
+
+        self.label = QLabel(ReportClocks)
+        self.label.setObjectName(u"label")
+
+        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
+
+        self.exclude = QLabel(ReportClocks)
+        self.exclude.setObjectName(u"exclude")
+
+        self.gridLayout_2.addWidget(self.exclude, 2, 0, 1, 1)
+
+        self.start_point = QLineEdit(ReportClocks)
+        self.start_point.setObjectName(u"start_point")
+
+        self.gridLayout_2.addWidget(self.start_point, 0, 1, 1, 1)
+
+        self.lineEdit_2 = QLineEdit(ReportClocks)
+        self.lineEdit_2.setObjectName(u"lineEdit_2")
+
+        self.gridLayout_2.addWidget(self.lineEdit_2, 1, 1, 1, 1)
+
+        self.lineEdit_3 = QLineEdit(ReportClocks)
+        self.lineEdit_3.setObjectName(u"lineEdit_3")
+
+        self.gridLayout_2.addWidget(self.lineEdit_3, 2, 1, 1, 1)
+
+
+        self.horizontalLayout.addLayout(self.gridLayout_2)
+
+        self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+        self.horizontalLayout.addItem(self.horizontalSpacer_2)
+
+
+        self.verticalLayout.addLayout(self.horizontalLayout)
+
+        self.auto_include = QCheckBox(ReportClocks)
+        self.auto_include.setObjectName(u"auto_include")
+        self.auto_include.setChecked(True)
+
+        self.verticalLayout.addWidget(self.auto_include)
+
+        self.include_ascync = QCheckBox(ReportClocks)
+        self.include_ascync.setObjectName(u"include_ascync")
+        self.include_ascync.setChecked(True)
+
+        self.verticalLayout.addWidget(self.include_ascync)
+
+        self.horizontalLayout_2 = QHBoxLayout()
+        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+        self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+        self.horizontalLayout_2.addItem(self.horizontalSpacer_3)
+
+        self.btn_ok = QPushButton(ReportClocks)
+        self.btn_ok.setObjectName(u"btn_ok")
+
+        self.horizontalLayout_2.addWidget(self.btn_ok)
+
+        self.btn_cancel = QPushButton(ReportClocks)
+        self.btn_cancel.setObjectName(u"btn_cancel")
+
+        self.horizontalLayout_2.addWidget(self.btn_cancel)
+
+        self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+
+        self.horizontalLayout_2.addItem(self.horizontalSpacer_4)
+
+
+        self.verticalLayout.addLayout(self.horizontalLayout_2)
+
+        self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
+
+        self.verticalLayout.addItem(self.verticalSpacer)
+
+
+        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
+
+
+        self.retranslateUi(ReportClocks)
+
+        QMetaObject.connectSlotsByName(ReportClocks)
+    # setupUi
+
+    def retranslateUi(self, ReportClocks):
+        ReportClocks.setWindowTitle(QCoreApplication.translate("ReportClocks", u"ReportClocks", None))
+        self.end_point.setText(QCoreApplication.translate("ReportClocks", u"Endpoint Clocks", None))
+        self.label.setText(QCoreApplication.translate("ReportClocks", u"Startpoint Clocks", None))
+        self.exclude.setText(QCoreApplication.translate("ReportClocks", u"Exclude Clocks", None))
+        self.auto_include.setText(QCoreApplication.translate("ReportClocks", u"Auto Include Generated Clocks", None))
+        self.include_ascync.setText(QCoreApplication.translate("ReportClocks", u"Include Asynchronous Clock Relations", None))
+        self.btn_ok.setText(QCoreApplication.translate("ReportClocks", u"OK", None))
+        self.btn_cancel.setText(QCoreApplication.translate("ReportClocks", u"Cancel", None))
+    # retranslateUi
+

+ 0 - 3
ui/ui_SideBar.py

@@ -66,9 +66,6 @@ class Ui_SideBar(object):
         self.menubar.setObjectName(u"menubar")
         self.menubar.setGeometry(QRect(0, 0, 569, 23))
         SideBar.setMenuBar(self.menubar)
-        self.statusbar = QStatusBar(SideBar)
-        self.statusbar.setObjectName(u"statusbar")
-        SideBar.setStatusBar(self.statusbar)
 
         self.retranslateUi(SideBar)