diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..4c77d6c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+
+Copyright (c) 2007-2010,
+ Lingxiao Jiang
+ * Clients should subclass from this class if they wish to provide a
+ * table rendering.
+ *
+ *
+ * The label of the rendering is constructed by retrieving the expression from
+ *
+ * By default a color provider is obtained by asking this rendering's
+ * memory block for its {@link IColorProvider} adapter. When the color
+ * provider is queried for color information, it is provided with a
+ * {@link MemoryRenderingElement} as an argument.
+ *
+ * By default a label provider is obtained by asking this rendering's
+ * memory block for its {@link ILabelProvider} adapter. When the label
+ * provider is queried for label information, it is provided with a
+ * {@link MemoryRenderingElement} as an argument.
+ *
+ * By default a font provider is obtained by asking this rendering's
+ * memory block for its {@link IFontProvider} adapter. When the font
+ * provider is queried for font information, it is provided with a
+ * {@link MemoryRenderingElement} as an argument.
+ *
+ * By default a table presentation is obtained by asking this rendering's
+ * memory block for its {@link IMemoryBlockTablePresentation} adapter.
+ *
+ * Also see the methods
+ * By default a text tooltip is displayed, and the contents for the tooltip
+ * are generated by the
+ * Clients should subclass from this class if they wish to provide a
+ * table rendering.
+ *
+ *
+ * The label of the rendering is constructed by retrieving the expression from
+ *
+ * By default a color provider is obtained by asking this rendering's
+ * memory block for its {@link IColorProvider} adapter. When the color
+ * provider is queried for color information, it is provided with a
+ * {@link MemoryRenderingElement} as an argument.
+ *
+ * By default a label provider is obtained by asking this rendering's
+ * memory block for its {@link ILabelProvider} adapter. When the label
+ * provider is queried for label information, it is provided with a
+ * {@link MemoryRenderingElement} as an argument.
+ *
+ * By default a font provider is obtained by asking this rendering's
+ * memory block for its {@link IFontProvider} adapter. When the font
+ * provider is queried for font information, it is provided with a
+ * {@link MemoryRenderingElement} as an argument.
+ *
+ * By default a table presentation is obtained by asking this rendering's
+ * memory block for its {@link IMemoryBlockTablePresentation} adapter.
+ *
+ * Also see the methods
+ * By default a text tooltip is displayed, and the contents for the tooltip
+ * are generated by the
+ *
+ * The following code creates a shell managed by a IMemoryBlockExtension
. For IMemoryBlock, the label is constructed
+ * using the memory block's start address.
+ *
+ * This rendering manages the change states of its memory bytes if the memory
+ * block does not opt to manage the change states. For IMemoryBlockExtension, if
+ * the memory block returns false when #supportsChangeManagement() is called, this
+ * rendering will calculate the change state for each byte when its content is updated.
+ * Clients may manages the change states of its memory block by returning true when
+ * #supportsChangeManagement() is called. This will cause this rendering to stop
+ * calculating the change states of the memory block. Instead it would rely on the
+ * attributes returned in the MemoryByte array to determine if a byte has changed.
+ * For IMemoryBlock, this rendering will manage the change states its content.
+ *
+ * When firing change event, be aware of the following:
+ * - whenever a change event is fired, the content provider for Memory View
+ * view checks to see if memory has actually changed.
+ * - If memory has actually changed, a refresh will commence. Changes to the memory block
+ * will be computed and will be shown with the delta icons.
+ * - If memory has not changed, content will not be refreshed. However, previous delta information
+ * will be erased. The screen will be refreshed to show that no memory has been changed. (All
+ * delta icons will be removed.)
+ *
+ * Please note that these APIs will be called multiple times by the Memory View.
+ * To improve performance, debug adapters need to cache the content of its memory block and only
+ * retrieve updated data when necessary.
+ * "popUpBegin"
).
+ */
+ public static final String EMPTY_MEMORY_GROUP = "popUpBegin"; //$NON-NLS-1$
+
+ /**
+ * Identifier for an empty group following navigation actions in the rendering
+ * (value navigationGroup
).
+ */
+ public static final String EMPTY_NAVIGATION_GROUP = "navigationGroup"; //$NON-NLS-1$
+
+ /**
+ * Identifier for an empty group following actions that are only applicable in
+ * non-auto loading mode
+ * (value nonAutoLoadGroup
).
+ */
+ public static final String EMPTY_NON_AUTO_LOAD_GROUP = "nonAutoLoadGroup"; //$NON-NLS-1$
+
+ /**
+ * Identifier for an empty group following properties actions
+ * (value propertyGroup
).
+ */
+ public static final String EMPTY_PROPERTY_GROUP = "propertyGroup"; //$NON-NLS-1$
+
+ private ISelectionChangedListener fViewerSelectionChangedListener = new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateSyncTopAddress(getTopVisibleAddress());
+ updateSyncSelectedAddress(getSelectedAddress());
+ }
+ };
+
+ private SelectionAdapter fScrollBarSelectionListener = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ updateSyncTopAddress(getTopVisibleAddress());
+ }
+ };
+
+ private IModelChangedListener fModelChangedListener = new IModelChangedListener() {
+ public void modelChanged(IModelDelta delta, IModelProxy proxy) {
+ if (delta.getElement() == getMemoryBlock())
+ {
+ showTable();
+ updateRenderingLabel(isVisible());
+ }
+ }};
+
+ private IVirtualContentListener fViewerListener = new IVirtualContentListener() {
+
+ public void handledAtBufferStart() {
+ if (getMemoryBlock() instanceof IMemoryBlockExtension)
+ {
+ if (isDynamicLoad())
+ {
+ BigInteger address = getTopVisibleAddress();
+ if (address != null && !isAtTopLimit())
+ reloadTable(address);
+ }
+ }
+ }
+
+ public void handleAtBufferEnd() {
+ if (getMemoryBlock() instanceof IMemoryBlockExtension)
+ {
+ if (isDynamicLoad())
+ {
+ BigInteger address = getTopVisibleAddress();
+ if (address != null && !isAtBottomLimit())
+ reloadTable(address);
+ }
+ }
+ }
+
+ public int getThreshold() {
+ return 3;
+ }};
+
+ private IPresentationErrorListener fPresentationErrorListener = new IPresentationErrorListener() {
+ public void handlePresentationFailure(IStatusMonitor monitor, IStatus status) {
+ showMessage(status.getMessage());
+ }};
+
+
+ /**
+ * Constructs a new table rendering of the specified type.
+ *
+ * @param renderingId memory rendering type identifier
+ */
+ public AbstractAsyncTableRendering(String renderingId) {
+ super(renderingId);
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.ui.memory.IResettableMemoryRendering#resetRendering()
+ */
+ public void resetRendering() throws DebugException {
+ BigInteger baseAddress = fContentDescriptor.getContentBaseAddress();
+ goToAddress(baseAddress);
+ fTableViewer.setSelection(baseAddress);
+ fTableViewer.setTopIndex(baseAddress);
+
+ updateSyncTopAddress(baseAddress);
+ updateSyncSelectedAddress(baseAddress);
+ }
+
+ public Control createControl(Composite parent) {
+
+ fPageBook = new PageBook(parent, SWT.NONE);
+ createMessagePage(fPageBook);
+ createTableViewer(fPageBook);
+ addListeners();
+
+ return fPageBook;
+ }
+
+ /**
+ * Create the error page of this rendering
+ * @param parent
+ */
+ private void createMessagePage(Composite parent)
+ {
+ if (fTextViewer == null)
+ {
+ fTextViewer = new TextViewer(parent, SWT.WRAP);
+ fTextViewer.setDocument(new Document());
+ StyledText styleText = fTextViewer.getTextWidget();
+ styleText.setEditable(false);
+ styleText.setEnabled(false);
+ }
+ }
+
+ /**
+ * @param parent
+ */
+ private void createTableViewer(final Composite parent)
+ {
+ StringBuffer buffer = new StringBuffer();
+ IMemoryRenderingType type = DebugUITools.getMemoryRenderingManager().getRenderingType(getRenderingId());
+ buffer.append(type.getLabel());
+ buffer.append(": "); //$NON-NLS-1$
+ buffer.append(DebugUIMessages.AbstractAsyncTableRendering_2);
+
+ Job job = new Job(buffer.toString()) {
+
+ protected IStatus run(IProgressMonitor monitor) {
+
+ // gather information from memory block
+ initAddressableSize();
+ final BigInteger topVisibleAddress = getInitialTopVisibleAddress();
+ BigInteger mbBaseAddress = null;
+ try {
+ mbBaseAddress = getMemoryBlockBaseAddress();
+ } catch (DebugException e) {
+ fError = true;
+ showMessage(e.getMessage());
+ }
+
+ // if it takes too long to get the base address, and user has canceled
+ // remove this rendering.
+ if (monitor.isCanceled())
+ {
+ getMemoryRenderingContainer().removeMemoryRendering(AbstractAsyncTableRendering.this);
+ return Status.CANCEL_STATUS;
+ }
+
+ final BigInteger finalMbBaseAddress = mbBaseAddress;
+ final BigInteger initialSelectedAddress = getInitialSelectedAddress();
+
+ if (monitor.isCanceled())
+ {
+ getMemoryRenderingContainer().removeMemoryRendering(AbstractAsyncTableRendering.this);
+ return Status.CANCEL_STATUS;
+ }
+
+ createContentDescriptor(topVisibleAddress);
+
+ // if it takes too long to get other information, and user has canceled
+ // remove this rendering.
+ if (monitor.isCanceled())
+ {
+ getMemoryRenderingContainer().removeMemoryRendering(AbstractAsyncTableRendering.this);
+ return Status.CANCEL_STATUS;
+ }
+
+ // batch update on UI thread
+ UIJob uiJob = new UIJob("Create Table Viewer UI Job"){ //$NON-NLS-1$
+ public IStatus runInUIThread(IProgressMonitor progressMonitor) {
+
+ if (fPageBook.isDisposed())
+ return Status.OK_STATUS;
+
+ fSashForm = new SashForm(parent, SWT.VERTICAL);
+ fTableViewer = new AsyncTableRenderingViewer(AbstractAsyncTableRendering.this, fSashForm, SWT.VIRTUAL | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.HIDE_SELECTION | SWT.BORDER);
+
+ GridData data = new GridData(GridData.FILL_BOTH);
+ fTableViewer.getControl().setLayoutData(data);
+
+ createGoToAddressComposite(fSashForm);
+ hideGotoAddressComposite();
+
+ IMemoryRenderingSite site = getMemoryRenderingContainer().getMemoryRenderingSite();
+ IMemoryRenderingContainer container = getMemoryRenderingContainer();
+ fPresentationContext = new MemoryViewPresentationContext(site, container, AbstractAsyncTableRendering.this);
+ fTableViewer.setContext(fPresentationContext);
+
+ // must call this after the context is created as the information is stored in the context
+ getDynamicLoadFromPreference();
+ getPageSizeFromPreference();
+
+ int numberOfLines = getNumLinesToLoad();
+ fContentDescriptor.setNumLines(numberOfLines);
+
+ BigInteger baseAddress = finalMbBaseAddress;
+ if (baseAddress == null)
+ baseAddress = BigInteger.ZERO;
+
+
+ if (!(getMemoryBlock() instanceof IMemoryBlockExtension) || !isDynamicLoad())
+ {
+ // If not extended memory block, do not create any buffer
+ // no scrolling
+ fContentDescriptor.setPreBuffer(0);
+ fContentDescriptor.setPostBuffer(0);
+ }
+
+ setupInitialFormat();
+ fTableViewer.setCellModifier(createCellModifier());
+ fTableViewer.getTable().setHeaderVisible(true);
+ fTableViewer.getTable().setLinesVisible(true);
+ fTableViewer.addPresentationErrorListener(fPresentationErrorListener);
+ fTableViewer.setInput(getMemoryBlock());
+ fTableViewer.resizeColumnsToPreferredSize();
+ fTableViewer.setTopIndex(topVisibleAddress);
+
+ fTableViewer.setSelection(initialSelectedAddress);
+
+ // SET UP FONT
+ // set to a non-proportional font
+ fTableViewer.getTable().setFont(JFaceResources.getFont(IInternalDebugUIConstants.FONT_NAME));
+
+ if (!fError)
+ showTable();
+
+ fTableViewer.addVirtualContentListener(fViewerListener);
+
+ // create context menu
+ // create pop up menu for the rendering
+ createActions();
+ IMenuListener menuListener = new IMenuListener() {
+ public void menuAboutToShow(IMenuManager mgr) {
+ fillContextMenu(mgr);
+ }
+ };
+ createPopupMenu(fTableViewer.getControl(), menuListener);
+ createPopupMenu(fTableViewer.getCursor(), menuListener);
+
+ fTableViewer.addSelectionChangedListener(fViewerSelectionChangedListener);
+ fTableViewer.getTable().getVerticalBar().addSelectionListener(fScrollBarSelectionListener);
+
+ createToolTip();
+
+ // now the rendering is successfully created
+ fIsCreated = true;
+
+ return Status.OK_STATUS;
+ }};
+ uiJob.setSystem(true);
+ uiJob.schedule();
+
+ return Status.OK_STATUS;
+
+ }};
+
+ job.schedule();
+ }
+
+ /**
+ * Create popup menu for this rendering
+ * @param control - control to create the popup menu for
+ * @param menuListener - listener to notify when popup menu is about to show
+ */
+ private void createPopupMenu(Control control, IMenuListener menuListener)
+ {
+ IMemoryRenderingContainer container = getMemoryRenderingContainer();
+ if (fMenuMgr == null)
+ {
+ fMenuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+ fMenuMgr.setRemoveAllWhenShown(true);
+ IMemoryRenderingSite site = container.getMemoryRenderingSite();
+ String menuId = container.getId();
+
+ ISelectionProvider selProvider = site.getSite().getSelectionProvider();
+
+ addMenuListener(menuListener);
+
+ site.getSite().registerContextMenu(menuId, fMenuMgr, selProvider);
+ }
+
+ addMenuListener(menuListener);
+
+ Menu popupMenu = fMenuMgr.createContextMenu(control);
+ control.setMenu(popupMenu);
+ }
+
+
+ private void addMenuListener(IMenuListener menuListener) {
+ if (fMenuListeners == null)
+ fMenuListeners = new ArrayList();
+
+ if (!fMenuListeners.contains(menuListener))
+ {
+ fMenuMgr.addMenuListener(menuListener);
+ fMenuListeners.add(menuListener);
+ }
+ }
+
+ private BigInteger getInitialSelectedAddress() {
+ // figure out selected address
+ BigInteger selectedAddress = (BigInteger) getSynchronizedProperty(AbstractAsyncTableRendering.PROPERTY_SELECTED_ADDRESS);
+ if (selectedAddress == null)
+ {
+ if (getMemoryBlock() instanceof IMemoryBlockExtension) {
+ try {
+ selectedAddress = ((IMemoryBlockExtension) getMemoryBlock()).getBigBaseAddress();
+ } catch (DebugException e) {
+ selectedAddress = BigInteger.ZERO;
+ }
+
+ if (selectedAddress == null) {
+ selectedAddress =BigInteger.ZERO;
+ }
+
+ } else {
+ long address = getMemoryBlock().getStartAddress();
+ selectedAddress = BigInteger.valueOf(address);
+ }
+ }
+ return selectedAddress;
+ }
+
+ private void addListeners()
+ {
+ DebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
+ addRenderingToSyncService();
+ JFaceResources.getFontRegistry().addListener(this);
+ }
+
+ private void removeListeners()
+ {
+ DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
+ removeRenderingFromSyncService();
+ JFaceResources.getFontRegistry().removeListener(this);
+
+ Iterator iter = fMenuListeners.iterator();
+ while (iter.hasNext())
+ {
+ fMenuMgr.removeMenuListener((IMenuListener)iter.next());
+ }
+
+ fMenuListeners.clear();
+ }
+
+ private void addRenderingToSyncService()
+ {
+ IMemoryRenderingSynchronizationService syncService = getMemoryRenderingContainer().getMemoryRenderingSite().getSynchronizationService();
+
+ if (syncService == null)
+ return;
+
+ syncService.addPropertyChangeListener(this, null);
+ }
+
+ private void removeRenderingFromSyncService()
+ {
+ IMemoryRenderingSynchronizationService syncService = getMemoryRenderingContainer().getMemoryRenderingSite().getSynchronizationService();
+
+ if (syncService == null)
+ return;
+
+ syncService.removePropertyChangeListener(this);
+ }
+
+ private void initAddressableSize()
+ {
+ // set up addressable size and figure out number of bytes required per line
+ fAddressableSize = -1;
+ try {
+ if (getMemoryBlock() instanceof IMemoryBlockExtension)
+ fAddressableSize = ((IMemoryBlockExtension)getMemoryBlock()).getAddressableSize();
+ else
+ fAddressableSize = 1;
+ } catch (DebugException e1) {
+ DebugUIPlugin.log(e1);
+ // log error and default to 1
+ fAddressableSize = 1;
+ return;
+
+ }
+ if (fAddressableSize < 1)
+ {
+ DebugUIPlugin.logErrorMessage("Invalid addressable size"); //$NON-NLS-1$
+ fAddressableSize = 1;
+ }
+ }
+
+ private BigInteger getInitialTopVisibleAddress() {
+ BigInteger topVisibleAddress = (BigInteger) getSynchronizedProperty(AbstractAsyncTableRendering.PROPERTY_TOP_ADDRESS);
+ if (topVisibleAddress == null)
+ {
+ if (getMemoryBlock() instanceof IMemoryBlockExtension)
+ {
+ try {
+ topVisibleAddress = ((IMemoryBlockExtension)getMemoryBlock()).getBigBaseAddress();
+ } catch (DebugException e1) {
+ topVisibleAddress = new BigInteger("0"); //$NON-NLS-1$
+ }
+ }
+ else
+ {
+ topVisibleAddress = BigInteger.valueOf(getMemoryBlock().getStartAddress());
+ }
+ }
+ return topVisibleAddress;
+ }
+
+ private void setupInitialFormat() {
+
+ boolean validated = validateInitialFormat();
+
+ if (!validated)
+ {
+ // pop up dialog to ask user for default values
+ StringBuffer msgBuffer = new StringBuffer(DebugUIMessages.AbstractTableRendering_20);
+ msgBuffer.append(" "); //$NON-NLS-1$
+ msgBuffer.append(this.getLabel());
+ msgBuffer.append("\n\n"); //$NON-NLS-1$
+ msgBuffer.append(DebugUIMessages.AbstractTableRendering_16);
+ msgBuffer.append("\n"); //$NON-NLS-1$
+ msgBuffer.append(DebugUIMessages.AbstractTableRendering_18);
+ msgBuffer.append("\n\n"); //$NON-NLS-1$
+
+ int bytePerLine = fBytePerLine;
+ int columnSize = fColumnSize;
+
+ // initialize this value to populate the dialog properly
+ fBytePerLine = getDefaultRowSize() / getAddressableSize();
+ fColumnSize = getDefaultColumnSize() / getAddressableSize();
+
+ FormatTableRenderingDialog dialog = new FormatTableRenderingDialog(this, DebugUIPlugin.getShell());
+ dialog.openError(msgBuffer.toString());
+
+ // restore to original value before formatting
+ fBytePerLine = bytePerLine;
+ fColumnSize = columnSize;
+
+ bytePerLine = dialog.getRowSize() * getAddressableSize();
+ columnSize = dialog.getColumnSize() * getAddressableSize();
+
+ format(bytePerLine, columnSize);
+ }
+ else
+ {
+ // Row size is stored as number of addressable units in preference store
+ int bytePerLine = getDefaultRowSize();
+ // column size is now stored as number of addressable units
+ int columnSize = getDefaultColumnSize();
+
+ // format memory block with specified "bytesPerLine" and "columnSize"
+ boolean ok = format(bytePerLine, columnSize);
+
+ if (!ok)
+ {
+ // this is to ensure that the rest of the rendering can be created
+ // and we can recover from a format error
+ format(bytePerLine, bytePerLine);
+ }
+ }
+ }
+
+ private boolean validateInitialFormat()
+ {
+ int rowSize = getDefaultRowSize();
+ int columnSize = getDefaultColumnSize();
+
+ if (rowSize < columnSize || rowSize % columnSize != 0 || rowSize == 0 || columnSize == 0)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.ui.memory.IMemoryRendering#getControl()
+ */
+ public Control getControl() {
+ return fPageBook.getParent();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public void propertyChange(PropertyChangeEvent event) {
+
+ if (!fIsCreated)
+ return;
+
+ // if memory view table font has changed
+ if (event.getProperty().equals(IInternalDebugUIConstants.FONT_NAME))
+ {
+ if (!fIsDisposed)
+ {
+ Font memoryViewFont = JFaceResources.getFont(IInternalDebugUIConstants.FONT_NAME);
+ setFont(memoryViewFont);
+ }
+ return;
+ }
+
+ Object evtSrc = event.getSource();
+
+ if (event.getProperty().equals(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE)) {
+ // always update page size, only refresh if the table is visible
+ getPageSizeFromPreference();
+ }
+
+ // do not handle event if the rendering is displaying an error
+ // or if it's not visible
+ if (isDisplayingError() || !isVisible())
+ {
+ handlePropertiesChangeWhenHidden(event);
+ return;
+ }
+
+
+ if (event.getProperty().equals(IDebugUIConstants.PREF_PADDED_STR) ||
+ event.getProperty().equals(IDebugUIConstants.PREF_CHANGED_DEBUG_ELEMENT_COLOR) ||
+ event.getProperty().equals(IDebugUIConstants.PREF_MEMORY_HISTORY_KNOWN_COLOR) ||
+ event.getProperty().equals(IDebugUIConstants.PREF_MEMORY_HISTORY_UNKNOWN_COLOR))
+ {
+ if (!fIsDisposed)
+ {
+ fTableViewer.refresh(false);
+ }
+ return;
+ }
+
+ if (event.getProperty().equals(IDebugPreferenceConstants.PREF_DYNAMIC_LOAD_MEM)) {
+ handleDyanicLoadChanged();
+ return;
+ }
+
+ if (event.getProperty().equals(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE)) {
+ if (!isDynamicLoad())
+ {
+ int pageSize = DebugUIPlugin.getDefault().getPreferenceStore().getInt(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE);
+ handlePageSizeChanged(pageSize);
+ }
+ return;
+ }
+
+ if (evtSrc == this)
+ return;
+
+ if (evtSrc instanceof IMemoryRendering)
+ {
+ IMemoryRendering rendering = (IMemoryRendering)evtSrc;
+ IMemoryBlock memoryBlock = rendering.getMemoryBlock();
+
+ // do not handle event from renderings displaying other memory blocks
+ if (memoryBlock != getMemoryBlock())
+ return;
+ }
+
+ String propertyName = event.getProperty();
+ Object value = event.getNewValue();
+
+ if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_SELECTED_ADDRESS) && value instanceof BigInteger)
+ {
+ selectedAddressChanged((BigInteger)value);
+ }
+ else if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_COL_SIZE) && value instanceof Integer)
+ {
+ columnSizeChanged(((Integer)value).intValue());
+ }
+ else if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_ROW_SIZE) && value instanceof Integer)
+ {
+ rowSizeChanged(((Integer)value).intValue());
+ }
+ else if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_TOP_ADDRESS) && value instanceof BigInteger)
+ {
+ topVisibleAddressChanged((BigInteger)value);
+ }
+ else if (propertyName.equals(IInternalDebugUIConstants.PROPERTY_PAGE_START_ADDRESS) && value instanceof BigInteger)
+ {
+ handlePageStartAddressChanged((BigInteger)value);
+ }
+ }
+
+ /**
+ *
+ */
+ private void handlePageSizeChanged(int pageSize) {
+ fPageSize = pageSize;
+ // only refresh if in non-auto-load mode
+ fContentDescriptor.setNumLines(pageSize);
+ refresh();
+ }
+
+ private void handlePropertiesChangeWhenHidden(PropertyChangeEvent event)
+ {
+ if (fPendingSyncProperties == null)
+ return;
+
+ String propertyName = event.getProperty();
+ Object value = event.getNewValue();
+
+ if (event.getSource() instanceof IMemoryRendering)
+ {
+ IMemoryRendering rendering = (IMemoryRendering)event.getSource();
+ if (rendering == this || rendering.getMemoryBlock() != getMemoryBlock())
+ {
+ return;
+ }
+ }
+
+ if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_COL_SIZE) && value instanceof Integer)
+ {
+ fPendingSyncProperties.setColumnSize(((Integer)value).intValue());
+ }
+ else if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_ROW_SIZE) && value instanceof Integer)
+ {
+ fPendingSyncProperties.setRowSize(((Integer)value).intValue());
+ }
+
+ else if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_SELECTED_ADDRESS) && value instanceof BigInteger)
+ {
+ fPendingSyncProperties.setSelectedAddress((BigInteger)value);
+ }
+ else if (propertyName.equals(AbstractAsyncTableRendering.PROPERTY_TOP_ADDRESS) && value instanceof BigInteger)
+ {
+ fPendingSyncProperties.setTopVisibleAddress((BigInteger)value);
+ }
+ else if (propertyName.equals(IInternalDebugUIConstants.PROPERTY_PAGE_START_ADDRESS) && value instanceof BigInteger)
+ {
+ fPendingSyncProperties.setPageStartAddress((BigInteger)value);
+ }
+ else if (event.getProperty().equals(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE)) {
+ int pageSize = DebugUIPlugin.getDefault().getPreferenceStore().getInt(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE);
+ fPendingSyncProperties.setPageSize(pageSize);
+ }
+ }
+
+ private void topVisibleAddressChanged(final BigInteger address)
+ {
+ final Runnable runnable = new Runnable() {
+ public void run() {
+ if (fTableViewer.getTable().isDisposed())
+ return;
+
+ doTopVisibleAddressChanged(address);
+ }};
+ runOnUIThread(runnable);
+ }
+
+ /**
+ * @param address
+ */
+ private void doTopVisibleAddressChanged(final BigInteger address) {
+ if (fIsDisposed)
+ return;
+
+ if (!isDynamicLoad())
+ {
+ fTableViewer.setTopIndex(address);
+ fTableViewer.topIndexChanged();
+ return;
+ }
+
+ if (!isAtTopBuffer(address) && !isAtBottomBuffer(address))
+ {
+ fTableViewer.setTopIndex(address);
+ fTableViewer.topIndexChanged();
+ }
+ else
+ {
+ reloadTable(address);
+ }
+ }
+
+ private boolean isAtBottomBuffer(BigInteger address)
+ {
+ int idx = fTableViewer.indexOf(address);
+ if (idx < 0)
+ return true;
+
+ int bottomIdx = idx + getNumberOfVisibleLines();
+ int elementsCnt = fTableViewer.getVirtualContentModel().getElements().length;
+ int numLinesLeft = elementsCnt - bottomIdx;
+
+ if (numLinesLeft <= 3)
+ return true;
+
+ return false;
+ }
+
+ private boolean isAtTopBuffer(BigInteger address)
+ {
+ int topIdx = fTableViewer.indexOf(address);
+ if (topIdx <= 3)
+ return true;
+
+ return false;
+ }
+
+ private void runOnUIThread(final Runnable runnable)
+ {
+ if (Display.getCurrent() != null)
+ {
+ runnable.run();
+ }
+ else
+ {
+ UIJob job = new UIJob("Async Table Rendering UI Job"){ //$NON-NLS-1$
+
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ runnable.run();
+ return Status.OK_STATUS;
+ }};
+ job.setSystem(true);
+ job.schedule();
+ }
+ }
+
+ private void selectedAddressChanged(final BigInteger address)
+ {
+ Runnable runnable = new Runnable() {
+
+ public void run() {
+
+ if (fTableViewer.getTable().isDisposed())
+ return;
+
+ // call this to make the table viewer to reload when needed
+ int i = fTableViewer.indexOf(address);
+ if (i < 0)
+ {
+ topVisibleAddressChanged(address);
+ }
+ fTableViewer.setSelection(address);
+ }
+ };
+
+ runOnUIThread(runnable);
+ }
+
+ private void setFont(Font font)
+ {
+ // set font
+ fTableViewer.getTable().setFont(font);
+ fTableViewer.getCursor().setFont(font);
+ }
+
+ private int getDefaultColumnSize() {
+
+ // default to global preference store
+ IPreferenceStore prefStore = DebugUITools.getPreferenceStore();
+ int columnSize = prefStore.getInt(IDebugPreferenceConstants.PREF_COLUMN_SIZE);
+ // actual column size is number of addressable units * size of the addressable unit
+ columnSize = columnSize * getAddressableSize();
+
+ // check synchronized col size
+ Integer colSize = (Integer)getSynchronizedProperty(AbstractAsyncTableRendering.PROPERTY_COL_SIZE);
+ if (colSize != null)
+ {
+ // column size is stored as actual number of bytes in synchronizer
+ int syncColSize = colSize.intValue();
+ if (syncColSize > 0)
+ {
+ columnSize = syncColSize;
+ }
+ }
+ else
+ {
+ IPersistableDebugElement elmt = (IPersistableDebugElement)getMemoryBlock().getAdapter(IPersistableDebugElement.class);
+ int defaultColSize = -1;
+
+ if (elmt != null)
+ {
+ if (elmt.supportsProperty(this, IDebugPreferenceConstants.PREF_COL_SIZE_BY_MODEL))
+ defaultColSize = getDefaultFromPersistableElement(IDebugPreferenceConstants.PREF_COL_SIZE_BY_MODEL);
+ }
+
+ if (defaultColSize <= 0)
+ {
+ // if not provided, get default by model
+ defaultColSize = getDefaultColumnSizeByModel(getMemoryBlock().getModelIdentifier());
+ }
+
+ if (defaultColSize > 0)
+ columnSize = defaultColSize * getAddressableSize();
+ }
+ return columnSize;
+ }
+
+ private int getDefaultRowSize() {
+
+ int rowSize = DebugUITools.getPreferenceStore().getInt(IDebugPreferenceConstants.PREF_ROW_SIZE);
+ int bytePerLine = rowSize * getAddressableSize();
+
+ // check synchronized row size
+ Integer size = (Integer)getSynchronizedProperty(AbstractAsyncTableRendering.PROPERTY_ROW_SIZE);
+ if (size != null)
+ {
+ // row size is stored as actual number of bytes in synchronizer
+ int syncRowSize = size.intValue();
+ if (syncRowSize > 0)
+ {
+ bytePerLine = syncRowSize;
+ }
+ }
+ else
+ {
+ int defaultRowSize = -1;
+ IPersistableDebugElement elmt = (IPersistableDebugElement)getMemoryBlock().getAdapter(IPersistableDebugElement.class);
+ if (elmt != null)
+ {
+ if (elmt.supportsProperty(this, IDebugPreferenceConstants.PREF_ROW_SIZE_BY_MODEL))
+ {
+ defaultRowSize = getDefaultFromPersistableElement(IDebugPreferenceConstants.PREF_ROW_SIZE_BY_MODEL);
+ return defaultRowSize * getAddressableSize();
+ }
+ }
+
+ if (defaultRowSize <= 0)
+ // no synchronized property, ask preference store by id
+ defaultRowSize = getDefaultRowSizeByModel(getMemoryBlock().getModelIdentifier());
+
+ if (defaultRowSize > 0)
+ bytePerLine = defaultRowSize * getAddressableSize();
+ }
+ return bytePerLine;
+ }
+
+ /**
+ * Returns the addressable size of this rendering's memory block in bytes.
+ *
+ * @return the addressable size of this rendering's memory block in bytes
+ */
+ public int getAddressableSize() {
+ return fAddressableSize;
+ }
+
+ private Object getSynchronizedProperty(String propertyId)
+ {
+ IMemoryRenderingSynchronizationService syncService = getMemoryRenderingContainer().getMemoryRenderingSite().getSynchronizationService();
+
+ if (syncService == null)
+ return null;
+
+ return syncService.getProperty(getMemoryBlock(), propertyId);
+ }
+
+ private int getDefaultFromPersistableElement(String propertyId) {
+ int defaultValue = -1;
+ IPersistableDebugElement elmt = (IPersistableDebugElement)getMemoryBlock().getAdapter(IPersistableDebugElement.class);
+ if (elmt != null)
+ {
+ try {
+ Object valueMB = elmt.getProperty(this, propertyId);
+ if (valueMB != null && !(valueMB instanceof Integer))
+ {
+ IStatus status = DebugUIPlugin.newErrorStatus("Model returned invalid type on " + propertyId, null); //$NON-NLS-1$
+ DebugUIPlugin.log(status);
+ }
+
+ if (valueMB != null)
+ {
+ Integer value = (Integer)valueMB;
+ defaultValue = value.intValue();
+ }
+ } catch (CoreException e) {
+ DebugUIPlugin.log(e);
+ }
+ }
+ return defaultValue;
+ }
+
+ /**
+ * @param modelId
+ * @return default number of addressable units per line for the model
+ */
+ private int getDefaultRowSizeByModel(String modelId)
+ {
+ int row = DebugUITools.getPreferenceStore().getInt(getRowPrefId(modelId));
+ if (row == 0)
+ {
+ DebugUITools.getPreferenceStore().setValue(getRowPrefId(modelId), IDebugPreferenceConstants.PREF_ROW_SIZE_DEFAULT);
+ }
+
+ row = DebugUITools.getPreferenceStore().getInt(getRowPrefId(modelId));
+ return row;
+
+ }
+
+ /**
+ * @param modelId
+ * @return default number of addressable units per column for the model
+ */
+ private int getDefaultColumnSizeByModel(String modelId)
+ {
+ int col = DebugUITools.getPreferenceStore().getInt(getColumnPrefId(modelId));
+ if (col == 0)
+ {
+ DebugUITools.getPreferenceStore().setValue(getColumnPrefId(modelId), IDebugPreferenceConstants.PREF_COLUMN_SIZE_DEFAULT);
+ }
+
+ col = DebugUITools.getPreferenceStore().getInt(getColumnPrefId(modelId));
+ return col;
+ }
+
+
+ private String getRowPrefId(String modelId) {
+ String rowPrefId = IDebugPreferenceConstants.PREF_ROW_SIZE + ":" + modelId; //$NON-NLS-1$
+ return rowPrefId;
+ }
+
+ private String getColumnPrefId(String modelId) {
+ String colPrefId = IDebugPreferenceConstants.PREF_COLUMN_SIZE + ":" + modelId; //$NON-NLS-1$
+ return colPrefId;
+ }
+
+ /**
+ * Format view tab based on the bytes per line and column.
+ *
+ * @param bytesPerLine - number of bytes per line, possible values: (1 / 2 / 4 / 8 / 16) * addressableSize
+ * @param columnSize - number of bytes per column, possible values: (1 / 2 / 4 / 8 / 16) * addressableSize
+ * @return true if format is successful, false, otherwise
+ */
+ public boolean format(int bytesPerLine, int columnSize)
+ {
+
+ // bytes per cell must be divisible to bytesPerLine
+ if (bytesPerLine % columnSize != 0)
+ {
+ return false;
+ }
+
+ if (bytesPerLine < columnSize)
+ {
+ return false;
+ }
+
+ // do not format if the view tab is already in that format
+ if(fBytePerLine == bytesPerLine && fColumnSize == columnSize){
+ return false;
+ }
+
+ fBytePerLine = bytesPerLine;
+ fColumnSize = columnSize;
+ formatViewer();
+
+ updateSyncRowSize();
+ updateSyncColSize();
+
+ return true;
+ }
+
+
+ /**
+ * Returns the number of addressable units per row.
+ *
+ * @return number of addressable units per row
+ */
+ public int getAddressableUnitPerLine() {
+ return fBytePerLine / getAddressableSize();
+ }
+
+ /**
+ * Returns the number of addressable units per column.
+ *
+ * @return number of addressable units per column
+ */
+ public int getAddressableUnitPerColumn() {
+ return fColumnSize / getAddressableSize();
+ }
+
+
+ /**
+ * This method estimates the number of visible lines in the rendering
+ * table.
+ * @return estimated number of visible lines in the table
+ */
+ private int getNumberOfVisibleLines()
+ {
+ if(fTableViewer == null)
+ return -1;
+
+ Table table = fTableViewer.getTable();
+ int height = fTableViewer.getTable().getSize().y;
+
+ // when table is not yet created, height is zero
+ if (height == 0)
+ {
+ // make use of the table viewer to estimate table size
+ height = fTableViewer.getTable().getParent().getSize().y;
+ }
+
+ // height of border
+ int border = fTableViewer.getTable().getHeaderHeight();
+
+ // height of scroll bar
+ int scroll = fTableViewer.getTable().getHorizontalBar().getSize().y;
+
+ // height of table is table's area minus border and scroll bar height
+ height = height-border-scroll;
+
+ // calculate number of visible lines
+ int lineHeight = getMinTableItemHeight(table);
+
+ int numberOfLines = height/lineHeight;
+
+ if (numberOfLines <= 0)
+ return 20;
+
+ return numberOfLines;
+ }
+
+ private int getMinTableItemHeight(Table table){
+
+ // Hack to get around Linux GTK problem.
+ // On Linux GTK, table items have variable item height as
+ // carriage returns are actually shown in a cell. Some rows will be
+ // taller than others. When calculating number of visible lines, we
+ // need to find the smallest table item height. Otherwise, the rendering
+ // underestimates the number of visible lines. As a result the rendering
+ // will not be able to get more memory as needed.
+ if (MemoryViewUtil.isLinuxGTK())
+ {
+ // check each of the items and find the minimum
+ TableItem[] items = table.getItems();
+ int minHeight = table.getItemHeight();
+ for (int i=0; inull
if none.
+ * null
+ */
+ protected IColorProvider getColorProviderAdapter()
+ {
+ return (IColorProvider)getMemoryBlock().getAdapter(IColorProvider.class);
+ }
+
+ /**
+ * Returns the label provider for this rendering's memory block or
+ * null
if none.
+ * null
+ */
+ protected ILabelProvider getLabelProviderAdapter()
+ {
+ return (ILabelProvider)getMemoryBlock().getAdapter(ILabelProvider.class);
+ }
+
+ /**
+ * Returns the font provider for this rendering's memory block or
+ * null
if none.
+ * null
+ */
+ protected IFontProvider getFontProviderAdapter()
+ {
+ return (IFontProvider)getMemoryBlock().getAdapter(IFontProvider.class);
+ }
+
+ /**
+ * Returns the table presentation for this rendering's memory block or
+ * null
if none.
+ * null
+ */
+ protected IMemoryBlockTablePresentation getTablePresentationAdapter()
+ {
+ return (IMemoryBlockTablePresentation)getMemoryBlock().getAdapter(IMemoryBlockTablePresentation.class);
+ }
+
+ /**
+ * Setup the viewer so it supports hovers to show the offset of each field
+ */
+ private void createToolTip() {
+
+ fToolTipShell = new Shell(DebugUIPlugin.getShell(), SWT.ON_TOP | SWT.RESIZE );
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 1;
+ gridLayout.marginWidth = 2;
+ gridLayout.marginHeight = 0;
+ fToolTipShell.setLayout(gridLayout);
+ fToolTipShell.setBackground(fTableViewer.getTable().getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ final Control toolTipControl = createToolTipControl(fToolTipShell);
+
+ if (toolTipControl == null)
+ {
+ // if client decide not to use tooltip support
+ fToolTipShell.dispose();
+ return;
+ }
+
+ MouseTrackAdapter listener = new MouseTrackAdapter(){
+
+ private TableItem fTooltipItem = null;
+ private int fCol = -1;
+
+ public void mouseExit(MouseEvent e){
+
+ if (!fToolTipShell.isDisposed())
+ fToolTipShell.setVisible(false);
+ fTooltipItem = null;
+ }
+
+ public void mouseHover(MouseEvent e){
+
+ Point hoverPoint = new Point(e.x, e.y);
+ Control control = null;
+
+ if (e.widget instanceof Control)
+ control = (Control)e.widget;
+
+ if (control == null)
+ return;
+
+ hoverPoint = control.toDisplay(hoverPoint);
+ TableItem item = getItem(hoverPoint);
+ int column = getColumn(hoverPoint);
+
+ //Only if there is a change in hover
+ if(this.fTooltipItem != item || fCol != column){
+
+ //Keep Track of the latest hover
+ fTooltipItem = item;
+ fCol = column;
+
+ if(item != null){
+ toolTipAboutToShow(toolTipControl, fTooltipItem, column);
+
+ //Setting location of the tooltip
+ Rectangle shellBounds = fToolTipShell.getBounds();
+ shellBounds.x = hoverPoint.x;
+ shellBounds.y = hoverPoint.y + item.getBounds(0).height;
+
+ fToolTipShell.setBounds(shellBounds);
+ fToolTipShell.pack();
+
+ fToolTipShell.setVisible(true);
+ }
+ else {
+ fToolTipShell.setVisible(false);
+ }
+ }
+ }
+ };
+
+ fTableViewer.getTable().addMouseTrackListener(listener);
+ fTableViewer.getCursor().addMouseTrackListener(listener);
+ }
+
+ /**
+ * Creates the control used to display tool tips for cells in this table. By default
+ * a label is used to display the address of the cell. Clients may override this
+ * method to create custom tooltip controls.
+ * getToolTipText(...)
and
+ * toolTipAboutToShow(...)
.
+ * createTooltipControl
may need to
+ * also override this method to ensure that the tooltip shows up properly
+ * in their customized control.
+ * getToolTipText(...)
method.
+ * null
.
+ * Returns a string to pad the cell if the memory cannot be converted
+ * successfully.
+ */
+ abstract public String getString(String renderingTypeId, BigInteger address, MemoryByte[] data);
+
+ /**
+ * Returns bytes for the given text corresponding to bytes at the given
+ * address for the specified rendering type. This is called by the cell modifier
+ * when modifying bytes in a memory block.
+ * Subclasses must convert the string value to an array of bytes. The bytes will
+ * be passed to the debug adapter for memory block modification.
+ * Returns null
if the bytes cannot be formatted properly.
+ *
+ * @param renderingTypeId rendering type identifier
+ * @param address address the bytes begin at
+ * @param currentValues current values of the data in bytes format
+ * @param newValue the string to be converted to bytes
+ * @return the bytes converted from a string
+ */
+ abstract public byte[] getBytes(String renderingTypeId, BigInteger address, MemoryByte[] currentValues, String newValue);
+}
diff --git a/samples/src/AbstractTableRendering.java b/samples/src/AbstractTableRendering.java
new file mode 100644
index 0000000..6896937
--- /dev/null
+++ b/samples/src/AbstractTableRendering.java
@@ -0,0 +1,3740 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.debug.ui.memory;
+
+import java.math.BigInteger;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.core.model.IMemoryBlockExtension;
+import org.eclipse.debug.core.model.MemoryByte;
+import org.eclipse.debug.internal.ui.DebugUIMessages;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
+import org.eclipse.debug.internal.ui.memory.IMemoryBlockConnection;
+import org.eclipse.debug.internal.ui.memory.IPersistableDebugElement;
+import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
+import org.eclipse.debug.internal.ui.views.memory.MemoryViewUtil;
+import org.eclipse.debug.internal.ui.views.memory.renderings.CopyTableRenderingToClipboardAction;
+import org.eclipse.debug.internal.ui.views.memory.renderings.FormatTableRenderingAction;
+import org.eclipse.debug.internal.ui.views.memory.renderings.FormatTableRenderingDialog;
+import org.eclipse.debug.internal.ui.views.memory.renderings.GoToAddressAction;
+import org.eclipse.debug.internal.ui.views.memory.renderings.AbstractBaseTableRendering;
+import org.eclipse.debug.internal.ui.views.memory.renderings.PrintTableRenderingAction;
+import org.eclipse.debug.internal.ui.views.memory.renderings.ReformatAction;
+import org.eclipse.debug.internal.ui.views.memory.renderings.ResetToBaseAddressAction;
+import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingCellModifier;
+import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingContentInput;
+import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingContentProvider;
+import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingLabelProvider;
+import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingLabelProviderEx;
+import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingLine;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.TextViewer;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.IBasicPropertyConstants;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IFontProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.custom.TableCursor;
+import org.eclipse.swt.custom.TableEditor;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PropertyDialogAction;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.part.PageBook;
+
+/**
+ * Abstract implementation of a table rendering.
+ * IMemoryBlockExtension
. For IMemoryBlock, the label is constructed
+ * using the memory block's start address.
+ *
+ * This rendering manages the change states of its memory bytes if the memory
+ * block does not opt to manage the change states. For IMemoryBlockExtension, if
+ * the memory block returns false when #supportsChangeManagement() is called, this
+ * rendering will calculate the change state for each byte when its content is updated.
+ * Clients may manages the change states of its memory block by returning true when
+ * #supportsChangeManagement() is called. This will cause this rendering to stop
+ * calculating the change states of the memory block. Instead it would rely on the
+ * attributes returned in the MemoryByte array to determine if a byte has changed.
+ * For IMemoryBlock, this rendering will manage the change states its content.
+ *
+ * When firing change event, be aware of the following:
+ * - whenever a change event is fired, the content provider for Memory View
+ * view checks to see if memory has actually changed.
+ * - If memory has actually changed, a refresh will commence. Changes to the memory block
+ * will be computed and will be shown with the delta icons.
+ * - If memory has not changed, content will not be refreshed. However, previous delta information
+ * will be erased. The screen will be refreshed to show that no memory has been changed. (All
+ * delta icons will be removed.)
+ *
+ * Please note that these APIs will be called multiple times by the Memory View.
+ * To improve performance, debug adapters need to cache the content of its memory block and only
+ * retrieve updated data when necessary.
+ * resetRendering
to reset this rendering.
+ */
+ public void reset()
+ {
+ try {
+ resetToBaseAddress();
+ } catch (DebugException e) {
+ MemoryViewUtil.openError(DebugUIMessages.AbstractTableRendering_12, DebugUIMessages.AbstractTableRendering_13, e); //
+ }
+ }
+
+ /**
+ * Reset this rendering to the base address.
+ * The cursor will be moved to the base address of the memory block.
+ * The table will be positioned to have the base address
+ * at the top.
+ * @throws DebugException
+ */
+ private void resetToBaseAddress() throws DebugException
+ {
+ BigInteger baseAddress;
+
+ if (getMemoryBlock() instanceof IMemoryBlockExtension)
+ {
+ baseAddress = ((IMemoryBlockExtension)getMemoryBlock()).getBigBaseAddress();
+ }
+ else
+ {
+ baseAddress = BigInteger.valueOf(getMemoryBlock().getStartAddress());
+ }
+
+ goToAddress(baseAddress);
+ topVisibleAddressChanged(baseAddress, true);
+ }
+
+ /**
+ * Returns the currently selected address in this rendering.
+ *
+ * @return the currently selected address in this rendering
+ */
+ public BigInteger getSelectedAddress() {
+ return fSelectedAddress;
+ }
+
+ /**
+ * Returns the currently selected content in this rendering as a String.
+ *
+ * @return the currently selected content in this rendering
+ */
+ public String getSelectedAsString() {
+
+ if (isAddressOutOfRange(fSelectedAddress))
+ return ""; //$NON-NLS-1$
+
+ int col = fTableCursor.getColumn();
+ TableItem rowItem = fTableCursor.getRow();
+ int row = fTableViewer.getTable().indexOf(rowItem);
+
+ if (col == 0)
+ {
+ return rowItem.getText(0);
+ }
+
+ // check precondition
+ if (col > getBytesPerLine()/getBytesPerColumn())
+ {
+ return ""; //$NON-NLS-1$
+ }
+
+ TableItem tableItem = getTableViewer().getTable().getItem(row);
+
+ return tableItem.getText(col);
+ }
+
+ /**
+ * Returns the currently selected content in this rendering as MemoryByte.
+ *
+ * @return the currently selected content in array of MemoryByte.
+ * Returns an empty array if the selected address is out of buffered range.
+ */
+ public MemoryByte[] getSelectedAsBytes()
+ {
+ if (isAddressOutOfRange(fSelectedAddress))
+ return new MemoryByte[0];
+
+ int col = fTableCursor.getColumn();
+ TableItem rowItem = fTableCursor.getRow();
+
+ // check precondition
+ if (col == 0 || col > getBytesPerLine()/getBytesPerColumn())
+ {
+ return new MemoryByte[0];
+ }
+
+ Object data = rowItem.getData();
+ if (data == null || !(data instanceof TableRenderingLine))
+ return new MemoryByte[0];
+
+ TableRenderingLine line = (TableRenderingLine)data;
+ int offset = (col-1)*(getAddressableUnitPerColumn()*getAddressableSize());
+ int end = offset + (getAddressableUnitPerColumn()*getAddressableSize());
+
+ // make a copy of the bytes to ensure that data cannot be changed
+ // by caller
+ MemoryByte[] bytes = line.getBytes(offset, end);
+ MemoryByte[] retBytes = new MemoryByte[bytes.length];
+
+ System.arraycopy(bytes, 0, retBytes, 0, bytes.length);
+
+ return retBytes;
+ }
+
+ /**
+ * Returns the number of characters a byte will convert to
+ * or -1 if unknown.
+ *
+ * @return the number of characters a byte will convert to
+ * or -1 if unknown
+ */
+ public int getNumCharsPerByte()
+ {
+ return -1;
+ }
+
+ private int getMinTableItemHeight(Table table){
+
+ // Hack to get around Linux GTK problem.
+ // On Linux GTK, table items have variable item height as
+ // carriage returns are actually shown in a cell. Some rows will be
+ // taller than others. When calculating number of visible lines, we
+ // need to find the smallest table item height. Otherwise, the rendering
+ // underestimates the number of visible lines. As a result the rendering
+ // will not be able to get more memory as needed.
+ if (MemoryViewUtil.isLinuxGTK())
+ {
+ // check each of the items and find the minimum
+ TableItem[] items = table.getItems();
+ int minHeight = table.getItemHeight();
+ for (int i=0; inull
+ */
+ protected IColorProvider getColorProviderAdapter()
+ {
+ return (IColorProvider)getMemoryBlock().getAdapter(IColorProvider.class);
+ }
+
+ /**
+ * Returns the label provider for this rendering's memory block or
+ * null
if none.
+ * null
+ */
+ protected ILabelProvider getLabelProviderAdapter()
+ {
+ return (ILabelProvider)getMemoryBlock().getAdapter(ILabelProvider.class);
+ }
+
+ /**
+ * Returns the font provider for this rendering's memory block or
+ * null
if none.
+ * null
+ */
+ protected IFontProvider getFontProviderAdapter()
+ {
+ return (IFontProvider)getMemoryBlock().getAdapter(IFontProvider.class);
+ }
+
+ /**
+ * Returns the table presentation for this rendering's memory block or
+ * null
if none.
+ * null
+ */
+ protected IMemoryBlockTablePresentation getTablePresentationAdapter()
+ {
+ return (IMemoryBlockTablePresentation)getMemoryBlock().getAdapter(IMemoryBlockTablePresentation.class);
+ }
+
+ private boolean isDynamicLoad()
+ {
+ return fContentProvider.isDynamicLoad();
+ }
+
+ private int getPageSizeInUnits()
+ {
+ return fPageSize * getAddressableUnitPerLine();
+ }
+
+ private void setSelectedAddress(BigInteger address)
+ {
+ fSelectedAddress = address;
+ }
+
+ /**
+ * Setup the viewer so it supports hovers to show the offset of each field
+ */
+ private void createToolTip() {
+
+ fToolTipShell = new Shell(DebugUIPlugin.getShell(), SWT.ON_TOP | SWT.RESIZE );
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 1;
+ gridLayout.marginWidth = 2;
+ gridLayout.marginHeight = 0;
+ fToolTipShell.setLayout(gridLayout);
+ fToolTipShell.setBackground(fTableViewer.getTable().getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ final Control toolTipControl = createToolTipControl(fToolTipShell);
+
+ if (toolTipControl == null)
+ {
+ // if client decide not to use tooltip support
+ fToolTipShell.dispose();
+ return;
+ }
+
+ MouseTrackAdapter listener = new MouseTrackAdapter(){
+
+ private TableItem fTooltipItem = null;
+ private int fCol = -1;
+
+ public void mouseExit(MouseEvent e){
+
+ if (!fToolTipShell.isDisposed())
+ fToolTipShell.setVisible(false);
+ fTooltipItem = null;
+ }
+
+ public void mouseHover(MouseEvent e){
+
+ Point hoverPoint = new Point(e.x, e.y);
+ Control control = null;
+
+ if (e.widget instanceof Control)
+ control = (Control)e.widget;
+
+ if (control == null)
+ return;
+
+ hoverPoint = control.toDisplay(hoverPoint);
+ TableItem item = getItem(hoverPoint);
+ int column = getColumn(hoverPoint);
+
+ //Only if there is a change in hover
+ if(this.fTooltipItem != item || fCol != column){
+
+ //Keep Track of the latest hover
+ fTooltipItem = item;
+ fCol = column;
+
+ if(item != null){
+ toolTipAboutToShow(toolTipControl, fTooltipItem, column);
+
+ //Setting location of the tooltip
+ Rectangle shellBounds = fToolTipShell.getBounds();
+ shellBounds.x = hoverPoint.x;
+ shellBounds.y = hoverPoint.y + item.getBounds(0).height;
+
+ fToolTipShell.setBounds(shellBounds);
+ fToolTipShell.pack();
+
+ fToolTipShell.setVisible(true);
+ }
+ else {
+ fToolTipShell.setVisible(false);
+ }
+ }
+ }
+ };
+
+ fTableViewer.getTable().addMouseTrackListener(listener);
+ fTableCursor.addMouseTrackListener(listener);
+ }
+
+ /**
+ * Bug with table widget,BUG 113015, the widget is not able to return the correct
+ * table item if SWT.FULL_SELECTION is not on when the table is created.
+ * Created the following function to work around the problem.
+ * We can remove this method when the bug is fixed.
+ * @param point
+ * @return the table item where the point is located, return null if the item cannot be located.
+ */
+ private TableItem getItem(Point point)
+ {
+ TableItem[] items = fTableViewer.getTable().getItems();
+ for (int i=0; igetToolTipText(...)
and
+ * toolTipAboutToShow(...)
.
+ * createTooltipControl
may need to
+ * also override this method to ensure that the tooltip shows up properly
+ * in their customized control.
+ * getToolTipText(...)
method.
+ * null
.
+ * Returns a string to pad the cell if the memory cannot be converted
+ * successfully.
+ */
+ abstract public String getString(String renderingTypeId, BigInteger address, MemoryByte[] data);
+
+ /**
+ * Returns bytes for the given text corresponding to bytes at the given
+ * address for the specified rendering type. This is called by the cell modifier
+ * when modifying bytes in a memory block.
+ * Subclasses must convert the string value to an array of bytes. The bytes will
+ * be passed to the debug adapter for memory block modification.
+ * Returns null
if the bytes cannot be formatted properly.
+ *
+ * @param renderingTypeId rendering type identifier
+ * @param address address the bytes begin at
+ * @param currentValues current values of the data in bytes format
+ * @param newValue the string to be converted to bytes
+ * @return the bytes converted from a string
+ */
+ abstract public byte[] getBytes(String renderingTypeId, BigInteger address, MemoryByte[] currentValues, String newValue);
+
+
+}
+
diff --git a/samples/vectors/sample-vectors_100_0 b/samples/vectors/sample-vectors_100_0
new file mode 100644
index 0000000..c7b63bd
--- /dev/null
+++ b/samples/vectors/sample-vectors_100_0
@@ -0,0 +1,188 @@
+# FILE:src/AbstractAsyncTableRendering.java, LINE:173, OFFSET:3064, NODE_KIND:128, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:29472, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:1539, TEID:12881, VARs:{}740,
+472 0 10 0 0 0 0 0 0 0 0 0 1 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 3479 0 0 0 0 1706 0 0 0 0 0 0 0 0 0 1411 0 0 0 12 0 0 0 286 0 0 131 0 0 1667 17 0 7 0 0 0 0 0 0 7 0 0 220 0 0 0 0 0 0 1280 0 341 34 0 0 0 1101 0 0 187 0 0 0 0 156 1 0 1598 0 0 0 0 996 902 0 0 0 1634 0 0 0 0 0 1553 0 0 0 0 0 0 0 58 0 228 273 0 0 1 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 21 1635 0 0 6 0 7 0 0 1411 0 0 41 0 0 2 386 0 80 8 36 65 134 221 0 2 0 0 12 0 0 28 4 15 3 21 8 0 54 0 0 806 100 0 1 0 0 37 0 0 0 5 18 3 0 34 0 0 0 0 0 44 84 28 14 0 0 0 0 10 0 2 0 12 7 1 0 95 10 0 42 0 0 0 0 0 0 151 2 21 0 0 117 11 4 0 14 0 0 1 46 2 0 12 3479 0 0 1 24 44 0 25 0 0 6 23 107
+# FILE:src/AbstractAsyncTableRendering.java, LINE:845, OFFSET:890, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:592, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:4144, TEID:4354, VARs:{}26,
+16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 38 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 7 0 0 6 0 0 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 3 1 0 0 0 22 0 0 1 0 0 0 0 0 0 0 32 0 0 0 0 20 24 0 0 0 32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 32 0 0 4 0 0 0 13 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 2 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 71 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:991, OFFSET:1009, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:410, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:4736, TEID:4876, VARs:{}18,
+5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 0 0 0 0 27 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 5 4 0 0 0 9 0 0 1 0 0 0 0 0 0 0 27 0 0 0 0 11 12 0 0 0 32 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 5 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 0 0 0 0 0 0 0 0 0 0 5 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:995, OFFSET:1009, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:334, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:4762, TEID:4876, VARs:{}16,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 22 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 4 3 0 0 0 8 0 0 1 0 0 0 0 0 0 0 22 0 0 0 0 9 10 0 0 0 26 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 4 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 0 0 0 0 4 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1040, OFFSET:1063, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:530, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:4980, TEID:5175, VARs:{}29,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 32 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 1 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 6 5 0 0 0 14 0 0 1 0 0 0 0 0 0 0 32 0 0 0 0 13 18 0 0 0 37 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 27 0 0 0 0 0 0 1 0 0 0 5 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0 0 0 5 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1044, OFFSET:1063, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:436, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5014, TEID:5175, VARs:{}27,
+5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 0 0 0 0 26 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 1 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 5 4 0 0 0 11 0 0 1 0 0 0 0 0 0 0 26 0 0 0 0 11 15 0 0 0 30 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 22 0 0 0 0 0 0 1 0 0 0 4 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 0 0 0 0 0 0 0 0 0 0 4 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1049, OFFSET:1063, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:342, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5048, TEID:5175, VARs:{}23,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 20 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 1 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 4 3 0 0 0 8 0 0 1 0 0 0 0 0 0 0 20 0 0 0 0 9 12 0 0 0 23 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 17 0 0 0 0 0 0 1 0 0 0 3 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 0 0 0 0 0 0 3 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1053, OFFSET:1063, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:263, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5076, TEID:5175, VARs:{}21,
+3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 15 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 1 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 3 2 0 0 0 7 0 0 1 0 0 0 0 0 0 0 15 0 0 0 0 7 10 0 0 0 17 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 13 0 0 0 0 0 0 1 0 0 0 2 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 0 0 0 0 0 0 2 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1187, OFFSET:1214, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:364, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5638, TEID:5757, VARs:{}16,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 25 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 3 0 0 4 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 5 1 0 0 0 17 0 0 5 0 0 0 0 0 0 0 24 0 0 0 0 14 9 0 0 0 24 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 19 0 0 0 0 0 0 7 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 7 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 1 0 0 4 0 0 0 2 0 0 0 0 0 0 0 32 0 0 0 1 0 0 0 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1226, OFFSET:1253, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:384, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5806, TEID:5932, VARs:{}16,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 27 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 3 0 0 4 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 5 1 0 0 0 18 0 0 5 0 0 0 0 0 0 0 25 0 0 0 0 15 10 0 0 0 25 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 20 0 0 0 0 0 0 7 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 7 2 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 1 0 1 0 0 4 0 0 0 2 0 0 0 0 0 0 0 34 0 0 0 1 0 0 0 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1756, OFFSET:1781, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:380, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:7812, TEID:7951, VARs:{}17,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 24 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 1 0 0 6 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 6 1 0 0 0 23 0 0 3 0 0 0 0 0 0 0 23 0 0 0 0 14 14 0 0 0 24 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 20 0 0 3 0 0 0 5 0 0 0 1 0 0 4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 10 2 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 35 0 0 0 0 0 0 1 0 0 0 1 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1922, OFFSET:1947, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:567, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8408, TEID:8579, VARs:{}26,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54 0 0 0 0 43 0 0 0 0 0 0 0 0 0 33 0 0 0 0 0 0 0 7 0 0 1 0 0 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 2 0 0 0 0 24 0 0 3 0 0 0 0 0 0 0 37 0 0 0 0 10 12 0 0 0 38 0 0 0 0 0 35 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 2 38 0 0 0 0 0 0 0 33 0 0 0 0 0 0 8 0 0 0 1 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 8 1 0 0 0 0 1 0 0 0 0 3 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 1 0 0 6 0 0 0 1 0 0 0 0 0 0 1 54 0 0 0 0 5 0 0 0 0 0 0 3
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1924, OFFSET:1947, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:544, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8414, TEID:8579, VARs:{}26,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53 0 0 0 0 41 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 7 0 0 1 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 0 2 0 0 0 0 23 0 0 2 0 0 0 0 0 0 0 35 0 0 0 0 9 12 0 0 0 36 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 2 36 0 0 0 0 0 0 0 32 0 0 0 0 0 0 8 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 3 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 0 0 0 0 0 0 3 0 1 0 0 6 0 0 0 1 0 0 0 0 0 0 1 53 0 0 0 0 5 0 0 0 0 0 0 3
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1986, OFFSET:2032, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:601, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8681, TEID:8877, VARs:{}30,
+8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 41 0 0 0 0 0 0 0 0 0 35 0 0 0 0 0 0 0 6 0 0 0 0 0 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 5 1 0 0 0 19 0 0 3 0 0 0 0 0 0 0 39 0 0 0 0 18 17 0 0 0 40 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 0 0 0 35 0 0 0 0 0 2 6 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 14 2 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 0 0 0 4
+# FILE:src/AbstractAsyncTableRendering.java, LINE:1997, OFFSET:2032, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:524, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8709, TEID:8877, VARs:{}28,
+5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 36 0 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 6 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 0 4 0 0 0 0 17 0 0 3 0 0 0 0 0 0 0 34 0 0 0 0 14 13 0 0 0 35 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 31 0 0 0 0 0 2 6 0 0 0 1 0 0 3 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 13 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 4
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2312, OFFSET:2370, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:691, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9854, TEID:10107, VARs:{}29,
+16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 74 0 0 0 0 42 0 0 0 0 0 0 0 0 0 33 0 0 0 0 0 0 0 7 0 0 5 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 8 2 0 0 0 26 0 0 9 0 0 0 0 0 0 0 41 0 0 0 0 33 25 0 0 0 42 0 0 0 0 0 38 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 33 0 0 0 0 0 0 12 0 0 0 1 3 0 11 0 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 17 5 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 0 0 74 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2315, OFFSET:2370, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:668, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9860, TEID:10107, VARs:{}29,
+16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 0 0 0 0 40 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 7 0 0 5 0 0 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 8 2 0 0 0 25 0 0 8 0 0 0 0 0 0 0 39 0 0 0 0 32 25 0 0 0 40 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 0 0 0 32 0 0 0 0 0 0 12 0 0 0 1 3 0 10 0 0 0 0 0 0 0 1 0 0 0 0 0 0 4 0 0 17 4 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 0 0 73 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2339, OFFSET:2366, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:358, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9965, TEID:10098, VARs:{}16,
+7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 22 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 3 0 0 1 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 5 2 0 0 0 12 0 0 4 0 0 0 0 0 0 0 21 0 0 0 0 16 13 0 0 0 22 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 17 0 0 0 0 0 0 4 0 0 0 1 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 11 3 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2672, OFFSET:2682, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:398, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11084, TEID:11213, VARs:{}18,
+1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 47 0 0 0 0 26 0 0 0 0 0 0 0 0 0 19 0 0 0 1 0 0 0 4 0 0 1 0 0 26 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 2 0 0 0 0 20 0 0 2 0 0 0 0 0 0 0 24 0 0 0 0 7 7 0 0 0 24 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 19 0 0 0 0 0 0 5 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 3 0 0 1 0 0 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 47 0 0 0 0 1 0 2 0 0 0 1 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2674, OFFSET:2682, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:352, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11100, TEID:11213, VARs:{}17,
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 23 0 0 0 0 0 0 0 0 0 17 0 0 0 1 0 0 0 3 0 0 1 0 0 23 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 2 0 0 0 0 19 0 0 2 0 0 0 0 0 0 0 21 0 0 0 0 6 7 0 0 0 21 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 17 0 0 0 0 0 0 4 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 1 0 2 0 0 0 1 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2675, OFFSET:2682, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:317, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11109, TEID:11212, VARs:{}14,
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 21 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 2 0 0 1 0 0 21 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 1 0 0 0 0 18 0 0 2 0 0 0 0 0 0 0 19 0 0 0 0 5 7 0 0 0 19 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 15 0 0 0 0 0 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 2 0 0 0 1 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2705, OFFSET:2714, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:357, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11293, TEID:11408, VARs:{}15,
+1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 24 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 3 0 0 1 0 0 24 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 2 0 0 0 0 14 0 0 2 0 0 0 0 0 0 0 22 0 0 0 0 7 6 0 0 0 22 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 17 0 0 0 0 0 0 4 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 45 0 0 0 0 0 0 2 0 0 0 1 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2707, OFFSET:2714, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:334, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11299, TEID:11408, VARs:{}15,
+1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 22 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 3 0 0 1 0 0 22 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 2 0 0 0 0 13 0 0 1 0 0 0 0 0 0 0 20 0 0 0 0 6 6 0 0 0 20 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 16 0 0 0 0 0 0 4 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 44 0 0 0 0 0 0 2 0 0 0 1 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2707, OFFSET:2714, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:332, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11300, TEID:11407, VARs:{}15,
+1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 22 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 3 0 0 1 0 0 22 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 1 0 0 0 0 13 0 0 1 0 0 0 0 0 0 0 20 0 0 0 0 5 6 0 0 0 20 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 16 0 0 0 0 0 0 4 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 44 0 0 0 0 0 0 2 0 0 0 1 2
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2736, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:577, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11428, TEID:11607, VARs:{}25,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 41 0 0 0 0 0 0 0 0 0 33 0 0 0 0 0 0 0 8 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 5 1 0 0 0 18 0 0 5 0 0 0 0 0 0 0 38 0 0 0 0 12 11 0 0 0 41 0 0 0 0 0 37 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 40 0 0 0 0 0 0 0 33 0 0 0 0 0 0 8 0 0 0 3 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 7 3 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 59 0 0 0 0 2 0 1 0 0 0 1 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2737, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:559, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11434, TEID:11607, VARs:{}25,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 0 0 0 0 40 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 8 0 0 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 5 1 0 0 0 18 0 0 4 0 0 0 0 0 0 0 37 0 0 0 0 11 11 0 0 0 39 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 39 0 0 0 0 0 0 0 32 0 0 0 0 0 0 8 0 0 0 2 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 7 3 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 57 0 0 0 0 2 0 1 0 0 0 1 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2738, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:491, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11456, TEID:11606, VARs:{}21,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 36 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 7 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 4 1 0 0 0 15 0 0 4 0 0 0 0 0 0 0 33 0 0 0 0 10 8 0 0 0 35 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 35 0 0 0 0 0 0 0 28 0 0 0 0 0 0 7 0 0 0 2 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 4 3 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 48 0 0 0 0 2 0 1 0 0 0 1 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2739, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:455, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11466, TEID:11606, VARs:{}21,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 33 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 7 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 4 1 0 0 0 14 0 0 3 0 0 0 0 0 0 0 30 0 0 0 0 9 8 0 0 0 31 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 32 0 0 0 0 0 0 0 27 0 0 0 0 0 0 7 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 4 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 45 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2740, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:430, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11476, TEID:11605, VARs:{}18,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 32 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 6 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 3 1 0 0 0 13 0 0 3 0 0 0 0 0 0 0 29 0 0 0 0 8 7 0 0 0 30 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 31 0 0 0 0 0 0 0 26 0 0 0 0 0 0 6 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 41 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2741, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:412, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11482, TEID:11605, VARs:{}18,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 31 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 6 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 3 1 0 0 0 13 0 0 2 0 0 0 0 0 0 0 28 0 0 0 0 7 7 0 0 0 28 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 30 0 0 0 0 0 0 0 25 0 0 0 0 0 0 6 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 39 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2743, OFFSET:2757, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:380, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11491, TEID:11604, VARs:{}16,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 29 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 5 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 2 1 0 0 0 13 0 0 2 0 0 0 0 0 0 0 26 0 0 0 0 6 7 0 0 0 26 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 2 28 0 0 0 0 0 0 0 23 0 0 0 0 0 0 5 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 35 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2802, OFFSET:2824, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:360, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11751, TEID:11881, VARs:{}12,
+5 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 0 0 0 26 0 0 0 0 0 0 0 0 0 15 0 0 0 4 0 0 0 2 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 5 2 0 0 0 16 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 11 10 0 0 0 18 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 15 0 0 1 0 0 0 2 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 3 0 0 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0 1 0 0 0 40 0 0 0 0 4 0 3 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2806, OFFSET:2824, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:308, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11769, TEID:11881, VARs:{}12,
+5 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 22 0 0 0 0 0 0 0 0 0 13 0 0 0 4 0 0 0 1 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 5 2 0 0 0 14 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 10 10 0 0 0 15 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 13 0 0 1 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 1 0 0 0 35 0 0 0 0 4 0 3 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2806, OFFSET:2824, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:306, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11770, TEID:11880, VARs:{}12,
+5 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 22 0 0 0 0 0 0 0 0 0 13 0 0 0 4 0 0 0 1 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 4 2 0 0 0 14 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 9 10 0 0 0 15 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 13 0 0 1 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 1 0 0 0 35 0 0 0 0 4 0 3 0 0 0 0 0
+# FILE:src/AbstractAsyncTableRendering.java, LINE:2870, OFFSET:2890, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:290, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:12020, TEID:12130, VARs:{}14,
+8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 0 0 0 0 17 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 2 0 0 3 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 5 0 0 0 0 12 0 0 3 0 0 0 0 0 1 0 16 0 0 0 0 14 10 0 0 0 17 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 14 0 0 1 0 0 0 5 0 0 0 1 1 0 3 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 1 0 0 0 0 31 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:141, OFFSET:3736, NODE_KIND:128, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:36432, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:1100, TEID:14587, VARs:{}686,
+564 0 22 0 0 0 0 2 0 0 0 0 1 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 4070 0 0 0 0 2239 0 0 0 0 0 0 0 0 1 1815 0 0 0 26 0 0 0 340 0 0 162 0 0 2176 16 0 5 0 0 0 0 0 0 5 0 0 194 0 0 0 0 0 0 1653 0 419 55 0 0 0 1401 0 0 249 0 0 0 0 141 4 0 2076 0 0 0 0 1265 1123 0 0 0 2110 0 0 0 0 0 1998 0 0 0 0 0 0 0 49 0 291 223 0 0 1 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 22 2131 0 0 4 0 5 0 0 1815 0 0 30 0 5 3 452 0 65 14 34 90 123 304 4 2 0 0 15 0 0 28 4 10 3 35 9 0 58 0 0 867 126 0 7 1 0 63 0 0 0 0 29 3 0 55 0 0 0 0 0 61 79 14 10 0 0 0 0 6 0 12 1 12 6 1 0 127 22 0 39 0 0 0 0 0 0 165 4 34 0 2 186 18 2 0 22 0 0 4 76 1 0 14 4070 0 1 1 18 61 0 35 0 0 4 31 106
+# FILE:src/AbstractTableRendering.java, LINE:397, OFFSET:420, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:484, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:1946, TEID:2111, VARs:{}22,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 32 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 6 4 0 0 0 14 0 0 3 0 0 0 0 0 0 0 32 0 0 0 0 15 16 0 0 0 37 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 5 2 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 0 0 0 0 0 0 5 0
+# FILE:src/AbstractTableRendering.java, LINE:401, OFFSET:420, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:408, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:1972, TEID:2111, VARs:{}20,
+5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 27 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 5 3 0 0 0 13 0 0 3 0 0 0 0 0 0 0 27 0 0 0 0 13 14 0 0 0 31 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 4 2 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0 0 4 0
+# FILE:src/AbstractTableRendering.java, LINE:405, OFFSET:420, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:317, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:2004, TEID:2111, VARs:{}18,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 21 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 4 2 0 0 0 10 0 0 3 0 0 0 0 0 0 0 21 0 0 0 0 11 11 0 0 0 24 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 3 2 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 3 0
+# FILE:src/AbstractTableRendering.java, LINE:532, OFFSET:585, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:640, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:2448, TEID:2666, VARs:{}24,
+10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 49 0 0 0 0 0 0 0 0 0 36 0 0 0 0 0 0 0 3 0 0 0 0 0 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 10 7 0 0 0 25 0 0 2 0 0 0 0 0 1 0 42 0 0 0 0 22 23 0 0 0 42 0 0 0 0 0 38 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 0 0 0 36 0 0 0 0 0 0 3 0 0 0 0 5 0 9 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 7 0 0 0 0 0 3 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 2 0 0 4 1 0 0 0 0 0 1 0 0 0 0 55 0 0 0 0 0 0 2 0 0 0 2 0
+# FILE:src/AbstractTableRendering.java, LINE:537, OFFSET:575, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:516, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:2462, TEID:2633, VARs:{}16,
+7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 41 0 0 0 0 0 0 0 0 0 29 0 0 0 0 0 0 0 3 0 0 0 0 0 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0 8 6 0 0 0 21 0 0 1 0 0 0 0 0 0 0 35 0 0 0 0 16 18 0 0 0 35 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 0 0 0 29 0 0 0 0 0 0 3 0 0 0 0 3 0 7 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 2 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 0 0 2 0 0 0 2 0
+# FILE:src/AbstractTableRendering.java, LINE:541, OFFSET:568, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:403, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:2488, TEID:2622, VARs:{}11,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 33 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 1 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 6 5 0 0 0 17 0 0 1 0 0 0 0 0 0 0 28 0 0 0 0 13 14 0 0 0 28 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 22 0 0 0 0 0 0 1 0 0 0 0 2 0 6 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 2 0 0 0 2 0
+# FILE:src/AbstractTableRendering.java, LINE:548, OFFSET:568, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:306, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:2520, TEID:2622, VARs:{}11,
+5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 24 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 1 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 5 4 0 0 0 12 0 0 1 0 0 0 0 0 0 0 21 0 0 0 0 11 11 0 0 0 21 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 18 0 0 0 0 0 0 1 0 0 0 0 2 0 5 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 1 0 0 0 1 0
+# FILE:src/AbstractTableRendering.java, LINE:900, OFFSET:945, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:592, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:3928, TEID:4138, VARs:{}26,
+16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 38 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 7 0 0 6 0 0 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 3 1 0 0 0 22 0 0 1 0 0 0 0 0 0 0 32 0 0 0 0 20 24 0 0 0 32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 32 0 0 4 0 0 0 13 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 2 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 71 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:960, OFFSET:987, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:364, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:4188, TEID:4307, VARs:{}16,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 25 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 3 0 0 4 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 5 1 0 0 0 17 0 0 5 0 0 0 0 0 0 0 24 0 0 0 0 14 9 0 0 0 24 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 19 0 0 0 0 0 0 7 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 7 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 1 0 0 4 0 0 0 2 0 0 0 0 0 0 0 32 0 0 0 1 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:999, OFFSET:1026, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:384, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:4356, TEID:4482, VARs:{}16,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 27 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 3 0 0 4 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 5 1 0 0 0 18 0 0 5 0 0 0 0 0 0 0 25 0 0 0 0 15 10 0 0 0 25 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 20 0 0 0 0 0 0 7 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 7 2 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 1 0 1 0 0 4 0 0 0 2 0 0 0 0 0 0 0 34 0 0 0 1 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1190, OFFSET:1212, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:242, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5192, TEID:5294, VARs:{}14,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 16 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 1 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 7 1 0 0 0 11 0 0 6 0 0 0 0 0 0 0 13 0 0 0 0 17 13 0 0 0 14 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 11 0 0 0 0 0 0 1 0 0 0 1 0 0 7 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1365, OFFSET:1386, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:292, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5769, TEID:5876, VARs:{}12,
+2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0 0 0 0 17 0 0 0 0 0 0 0 0 0 13 0 0 0 2 0 0 0 4 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 3 0 0 0 0 12 0 0 3 0 0 0 0 0 0 0 17 0 0 0 0 12 6 0 0 0 17 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 17 0 0 0 0 0 0 0 13 0 0 0 0 0 0 4 0 0 2 0 2 0 3 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 29 0 0 0 0 4 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1367, OFFSET:1386, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:278, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5773, TEID:5876, VARs:{}11,
+2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 16 0 0 0 0 0 0 0 0 0 12 0 0 0 2 0 0 0 4 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 3 0 0 0 0 12 0 0 2 0 0 0 0 0 0 0 16 0 0 0 0 11 6 0 0 0 16 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 16 0 0 0 0 0 0 0 12 0 0 0 0 0 0 4 0 0 2 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 28 0 0 0 0 4 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1407, OFFSET:1428, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:374, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5975, TEID:6115, VARs:{}18,
+3 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 28 0 0 0 0 0 0 0 0 0 16 0 0 0 1 0 0 0 3 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 5 2 0 0 0 16 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 9 12 0 0 0 19 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 16 0 0 1 0 0 0 3 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 1 0 0 4 0 0 0 0 0 0 0 1 0 0 1 45 0 0 0 0 1 0 4 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:1409, OFFSET:1428, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:328, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:5991, TEID:6115, VARs:{}18,
+3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 0 0 0 25 0 0 0 0 0 0 0 0 0 14 0 0 0 1 0 0 0 2 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 5 2 0 0 0 15 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 8 12 0 0 0 16 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 14 0 0 1 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3 0 0 0 0 0 0 0 1 0 0 1 40 0 0 0 0 1 0 4 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:1413, OFFSET:1428, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:259, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:6013, TEID:6114, VARs:{}13,
+3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 20 0 0 0 0 0 0 0 0 0 10 0 0 0 1 0 0 0 1 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 4 2 0 0 0 12 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 7 11 0 0 0 12 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 10 0 0 1 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 1 0 0 1 32 0 0 0 0 1 0 3 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1635, OFFSET:1669, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:405, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:6799, TEID:6941, VARs:{}24,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 27 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 5 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 6 0 0 0 0 15 0 0 8 0 0 0 0 0 0 0 25 0 0 0 0 20 14 0 0 0 25 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 19 0 0 0 0 0 0 5 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 6 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1637, OFFSET:1669, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:387, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:6806, TEID:6941, VARs:{}23,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 0 0 0 25 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 5 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 6 0 0 0 0 14 0 0 7 0 0 0 0 0 0 0 24 0 0 0 0 19 13 0 0 0 24 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 18 0 0 0 0 0 0 5 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 6 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1938, OFFSET:1963, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:380, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:7830, TEID:7969, VARs:{}17,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 24 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 1 0 0 6 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 6 1 0 0 0 23 0 0 3 0 0 0 0 0 0 0 23 0 0 0 0 14 14 0 0 0 24 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 20 0 0 3 0 0 0 5 0 0 0 1 0 0 4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 10 2 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 35 0 0 0 0 0 0 1 0 0 0 1 0
+# FILE:src/AbstractTableRendering.java, LINE:1993, OFFSET:2014, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:341, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8097, TEID:8220, VARs:{}11,
+5 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 25 0 0 0 0 0 0 0 0 0 14 0 0 0 4 0 0 0 1 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 5 2 0 0 0 15 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 11 9 0 0 0 17 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 14 0 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 3 0 0 0 0 0 0 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0 1 0 0 0 38 0 0 0 0 4 0 3 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1997, OFFSET:2014, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:289, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8115, TEID:8220, VARs:{}11,
+5 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 0 0 0 21 0 0 0 0 0 0 0 0 0 12 0 0 0 4 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 5 2 0 0 0 13 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 10 9 0 0 0 14 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 12 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 1 0 0 0 33 0 0 0 0 4 0 3 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:1997, OFFSET:2014, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:287, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8116, TEID:8219, VARs:{}11,
+5 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 0 0 0 21 0 0 0 0 0 0 0 0 0 12 0 0 0 4 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 4 2 0 0 0 13 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 9 9 0 0 0 14 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 12 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 1 0 0 0 33 0 0 0 0 4 0 3 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2030, OFFSET:2078, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:542, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8238, TEID:8440, VARs:{}32,
+17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 33 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 1 0 0 5 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 8 3 0 0 0 22 0 0 2 0 0 0 0 0 0 0 32 0 0 0 0 28 24 0 0 0 33 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 30 0 0 0 0 0 0 6 0 0 0 1 4 0 5 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 10 2 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 2 1 0 0 0 0 0 0 1 0 0 0 55 0 0 0 0 0 0 0 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:2032, OFFSET:2072, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:456, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8245, TEID:8416, VARs:{}29,
+15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 28 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 1 0 0 4 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 6 2 0 0 0 19 0 0 2 0 0 0 0 0 0 0 27 0 0 0 0 24 21 0 0 0 27 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 25 0 0 0 0 0 0 5 0 0 0 0 3 0 4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 8 2 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 2 1 0 0 0 0 0 0 1 0 0 0 46 0 0 0 0 0 0 0 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:2042, OFFSET:2068, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:266, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8298, TEID:8401, VARs:{}18,
+11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 16 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 3 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 3 2 0 0 0 12 0 0 1 0 0 0 0 0 0 0 15 0 0 0 0 15 16 0 0 0 15 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 14 0 0 0 0 0 0 3 0 0 0 0 2 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 5 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2087, OFFSET:2129, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:597, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8462, TEID:8659, VARs:{}27,
+9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 0 0 0 0 40 0 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 0 3 0 0 3 0 0 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 8 3 0 0 0 23 0 0 3 0 0 0 0 0 1 0 39 0 0 0 0 19 20 0 0 0 40 0 0 0 0 0 39 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 39 0 0 0 0 0 0 0 38 0 0 0 0 0 0 5 0 0 0 1 2 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 10 2 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 0 0 57 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:2168, OFFSET:2181, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:340, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:8822, TEID:8927, VARs:{}16,
+0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 23 0 0 0 0 0 0 0 0 0 18 0 0 0 2 0 0 0 5 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 3 0 0 0 0 15 0 0 2 0 0 0 0 0 0 0 23 0 0 0 0 7 7 0 0 0 23 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 18 0 0 0 0 0 0 5 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 1 0 0 0 0 4 0 0 0 1 0 0 0 0 0 0 0 34 0 0 0 0 2 0 0 0 0 0 1 1
+# FILE:src/AbstractTableRendering.java, LINE:2222, OFFSET:2274, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:575, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9030, TEID:9261, VARs:{}42,
+17 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 33 0 0 0 0 0 0 0 0 0 25 0 0 0 1 0 0 0 3 0 0 4 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 5 0 0 0 0 26 0 0 6 0 0 0 0 0 0 0 31 0 0 0 0 29 25 0 0 0 31 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 25 0 0 0 0 0 0 7 0 0 1 0 1 0 6 0 0 0 0 1 0 0 0 0 1 0 1 0 0 4 0 0 23 7 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 3 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 1 0 0 0 0 0 1 0
+# FILE:src/AbstractTableRendering.java, LINE:2318, OFFSET:2390, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:802, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9377, TEID:9656, VARs:{}44,
+13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 0 0 0 0 54 0 0 0 0 0 0 0 0 0 46 0 0 0 0 0 0 0 7 0 0 1 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 9 1 0 0 0 26 0 0 5 0 0 0 0 0 1 0 49 0 0 0 0 29 27 0 0 0 50 0 0 0 0 0 47 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 46 0 0 0 0 0 3 8 0 0 0 1 2 0 6 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 19 2 0 0 0 0 5 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 1 0 0 1 0 0 1 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 0 4
+# FILE:src/AbstractTableRendering.java, LINE:2324, OFFSET:2380, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:705, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9391, TEID:9628, VARs:{}38,
+11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 79 0 0 0 0 48 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 7 0 0 1 0 0 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 6 1 0 0 0 24 0 0 4 0 0 0 0 0 0 0 44 0 0 0 0 23 24 0 0 0 45 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 0 0 0 41 0 0 0 0 0 2 8 0 0 0 1 1 0 5 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 16 2 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 79 0 0 0 0 0 0 0 0 0 0 0 4
+# FILE:src/AbstractTableRendering.java, LINE:2341, OFFSET:2380, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:531, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9454, TEID:9628, VARs:{}29,
+7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 36 0 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 6 0 0 1 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 4 0 0 0 0 18 0 0 3 0 0 0 0 0 0 0 34 0 0 0 0 16 14 0 0 0 35 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 31 0 0 0 0 0 2 7 0 0 0 1 1 0 3 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 12 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 4
+# FILE:src/AbstractTableRendering.java, LINE:2457, OFFSET:2515, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:591, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9903, TEID:10112, VARs:{}32,
+9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 42 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 4 0 0 1 0 0 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 11 4 0 0 0 22 0 0 7 0 0 0 0 0 1 0 36 0 0 0 0 28 21 0 0 0 37 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 0 34 0 0 0 0 0 0 5 0 0 0 1 5 0 11 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 7 0 0 0 0 0 4 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 1 0 0 2 1 0 0 0 0 0 1 0 0 0 0 52 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2473, OFFSET:2510, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:441, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9950, TEID:10101, VARs:{}22,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 0 0 32 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 3 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 8 4 0 0 0 19 0 0 4 0 0 0 0 0 0 0 28 0 0 0 0 18 16 0 0 0 29 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 26 0 0 0 0 0 0 3 0 0 0 1 5 0 8 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 36 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2476, OFFSET:2510, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:421, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9958, TEID:10101, VARs:{}20,
+6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 31 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 3 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 8 4 0 0 0 18 0 0 3 0 0 0 0 0 0 0 27 0 0 0 0 17 15 0 0 0 27 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0 0 0 0 0 0 0 25 0 0 0 0 0 0 3 0 0 0 0 5 0 7 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2476, OFFSET:2503, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:354, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9959, TEID:10078, VARs:{}16,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 27 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 3 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 7 3 0 0 0 15 0 0 3 0 0 0 0 0 0 0 23 0 0 0 0 14 12 0 0 0 23 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 21 0 0 0 0 0 0 3 0 0 0 0 3 0 6 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2478, OFFSET:2503, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:338, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9965, TEID:10078, VARs:{}15,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 26 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 3 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 7 3 0 0 0 14 0 0 2 0 0 0 0 0 0 0 22 0 0 0 0 13 11 0 0 0 22 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 20 0 0 0 0 0 0 3 0 0 0 0 3 0 5 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2478, OFFSET:2503, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:336, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:9966, TEID:10077, VARs:{}15,
+4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 26 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 3 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 6 3 0 0 0 14 0 0 2 0 0 0 0 0 0 0 22 0 0 0 0 12 11 0 0 0 22 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 20 0 0 0 0 0 0 3 0 0 0 0 3 0 5 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 1 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2550, OFFSET:2597, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:955, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:10256, TEID:10554, VARs:{}36,
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 0 0 0 0 66 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 14 0 0 1 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 0 4 0 0 0 0 52 0 0 7 0 0 0 0 0 0 0 62 0 0 0 0 17 30 0 0 0 63 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 52 0 0 0 0 0 0 15 0 0 0 1 5 0 7 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 24 4 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 5 2 1 0 0 10 0 0 0 0 0 0 0 4 0 0 0 95 0 0 0 0 0 0 0 0 0 0 1 2
+# FILE:src/AbstractTableRendering.java, LINE:2552, OFFSET:2597, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:935, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:10264, TEID:10554, VARs:{}34,
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 0 0 0 0 65 0 0 0 0 0 0 0 0 0 51 0 0 0 0 0 0 0 14 0 0 1 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 4 0 0 0 0 51 0 0 6 0 0 0 0 0 0 0 61 0 0 0 0 16 29 0 0 0 61 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 51 0 0 0 0 0 0 15 0 0 0 0 5 0 6 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 24 4 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 5 2 1 0 0 10 0 0 0 0 0 0 0 4 0 0 0 93 0 0 0 0 0 0 0 0 0 0 1 2
+# FILE:src/AbstractTableRendering.java, LINE:2742, OFFSET:2780, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:392, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11106, TEID:11236, VARs:{}28,
+11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 25 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 2 0 0 4 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 4 1 0 0 0 9 0 0 2 0 0 0 0 0 0 0 25 0 0 0 0 17 9 0 0 0 25 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 20 0 0 0 0 0 0 6 0 0 0 0 1 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 12 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 0 0 0 0 0 0 1 0
+# FILE:src/AbstractTableRendering.java, LINE:2745, OFFSET:2780, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:351, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11116, TEID:11236, VARs:{}27,
+11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 21 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 2 0 0 4 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 4 1 0 0 0 7 0 0 1 0 0 0 0 0 0 0 21 0 0 0 0 16 9 0 0 0 21 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 19 0 0 0 0 0 0 6 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 12 3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 0 0 0 0 0 0 0 0
+# FILE:src/AbstractTableRendering.java, LINE:2818, OFFSET:2845, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:327, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11344, TEID:11469, VARs:{}30,
+8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 18 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 4 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 18 0 3 0 0 0 0 9 0 0 0 0 0 0 0 1 0 0 18 0 0 0 0 9 13 0 0 0 18 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 18 0 0 0 0 0 0 4 0 1 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 0 0 0 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:2856, OFFSET:2995, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:1376, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:11485, TEID:12006, VARs:{}46,
+40 0 5 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 161 0 0 0 0 86 0 0 0 0 0 0 0 0 1 70 0 0 0 0 0 0 0 6 0 0 3 0 0 86 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 67 0 11 2 0 0 0 44 0 0 6 0 0 0 0 1 0 0 78 0 0 0 0 63 61 0 0 0 78 0 0 0 0 0 70 0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 70 0 0 0 0 5 0 9 0 1 0 0 0 0 8 4 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 36 3 0 5 1 0 0 0 0 0 0 6 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 3 5 0 0 0 0 0 0 0 0 2 0 1 0 1 10 1 0 0 4 0 0 0 0 0 0 0 161 0 0 0 0 0 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3272, OFFSET:3332, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:618, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:12864, TEID:13133, VARs:{}48,
+19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 33 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 3 0 0 2 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 26 0 12 2 0 0 0 22 0 0 6 0 0 0 0 2 0 0 32 0 0 0 0 35 30 0 0 0 34 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 28 0 0 0 0 0 0 5 0 2 0 2 2 0 8 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 17 1 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 2 1 0 0 0 0 0 0 2 0 0 0 72 0 0 0 1 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:3273, OFFSET:3332, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:592, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:12872, TEID:13133, VARs:{}47,
+19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 0 0 0 0 31 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 3 0 0 2 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 25 0 12 2 0 0 0 21 0 0 5 0 0 0 0 2 0 0 30 0 0 0 0 34 30 0 0 0 32 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 27 0 0 0 0 0 0 5 0 2 0 2 2 0 7 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 16 1 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 2 1 0 0 0 0 0 0 1 0 0 0 70 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:3273, OFFSET:3327, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:577, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:12873, TEID:13129, VARs:{}47,
+19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 0 0 0 0 30 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 3 0 0 2 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 24 0 11 2 0 0 0 21 0 0 5 0 0 0 0 2 0 0 29 0 0 0 0 32 30 0 0 0 31 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 29 0 0 0 0 0 0 0 26 0 0 0 0 0 0 5 0 2 0 2 2 0 7 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 16 1 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 1 0 0 0 0 0 0 1 0 0 0 69 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:3274, OFFSET:3327, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:554, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:12879, TEID:13129, VARs:{}47,
+19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 28 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 3 0 0 2 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 23 0 11 2 0 0 0 20 0 0 4 0 0 0 0 2 0 0 27 0 0 0 0 31 30 0 0 0 29 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 25 0 0 0 0 0 0 5 0 2 0 2 2 0 6 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 16 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:3274, OFFSET:3327, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:552, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:12880, TEID:13128, VARs:{}47,
+19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 28 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 3 0 0 2 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 23 0 10 2 0 0 0 20 0 0 4 0 0 0 0 2 0 0 27 0 0 0 0 30 30 0 0 0 29 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 25 0 0 0 0 0 0 5 0 2 0 2 2 0 6 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 16 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 0 0 0 2
+# FILE:src/AbstractTableRendering.java, LINE:3538, OFFSET:3545, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:410, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:13764, TEID:13888, VARs:{}15,
+1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 27 0 0 0 0 0 0 0 0 0 21 0 0 0 5 0 0 0 3 0 0 1 0 0 27 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 1 0 0 0 0 22 0 0 1 0 0 0 0 0 0 0 25 0 0 0 0 5 6 0 0 0 25 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 21 0 0 0 0 0 0 4 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 5 0 2 0 0 0 1 2
+# FILE:src/AbstractTableRendering.java, LINE:3540, OFFSET:3545, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:364, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:13780, TEID:13888, VARs:{}14,
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 24 0 0 0 0 0 0 0 0 0 19 0 0 0 5 0 0 0 2 0 0 1 0 0 24 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 1 0 0 0 0 21 0 0 1 0 0 0 0 0 0 0 22 0 0 0 0 4 6 0 0 0 22 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 19 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 5 0 2 0 0 0 1 2
+# FILE:src/AbstractTableRendering.java, LINE:3559, OFFSET:3566, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:332, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:13928, TEID:14035, VARs:{}15,
+1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 22 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 3 0 0 1 0 0 22 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 1 0 0 0 0 13 0 0 1 0 0 0 0 0 0 0 20 0 0 0 0 5 6 0 0 0 20 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 16 0 0 0 0 0 0 4 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 44 0 0 0 0 0 0 2 0 0 0 1 2
+# FILE:src/AbstractTableRendering.java, LINE:3616, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:516, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14154, TEID:14312, VARs:{}22,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 37 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 8 0 0 0 0 0 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 5 1 0 0 0 16 0 0 5 0 0 0 0 0 0 0 34 0 0 0 0 12 9 0 0 0 36 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 36 0 0 0 0 0 0 0 30 0 0 0 0 0 0 8 0 0 0 2 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 4 3 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 51 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3617, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:498, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14160, TEID:14312, VARs:{}22,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 36 0 0 0 0 0 0 0 0 0 29 0 0 0 0 0 0 0 8 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0 5 1 0 0 0 16 0 0 4 0 0 0 0 0 0 0 33 0 0 0 0 11 9 0 0 0 34 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 35 0 0 0 0 0 0 0 29 0 0 0 0 0 0 8 0 0 0 1 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 4 3 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 49 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3618, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:454, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14171, TEID:14311, VARs:{}20,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 33 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 7 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 4 1 0 0 0 15 0 0 4 0 0 0 0 0 0 0 30 0 0 0 0 10 8 0 0 0 31 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 32 0 0 0 0 0 0 0 26 0 0 0 0 0 0 7 0 0 0 1 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 4 3 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 44 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3619, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:431, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14177, TEID:14311, VARs:{}20,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 31 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 7 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 4 1 0 0 0 14 0 0 3 0 0 0 0 0 0 0 28 0 0 0 0 9 8 0 0 0 29 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 30 0 0 0 0 0 0 0 25 0 0 0 0 0 0 7 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 4 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 43 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3620, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:406, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14187, TEID:14310, VARs:{}17,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 30 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 6 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 3 1 0 0 0 13 0 0 3 0 0 0 0 0 0 0 27 0 0 0 0 8 7 0 0 0 28 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 29 0 0 0 0 0 0 0 24 0 0 0 0 0 0 6 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 39 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3621, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:388, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14193, TEID:14310, VARs:{}17,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 0 0 0 29 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 6 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 3 1 0 0 0 13 0 0 2 0 0 0 0 0 0 0 26 0 0 0 0 7 7 0 0 0 26 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 28 0 0 0 0 0 0 0 23 0 0 0 0 0 0 6 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 37 0 0 0 0 2 0 1 0 0 0 0 1
+# FILE:src/AbstractTableRendering.java, LINE:3623, OFFSET:3637, NODE_KIND:103, CONTEXT_KIND:0, NEIGHBOR_KIND:0, NUM_NODE:356, NUM_DECL:0, NUM_STMT:0, NUM_EXPR:0, TBID:14202, TEID:14309, VARs:{}15,
+2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 0 0 0 27 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 5 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 2 1 0 0 0 13 0 0 2 0 0 0 0 0 0 0 24 0 0 0 0 6 7 0 0 0 24 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 2 26 0 0 0 0 0 0 0 21 0 0 0 0 0 0 5 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 3 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 0 0 0 0 0 0 0 33 0 0 0 0 2 0 1 0 0 0 0 1
diff --git a/scripts/bugdetect/bugcounting b/scripts/bugdetect/bugcounting
new file mode 100644
index 0000000..5417364
--- /dev/null
+++ b/scripts/bugdetect/bugcounting
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+#
+#
+# Copyright (c) 2007-2010,
+# Lingxiao Jiang Composite
in a grid.
+ * GridLayout
has a number of configuration fields, and the
+ * controls it lays out can have an associated layout data object, called
+ * GridData
. The power of GridLayout
lies in the
+ * ability to configure GridData
for each control in the layout.
+ * GridLayout
+ * with 3 columns:
+ *
+ * Display display = new Display();
+ * Shell shell = new Shell(display);
+ * GridLayout gridLayout = new GridLayout();
+ * gridLayout.numColumns = 3;
+ * shell.setLayout(gridLayout);
+ *
+ * The numColumns
field is the most important field in a
+ * GridLayout
. Widgets are laid out in columns from left
+ * to right, and a new row is created when numColumns
+ 1
+ * controls are added to the Composite
.
+ *