texlive[65878] Master: asymptote 2.85 support files, windows binaries

commits+karl at tug.org commits+karl at tug.org
Sat Feb 18 19:40:51 CET 2023


Revision: 65878
          http://tug.org/svn/texlive?view=revision&revision=65878
Author:   karl
Date:     2023-02-18 19:40:50 +0100 (Sat, 18 Feb 2023)
Log Message:
-----------
asymptote 2.85 support files, windows binaries

Modified Paths:
--------------
    trunk/Master/texmf-dist/asymptote/GUI/Window1.py
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/check.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/code.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/save.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg
    trunk/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg
    trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyVersion.py
    trunk/Master/texmf-dist/asymptote/asy-kate.sh
    trunk/Master/texmf-dist/asymptote/asy-keywords.el
    trunk/Master/texmf-dist/asymptote/geometry.asy
    trunk/Master/texmf-dist/asymptote/graph.asy
    trunk/Master/texmf-dist/asymptote/graph3.asy
    trunk/Master/texmf-dist/asymptote/plain.asy
    trunk/Master/texmf-dist/asymptote/plain_arrows.asy
    trunk/Master/texmf-dist/asymptote/plain_pens.asy
    trunk/Master/texmf-dist/asymptote/rationalSimplex.asy
    trunk/Master/texmf-dist/asymptote/shaders/blend.glsl
    trunk/Master/texmf-dist/asymptote/shaders/count.glsl
    trunk/Master/texmf-dist/asymptote/shaders/fragment.glsl
    trunk/Master/texmf-dist/asymptote/shaders/sum1.glsl
    trunk/Master/texmf-dist/asymptote/shaders/sum2.glsl
    trunk/Master/texmf-dist/asymptote/shaders/sum3.glsl
    trunk/Master/texmf-dist/asymptote/shaders/zero.glsl
    trunk/Master/texmf-dist/asymptote/simplex.asy
    trunk/Master/texmf-dist/asymptote/slopefield.asy
    trunk/Master/texmf-dist/asymptote/stats.asy
    trunk/Master/texmf-dist/asymptote/three.asy
    trunk/Master/texmf-dist/asymptote/three_surface.asy
    trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy
    trunk/Master/texmf-dist/asymptote/v3dtypes.asy
    trunk/Master/texmf-dist/asymptote/version.asy
    trunk/Master/texmf-dist/asymptote/webgl/asygl.js
    trunk/Master/texmf-dist/doc/asymptote/CAD.pdf
    trunk/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
    trunk/Master/texmf-dist/doc/asymptote/asy-latex.pdf
    trunk/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
    trunk/Master/texmf-dist/doc/asymptote/asymptote.pdf
    trunk/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.dat
    trunk/Master/texmf-dist/doc/asymptote/examples/histogram.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/triads.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy
    trunk/Master/texmf-dist/doc/info/asy-faq.info
    trunk/Master/texmf-dist/doc/info/asymptote.info
    trunk/Master/texmf-dist/doc/man/man1/asy.1
    trunk/Master/texmf-dist/doc/man/man1/asy.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
    trunk/Master/tlpkg/asymptote/asy.exe
    trunk/Master/tlpkg/asymptote64/asy.exe
    trunk/Master/tlpkg/bin/tl-update-asy

Added Paths:
-----------
    trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py
    trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py
    trunk/Master/texmf-dist/asymptote/shaders/compress.glsl
    trunk/Master/texmf-dist/asymptote/shaders/sum2fast.glsl
    trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/Viviani.asy

Removed Paths:
-------------
    trunk/Master/texmf-dist/asymptote/GUI/res/icons.qrc

Added: trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -0,0 +1,322 @@
+#!/usr/bin/env python3
+
+import PyQt5.QtWidgets as Qw
+import PyQt5.QtGui as Qg
+import PyQt5.QtCore as Qc
+import xasyVersion
+
+import xasyUtils as xu
+import xasy2asy as x2a
+import xasyFile as xf
+import xasyOptions as xo
+import UndoRedoStack as Urs
+import xasyArgs as xa
+import xasyBezierInterface as xbi
+from xasyTransform import xasyTransform as xT
+import xasyStrings as xs
+
+import PrimitiveShape
+import InplaceAddObj
+
+import CustMatTransform
+import SetCustomAnchor
+import GuidesManager
+import time
+
+class AnotherWindow(Qw.QWidget):
+    def __init__(self, shape, parent):
+        super().__init__()
+        self.shape = shape
+        self.parent = parent
+        self.newShape = self.shape
+        self.layout = Qw.QVBoxLayout(self)
+
+        # Initialize tab screen
+        self.tabs = Qw.QTabWidget()
+        self.fillTab = Qw.QWidget()
+        self.lineTab = Qw.QWidget()
+        self.arrowTab = Qw.QWidget()
+        self.othersTab = Qw.QWidget()
+        self.tabs.resize(300,200)
+        self.fillTab.layout = Qw.QVBoxLayout(self.fillTab)
+        self.lineTab.layout = Qw.QVBoxLayout(self.lineTab)
+        self.arrowTab.layout = Qw.QVBoxLayout(self.arrowTab)
+        self.othersTab.layout = Qw.QVBoxLayout(self.othersTab)
+        self.tabs.addTab(self.fillTab,"Fill Options")
+        self.tabs.addTab(self.lineTab,"Line Options")
+        self.tabs.addTab(self.arrowTab,"Arrow Options")
+        self.tabs.addTab(self.othersTab,"Misc. Options")
+
+        self.layout.addWidget(self.tabs)
+        self.setLayout(self.layout)
+        self.setWindowTitle("Shape Options Window")
+
+        self.label = Qw.QLabel("Fill:")
+        self.fillTab.layout.addWidget(self.label)
+        self.fillButton = Qw.QComboBox()
+        self.fillButton.addItem("Unfilled")
+        self.fillButton.addItem("Filled")
+        self.fillButton.currentIndexChanged.connect(self.fillChange)
+        self.fillTab.layout.addWidget(self.fillButton)
+
+        if isinstance(self.shape, x2a.asyArrow):
+            self.colorButton = Qw.QPushButton("Set Line Colour")
+            self.colorButton.clicked.connect(self.pickColor)
+            self.fillTab.layout.addWidget(self.colorButton)
+
+            self.colorButton = Qw.QPushButton("Set Fill Colour")
+            self.colorButton.clicked.connect(self.pickFillColor)
+            self.fillTab.layout.addWidget(self.colorButton)
+
+        elif isinstance(self.shape, x2a.xasyShape):
+            self.colorButton = Qw.QPushButton("Set Colour")
+            self.colorButton.clicked.connect(self.pickColor)
+            self.fillTab.layout.addWidget(self.colorButton)
+
+        self.label = Qw.QLabel("Reflection:")
+        self.othersTab.layout.addWidget(self.label)
+        self.reflectionButton = Qw.QComboBox()
+        self.reflectionButton.addItem("None")
+        self.reflectionButton.addItem("Horizontal")
+        self.reflectionButton.addItem("Vertical")
+        self.reflectionButton.currentIndexChanged.connect(self.reflectionChange)
+        self.othersTab.layout.addWidget(self.reflectionButton)
+
+        self.label = Qw.QLabel("Opacity:")
+        self.othersTab.layout.addWidget(self.label)
+        self.opacityBox = Qw.QLineEdit()
+        self.othersTab.layout.addWidget(self.opacityBox)
+        self.opacityBox.setPlaceholderText(str(self.shape.pen.opacity))
+
+        self.label = Qw.QLabel("Arrowhead:")
+        self.arrowTab.layout.addWidget(self.label)
+        self.arrowheadButton = Qw.QComboBox()
+        self.arrowList = ["None","Arrow","ArcArrow"]
+        for arrowMode in self.arrowList:
+            self.arrowheadButton.addItem(arrowMode)
+        self.arrowheadButton.currentIndexChanged.connect(self.arrowheadChange)
+        self.arrowTab.layout.addWidget(self.arrowheadButton)
+
+        self.label = Qw.QLabel("Line Style:")
+        self.lineTab.layout.addWidget(self.label)
+        self.linestyleButton = Qw.QComboBox()
+        self.lineList = ["solid","dashed","dotted","dashdotted"]
+
+        for lineMode in self.lineList:
+            self.linestyleButton.addItem(lineMode)
+        self.linestyleButton.currentIndexChanged.connect(self.linestyleChange)
+        self.lineTab.layout.addWidget(self.linestyleButton)
+        self.linestyleButton.setCurrentIndex(self.lineList.index(self.shape.pen.style))
+
+        self.label = Qw.QLabel("Line Cap Style:")
+        self.lineTab.layout.addWidget(self.label)
+        self.lineCapStyleButton = Qw.QComboBox()
+        self.lineCapListStrings = ["extendcap","flatcap","roundcap"] #Is there a way to pull these directly
+        self.lineCapList = [Qc.Qt.PenCapStyle.SquareCap,Qc.Qt.PenCapStyle.FlatCap,Qc.Qt.PenCapStyle.RoundCap]
+
+        for lineMode in self.lineCapListStrings:
+            self.lineCapStyleButton.addItem(lineMode)
+        self.lineCapStyleButton.currentIndexChanged.connect(self.lineCapStyleChange)
+        self.lineTab.layout.addWidget(self.lineCapStyleButton)
+        self.lineCapStyleButton.setCurrentIndex(self.lineCapList.index(self.shape.pen.capStyle))
+
+        #TODO: Make this a function.
+        if not isinstance(self.shape, x2a.xasyShape):
+            self.fillButton.setCurrentIndex(int(self.shape.arrowSettings["fill"]))
+            if isinstance(self.shape, x2a.asyArrow):
+                self.arrowheadButton.setCurrentIndex(int(self.shape.arrowSettings["active"]))
+            else:
+                self.arrowheadButton.setDisabled(True)
+        else:
+            self.fillButton.setCurrentIndex(int(self.shape.path.fill))
+
+        if isinstance(self.shape, x2a.asyArrow) and self.shape.arrowSettings["active"]: #Make these all a list or something.
+            self.label = Qw.QLabel("Arrow Style:")
+            self.arrowTab.layout.addWidget(self.label)
+            self.arrowstyleButton = Qw.QComboBox()
+            for arrowStyle in self.shape.arrowStyleList:
+                self.arrowstyleButton.addItem(arrowStyle if arrowStyle else "(default)")
+            self.arrowstyleButton.currentIndexChanged.connect(self.arrowstyleChange)
+            self.arrowTab.layout.addWidget(self.arrowstyleButton)
+
+            self.label = Qw.QLabel("Arrow Size:")
+            self.arrowTab.layout.addWidget(self.label)
+            self.arrowSizeBox = Qw.QLineEdit()
+            self.arrowTab.layout.addWidget(self.arrowSizeBox)
+            self.arrowSizeBox.setPlaceholderText(self.getInfo("DefaultHead.size(currentpen)"))
+
+            self.label = Qw.QLabel("Arrow Angle:")
+            self.arrowTab.layout.addWidget(self.label)
+            self.arrowAngleBox = Qw.QLineEdit()
+            self.arrowTab.layout.addWidget(self.arrowAngleBox)
+            self.arrowAngleBox.setPlaceholderText(self.getInfo("arrowangle"))
+
+            self.label = Qw.QLabel("Arrow Fill:")
+            self.arrowTab.layout.addWidget(self.label)
+            self.arrowFillButton = Qw.QComboBox()
+            for arrowFillStyle in self.shape.arrowFillList:
+                self.arrowFillButton.addItem(arrowFillStyle if arrowFillStyle else "(default)")
+            self.arrowFillButton.currentIndexChanged.connect(self.arrowFillChange)
+            self.arrowTab.layout.addWidget(self.arrowFillButton)
+
+            self.arrowstyleButton.setCurrentIndex(int(self.shape.arrowSettings["style"]))
+            self.arrowFillButton.setCurrentIndex(int(self.shape.arrowSettings["fill"]))
+
+        self.fillTab.setLayout(self.fillTab.layout)
+        self.lineTab.setLayout(self.lineTab.layout)
+        self.arrowTab.setLayout(self.arrowTab.layout)
+        self.othersTab.setLayout(self.othersTab.layout)
+
+        self.confirmButton = Qw.QPushButton("Render")
+        self.confirmButton.clicked.connect(self.renderChanges)
+        self.layout.addWidget(self.confirmButton)
+
+    def arrowheadChange(self, i):
+        #None, {Arrow, ArcArrow} x {(),(SimpleHead),(HookHead),(TeXHead)}
+        if isinstance(self.shape, x2a.xasyShape):
+            if i != 0:
+                if isinstance(self.newShape,x2a.asyArrow):
+                    self.newShape.arrowSettings["active"] = i
+                else:
+                    self.newShape = self.shape.arrowify(arrowhead=i)
+        else:
+            self.newShape.arrowSettings["active"] = i #Simplify the logic
+
+    def arrowstyleChange(self, i):
+        self.newShape.arrowSettings["style"] = i
+
+    def linestyleChange(self, i): #I think add an attribute to asyPen
+        self.shape.pen.setStyle(self.lineList[i])
+
+    def lineCapStyleChange(self, i): #I think add an attribute to asyPen
+        self.shape.pen.setCapStyle(self.lineCapList[i])
+
+    def fillChange(self, i):
+        if isinstance(self.shape, x2a.asyArrow):
+            self.shape.arrowSettings["fill"] = bool(i)
+        elif (self.shape.path.fill != bool(i)) and not isinstance(self.newShape, x2a.asyArrow):
+            if self.newShape:
+                self.newShape = self.newShape.swapFill()
+        if isinstance(self.newShape, x2a.asyArrow):
+            self.newShape.arrowSettings["fill"] = bool(i)
+
+    def reflectionChange(self, i): #TODO: Modernize this.
+        reflectionList = [[1,1],[1,-1],[-1,1]]
+        self.parent.newTransform = xT.makeScaleTransform(*reflectionList[i], self.parent.currentAnchor).toQTransform()
+        self.parent.currentlySelectedObj['selectedIndex'] = self.parent.mostRecentObject
+        self.parent.releaseTransform()
+        self.parent.newTransform = Qg.QTransform()
+
+    def sizeChange(self):
+        try:
+            newSize = self.arrowSizeBox.text()
+            self.newShape.arrowSettings["size"] = float(newSize)
+        except:
+            return #TODO: Show error message.
+
+    def angleChange(self): #Refactor this with the above.
+        try:
+            newAngle = self.arrowAngleBox.text()
+            self.newShape.arrowSettings["angle"] = float(newAngle)
+        except:
+            return #TODO: Show error message.
+
+    def arrowFillChange(self, i): #Can I lambda this?
+        self.newShape.arrowSettings["fill"] = i
+
+    def opacityChange(self):
+        newOpacity = self.opacityBox.text()
+        try:
+            newOpacity = int(newOpacity)
+            if newOpacity >= 0 and newOpacity <= 255:
+                self.shape.pen.setOpacity(newOpacity)
+                self.newShape.pen.setOpacity(newOpacity)
+        except:
+            pass
+
+    def renderChanges(self): #Pull from text boxes here.
+        self.opacityChange()
+        if isinstance(self.shape, x2a.asyArrow) and self.shape.arrowSettings["active"]:
+            self.sizeChange()
+            self.angleChange()
+        elif (not isinstance(self.shape, x2a.asyArrow)):
+            self.renderLineStyle()
+        if self.newShape:
+            self.parent.replaceObject(self.parent.contextWindowObject,self.newShape)
+        self.parent.terminateContextWindow()
+
+    def getInfo(self,value):
+        """ Find out the size of an arbitrary Asymptote pen """
+        self.asyEngine = self.parent.asyEngine
+        assert isinstance(self.asyEngine, x2a.AsymptoteEngine)
+        assert self.asyEngine.active
+
+        fout = self.asyEngine.ostream
+        fin = self.asyEngine.istream
+
+        fout.write("write(_outpipe,{},endl);\n".format(value))
+        fout.write(self.asyEngine.xasy)
+        fout.flush()
+
+        return fin.readline()
+
+    def getPattern(self,pattern,path):
+        """ Find out the adjusted pattern of an Asymptote pen """
+        self.asyEngine = self.parent.asyEngine
+        assert isinstance(self.asyEngine, x2a.AsymptoteEngine)
+        assert self.asyEngine.active
+
+        fout = self.asyEngine.ostream
+        fin = self.asyEngine.istream
+
+        #fout.write("pen p=adjust({pattern},arclength({path}),cyclic({path}));\n")
+        #print(f"write(_outpipe,adjust({pattern},arclength({path}),cyclic({path})),endl);\n")
+        fout.write(f"write(_outpipe,adjust({pattern},arclength({path}),cyclic({path})),endl);\n")
+        fout.write(self.asyEngine.xasy)
+        fout.flush()
+
+        return fin.readline()
+
+    def renderLineStyle(self):
+        #Should only get called with asy shapes
+        if not self.newShape:
+            self.newShape=self.shape
+        if not isinstance(self.newShape,x2a.asyArrow):
+            rawPattern = self.getPattern(self.lineList[self.linestyleButton.currentIndex()],self.newShape.path.getCode())
+        else:
+            #self.newShape.updateCode() #idk if this is necessary.
+            rawPattern = self.getPattern(self.lineList[self.linestyleButton.currentIndex()],self.newShape.code)
+
+        pattern = []
+        if len(rawPattern) == 5:
+            pattern=[1,0]
+        else:
+            for value in rawPattern[2:-3].split(' '):
+                pattern.append(float(value)+1)
+
+        try:
+            self.newShape.pen.setDashPattern(pattern) #pen is going to be a asyPen, add as an attribute
+        except:
+            print("Pen format error")
+
+    def pickColor(self):
+        self.colorDialog = Qw.QColorDialog(x2a.asyPen.convertToQColor(self.shape.pen.color), self)
+        self.colorDialog.show()
+        result = self.colorDialog.exec()
+        if result == Qw.QDialog.Accepted:
+            self.shape.pen.setColorFromQColor(self.colorDialog.selectedColor())
+            self.parent.updateFrameDispColor()
+
+    def pickFillColor(self): #This is a copy of the above, how do you set the var as it is set?
+        self.colorDialog = Qw.QColorDialog(x2a.asyPen.convertToQColor(self.shape.fillPen.color), self)
+        self.colorDialog.show()
+        result = self.colorDialog.exec()
+        if result == Qw.QDialog.Accepted:
+            self.shape.fillPen.setColorFromQColor(self.colorDialog.selectedColor())
+            self.parent.updateFrameDispColor()
+
+    @Qc.pyqtSlot()
+    def on_click(self):
+        print("\n")
+        for currentQTableWidgetItem in self.tableWidget.selectedItems():
+            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/texmf-dist/asymptote/GUI/Window1.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/Window1.py	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/Window1.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -32,6 +32,7 @@
 
 import PrimitiveShape
 import InplaceAddObj
+import ContextWindow
 
 import CustMatTransform
 import SetCustomAnchor
@@ -127,6 +128,7 @@
         devicePixelRatio=self.devicePixelRatio()
         self.ui.setupUi(self)
         self.ui.menubar.setNativeMenuBar(False)
+        self.setWindowIcon(Qg.QIcon("../asy.ico"))
 
         self.settings = xo.BasicConfigs.defaultOpt
         self.keyMaps = xo.BasicConfigs.keymaps
@@ -229,7 +231,7 @@
         self.previewCurve = None
         self.mouseDown = False
 
-        self.globalObjectCounter = 0
+        self.globalObjectCounter = 1
 
         self.fileItems = []
         self.drawObjects = []
@@ -569,9 +571,6 @@
         self.ui.txtTerminalPrompt.clear()
 
     def btnFillOnClick(self, checked):
-        if self.currentModeStack == [SelectionMode.selectEdit]:
-            if isinstance(self.addMode,xbi.InteractiveBezierEditor):
-                self.addMode.swapObjFill() #Check for crashes
         self.currAddOptions['fill'] = checked
         self.ui.btnOpenCurve.setEnabled(not checked)
         self.ui.btnOpenPoly.setEnabled(not checked)
@@ -893,16 +892,34 @@
         if result:
             self.execCustomCommand(commandText)
 
-    def addXasyShapeFromPath(self, path, pen = None, transform = x2a.identity(), key = None):
+    def addXasyShapeFromPath(self, path, pen = None, transform = x2a.identity(), key = None, fill = False):
+        dashPattern = pen['dashPattern'] #?
         if not pen:
             pen = self.currentPen
         else:
             pen = x2a.asyPen(self.asyEngine, color = pen['color'], width = pen['width'], pen_options = pen['options'])
+            if dashPattern:
+                pen.setDashPattern(dashPattern)
 
         newItem = x2a.xasyShape(path, self.asyEngine, pen = pen, transform = transform)
+        if fill:
+            newItem.swapFill()
         newItem.setKey(key)
         self.fileItems.append(newItem)
 
+    def addXasyArrowFromPath(self, pen, transform, key, arrowSettings, code, dashPattern = None):
+        if not pen:
+            pen = self.currentPen
+        else:
+            pen = x2a.asyPen(self.asyEngine, color = pen['color'], width = pen['width'], pen_options = pen['options'])
+            if dashPattern:
+                pen.setDashPattern(dashPattern)
+
+        newItem = x2a.asyArrow(self.asyEngine, pen, transform, key, canvas=self.xasyDrawObj, code=code)
+        newItem.setKey(key)
+        newItem.arrowSettings = arrowSettings
+        self.fileItems.append(newItem)
+
     def addXasyTextFromData(self, text, location, pen, transform, key, align, fontSize):
         if not pen:
             pen = self.currentPen
@@ -925,7 +942,7 @@
         asyFile = io.open(os.path.realpath(pathToFile), 'w')
         xf.saveFile(asyFile, self.fileItems, self.asy2psmap)
         asyFile.close()
-        self.ui.statusbar.showMessage(f"Exported to '{pathToFile}' as Asymptote File.")
+        self.ui.statusbar.showMessage(f"Exported to '{pathToFile}' as an Asymptote file.")
 
     def btnExportToAsyOnClick(self):
         if self.fileName:
@@ -998,11 +1015,12 @@
                 ext = 'asy'
             else:
                 ext = ext[1][1:]
+            if ext == '':
+                ext='asy'
             if ext == 'asy':
                 pathToFile = os.path.splitext(file)[0]+'.'+ext
-                asyFile = io.open(os.path.realpath(pathToFile), 'w')
-                xf.saveFile(asyFile, self.fileItems, self.asy2psmap)
-                asyFile.close()
+                self.updateScript()
+                self.actionExport(pathToFile)
             else:
                 with subprocess.Popen(args=[self.asyPath, '-f{0}'.format(ext), '-o{0}'.format(file), '-'], encoding='utf-8',
                                     stdin=subprocess.PIPE) as asy:
@@ -1060,9 +1078,10 @@
 
         for item in xasyObjects['objects']:
             key=item['transfKey']
-            if(key) in obj.transfKeymap.keys():
-                continue
-            obj.maxKey=max(obj.maxKey,int(key))
+            if existsAsy:
+                if(key) in obj.transfKeymap.keys():
+                    continue
+                obj.maxKey=max(obj.maxKey,int(key))
             if item['type'] == 'xasyScript':
                 print("Uh oh, there should not be any asy objects loaded")
 
@@ -1078,12 +1097,18 @@
                 linkSet = item['links']
                 path = x2a.asyPath(self.asyEngine)
                 path.initFromNodeList(nodeSet, linkSet)
-                self.addXasyShapeFromPath(path, pen = item['pen'], transform = x2a.asyTransform(item['transform']), key = item['transfKey'])
+                self.addXasyShapeFromPath(path, pen = item['pen'], transform = x2a.asyTransform(item['transform']), key = item['transfKey'], fill = item['fill'])
+
+            elif item['type'] == 'asyArrow':
+                self.addXasyArrowFromPath(item['pen'], x2a.asyTransform(item['transform']), item['transfKey'], item['settings'], item['code'])
+                #self.addXasyArrowFromPath(item['oldpath'], item['pen'], x2a.asyTransform(item['transform']), item['transfKey'], item['settings'])
+
             else:
                 print("ERROR")
 
         self.asy2psmap = x2a.asyTransform(xasyObjects['asy2psmap'])
-        self.globalObjectCounter = obj.maxKey+1
+        if existsAsy:
+            self.globalObjectCounter = obj.maxKey+1
 
         self.asyfyCanvas()
 
@@ -1762,7 +1787,7 @@
         # and subtract pan offset and center points
         # but it's much more work...
         newCenter = self.magnification * newCenter
-        self.panOffset = [-newCenter.x(), newCenter.y()]
+        self.panOffset = [-newCenter.x(), -newCenter.y()]
 
         self.quickUpdate()
 
@@ -1923,7 +1948,7 @@
             preCanvas.setPen(minorGridCol)
             self.makePenCosmetic(preCanvas)
             for xMinor in range(1, minorGridCount + 1):
-                xCoord = x + ((xMinor / (minorGridCount + 1)) * majorGrid)
+                xCoord = round(x + ((xMinor / (minorGridCount + 1)) * majorGrid))
                 preCanvas.drawLine(Qc.QLine(xCoord, -9999, xCoord, 9999))
                 preCanvas.drawLine(Qc.QLine(-xCoord, -9999, -xCoord, 9999))
 
@@ -1931,20 +1956,22 @@
             preCanvas.setPen(minorGridCol)
             self.makePenCosmetic(preCanvas)
             for yMinor in range(1, minorGridCount + 1):
-                yCoord = y + ((yMinor / (minorGridCount + 1)) * majorGrid)
+                yCoord = round(y + ((yMinor / (minorGridCount + 1)) * majorGrid))
                 preCanvas.drawLine(Qc.QLine(-9999, yCoord, 9999, yCoord))
                 preCanvas.drawLine(Qc.QLine(-9999, -yCoord, 9999, -yCoord))
 
             preCanvas.setPen(majorGridCol)
             self.makePenCosmetic(preCanvas)
-            preCanvas.drawLine(Qc.QLine(-9999, y, 9999, y))
-            preCanvas.drawLine(Qc.QLine(-9999, -y, 9999, -y))
+            roundY = round(y)
+            preCanvas.drawLine(Qc.QLine(-9999, roundY, 9999, roundY))
+            preCanvas.drawLine(Qc.QLine(-9999, -roundY, 9999, -roundY))
 
         for x in np.arange(0, 2 * x_range + 1, majorGrid):
             preCanvas.setPen(majorGridCol)
             self.makePenCosmetic(preCanvas)
-            preCanvas.drawLine(Qc.QLine(x, -9999, x, 9999))
-            preCanvas.drawLine(Qc.QLine(-x, -9999, -x, 9999))
+            roundX = round(x)
+            preCanvas.drawLine(Qc.QLine(roundX, -9999, roundX, 9999))
+            preCanvas.drawLine(Qc.QLine(-roundX, -9999, -roundX, 9999))
 
     def drawPolarGrid(self, preCanvas):
         center = Qc.QPointF(0, 0)
@@ -2046,7 +2073,7 @@
         with Qg.QPainter(self.postCanvasPixmap) as postCanvas:
             postCanvas.setRenderHints(self.mainCanvas.renderHints())
             postCanvas.setTransform(self.getScrsTransform())
-            # self.makePenCosmetic(postCanvas)
+            self.makePenCosmetic(postCanvas)
 
             self.drawTransformPreview(postCanvas)
 
@@ -2384,6 +2411,7 @@
 
         finally:
             f.close()
+            self.btnPanCenterOnClick()
 
     def populateCanvasWithItems(self, forceUpdate=False):
         self.itemCount = 0
@@ -2423,3 +2451,60 @@
             self.quickUpdate()
         else:
             self.ui.statusbar.showMessage('No object to paste')
+
+    def contextMenuEvent(self, event):
+        #Note that we can't get anything from self.selectOnHover() here.
+        try:
+            self.contextWindowIndex = self.selectObject()[0] #for arrowifying
+            maj = self.contextWindowIndex[0]
+        except:
+            return
+
+        if self.fileItems[maj] is not None:
+            self.contextWindowObject = self.fileItems[maj] #For arrowifying
+            self.contextWindow = ContextWindow.AnotherWindow(self.fileItems[maj],self)
+            self.contextWindow.setMinimumWidth(420)
+            #self.setCentralWidget(self.contextWindow) #I don't know what this does tbh.
+            self.contextWindow.show()
+
+    def focusInEvent(self,event):
+        if self.mainCanvas.isActive():
+            self.quickUpdate()
+
+    def replaceObject(self,objectIndex,newObject):
+        maj, minor = self.contextWindowIndex
+        selectedObj = self.drawObjects[maj][minor]
+
+        parent = selectedObj.parent()
+
+        if isinstance(parent, x2a.xasyScript):
+            objKey=(selectedObj.key, selectedObj.keyIndex)
+            self.hiddenKeys.add(objKey)
+            self.undoRedoStack.add(self.createAction(
+                SoftDeletionChanges(selectedObj.parent(), objKey)
+                ))
+            self.softDeleteObj((maj, minor))
+        else:
+            index = self.fileItems.index(selectedObj.parent())
+
+            self.undoRedoStack.add(self.createAction(
+                HardDeletionChanges(selectedObj.parent(), index)
+            ))
+
+            self.fileItems.remove(selectedObj.parent())
+
+        self.fileItems.append(newObject)
+        self.drawObjects.append(newObject.generateDrawObjects(True)) #THIS DOES WORK, IT'S JUST REGENERATING THE SHAPE.
+
+        self.checkUndoRedoButtons()
+        self.fileChanged = True
+
+        self.clearSelection()
+        #self.asyfyCanvas()
+        #self.quickUpdate()
+
+    def terminateContextWindow(self):
+        if self.contextWindow is not None:
+            self.contextWindow.close()
+        self.asyfyCanvas()
+        self.quickUpdate()

Added: trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -0,0 +1,2903 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.8)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x02\xf0\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x32\x30\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x34\x38\x43\x31\
+\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\
+\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\
+\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\
+\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\
+\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\
+\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\
+\x39\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\
+\x31\x36\x36\x2e\x33\x39\x39\x2d\x37\x34\x2e\x38\x38\x32\x2d\x31\
+\x36\x36\x2e\x33\x39\x39\x2d\x31\x36\x36\x2e\x33\x39\x39\x53\x31\
+\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\
+\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\
+\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\
+\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x33\x39\x39\x2c\x32\x35\x36\
+\x2c\x34\x32\x32\x2e\x33\x39\x39\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x77\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x38\x38\
+\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\x34\x35\x2e\x39\x20\
+\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\x37\x34\x2c\x32\x30\
+\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\x33\x37\x2e\x39\x20\
+\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\x31\x36\x20\x32\x32\
+\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\x2c\x33\x36\x36\x2e\
+\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\x2e\x39\x20\x33\x36\
+\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0a\x09\x34\x31\x36\x2c\
+\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\x20\x22\x2f\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xfe\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
+\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
+\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\x2e\x30\x30\
+\x37\x35\x20\x33\x32\x2e\x31\x32\x4c\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x20\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\
+\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\
+\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\
+\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\
+\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\
+\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
+\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\
+\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\
+\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\
+\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
+\x20\x33\x32\x2e\x31\x32\x20\x36\x32\x2e\x32\x33\x32\x35\x4c\x20\
+\x33\x32\x2e\x31\x32\x20\x32\x2e\x30\x30\x37\x35\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\
+\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\
+\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x04\x9c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\x3d\x22\x32\
+\x34\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\
+\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
+\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
+\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\
+\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\
+\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\x30\x2e\x34\x37\x34\
+\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\x34\x2d\x30\x2e\x32\
+\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x35\x2e\x33\
+\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\x37\x34\x38\x2c\x34\
+\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\x2e\x39\x32\x32\x2c\
+\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\x0a\x09\x63\x30\x2e\
+\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x33\x2c\x31\
+\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\
+\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\x33\x2e\x33\x37\x38\x2c\
+\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\
+\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2c\x30\x2e\x30\
+\x38\x33\x2c\x31\x2e\x34\x31\x32\x0a\x09\x43\x36\x2e\x32\x36\x39\
+\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\x2e\x39\x39\x34\x2c\x31\x34\
+\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x7a\
+\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x4c\
+\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x2d\x35\x2e\x30\x36\x2d\
+\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\
+\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\x30\x2e\x33\x33\x2d\x31\x2e\
+\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\x0a\x09\x63\x2d\x30\x2e\x33\
+\x36\x37\x2c\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x33\x2c\x31\x2e\
+\x30\x34\x35\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\
+\x31\x36\x2e\x39\x39\x35\x2c\x31\x30\x6c\x2d\x33\x2e\x36\x35\x39\
+\x2c\x33\x2e\x32\x35\x32\x63\x2d\x30\x2e\x34\x31\x33\x2c\x30\x2e\
+\x33\x36\x37\x2d\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2d\x30\
+\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x43\x31\x33\x2e\x34\x35\
+\x2c\x31\x34\x2e\x38\x38\x37\x2c\x31\x33\x2e\x37\x32\x35\x2c\x31\
+\x35\x2c\x31\x34\x2c\x31\x35\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\
+\x2c\x31\x35\x2c\x31\x34\x2e\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\
+\x37\x2c\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\
+\x20\x4d\x39\x2e\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\
+\x2d\x31\x32\x63\x30\x2e\x30\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\
+\x30\x2e\x32\x37\x37\x2d\x31\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\
+\x2d\x31\x2e\x31\x35\x31\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\
+\x30\x2e\x30\x39\x32\x2d\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\
+\x37\x2d\x31\x2e\x31\x35\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\
+\x31\x32\x63\x2d\x30\x2e\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\
+\x30\x2e\x32\x37\x37\x2c\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\
+\x2c\x31\x2e\x31\x35\x31\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\
+\x39\x39\x36\x2c\x38\x2e\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\
+\x30\x31\x2c\x31\x37\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\
+\x2c\x39\x2e\x39\x30\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\
+\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x17\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
+\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
+\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
+\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
+\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
+\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
+\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x35\x34\x2e\x32\
+\x34\x2c\x34\x37\x2e\x34\x6c\x33\x39\x2e\x38\x37\x39\x2d\x33\x39\
+\x2e\x38\x37\x39\x48\x32\x37\x32\x2e\x31\x39\x36\x76\x31\x32\x31\
+\x2e\x39\x32\x34\x6c\x36\x30\x2e\x38\x30\x31\x2d\x36\x30\x2e\x38\
+\x30\x31\x63\x35\x36\x2c\x35\x30\x2e\x30\x36\x36\x2c\x37\x37\x2e\
+\x32\x35\x31\x2c\x31\x33\x32\x2e\x30\x30\x34\x2c\x34\x36\x2e\x39\
+\x31\x38\x2c\x32\x30\x35\x2e\x32\x33\x35\x0a\x09\x63\x2d\x31\x38\
+\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\x2e\x35\
+\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\x2c\x39\
+\x38\x2e\x34\x63\x2d\x34\x34\x2e\x38\x36\x36\x2c\x31\x38\x2e\x35\
+\x38\x35\x2d\x39\x34\x2e\x32\x38\x38\x2c\x31\x38\x2e\x35\x38\x35\
+\x2d\x31\x33\x39\x2e\x31\x35\x38\x2c\x30\x63\x2d\x34\x34\x2e\x38\
+\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\
+\x2d\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\
+\x34\x0a\x09\x63\x2d\x31\x38\x2e\x35\x38\x35\x2d\x34\x34\x2e\x38\
+\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x39\x34\x2e\x32\x39\x2c\
+\x30\x2d\x31\x33\x39\x2e\x31\x35\x39\x6c\x2d\x32\x37\x2e\x37\x31\
+\x37\x2d\x31\x31\x2e\x34\x38\x63\x2d\x32\x31\x2e\x36\x35\x31\x2c\
+\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x31\x2c\x31\x30\
+\x39\x2e\x38\x34\x38\x2c\x30\x2c\x31\x36\x32\x2e\x31\x32\x0a\x09\
+\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
+\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
+\x2e\x36\x33\x37\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
+\x31\x34\x2c\x31\x30\x2e\x38\x32\x37\x2c\x35\x33\x2e\x35\x39\x35\
+\x2c\x31\x36\x2e\x32\x34\x2c\x38\x31\x2e\x30\x36\x2c\x31\x36\x2e\
+\x32\x33\x39\x63\x32\x37\x2e\x34\x35\x39\x2d\x30\x2e\x30\x30\x31\
+\x2c\x35\x34\x2e\x39\x32\x37\x2d\x35\x2e\x34\x31\x34\x2c\x38\x31\
+\x2e\x30\x36\x31\x2d\x31\x36\x2e\x32\x33\x39\x0a\x09\x63\x35\x32\
+\x2e\x32\x37\x31\x2d\x32\x31\x2e\x36\x35\x32\x2c\x39\x32\x2e\x39\
+\x38\x33\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\x31\x34\x2e\x36\x33\
+\x36\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\x34\x32\x2e\x37\x33\
+\x39\x2c\x32\x30\x30\x2e\x36\x2c\x34\x31\x38\x2e\x35\x33\x32\x2c\
+\x31\x30\x35\x2e\x38\x32\x36\x2c\x33\x35\x34\x2e\x32\x34\x2c\x34\
+\x37\x2e\x34\x7a\x22\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x3d\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\
+\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\x6c\x31\x33\x30\x2e\
+\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2d\x31\x34\x2e\
+\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2c\x30\x2d\x35\x30\
+\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\
+\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\x30\x4c\x32\
+\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\x35\x2e\x34\x2c\x37\
+\x34\x2e\x35\x0a\x09\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\
+\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\
+\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\x2e\
+\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x4c\x32\x30\
+\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\x2e\x35\x2c\x33\x38\x36\
+\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\
+\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x0a\x09\
+\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\
+\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x4c\x32\x35\x36\x2c\
+\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\x2e\x36\x2c\x31\x33\x30\x2e\
+\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\
+\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x43\x34\x35\x31\
+\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\x34\x35\x31\x2e\x35\x2c\x34\
+\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\x36\
+\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xb7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4d\
+\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\x73\x73\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\
+\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\
+\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x79\x3d\x22\x30\x70\x78\x22\
+\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\
+\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\
+\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\
+\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x6c\x2d\
+\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\x39\x63\x30\x2e\x35\x37\
+\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x32\x2e\x30\
+\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\x2e\x32\x31\x63\x30\x2d\
+\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\x31\x2d\x36\x2e\x33\x37\
+\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\x33\x37\x37\x0a\x09\x43\
+\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\x2c\x32\x2e\x31\x2c\x34\x2e\
+\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\x32\x38\x37\x63\x30\x2c\x33\
+\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\x31\x2c\x36\x2e\x33\x37\x37\
+\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x63\x31\x2e\x31\
+\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\x30\x2e\x33\x30\x39\x2c\x33\
+\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\x34\x6c\x33\x2e\x37\x39\x39\
+\x2c\x33\x2e\x38\x30\x31\x0a\x09\x63\x30\x2e\x33\x37\x32\x2c\x30\
+\x2e\x33\x37\x31\x2c\x30\x2e\x39\x37\x35\x2c\x30\x2e\x33\x37\x31\
+\x2c\x31\x2e\x33\x34\x36\x2c\x30\x6c\x30\x2e\x39\x34\x33\x2d\x30\
+\x2e\x39\x34\x33\x43\x31\x38\x2e\x30\x35\x31\x2c\x31\x36\x2e\x33\
+\x30\x37\x2c\x31\x37\x2e\x39\x31\x36\x2c\x31\x35\x2e\x38\x33\x38\
+\x2c\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x7a\x20\
+\x4d\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x0a\x09\x63\x30\
+\x2d\x32\x2e\x33\x36\x36\x2c\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\
+\x38\x33\x2c\x34\x2e\x32\x38\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\
+\x2e\x33\x36\x36\x2c\x30\x2c\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\
+\x30\x37\x2c\x34\x2e\x34\x37\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\
+\x2c\x32\x2e\x33\x36\x35\x2d\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\
+\x38\x33\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\x33\x0a\x09\
+\x43\x36\x2e\x31\x31\x31\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\
+\x30\x34\x2c\x31\x30\x2e\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\
+\x38\x2e\x32\x38\x37\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x22\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x4c\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\
+\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\
+\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\
+\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\
+\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\
+\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\
+\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\x2e\
+\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\
+\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\
+\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\
+\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\x20\
+\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\
+\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
+\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\
+\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\
+\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\x27\
+\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\
+\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\
+\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\
+\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\x37\
+\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\
+\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\
+\x00\x00\x03\xd9\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x72\
+\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
+\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
+\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
+\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
+\x6e\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
+\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\
+\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\
+\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
+\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\x30\x4c\x38\x2e\x36\x39\
+\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x39\
+\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
+\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\
+\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\
+\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\
+\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\
+\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2d\x30\
+\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2d\x30\x2e\x37\x31\x2c\
+\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\
+\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\x20\x4d\x31\x30\x2c\x30\x2e\
+\x34\x0a\x09\x63\x35\x2e\x33\x30\x32\x2c\x30\x2c\x39\x2e\x36\x2c\
+\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\
+\x35\x2e\x33\x30\x33\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2d\
+\x39\x2e\x36\x2c\x39\x2e\x36\x53\x30\x2e\x34\x2c\x31\x35\x2e\x33\
+\x30\x33\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\x2c\x34\x2e\
+\x36\x39\x38\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\
+\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
+\x0a\x09\x63\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\
+\x2d\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
+\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\
+\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
+\x34\x63\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\
+\x2c\x33\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\
+\x34\x0a\x09\x43\x31\x2e\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\
+\x2c\x35\x2e\x33\x38\x35\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\
+\x2c\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\xa3\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
+\x20\x34\x2e\x33\x35\x34\x33\x38\x20\x32\x34\x2e\x39\x32\x38\x37\
+\x20\x38\x2e\x34\x33\x32\x31\x37\x20\x31\x38\x2e\x30\x30\x31\x34\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x43\x20\x33\x31\x2e\x37\x33\x33\x39\x20\x2d\x33\x2e\x33\x31\x36\
+\x37\x35\x20\x35\x37\x2e\x32\x39\x34\x33\x20\x33\x2e\x35\x39\x37\
+\x39\x37\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\
+\x37\x38\x43\x20\x35\x38\x2e\x36\x37\x38\x38\x20\x33\x30\x2e\x38\
+\x30\x31\x39\x20\x35\x31\x2e\x31\x37\x38\x33\x20\x33\x37\x2e\x36\
+\x34\x34\x31\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\
+\x31\x31\x39\x43\x20\x32\x37\x2e\x34\x36\x34\x36\x20\x34\x39\x2e\
+\x30\x38\x31\x38\x20\x39\x2e\x32\x36\x34\x35\x31\x20\x34\x36\x2e\
+\x30\x39\x36\x34\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\
+\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x03\x03\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
+\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
+\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
+\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
+\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\x30\
+\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
+\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\x62\x6c\x65\
+\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\
+\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x2e\x32\x39\
+\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\x2e\x34\x33\x35\x2c\
+\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\x30\x33\x2d\x31\x2e\
+\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\x2e\x36\x31\x2c\x31\
+\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\x35\x2d\x30\x2e\x36\
+\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\x34\x38\x36\x2c\x30\
+\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0a\x09\x63\x30\x2e\x36\x31\
+\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\x34\x38\x38\x2d\x30\x2e\
+\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\x30\x2e\x32\x37\x6c\x32\
+\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\x6c\x35\x2e\x39\x31\x31\
+\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\x30\x37\x2d\x30\x2e\x36\
+\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\x2e\x38\x35\x32\x2c\x31\
+\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\x0a\x09\x63\x30\x2e\x36\
+\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\x30\x2e\x38\x35\x34\x2c\x31\
+\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\x36\x2c\x31\x2e\x39\x32\x4c\
+\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\x33\x34\x63\x2d\x30\x2e\x32\
+\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\x30\x2e\x36\x36\x31\x2c\x30\
+\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\x2c\x30\x2e\x36\x35\x36\x43\
+\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x33\
+\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x32\x39\x34\x2c\
+\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0a\
+\x00\x00\x02\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\x37\x2c\x32\x33\x34\x2e\x36\
+\x32\x35\x48\x31\x36\x37\x2e\x32\x39\x36\x6c\x31\x31\x39\x2e\x37\
+\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\x32\x4c\x32\x35\x36\x2c\x38\
+\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\x31\x37\x31\x2c\x31\x37\x31\
+\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\x39\x2e\x39\x32\x34\x4c\x31\
+\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\x37\x2e\x33\x37\x35\x48\x34\
+\x32\x37\x56\x32\x33\x34\x2e\x36\x32\x35\x7a\x22\x2f\x3e\x0a\x09\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x00\x6c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
+\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
+\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x2a\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\
+\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\x36\x2e\x37\
+\x39\x35\x2c\x33\x39\x36\x2e\x38\x20\x33\x32\x30\x2c\x33\x39\x36\
+\x2e\x38\x20\x33\x32\x30\x2c\x34\x34\x38\x20\x34\x34\x38\x2c\x34\
+\x34\x38\x20\x34\x34\x38\x2c\x33\x32\x30\x20\x33\x39\x36\x2e\x37\
+\x39\x35\x2c\x33\x32\x30\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\
+\x36\x2e\x38\x2c\x31\x31\x35\x2e\x32\x30\x35\x20\x33\x39\x36\x2e\
+\x38\x2c\x31\x39\x32\x20\x34\x34\x38\x2c\x31\x39\x32\x20\x34\x34\
+\x38\x2c\x36\x34\x20\x33\x32\x30\x2c\x36\x34\x20\x33\x32\x30\x2c\
+\x31\x31\x35\x2e\x32\x30\x35\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\
+\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\
+\x31\x35\x2e\x32\x30\x35\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\
+\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\x2c\x36\x34\x20\x36\x34\
+\x2c\x36\x34\x20\x36\x34\x2c\x31\x39\x32\x20\x31\x31\x35\x2e\x32\
+\x30\x35\x2c\x31\x39\x32\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\
+\x35\x2e\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\x20\x31\x31\x35\x2e\
+\x32\x2c\x33\x32\x30\x20\x36\x34\x2c\x33\x32\x30\x20\x36\x34\x2c\
+\x34\x34\x38\x20\x31\x39\x32\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\
+\x33\x39\x36\x2e\x37\x39\x35\x20\x09\x22\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\x1c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x34\x38\x20\x30\x20\x30\x20\x34\x38\x20\x34\
+\x38\x20\x34\x38\x29\x27\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\x68\x2e\x35\x63\x30\x2d\x2e\
+\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\x2d\x31\x68\x31\x2e\x35\x76\
+\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\x2d\x2e\x32\x32\x2e\x35\x2d\
+\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\x31\x68\x34\x76\x2d\x31\x68\
+\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\x30\x2d\x2e\x35\x2d\x2e\x32\
+\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\x35\x2e\x35\x68\x31\x2e\x35\
+\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
+\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x54\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x37\x36\x63\x2d\x34\x34\x2e\
+\x30\x30\x34\x2c\x30\x2d\x38\x30\x2e\x30\x30\x31\x2c\x33\x36\x2d\
+\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\x63\x30\x2c\x34\x34\x2e\x30\
+\x30\x34\x2c\x33\x35\x2e\x39\x39\x37\x2c\x38\x30\x2c\x38\x30\x2e\
+\x30\x30\x31\x2c\x38\x30\x63\x34\x34\x2e\x30\x30\x35\x2c\x30\x2c\
+\x37\x39\x2e\x39\x39\x39\x2d\x33\x35\x2e\x39\x39\x36\x2c\x37\x39\
+\x2e\x39\x39\x39\x2d\x38\x30\x0a\x09\x09\x09\x43\x33\x33\x35\x2e\
+\x39\x39\x39\x2c\x32\x31\x32\x2c\x33\x30\x30\x2e\x30\x30\x35\x2c\
+\x31\x37\x36\x2c\x32\x35\x36\x2c\x31\x37\x36\x7a\x20\x4d\x34\x34\
+\x36\x2e\x39\x33\x38\x2c\x32\x33\x34\x2e\x36\x36\x37\x63\x2d\x39\
+\x2e\x36\x30\x35\x2d\x38\x38\x2e\x35\x33\x31\x2d\x38\x31\x2e\x30\
+\x37\x34\x2d\x31\x36\x30\x2d\x31\x36\x39\x2e\x36\x30\x35\x2d\x31\
+\x36\x39\x2e\x35\x39\x39\x56\x33\x32\x68\x2d\x34\x32\x2e\x36\x36\
+\x36\x76\x33\x33\x2e\x30\x36\x37\x0a\x09\x09\x09\x63\x2d\x38\x38\
+\x2e\x35\x33\x31\x2c\x39\x2e\x35\x39\x39\x2d\x31\x36\x30\x2c\x38\
+\x31\x2e\x30\x36\x38\x2d\x31\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\
+\x39\x2e\x35\x39\x39\x48\x33\x32\x76\x34\x32\x2e\x36\x36\x37\x68\
+\x33\x33\x2e\x30\x36\x32\x63\x39\x2e\x36\x30\x34\x2c\x38\x38\x2e\
+\x35\x33\x31\x2c\x38\x31\x2e\x30\x37\x32\x2c\x31\x36\x30\x2c\x31\
+\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\x39\x2e\x36\x30\x34\x56\x34\
+\x38\x30\x68\x34\x32\x2e\x36\x36\x36\x76\x2d\x33\x33\x2e\x30\x36\
+\x32\x0a\x09\x09\x09\x63\x38\x38\x2e\x35\x33\x31\x2d\x39\x2e\x36\
+\x30\x34\x2c\x31\x36\x30\x2d\x38\x31\x2e\x30\x37\x33\x2c\x31\x36\
+\x39\x2e\x36\x30\x35\x2d\x31\x36\x39\x2e\x36\x30\x34\x48\x34\x38\
+\x30\x76\x2d\x34\x32\x2e\x36\x36\x37\x48\x34\x34\x36\x2e\x39\x33\
+\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x30\x35\x2e\x33\x33\x33\x63\
+\x2d\x38\x32\x2e\x31\x33\x37\x2c\x30\x2d\x31\x34\x39\x2e\x33\x33\
+\x34\x2d\x36\x37\x2e\x31\x39\x38\x2d\x31\x34\x39\x2e\x33\x33\x34\
+\x2d\x31\x34\x39\x2e\x33\x33\x33\x0a\x09\x09\x09\x63\x30\x2d\x38\
+\x32\x2e\x31\x33\x36\x2c\x36\x37\x2e\x31\x39\x37\x2d\x31\x34\x39\
+\x2e\x33\x33\x33\x2c\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\
+\x2e\x33\x33\x33\x63\x38\x32\x2e\x31\x33\x35\x2c\x30\x2c\x31\x34\
+\x39\x2e\x33\x33\x32\x2c\x36\x37\x2e\x31\x39\x38\x2c\x31\x34\x39\
+\x2e\x33\x33\x32\x2c\x31\x34\x39\x2e\x33\x33\x33\x43\x34\x30\x35\
+\x2e\x33\x33\x32\x2c\x33\x33\x38\x2e\x31\x33\x35\x2c\x33\x33\x38\
+\x2e\x31\x33\x35\x2c\x34\x30\x35\x2e\x33\x33\x33\x2c\x32\x35\x36\
+\x2c\x34\x30\x35\x2e\x33\x33\x33\x7a\x0a\x09\x09\x09\x22\x2f\x3e\
+\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0a\
+\x00\x00\x02\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\x2c\x32\x37\x37\x2e\x33\x37\
+\x35\x68\x32\x35\x39\x2e\x37\x30\x34\x4c\x32\x32\x35\x2e\x30\x30\
+\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\x4c\x32\x35\x36\x2c\x34\x32\
+\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\x4c\x32\x35\x36\x2c\x38\x35\
+\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\x32\x39\x2e\x39\x32\x34\x6c\
+\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\x31\x39\x2e\x37\x30\x31\x48\
+\x38\x35\x56\x32\x37\x37\x2e\x33\x37\x35\x7a\x22\x2f\x3e\x0a\x09\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x04\x13\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x03\xdc\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\
+\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\
+\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\x2d\x31\x34\x35\x2e\x37\
+\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\x31\x32\x38\x63\x36\x37\
+\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\x34\x2c\x31\x32\x38\x2c\
+\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\x2e\x39\x2c\x30\x2c\x31\
+\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\x32\x32\x34\x2d\x31\x32\
+\x36\x2e\x36\x0a\x09\x09\x43\x34\x32\x38\x2e\x32\x2c\x31\x39\x38\
+\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\x31\x32\x38\x2c\x32\x35\x36\
+\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\
+\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\x38\x39\x2e\x36\x2d\x34\x31\
+\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x63\x30\x2d\x35\x30\x2e\
+\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\x2e\x33\x2c\x38\x39\x2e\x36\
+\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\x36\x2c\x34\x31\x2c\x38\x39\
+\x2e\x36\x2c\x39\x31\x2e\x33\x0a\x09\x09\x43\x33\x34\x35\x2e\x36\
+\x2c\x33\x30\x36\x2e\x34\x2c\x33\x30\x35\x2e\x34\x2c\x33\x34\x37\
+\x2e\x33\x2c\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\x7a\x22\x2f\x3e\
+\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x32\x35\x36\x2c\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\
+\x32\x2e\x39\x2d\x31\x35\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\
+\x37\x63\x2d\x32\x2e\x35\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\
+\x2d\x37\x2e\x36\x2d\x30\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\
+\x2d\x35\x32\x2e\x33\x2c\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\
+\x35\x33\x2e\x33\x63\x30\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\
+\x2c\x35\x33\x2e\x33\x2c\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0a\
+\x09\x09\x09\x73\x35\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\
+\x2e\x33\x2d\x35\x33\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\
+\x32\x2d\x34\x2e\x36\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\
+\x2e\x35\x2c\x34\x2e\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\
+\x31\x39\x2e\x38\x2c\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\
+\x35\x36\x2c\x32\x35\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\
+\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x97\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x53\
+\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\x3d\x22\
+\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\
+\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x35\x2e\x31\x37\x33\x2c\
+\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x2e\
+\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\x2c\x31\x2e\x31\x2c\x30\
+\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x68\x31\x32\x63\x31\x2e\
+\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\x39\x2c\x32\x2d\x32\x56\
+\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\x37\x33\x2c\x32\x7a\x20\
+\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\x35\x34\x39\x2d\x30\x2e\
+\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\x0a\x09\x43\x36\x2e\x34\
+\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\x34\x39\x2c\x36\x2c\x38\x56\
+\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\x33\x2c\x34\x68\x2d\x32\x76\
+\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xe7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\
+\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\
+\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\
+\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
+\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x30\x2c\x30\x2e\
+\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x30\x2e\x34\x2c\
+\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\
+\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\x2e\x36\x39\x38\x2c\x31\x39\
+\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\x36\x63\x35\x2e\x33\x30\x31\
+\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\
+\x2d\x39\x2e\x36\x30\x31\x0a\x09\x43\x31\x39\x2e\x36\x2c\x34\x2e\
+\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x31\x2c\x30\x2e\x34\x2c\x31\
+\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x37\x2e\x35\x39\
+\x39\x63\x2d\x34\x2e\x31\x39\x37\x2c\x30\x2d\x37\x2e\x36\x2d\x33\
+\x2e\x34\x30\x32\x2d\x37\x2e\x36\x2d\x37\x2e\x36\x53\x35\x2e\x38\
+\x30\x32\x2c\x32\x2e\x34\x2c\x31\x30\x2c\x32\x2e\x34\x63\x34\x2e\
+\x31\x39\x37\x2c\x30\x2c\x37\x2e\x36\x30\x31\x2c\x33\x2e\x34\x30\
+\x32\x2c\x37\x2e\x36\x30\x31\x2c\x37\x2e\x36\x0a\x09\x53\x31\x34\
+\x2e\x31\x39\x37\x2c\x31\x37\x2e\x35\x39\x39\x2c\x31\x30\x2c\x31\
+\x37\x2e\x35\x39\x39\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x16\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\x20\x63\x79\x3d\x22\x32\
+\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\x2f\x3e\x0a\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x34\x30\x2c\x39\x36\x68\x2d\
+\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\x48\x31\x39\x32\x6c\x2d\x33\
+\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\x32\x32\x2e\x30\x39\x32\x2c\
+\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\x30\x38\x2d\x34\x30\x2c\x34\
+\x30\x76\x32\x37\x32\x63\x30\x2c\x32\x32\x2e\x30\x39\x32\x2c\x31\
+\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\x34\x30\x2c\x34\x30\x68\x33\
+\x36\x38\x63\x32\x32\x2e\x30\x39\x32\x2c\x30\x2c\x34\x30\x2d\x31\
+\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\x34\x30\x0a\x09\x09\x56\x31\
+\x33\x36\x43\x34\x38\x30\x2c\x31\x31\x33\x2e\x39\x30\x38\x2c\x34\
+\x36\x32\x2e\x30\x39\x32\x2c\x39\x36\x2c\x34\x34\x30\x2c\x39\x36\
+\x7a\x20\x4d\x32\x35\x36\x2c\x33\x39\x32\x63\x2d\x36\x31\x2e\x38\
+\x35\x35\x2c\x30\x2d\x31\x31\x32\x2d\x35\x30\x2e\x31\x34\x35\x2d\
+\x31\x31\x32\x2d\x31\x31\x32\x73\x35\x30\x2e\x31\x34\x35\x2d\x31\
+\x31\x32\x2c\x31\x31\x32\x2d\x31\x31\x32\x73\x31\x31\x32\x2c\x35\
+\x30\x2e\x31\x34\x35\x2c\x31\x31\x32\x2c\x31\x31\x32\x0a\x09\x09\
+\x53\x33\x31\x37\x2e\x38\x35\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\
+\x2c\x33\x39\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x3f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x32\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x35\x32\x63\
+\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\x30\x34\x2c\x34\x36\x2e\x38\
+\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\x34\x36\x2e\x38\x2c\x31\x30\
+\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\x73\x31\x30\x34\x2d\x34\x36\
+\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\x34\x53\x33\x31\x33\x2e\x32\
+\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\x31\x35\x32\x7a\x20\x4d\x32\
+\x35\x36\x2c\x34\x38\x0a\x09\x09\x09\x43\x31\x34\x31\x2e\x36\x30\
+\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\
+\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\
+\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\
+\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\
+\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\
+\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\x0a\x09\x09\x09\x63\x2d\
+\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\
+\x34\x2e\x38\x38\x33\x2d\x31\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\
+\x34\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\
+\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\
+\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\
+\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\
+\x36\x2c\x34\x32\x32\x2e\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x42\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
+\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
+\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
+\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
+\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
+\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
+\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x30\x37\x2e\x35\
+\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x6c\x2d\x32\x37\x2e\x37\
+\x31\x37\x2c\x31\x31\x2e\x34\x38\x63\x31\x38\x2e\x35\x38\x35\x2c\
+\x34\x34\x2e\x38\x36\x39\x2c\x31\x38\x2e\x35\x38\x35\x2c\x39\x34\
+\x2e\x32\x39\x31\x2c\x30\x2c\x31\x33\x39\x2e\x31\x35\x39\x63\x2d\
+\x31\x38\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\
+\x2e\x35\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\
+\x2c\x39\x38\x2e\x34\x0a\x09\x63\x2d\x32\x32\x2e\x34\x33\x38\x2c\
+\x39\x2e\x32\x39\x33\x2d\x34\x36\x2e\x30\x30\x34\x2c\x31\x33\x2e\
+\x39\x34\x2d\x36\x39\x2e\x35\x37\x39\x2c\x31\x33\x2e\x39\x33\x39\
+\x63\x2d\x32\x33\x2e\x35\x36\x39\x2d\x30\x2e\x30\x30\x31\x2d\x34\
+\x37\x2e\x31\x34\x37\x2d\x34\x2e\x36\x34\x37\x2d\x36\x39\x2e\x35\
+\x37\x39\x2d\x31\x33\x2e\x39\x33\x39\x63\x2d\x34\x34\x2e\x38\x36\
+\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\x2d\
+\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\x34\
+\x0a\x09\x43\x31\x33\x2e\x35\x30\x37\x2c\x32\x30\x30\x2e\x36\x34\
+\x37\x2c\x33\x34\x2e\x37\x35\x38\x2c\x31\x31\x38\x2e\x37\x31\x2c\
+\x39\x30\x2e\x37\x35\x38\x2c\x36\x38\x2e\x36\x34\x34\x6c\x36\x30\
+\x2e\x38\x30\x31\x2c\x36\x30\x2e\x38\x30\x31\x56\x37\x2e\x35\x32\
+\x31\x48\x32\x39\x2e\x36\x33\x35\x4c\x36\x39\x2e\x35\x31\x34\x2c\
+\x34\x37\x2e\x34\x43\x35\x2e\x32\x32\x32\x2c\x31\x30\x35\x2e\x38\
+\x32\x36\x2d\x31\x38\x2e\x39\x38\x35\x2c\x32\x30\x30\x2e\x36\x2c\
+\x31\x36\x2e\x31\x32\x33\x2c\x32\x38\x35\x2e\x33\x35\x39\x0a\x09\
+\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
+\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
+\x2e\x36\x33\x36\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
+\x31\x33\x37\x2c\x31\x30\x2e\x38\x32\x36\x2c\x35\x33\x2e\x35\x39\
+\x39\x2c\x31\x36\x2e\x32\x33\x39\x2c\x38\x31\x2e\x30\x36\x31\x2c\
+\x31\x36\x2e\x32\x33\x39\x73\x35\x34\x2e\x39\x32\x34\x2d\x35\x2e\
+\x34\x31\x33\x2c\x38\x31\x2e\x30\x36\x2d\x31\x36\x2e\x32\x33\x39\
+\x0a\x09\x63\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x32\
+\x2c\x39\x32\x2e\x39\x38\x34\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\
+\x31\x34\x2e\x36\x33\x37\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\
+\x32\x39\x2e\x31\x36\x37\x2c\x32\x33\x33\x2e\x30\x38\x37\x2c\x34\
+\x32\x39\x2e\x31\x36\x37\x2c\x31\x37\x35\x2e\x35\x31\x31\x2c\x34\
+\x30\x37\x2e\x35\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x7a\x22\
+\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x07\x6b\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\
+\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\x2e\x36\x37\x2c\x37\x2e\
+\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\x31\x31\x2e\x35\x38\x36\
+\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\x2e\x39\x32\x34\x2c\x32\
+\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\x63\x34\x2e\x35\x30\x33\
+\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\x2e\x36\x31\x37\x2c\x31\
+\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\x34\x0a\x09\x09\x63\x31\
+\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\x33\x2c\x33\x33\x2e\x33\x34\
+\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\x33\x33\x2e\x33\x34\x35\x2d\
+\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\x30\x2e\x38\x32\x32\x76\x2d\
+\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\x32\x34\x2e\x38\x33\x32\x2d\
+\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\x34\x38\x34\x2d\x34\x36\x2e\
+\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\x36\x0a\x09\x09\x63\x2d\x31\
+\x35\x2e\x39\x33\x31\x2d\x32\x2e\x36\x32\x34\x2d\x33\x39\x2e\x32\
+\x35\x38\x2d\x33\x2e\x38\x32\x37\x2d\x35\x35\x2e\x30\x38\x39\x2d\
+\x33\x2e\x37\x34\x39\x63\x2d\x31\x35\x2e\x38\x32\x39\x2c\x30\x2e\
+\x30\x38\x36\x2d\x33\x30\x2e\x39\x38\x31\x2c\x31\x2e\x34\x30\x34\
+\x2d\x34\x34\x2e\x32\x37\x37\x2c\x33\x2e\x37\x34\x39\x43\x31\x36\
+\x37\x2e\x31\x34\x33\x2c\x37\x34\x2e\x35\x37\x36\x2c\x31\x36\x30\
+\x2c\x38\x38\x2e\x39\x32\x38\x2c\x31\x36\x30\x2c\x31\x31\x35\x2e\
+\x33\x35\x39\x56\x31\x34\x34\x68\x39\x36\x0a\x09\x09\x76\x31\x36\
+\x48\x31\x32\x38\x2e\x38\x32\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\
+\x30\x2d\x36\x34\x2e\x35\x33\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\
+\x36\x34\x2e\x38\x31\x33\x2c\x39\x35\x2e\x32\x34\x32\x43\x36\x34\
+\x2e\x30\x30\x35\x2c\x32\x35\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\
+\x32\x35\x35\x2e\x37\x34\x37\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\
+\x2c\x39\x2e\x35\x32\x33\x2c\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\
+\x32\x2c\x32\x2e\x36\x38\x35\x2c\x32\x37\x2e\x34\x30\x34\x0a\x09\
+\x09\x43\x37\x34\x2e\x36\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\
+\x39\x39\x2e\x34\x35\x31\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\
+\x32\x2c\x33\x35\x32\x48\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\
+\x76\x2d\x34\x33\x2e\x32\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\
+\x2e\x32\x33\x38\x2c\x31\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\
+\x2e\x33\x33\x32\x2c\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\
+\x30\x35\x36\x7a\x20\x4d\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\
+\x37\x2e\x30\x30\x32\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\
+\x30\x2d\x31\x37\x2e\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\
+\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\
+\x2e\x36\x36\x34\x2c\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\
+\x2c\x31\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\
+\x35\x37\x34\x2c\x30\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\
+\x35\x35\x2c\x31\x37\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0a\
+\x09\x09\x43\x32\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\
+\x31\x37\x2c\x32\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\
+\x30\x32\x2c\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\
+\x30\x32\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\
+\x33\x43\x34\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\
+\x2c\x34\x31\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\
+\x2e\x31\x38\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\
+\x36\x76\x33\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\
+\x35\x2d\x32\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\
+\x34\x39\x2e\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0a\x09\x09\
+\x63\x2d\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\
+\x34\x38\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\
+\x30\x2e\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\
+\x2e\x35\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\
+\x38\x34\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\
+\x31\x37\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\
+\x36\x30\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\
+\x2e\x32\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0a\x09\x09\x76\x35\
+\x34\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\
+\x34\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\
+\x34\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\
+\x37\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\
+\x30\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\
+\x32\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\
+\x32\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\
+\x34\x2e\x34\x36\x33\x56\x33\x36\x38\x0a\x09\x09\x68\x2d\x39\x36\
+\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
+\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
+\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
+\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
+\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
+\x32\x35\x36\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\x32\
+\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\x39\
+\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\
+\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\x32\
+\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\x38\
+\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\x31\
+\x37\x2e\x34\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\x37\x2e\
+\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\x33\x38\
+\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\x37\x2c\
+\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\x2d\x31\
+\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\x39\x30\
+\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\x38\x2e\
+\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\x2e\x38\
+\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x16\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x31\x32\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x36\x34\x43\x31\
+\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x36\x34\x2c\x31\x35\x30\
+\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x31\x30\
+\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\x34\x30\x31\x2c\x31\x39\x32\
+\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2d\x33\
+\x32\x0a\x09\x09\x09\x63\x30\x2d\x38\x2e\x35\x33\x31\x2d\x33\x2e\
+\x31\x39\x38\x2d\x31\x36\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\
+\x33\x33\x33\x63\x2d\x35\x2e\x33\x33\x33\x2d\x35\x2e\x33\x33\x34\
+\x2d\x38\x2e\x35\x33\x31\x2d\x31\x32\x2e\x38\x30\x33\x2d\x38\x2e\
+\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x34\x63\x30\x2d\x31\x38\x2e\
+\x31\x33\x35\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\
+\x2d\x33\x32\x68\x33\x38\x2e\x33\x39\x36\x0a\x09\x09\x09\x63\x35\
+\x38\x2e\x36\x36\x37\x2c\x30\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\
+\x34\x38\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\
+\x36\x36\x43\x34\x34\x38\x2c\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\
+\x36\x31\x2e\x36\x30\x34\x2c\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\
+\x7a\x20\x4d\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\
+\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\
+\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\
+\x33\x32\x2c\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\
+\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\
+\x33\x32\x2c\x33\x32\x53\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\
+\x36\x2c\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\
+\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\
+\x2d\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\
+\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\
+\x33\x36\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\
+\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
+\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\
+\x32\x33\x34\x2e\x36\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\
+\x32\x32\x30\x2e\x38\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
+\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\
+\x20\x4d\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\
+\x33\x2e\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\
+\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\
+\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\
+\x32\x43\x33\x34\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\
+\x32\x2c\x33\x32\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x2c\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x7a\x20\x4d\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0a\
+\x09\x09\x09\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\
+\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\
+\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\
+\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\
+\x2c\x33\x32\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\
+\x35\x36\x2c\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\
+\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\xbb\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x63\x2d\x31\x34\
+\x2e\x35\x38\x35\x2d\x31\x34\x2e\x35\x37\x37\x2d\x33\x36\x2e\x30\
+\x35\x34\x2d\x31\x35\x2e\x38\x39\x2d\x35\x30\x2e\x36\x33\x39\x2d\
+\x31\x2e\x33\x31\x32\x6c\x2d\x34\x31\x2e\x36\x38\x37\x2c\x34\x31\
+\x2e\x36\x36\x34\x63\x2d\x31\x30\x2e\x38\x35\x32\x2c\x31\x30\x2e\
+\x38\x33\x36\x2d\x32\x33\x2e\x39\x33\x2c\x31\x30\x2e\x38\x35\x39\
+\x2d\x33\x31\x2e\x35\x36\x34\x2c\x31\x2e\x38\x35\x32\x0a\x09\x63\
+\x2d\x35\x2e\x30\x35\x37\x2d\x35\x2e\x39\x36\x38\x2d\x33\x2e\x30\
+\x36\x31\x2d\x32\x34\x2e\x33\x37\x34\x2d\x31\x2e\x36\x34\x34\x2d\
+\x33\x36\x2e\x30\x34\x39\x6c\x32\x30\x2e\x39\x30\x37\x2d\x31\x37\
+\x31\x2e\x38\x34\x39\x63\x31\x2e\x38\x36\x37\x2d\x31\x35\x2e\x33\
+\x35\x33\x2d\x39\x2e\x30\x37\x2d\x33\x30\x2e\x31\x38\x35\x2d\x32\
+\x34\x2e\x34\x33\x2d\x33\x32\x2e\x30\x35\x31\x0a\x09\x63\x2d\x31\
+\x35\x2e\x33\x35\x38\x2d\x31\x2e\x38\x36\x37\x2d\x32\x39\x2e\x33\
+\x32\x32\x2c\x39\x2e\x39\x33\x39\x2d\x33\x31\x2e\x31\x39\x31\x2c\
+\x32\x35\x2e\x32\x38\x39\x4c\x32\x36\x37\x2e\x33\x37\x2c\x32\x33\
+\x36\x2e\x30\x32\x31\x63\x2d\x31\x2e\x32\x30\x35\x2c\x33\x2e\x33\
+\x35\x38\x2d\x33\x2e\x37\x39\x2c\x33\x2e\x39\x33\x38\x2d\x34\x2e\
+\x30\x38\x31\x2d\x30\x2e\x35\x38\x32\x4c\x32\x35\x35\x2e\x34\x34\
+\x2c\x36\x30\x0a\x09\x63\x30\x2d\x31\x35\x2e\x34\x36\x35\x2d\x31\
+\x32\x2e\x35\x34\x32\x2d\x32\x38\x2d\x32\x38\x2e\x30\x31\x34\x2d\
+\x32\x38\x63\x2d\x31\x35\x2e\x34\x37\x33\x2c\x30\x2d\x32\x38\x2e\
+\x30\x31\x35\x2c\x31\x32\x2e\x35\x33\x35\x2d\x32\x38\x2e\x30\x31\
+\x35\x2c\x32\x38\x6c\x2d\x30\x2e\x35\x35\x32\x2c\x31\x37\x36\x2e\
+\x37\x35\x32\x63\x30\x2e\x31\x34\x36\x2c\x32\x2e\x30\x34\x2d\x31\
+\x2e\x36\x30\x34\x2c\x32\x2e\x36\x32\x34\x2d\x31\x2e\x39\x32\x2c\
+\x30\x2e\x32\x39\x34\x4c\x31\x37\x32\x2e\x30\x31\x36\x2c\x39\x39\
+\x2e\x30\x37\x37\x0a\x09\x63\x2d\x32\x2e\x37\x35\x2d\x31\x35\x2e\
+\x32\x31\x39\x2d\x31\x37\x2e\x33\x32\x33\x2d\x32\x36\x2e\x32\x30\
+\x33\x2d\x33\x32\x2e\x35\x34\x38\x2d\x32\x33\x2e\x34\x35\x33\x63\
+\x2d\x31\x35\x2e\x32\x32\x37\x2c\x32\x2e\x37\x34\x38\x2d\x32\x35\
+\x2e\x33\x33\x39\x2c\x31\x38\x2e\x31\x38\x37\x2d\x32\x32\x2e\x35\
+\x39\x31\x2c\x33\x33\x2e\x34\x30\x33\x6c\x32\x32\x2e\x31\x39\x33\
+\x2c\x31\x36\x31\x2e\x34\x35\x35\x0a\x09\x63\x30\x2e\x30\x32\x33\
+\x2c\x32\x2e\x38\x37\x32\x2d\x30\x2e\x39\x34\x31\x2c\x34\x2e\x35\
+\x31\x33\x2d\x32\x2e\x33\x30\x38\x2c\x30\x2e\x38\x33\x31\x6c\x2d\
+\x33\x33\x2e\x31\x30\x39\x2d\x38\x38\x2e\x35\x31\x37\x63\x2d\x35\
+\x2e\x31\x38\x2d\x31\x34\x2e\x35\x37\x32\x2d\x32\x31\x2e\x31\x39\
+\x36\x2d\x32\x33\x2e\x30\x36\x35\x2d\x33\x35\x2e\x37\x37\x36\x2d\
+\x31\x37\x2e\x38\x38\x39\x0a\x09\x63\x2d\x31\x34\x2e\x35\x37\x39\
+\x2c\x35\x2e\x31\x37\x37\x2d\x32\x32\x2e\x32\x30\x31\x2c\x32\x32\
+\x2e\x30\x36\x31\x2d\x31\x37\x2e\x30\x32\x33\x2c\x33\x36\x2e\x36\
+\x33\x31\x6c\x35\x38\x2e\x30\x34\x32\x2c\x31\x38\x39\x2e\x36\x32\
+\x35\x63\x30\x2e\x33\x30\x33\x2c\x31\x2e\x30\x34\x36\x2c\x30\x2e\
+\x36\x32\x34\x2c\x32\x2e\x30\x38\x35\x2c\x30\x2e\x39\x35\x33\x2c\
+\x33\x2e\x31\x31\x38\x6c\x30\x2e\x31\x32\x31\x2c\x30\x2e\x33\x39\
+\x0a\x09\x63\x30\x2e\x30\x31\x31\x2c\x30\x2e\x30\x33\x31\x2c\x30\
+\x2e\x30\x32\x35\x2c\x30\x2e\x30\x35\x38\x2c\x30\x2e\x30\x33\x35\
+\x2c\x30\x2e\x30\x38\x38\x43\x31\x32\x36\x2e\x30\x37\x39\x2c\x34\
+\x34\x34\x2e\x32\x33\x33\x2c\x31\x37\x32\x2e\x35\x37\x2c\x34\x38\
+\x30\x2c\x32\x32\x37\x2e\x34\x32\x37\x2c\x34\x38\x30\x63\x33\x35\
+\x2e\x31\x31\x36\x2c\x30\x2c\x37\x31\x2e\x35\x39\x31\x2d\x31\x32\
+\x2e\x33\x37\x38\x2c\x39\x39\x2e\x33\x35\x37\x2d\x33\x33\x2e\x36\
+\x37\x32\x0a\x09\x63\x30\x2e\x30\x30\x31\x2c\x30\x2c\x30\x2e\x30\
+\x30\x33\x2d\x30\x2e\x30\x30\x32\x2c\x30\x2e\x30\x30\x33\x2d\x30\
+\x2e\x30\x30\x32\x63\x32\x39\x2e\x39\x39\x2d\x31\x38\x2e\x30\x35\
+\x31\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
+\x37\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
+\x37\x43\x34\x36\x37\x2e\x34\x34\x35\x2c\x33\x31\x30\x2e\x34\x30\
+\x32\x2c\x34\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\
+\x2c\x34\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\
+\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xab\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x35\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x30\
+\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x33\x37\x35\x2e\x32\x30\
+\x32\x2c\x31\x30\x37\x20\x32\x35\x36\x2c\x32\x32\x36\x2e\x32\x30\
+\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x31\x30\x37\x20\x31\x30\
+\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x32\x32\x36\x2e\x32\x30\
+\x32\x2c\x32\x35\x36\x20\x31\x30\x37\x2c\x33\x37\x35\x2e\x32\x30\
+\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x34\x30\x35\x20\x32\x35\
+\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\x20\x0a\x09\x09\x09\x33\x37\
+\x35\x2e\x32\x30\x32\x2c\x34\x30\x35\x20\x34\x30\x35\x2c\x33\x37\
+\x35\x2e\x32\x30\x32\x20\x32\x38\x35\x2e\x37\x39\x38\x2c\x32\x35\
+\x36\x20\x09\x09\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x1b\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\x38\x63\x2d\x37\x32\x2e\
+\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\x35\x39\x2e\x34\x30\x35\
+\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\x2d\x37\x32\x2e\x36\x30\
+\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\x33\x32\x2c\x31\x33\x32\
+\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\x30\x2c\x36\x39\x2e\x32\
+\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\x2e\x34\x30\x36\x2c\x33\
+\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\x32\x33\x34\x68\x31\x35\
+\x34\x56\x38\x30\x0a\x09\x09\x6c\x2d\x35\x31\x2e\x36\x39\x38\x2c\
+\x35\x31\x2e\x37\x30\x32\x43\x33\x34\x38\x2e\x34\x30\x36\x2c\x39\
+\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\x2e\x34\x30\x36\x2c\x38\x30\
+\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\x39\x36\x2e\x37\x39\x37\x2c\
+\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\x32\x30\x33\x2d\x31\x37\x36\
+\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\x39\x34\x2c\x31\x37\x36\x2c\
+\x31\x37\x36\x2c\x31\x37\x36\x0a\x09\x09\x63\x38\x31\x2e\x30\x34\
+\x35\x2c\x30\x2c\x31\x34\x38\x2e\x32\x38\x37\x2d\x35\x34\x2e\x31\
+\x33\x34\x2c\x31\x36\x39\x2e\x34\x30\x31\x2d\x31\x32\x38\x48\x33\
+\x37\x38\x2e\x38\x35\x43\x33\x36\x30\x2e\x31\x30\x35\x2c\x33\x35\
+\x33\x2e\x35\x36\x31\x2c\x33\x31\x31\x2e\x37\x31\x32\x2c\x33\x38\
+\x38\x2c\x32\x35\x36\x2c\x33\x38\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\x69\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
+\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
+\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
+\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
+\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
+\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
+\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
+\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
+\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
+\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
+\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
+\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
+\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
+\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
+\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xc1\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x38\x30\
+\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\x30\x20\x33\x38\x34\
+\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\x36\x20\x32\x37\x36\
+\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\x38\x20\x32\x35\x36\
+\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\
+\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\
+\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\x20\x33\x32\x2c\x32\
+\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\x0a\x09\x31\x32\x38\
+\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\x37\x36\x20\x32\x33\x36\
+\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\x38\x34\x20\x32\x35\x36\
+\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\x38\x34\x20\x32\x37\x35\
+\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\x2e\x34\x2c\x32\x37\x35\
+\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\x2e\x38\x20\x33\x38\x34\
+\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\
+\x00\x00\x02\x1c\
+\x00\
+\x00\x07\x5c\x78\x9c\xdd\x55\x4d\x73\x9b\x30\x10\xbd\xf7\x57\x6c\
+\xa7\x07\x25\x07\x84\xbe\x10\x28\x13\x92\x99\x7a\xa6\xa7\xf4\x96\
+\x5c\x7a\xc3\x41\x80\x1a\x0c\x1e\xa0\xc6\xfd\xf7\x95\x6d\x49\x76\
+\x69\x33\xbd\xe4\xd0\x89\x0f\x98\xf7\x56\x6f\xd9\xb7\xcb\x0e\xb7\
+\xf7\xfb\x4d\x0b\x3b\x3d\x8c\xa6\xef\x72\x44\x31\x41\xa0\xbb\xe7\
+\xbe\x34\x5d\x9d\xa3\xa7\xc7\x2f\x51\x86\xee\xef\x3e\xdc\x7e\x8c\
+\x22\x78\x6c\xcc\x08\x95\x69\x35\xcc\xc5\x08\xb5\xee\xf4\x50\x4c\
+\xba\x84\xf5\x4f\x28\x77\x66\xdc\xd5\x1b\x60\x98\x52\x4c\x21\x8a\
+\xac\xc4\x12\x97\x89\x29\x02\xfb\xa8\x6e\xcc\x51\x33\x4d\xdb\x9b\
+\x38\x9e\xe7\x19\xcf\x1c\xf7\x43\x1d\x33\x42\x48\x6c\xcf\xbb\x23\
+\x37\xfb\xd6\x74\x2f\x7f\x3b\x48\x95\x52\xf1\x31\x8a\x60\x36\xe5\
+\xd4\xe4\x48\x72\x6c\x49\xb9\x9d\x10\x34\xda\xd4\xcd\x64\x29\x71\
+\x40\x3b\xa3\xe7\xcf\xfd\x3e\x47\x89\xc4\x82\x28\x01\x94\xa6\x38\
+\x4b\x32\x70\x0a\x90\x02\xd9\x32\x6b\x30\x65\x8e\xb6\x45\xad\xe9\
+\x09\x4e\x43\xd1\x8d\x55\x3f\x6c\x72\x74\xbc\x6d\xad\xc9\xab\x45\
+\x8e\xeb\xf1\xb9\x68\xf5\x95\xcd\x23\x99\x14\xd7\x07\xe1\xb6\x98\
+\x1a\xb0\x99\xbe\x82\xc2\x5c\xa4\x82\x81\x60\x38\x15\x29\x7b\x08\
+\x44\x22\x70\xa6\x98\xfc\x83\x58\x2d\x89\x7f\xe1\x0b\x81\xc2\x24\
+\x13\x0a\xa8\xc2\x89\xe0\x14\x24\xc3\x22\xe3\x02\xb8\x9d\x04\xf3\
+\x68\x05\x42\x60\xa9\xa4\x0a\x61\x9f\xd7\xcb\x03\xf6\x15\xbe\x4a\
+\x04\x53\x9e\xe0\x04\x4b\x42\xb3\x55\x20\xd8\xb1\x55\x49\x78\x26\
+\xe3\x98\x50\xea\x2a\x3a\x81\x55\xa8\xd7\x05\xbd\x1d\xaf\xf5\xd8\
+\x25\x7f\x58\xf6\xf4\x1b\x3a\xbc\x88\x6d\x8e\x3e\xad\xab\x75\x55\
+\x55\x28\xb6\x13\x88\xeb\xb7\x99\x5f\x30\x22\x70\xc2\x14\xbd\x70\
+\x46\x30\xe7\x32\x0b\xce\xa8\xc4\x8a\x67\xdc\x59\x73\xe8\xec\xcd\
+\x87\x83\x39\x27\x0f\xd8\xe7\x0f\x44\x86\x53\x46\x93\x90\xe0\x94\
+\xf7\xe2\x7a\x1e\xe4\x89\x0c\x85\x39\xe1\xa2\xf2\xd0\xa5\xae\xef\
+\x34\x82\x71\x1a\xfa\x17\x6d\x7b\x46\x8e\x3f\x4f\x44\x76\x9d\xf4\
+\x73\xb1\xcd\xd1\xd0\xff\xe8\xca\xdf\xe8\xef\xbd\xe9\x96\xfc\xc6\
+\x4c\x7a\x68\x8d\xfd\xb3\x6b\x4d\x30\xe1\x69\x12\x62\x6e\x27\x39\
+\x4e\x28\xa7\xec\x4d\xa7\xb2\xe8\xda\xfb\xda\x2a\x67\xea\x3d\xcd\
+\xeb\xd5\x2d\xb2\x5f\x08\x95\x30\x76\xde\x22\x9c\x26\x32\x91\x7e\
+\x8b\x4e\xe8\x62\x8b\x5c\xd8\xcf\xc6\xcb\x17\xef\xc3\x7f\xd3\xba\
+\xd3\xc5\x7e\xcc\xee\x7e\x01\xb3\x30\xdb\xa9\
+\x00\x00\x01\xd8\
+\x00\
+\x00\x06\xc4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\xe3\x5f\x31\
+\xdd\x5b\x25\xf6\x0b\x62\x62\x53\xe3\xa8\xfe\x90\x65\x29\x6d\x2d\
+\x35\x75\xd5\x53\x85\x61\x0b\x28\x14\x10\x2c\x60\xe7\xd7\x77\x77\
+\xed\x54\xa9\x14\x5f\x43\x0f\x3b\xab\x9d\x79\xf3\xe6\x0d\x4f\x62\
+\x76\x77\xfc\x9d\x43\x27\xea\x26\x2b\x8b\x00\x71\xc2\x10\x88\x22\
+\x2a\xe3\xac\x48\x02\xd4\xca\x5f\x78\x82\xee\xe6\xa3\xd9\x3b\x8c\
+\x61\x23\x0a\x51\x87\xb2\xac\x7d\xf8\x18\x97\x07\x01\xdb\x3c\x6f\
+\x1b\x69\x52\xc0\x3d\xe2\x10\x6e\xc3\xd7\xfd\x06\xd6\xc7\xaa\xac\
+\x25\xec\xf2\x36\xc1\xdb\x02\x88\x49\xee\xcf\x33\x7c\xf0\x08\x63\
+\xb0\x68\xb3\x3c\x06\xf6\x1e\x00\x63\x4d\xbf\xfa\xb2\x7c\xf8\xb1\
+\x5b\x43\xd3\x25\xb0\xfb\xb6\xb8\xdf\x2e\x01\x61\x4a\xbf\xbb\x4b\
+\x4a\x57\x0f\x2b\xc3\xc0\x09\xa7\x74\xfd\x19\x01\x4a\xa5\xac\x7c\
+\x4a\xfb\xbe\x27\xbd\x4b\xca\x3a\xa1\x9b\x3a\xac\xd2\x2c\x6a\xa8\
+\x02\x52\x0d\x54\x4d\x54\x91\x71\x4e\x62\x19\x23\x35\x42\x33\xbf\
+\xd8\x93\x23\xc8\xe2\x00\xdd\x87\x27\x51\xff\x54\x0f\xf5\x19\x8a\
+\x26\x78\x85\xd9\x61\x8c\x69\xa6\x0b\xc4\x3f\xe6\x59\xf1\xf8\x1a\
+\x90\x4f\xa7\x53\x6a\xaa\x0a\x1a\x20\x56\x1d\x11\x9c\xce\xf7\xc8\
+\x82\x3e\x8b\x65\x1a\xa0\x31\x77\x74\x3e\x15\x59\x92\xca\xbf\xcf\
+\x2e\x13\xfd\xa2\xd4\x4d\xc0\x40\xe5\xf4\x41\xd0\xc8\x53\x2e\x02\
+\x24\x8a\xf0\x90\x0b\x7c\x08\xa3\xc7\xa4\x2e\xdb\x22\xf6\x0b\xd1\
+\xc3\x0b\xe4\x07\x23\xcd\x6f\xaa\x30\x52\xf0\xaa\x16\x8d\xa8\x3b\
+\xa1\x77\x4e\xe6\x23\xcb\x04\x6b\x56\x85\x32\x05\xb5\xf0\x27\xee\
+\x31\x9b\x8f\x5d\xe2\x46\xcc\x76\xc9\x2d\x76\x6d\x4f\x45\x75\xf4\
+\x9d\xe2\x31\x23\xe3\x08\xab\x82\xcd\x74\x12\xbb\xf8\x52\xee\xce\
+\x25\x66\x6a\xee\x73\x83\xbe\x53\x53\x30\x2d\x3a\x65\x1b\x46\x7d\
+\xf6\x66\xce\x93\x5a\xdf\xb2\xe8\xbf\x2a\x9c\xc9\xe4\x3f\x50\x71\
+\xc3\xbd\xa1\x54\xcc\xe8\x35\x73\x9c\x09\x7f\x13\x41\x66\xce\x55\
+\x73\x86\x57\xa1\xcd\x19\x48\xc5\x75\x73\x6e\xd8\xf4\x4d\x04\x99\
+\x39\x57\xcd\x19\x5e\x85\x36\x67\x20\x15\xc6\x9c\x4b\x50\xff\xe5\
+\xf9\xe8\x0f\x44\x1a\x94\x79\
+\x00\x00\x02\x98\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x31\x32\x38\x2c\x34\x30\x35\x2e\x34\x32\x39\x43\
+\x31\x32\x38\x2c\x34\x32\x38\x2e\x38\x34\x36\x2c\x31\x34\x37\x2e\
+\x31\x39\x38\x2c\x34\x34\x38\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
+\x34\x34\x38\x68\x31\x37\x30\x2e\x36\x36\x37\x43\x33\x36\x34\x2e\
+\x38\x30\x32\x2c\x34\x34\x38\x2c\x33\x38\x34\x2c\x34\x32\x38\x2e\
+\x38\x34\x36\x2c\x33\x38\x34\x2c\x34\x30\x35\x2e\x34\x32\x39\x56\
+\x31\x36\x30\x48\x31\x32\x38\x56\x34\x30\x35\x2e\x34\x32\x39\x7a\
+\x20\x4d\x34\x31\x36\x2c\x39\x36\x0a\x09\x09\x68\x2d\x38\x30\x6c\
+\x2d\x32\x36\x2e\x37\x38\x35\x2d\x33\x32\x48\x32\x30\x32\x2e\x37\
+\x38\x36\x4c\x31\x37\x36\x2c\x39\x36\x48\x39\x36\x76\x33\x32\x68\
+\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x5a\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
+\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
+\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x34\x37\x2e\x31\
+\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\x37\x2e\x31\x37\
+\x36\x32\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x34\x30\x2e\x34\x33\
+\x35\x33\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x33\x32\x2e\x31\x32\
+\x20\x31\x37\x2e\x30\x36\x33\x37\x43\x20\x32\x33\x2e\x38\x30\x34\
+\x37\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x31\x37\x2e\x30\x36\x33\
+\x37\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x31\x37\x2e\x30\x36\x33\
+\x37\x20\x33\x32\x2e\x31\x32\x43\x20\x31\x37\x2e\x30\x36\x33\x37\
+\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x32\x33\x2e\x38\x30\x34\x37\
+\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x20\x34\
+\x37\x2e\x31\x37\x36\x32\x43\x20\x34\x30\x2e\x34\x33\x35\x33\x20\
+\x34\x37\x2e\x31\x37\x36\x32\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x34\x30\x2e\x34\x33\x35\x33\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x5f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x0a\x09\x09\x3c\x72\x65\
+\x63\x74\x20\x78\x3d\x22\x31\x37\x38\x2e\x38\x34\x36\x22\x20\x79\
+\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\x2e\x37\
+\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x30\x2e\x37\x30\
+\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x32\x32\x34\x2e\x33\
+\x34\x37\x36\x20\x36\x33\x31\x2e\x31\x34\x39\x38\x29\x22\x20\x77\
+\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x2e\x30\x38\x35\x22\x20\x68\
+\x65\x69\x67\x68\x74\x3d\x22\x33\x35\x34\x2e\x30\x34\x39\x22\x2f\
+\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x37\x31\
+\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x6c\x2d\x34\x38\x2e\
+\x31\x31\x35\x2d\x34\x38\x2e\x31\x31\x34\x63\x2d\x31\x31\x2e\x37\
+\x32\x33\x2d\x31\x31\x2e\x37\x32\x34\x2d\x33\x31\x2e\x35\x35\x38\
+\x2d\x31\x30\x2e\x38\x39\x36\x2d\x34\x34\x2e\x33\x30\x34\x2c\x31\
+\x2e\x38\x35\x6c\x2d\x34\x35\x2e\x32\x30\x32\x2c\x34\x35\x2e\x32\
+\x30\x33\x6c\x39\x30\x2e\x35\x36\x39\x2c\x39\x30\x2e\x35\x36\x38\
+\x6c\x34\x35\x2e\x32\x30\x32\x2d\x34\x35\x2e\x32\x30\x32\x0a\x09\
+\x09\x43\x34\x38\x32\x2e\x36\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\
+\x32\x2c\x34\x38\x33\x2e\x34\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\
+\x36\x2c\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\
+\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
+\x6f\x69\x6e\x74\x73\x3d\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\
+\x33\x2e\x32\x35\x32\x20\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\
+\x2e\x37\x33\x37\x2c\x34\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x48\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\x32\x35\x36\x2e\x30\
+\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\x34\x38\x48\x37\x34\
+\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\x2c\x39\x36\x2c\x33\
+\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\x32\x2c\x31\x33\x38\
+\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\x36\x43\x33\x32\x2c\
+\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\x31\x39\x37\x2c\x34\
+\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\x31\x36\x68\x33\x36\
+\x32\x2e\x36\x36\x38\x0a\x09\x43\x34\x36\x30\x2e\x38\x30\x33\x2c\
+\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\
+\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x38\x36\x2e\
+\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\x33\x2e\x31\x39\x38\x2c\
+\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\x34\x2c\x34\x33\x37\x2e\
+\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\x34\x34\x38\x2c\x33\x37\
+\x33\x2e\x33\x33\x33\x0a\x09\x63\x30\x2c\x35\x2e\x37\x38\x32\x2d\
+\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x37\x2d\x31\x30\x2e\
+\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\x37\x48\x37\x34\x2e\x36\x36\
+\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\x33\x38\x34\x2c\x36\x34\x2c\
+\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\x34\x2c\x33\x37\x33\x2e\x33\
+\x33\x33\x56\x31\x37\x36\x68\x33\x37\x33\x2e\x33\x33\x34\x63\x35\
+\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\x2e\x36\x36\x36\x2c\x34\x2e\
+\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
+\x37\x0a\x09\x56\x33\x37\x33\x2e\x33\x33\x33\x7a\x22\x2f\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x6c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x67\x3e\
+\x0a\x09\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x31\x38\x36\x2e\x33\x30\x31\x2c\x33\x33\x39\
+\x2e\x38\x39\x33\x20\x39\x36\x2c\x32\x34\x39\x2e\x34\x36\x31\x20\
+\x36\x34\x2c\x32\x37\x39\x2e\x39\x36\x38\x20\x31\x38\x36\x2e\x33\
+\x30\x31\x2c\x34\x30\x32\x20\x34\x34\x38\x2c\x31\x34\x30\x2e\x35\
+\x30\x36\x20\x34\x31\x36\x2c\x31\x31\x30\x20\x09\x09\x09\x22\x2f\
+\x3e\x0a\x09\x09\x3c\x2f\x67\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xe8\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x6c\
+\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\
+\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\
+\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\
+\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
+\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x37\x31\x2c\
+\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\x36\x34\x31\x63\x2d\x30\
+\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\x2d\x30\x2e\x31\x39\x36\
+\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x32\x2e\
+\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\
+\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x35\x31\x34\x2c\x30\x2e\
+\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\x30\x63\x30\x2e\x31\x39\x36\
+\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\
+\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x39\x2c\x31\x30\x6c\
+\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\x30\x36\x43\x31\x31\x2e\x34\
+\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\x31\x31\x2e\x34\x39\x38\x2c\
+\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\
+\x37\x36\x7a\x0a\x09\x20\x4d\x31\x30\x2c\x30\x2e\x34\x63\x2d\x35\
+\x2e\x33\x30\x32\x2c\x30\x2d\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\
+\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\
+\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x2c\x39\
+\x2e\x36\x73\x39\x2e\x36\x2d\x34\x2e\x32\x39\x37\x2c\x39\x2e\x36\
+\x2d\x39\x2e\x36\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\
+\x31\x35\x2e\x33\x30\x32\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\
+\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0a\x09\x63\
+\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\
+\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x30\x2d\x34\x2e\x36\x31\x34\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\
+\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\
+\x37\x34\x2c\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0a\x09\
+\x43\x31\x38\x2e\x33\x35\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\
+\x34\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
+\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xda\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x30\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\x2e\x38\
+\x32\x38\x63\x34\x30\x2e\x30\x32\x33\x2d\x30\x2e\x33\x31\x35\x2c\
+\x34\x35\x2e\x30\x31\x2d\x39\x2e\x39\x35\x35\x2c\x35\x38\x2e\x30\
+\x35\x32\x2d\x35\x30\x2e\x31\x33\x32\x63\x32\x34\x2e\x30\x35\x37\
+\x2d\x36\x33\x2e\x34\x30\x38\x2c\x31\x33\x32\x2e\x34\x31\x39\x2c\
+\x31\x36\x2e\x35\x39\x31\x2c\x36\x35\x2e\x32\x36\x39\x2c\x34\x34\
+\x2e\x33\x37\x34\x0a\x09\x09\x43\x31\x30\x34\x2e\x36\x32\x32\x2c\
+\x34\x38\x36\x2e\x38\x35\x32\x2c\x38\x2e\x34\x32\x38\x2c\x34\x36\
+\x35\x2e\x31\x34\x33\x2c\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\
+\x2e\x38\x32\x38\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\
+\x30\x32\x63\x2d\x31\x39\x2e\x34\x31\x37\x2d\x31\x35\x2e\x36\x34\
+\x37\x2d\x35\x31\x2e\x35\x39\x32\x2d\x37\x2e\x39\x33\x38\x2d\x37\
+\x31\x2e\x38\x36\x34\x2c\x31\x37\x2e\x32\x31\x39\x4c\x31\x38\x31\
+\x2e\x36\x34\x35\x2c\x33\x35\x35\x2e\x38\x34\x39\x63\x2d\x32\x30\
+\x2e\x32\x37\x32\x2c\x32\x35\x2e\x31\x35\x34\x2d\x32\x30\x2e\x31\
+\x37\x31\x2c\x32\x30\x2e\x33\x34\x37\x2d\x30\x2e\x37\x35\x34\x2c\
+\x33\x35\x2e\x39\x39\x32\x0a\x09\x09\x63\x31\x39\x2e\x34\x31\x37\
+\x2c\x31\x35\x2e\x36\x34\x38\x2c\x31\x34\x2e\x37\x33\x38\x2c\x31\
+\x36\x2e\x37\x37\x2c\x33\x35\x2e\x30\x31\x31\x2d\x38\x2e\x33\x38\
+\x38\x6c\x32\x34\x31\x2e\x34\x30\x36\x2d\x32\x36\x32\x2e\x36\x36\
+\x39\x43\x34\x37\x37\x2e\x35\x38\x31\x2c\x39\x35\x2e\x36\x32\x38\
+\x2c\x34\x37\x38\x2e\x32\x37\x35\x2c\x36\x32\x2e\x35\x35\x2c\x34\
+\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\x30\x32\x7a\x20\x4d\
+\x34\x30\x36\x2e\x30\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x0a\x09\
+\x09\x63\x30\x2c\x30\x2d\x33\x2d\x33\x2e\x35\x2d\x31\x33\x2d\x31\
+\x31\x2e\x35\x63\x31\x35\x2d\x32\x34\x2e\x35\x2c\x34\x34\x2e\x35\
+\x2d\x32\x30\x2c\x34\x34\x2e\x35\x2d\x32\x30\x43\x34\x30\x39\x2e\
+\x35\x36\x35\x2c\x36\x36\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\
+\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\x36\
+\x35\x2c\x38\x31\x2e\x38\x32\x35\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x73\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
+\x20\x36\x2e\x32\x32\x30\x37\x32\x20\x32\x34\x2e\x39\x36\x35\x35\
+\x20\x39\x2e\x30\x34\x39\x38\x39\x20\x31\x38\x2e\x31\x33\x35\x33\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x43\x20\x32\x39\x2e\x35\x30\x36\x32\x20\x2d\x33\x2e\x34\x38\x36\
+\x38\x36\x20\x35\x35\x2e\x33\x36\x37\x33\x20\x32\x2e\x36\x39\x39\
+\x35\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x43\x20\x35\x39\x2e\x36\x39\x32\x32\x20\x33\x31\x2e\x35\x38\
+\x38\x31\x20\x35\x32\x2e\x36\x35\x30\x38\x20\x34\x30\x2e\x36\x37\
+\x37\x39\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x04\xca\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x09\x20\x69\x64\x3d\
+\x22\x73\x76\x67\x34\x36\x31\x39\x22\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x31\
+\x2b\x64\x65\x76\x65\x6c\x2b\x6f\x73\x78\x6d\x65\x6e\x75\x20\x72\
+\x31\x32\x39\x31\x31\x22\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\
+\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x74\x72\x69\x61\x6e\x67\x6c\
+\x65\x2d\x73\x74\x72\x6f\x6b\x65\x64\x2d\x31\x35\x2e\x73\x76\x67\
+\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
+\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\
+\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\
+\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\
+\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\
+\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\
+\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0a\x09\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\
+\x34\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\
+\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x31\x35\x20\x31\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\
+\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x20\x31\x35\x3b\
+\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\
+\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x69\x64\
+\x3d\x22\x72\x65\x63\x74\x33\x33\x33\x38\x22\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
+\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\
+\x22\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x22\x20\x64\
+\x3d\x22\x4d\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\
+\x0a\x09\x43\x37\x2e\x32\x34\x32\x39\x2c\x31\x2e\x34\x39\x31\x33\
+\x2c\x36\x2e\x39\x37\x38\x37\x2c\x31\x2e\x36\x34\x32\x33\x2c\x36\
+\x2e\x38\x33\x33\x36\x2c\x31\x2e\x38\x39\x35\x32\x6c\x2d\x35\x2e\
+\x35\x2c\x39\x2e\x38\x36\x39\x32\x43\x31\x2e\x30\x32\x31\x38\x2c\
+\x31\x32\x2e\x33\x30\x37\x38\x2c\x31\x2e\x33\x39\x35\x2c\x31\x32\
+\x2e\x39\x39\x39\x39\x2c\x32\x2c\x31\x33\x68\x31\x31\x0a\x09\x63\
+\x30\x2e\x36\x30\x35\x2d\x30\x2e\x30\x30\x30\x31\x2c\x30\x2e\x39\
+\x37\x38\x32\x2d\x30\x2e\x36\x39\x32\x32\x2c\x30\x2e\x36\x36\x36\
+\x34\x2d\x31\x2e\x32\x33\x35\x35\x6c\x2d\x35\x2e\x35\x2d\x39\x2e\
+\x38\x36\x39\x32\x43\x38\x2e\x30\x33\x30\x32\x2c\x31\x2e\x36\x35\
+\x37\x39\x2c\x37\x2e\x37\x38\x38\x34\x2c\x31\x2e\x35\x30\x39\x32\
+\x2c\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\x7a\x20\
+\x4d\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x6c\x34\x2e\x31\x32\
+\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
+\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x9c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\
+\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x30\x2e\x33\
+\x33\x36\x38\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x31\x36\x2e\x39\
+\x33\x38\x33\x20\x33\x32\x2e\x31\x32\x20\x31\x36\x2e\x39\x33\x38\
+\x33\x43\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x31\x36\x2e\x39\x33\
+\x38\x33\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x30\x2e\x33\x33\
+\x36\x38\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x34\x2e\x35\x32\
+\x39\x31\x43\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x38\x2e\x37\
+\x32\x31\x35\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x33\x32\x2e\x31\
+\x32\x20\x33\x32\x2e\x31\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\
+\x34\x2e\x36\x39\x36\x39\x20\x33\x32\x2e\x31\x32\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x32\x38\x2e\x37\x32\x31\x35\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x5a\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
+\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
+\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
+\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
+\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x4c\x20\x39\x2e\x33\x34\x37\x34\
+\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x39\x2e\x33\x34\x37\
+\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\
+\x34\x37\x34\x32\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x31\x39\x2e\
+\x35\x34\x33\x31\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x33\x32\x2e\
+\x31\x32\x20\x36\x32\x2e\x34\x38\x33\x34\x43\x20\x34\x34\x2e\x36\
+\x39\x36\x39\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\
+\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
+\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
+\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
+\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
+\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\
+\x36\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x34\x34\x2e\x36\x39\x36\
+\x39\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x33\x32\x2e\x31\x32\x20\
+\x31\x2e\x37\x35\x36\x35\x36\x43\x20\x31\x39\x2e\x35\x34\x33\x31\
+\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
+\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
+\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x02\xee\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\x2c\x32\x32\x34\x48\
+\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\x31\x36\x2e\x39\x2d\
+\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\x32\x2d\x33\x30\x2e\
+\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\x32\x2c\x31\x33\x2e\
+\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\x32\x34\x48\x39\x34\
+\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\x2c\x36\x34\x2c\x32\
+\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\x0a\x09\x63\x30\x2c\
+\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\x33\x32\x2c\x33\x30\x2e\
+\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\x32\x39\x2e\x34\x63\x30\
+\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2c\
+\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\x2e\x37\x2c\x30\x2c\x33\
+\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\x33\x30\x2e\x36\x56\x32\
+\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\x36\x2e\x39\x2c\x30\x2c\
+\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2d\x33\
+\x32\x0a\x09\x43\x34\x34\x38\x2c\x32\x33\x38\x2e\x33\x2c\x34\x33\
+\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\x31\x37\x2e\x34\x2c\x32\x32\
+\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6f\xa6\x53\
+\x00\x69\
+\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x1c\
+\x08\x8a\x79\x07\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x0c\x57\x65\x47\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\x89\xfa\x47\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x05\xa8\x57\x87\
+\x00\x63\
+\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x04\xb2\x55\x47\
+\x00\x75\
+\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x09\x76\x60\xc7\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x14\
+\x0f\xa5\xe0\xc7\
+\x00\x6d\
+\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xa7\xc7\x47\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x1d\
+\x06\xec\xf4\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x04\xf2\xa7\x87\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x09\
+\x0b\x9e\x89\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x16\
+\x01\xfb\x76\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
+\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x15\
+\x0f\xc4\x59\xe7\
+\x00\x73\
+\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
+\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x04\xb2\x21\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x08\
+\x0c\xf7\x55\x87\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x0c\x5e\xd4\xa7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x19\
+\x0a\x43\x45\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
+\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x07\x0e\xc4\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x0c\xf8\x5a\x07\
+\x00\x65\
+\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\x2d\x1b\xc7\
+\x00\x63\
+\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x79\x97\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x1b\
+\x0e\xb5\x68\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\xb2\x55\xc7\
+\x00\x72\
+\x00\x65\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x01\x60\xbc\x47\
+\x00\x73\
+\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x19\
+\x0f\xef\x7b\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
+\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x06\xe3\xaf\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xdb\x38\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x13\
+\x03\x24\x75\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
+\x00\x76\x00\x67\
+\x00\x0a\
+\x0f\x68\x53\xe7\
+\x00\x61\
+\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x05\xed\x38\x67\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x04\xa9\x22\xc7\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xf7\x57\x07\
+\x00\x67\
+\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x55\xef\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x0a\
+\x0a\xc8\x62\x67\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\x07\x57\xa7\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x07\x87\x48\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
+\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\xe4\xaf\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1c\
+\x04\x66\xe1\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x09\
+\x0c\x9b\x89\xe7\
+\x00\x62\
+\x00\x72\x00\x75\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0d\
+\x05\x20\xce\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x06\xc6\x02\xa7\
+\x00\x74\
+\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
+\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x01\xca\x6d\x87\
+\x00\x62\
+\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x0f\xcb\xd5\xc7\
+\x00\x70\
+\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct_v1 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
+\x00\x00\x03\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x4e\xfb\
+\x00\x00\x06\x54\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x67\
+\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x28\xd9\
+\x00\x00\x04\x52\x00\x00\x00\x00\x00\x01\x00\x00\x63\xf2\
+\x00\x00\x05\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x7e\x58\
+\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x00\x6b\x43\
+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xbf\
+\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x11\
+\x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x00\x21\x2b\
+\x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\x86\x22\
+\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x09\x71\
+\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x00\x68\x7e\
+\x00\x00\x06\x20\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x99\
+\x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x84\
+\x00\x00\x01\x40\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x4e\
+\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xdb\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x78\x9c\
+\x00\x00\x04\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x3f\
+\x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x44\x58\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x05\x6f\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xd2\
+\x00\x00\x05\x84\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xe8\
+\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x00\x6d\x63\
+\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x12\x2c\
+\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x41\x6d\
+\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x34\x65\
+\x00\x00\x05\x20\x00\x00\x00\x00\x00\x01\x00\x00\x71\xdb\
+\x00\x00\x05\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x75\x39\
+\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x25\xd2\
+\x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x4a\xb5\
+\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xf4\
+\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x30\x0d\
+\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x82\x44\
+\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x19\x28\
+\x00\x00\x04\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x61\x43\
+\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xed\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xf2\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x47\x72\
+\x00\x00\x04\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x67\x11\
+\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6d\
+\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x4f\
+\x00\x00\x06\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x95\x07\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x56\x6a\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x03\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x4e\xfb\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x06\x54\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x67\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x28\xd9\
+\x00\x00\x01\x86\x34\x85\x88\xf4\
+\x00\x00\x04\x52\x00\x00\x00\x00\x00\x01\x00\x00\x63\xf2\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x05\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x7e\x58\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x00\x6b\x43\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xbf\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x11\
+\x00\x00\x01\x86\x34\x85\x88\xf9\
+\x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x00\x21\x2b\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\x86\x22\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x09\x71\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x00\x68\x7e\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x06\x20\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x99\
+\x00\x00\x01\x86\x34\x85\x88\xf9\
+\x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x84\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x01\x40\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x4e\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xdb\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x78\x9c\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x04\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x3f\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x44\x58\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x05\x6f\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xd2\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x05\x84\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xe8\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x00\x6d\x63\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x12\x2c\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x41\x6d\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x34\x65\
+\x00\x00\x01\x86\x34\x85\x88\xf4\
+\x00\x00\x05\x20\x00\x00\x00\x00\x00\x01\x00\x00\x71\xdb\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x05\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x75\x39\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x25\xd2\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x4a\xb5\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xf4\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x30\x0d\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x82\x44\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x19\x28\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x04\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x61\x43\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xed\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xf2\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x47\x72\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x04\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x67\x11\
+\x00\x00\x01\x86\x34\x85\x88\xf4\
+\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6d\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x4f\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x06\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x95\x07\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x56\x6a\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+"
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+    rcc_version = 1
+    qt_resource_struct = qt_resource_struct_v1
+else:
+    rcc_version = 2
+    qt_resource_struct = qt_resource_struct_v2
+
+def qInitResources():
+    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_8_">
-	<g>
-		<path d="M427,234.625H167.296l119.702-119.702L256,85L85,256l171,171l29.922-29.924L167.296,277.375H427V234.625z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_8_">
+	<g>
+		<path d="M427,234.625H167.296l119.702-119.702L256,85L85,256l171,171l29.922-29.924L167.296,277.375H427V234.625z"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_8_">
-	<g>
-		<path d="M85,277.375h259.704L225.002,397.077L256,427l171-171L256,85l-29.922,29.924l118.626,119.701H85V277.375z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_8_">
+	<g>
+		<path d="M85,277.375h259.704L225.002,397.077L256,427l171-171L256,85l-29.922,29.924l118.626,119.701H85V277.375z"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	<circle cx="256" cy="280" r="63"/>
-	<path d="M440,96h-88l-32-32H192l-32,32H72c-22.092,0-40,17.908-40,40v272c0,22.092,17.908,40,40,40h368c22.092,0,40-17.908,40-40
-		V136C480,113.908,462.092,96,440,96z M256,392c-61.855,0-112-50.145-112-112s50.145-112,112-112s112,50.145,112,112
-		S317.855,392,256,392z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<circle cx="256" cy="280" r="63"/>
+	<path d="M440,96h-88l-32-32H192l-32,32H72c-22.092,0-40,17.908-40,40v272c0,22.092,17.908,40,40,40h368c22.092,0,40-17.908,40-40
+		V136C480,113.908,462.092,96,440,96z M256,392c-61.855,0-112-50.145-112-112s50.145-112,112-112s112,50.145,112,112
+		S317.855,392,256,392z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_5_">
-	<g>
-		<polygon points="405,136.798 375.202,107 256,226.202 136.798,107 107,136.798 226.202,256 107,375.202 136.798,405 256,285.798 
-			375.202,405 405,375.202 285.798,256 		"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_5_">
+	<g>
+		<polygon points="405,136.798 375.202,107 256,226.202 136.798,107 107,136.798 226.202,256 107,375.202 136.798,405 256,285.798 
+			375.202,405 405,375.202 285.798,256 		"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_12_">
-	<g>
-		<path d="M256,64C150.401,64,64,150.401,64,256c0,105.604,86.401,192,192,192c18.136,0,32-13.864,32-32
-			c0-8.531-3.198-16-8.531-21.333c-5.333-5.334-8.531-12.803-8.531-21.334c0-18.135,13.864-32,32-32h38.396
-			c58.667,0,106.667-48,106.667-106.666C448,140.802,361.604,64,256,64z M138.667,256c-18.136,0-32-13.864-32-32s13.864-32,32-32
-			c18.135,0,32,13.864,32,32S156.802,256,138.667,256z M202.667,170.667c-18.136,0-32-13.865-32-32c0-18.136,13.864-32,32-32
-			c18.135,0,32,13.864,32,32C234.667,156.802,220.802,170.667,202.667,170.667z M309.333,170.667c-18.135,0-32-13.865-32-32
-			c0-18.136,13.865-32,32-32c18.136,0,32,13.864,32,32C341.333,156.802,327.469,170.667,309.333,170.667z M373.333,256
-			c-18.135,0-32-13.864-32-32s13.865-32,32-32c18.136,0,32,13.864,32,32S391.469,256,373.333,256z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_12_">
+	<g>
+		<path d="M256,64C150.401,64,64,150.401,64,256c0,105.604,86.401,192,192,192c18.136,0,32-13.864,32-32
+			c0-8.531-3.198-16-8.531-21.333c-5.333-5.334-8.531-12.803-8.531-21.334c0-18.135,13.864-32,32-32h38.396
+			c58.667,0,106.667-48,106.667-106.666C448,140.802,361.604,64,256,64z M138.667,256c-18.136,0-32-13.864-32-32s13.864-32,32-32
+			c18.135,0,32,13.864,32,32S156.802,256,138.667,256z M202.667,170.667c-18.136,0-32-13.865-32-32c0-18.136,13.864-32,32-32
+			c18.135,0,32,13.864,32,32C234.667,156.802,220.802,170.667,202.667,170.667z M309.333,170.667c-18.135,0-32-13.865-32-32
+			c0-18.136,13.865-32,32-32c18.136,0,32,13.864,32,32C341.333,156.802,327.469,170.667,309.333,170.667z M373.333,256
+			c-18.135,0-32-13.864-32-32s13.865-32,32-32c18.136,0,32,13.864,32,32S391.469,256,373.333,256z"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	<path d="M128,405.429C128,428.846,147.198,448,170.667,448h170.667C364.802,448,384,428.846,384,405.429V160H128V405.429z M416,96
-		h-80l-26.785-32H202.786L176,96H96v32h320V96z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<path d="M128,405.429C128,428.846,147.198,448,170.667,448h170.667C364.802,448,384,428.846,384,405.429V160H128V405.429z M416,96
+		h-80l-26.785-32H202.786L176,96H96v32h320V96z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_1_">
-	<g>
-		<g>
-			<polygon points="186.301,339.893 96,249.461 64,279.968 186.301,402 448,140.506 416,110 			"/>
-		</g>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_1_">
+	<g>
+		<g>
+			<polygon points="186.301,339.893 96,249.461 64,279.968 186.301,402 448,140.506 416,110 			"/>
+		</g>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	<polygon points="396.795,396.8 320,396.8 320,448 448,448 448,320 396.795,320 	"/>
-	<polygon points="396.8,115.205 396.8,192 448,192 448,64 320,64 320,115.205 	"/>
-	<polygon points="115.205,115.2 192,115.2 192,64 64,64 64,192 115.205,192 	"/>
-	<polygon points="115.2,396.795 115.2,320 64,320 64,448 192,448 192,396.795 	"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<polygon points="396.795,396.8 320,396.8 320,448 448,448 448,320 396.795,320 	"/>
+	<polygon points="396.8,115.205 396.8,192 448,192 448,64 320,64 320,115.205 	"/>
+	<polygon points="115.205,115.2 192,115.2 192,64 64,64 64,192 115.205,192 	"/>
+	<polygon points="115.2,396.795 115.2,320 64,320 64,448 192,448 192,396.795 	"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<path d="M437.334,144H256.006l-42.668-48H74.666C51.197,96,32,115.198,32,138.667v234.666C32,396.802,51.197,416,74.666,416h362.668
-	C460.803,416,480,396.802,480,373.333V186.667C480,163.198,460.803,144,437.334,144z M448,373.333
-	c0,5.782-4.885,10.667-10.666,10.667H74.666C68.884,384,64,379.115,64,373.333V176h373.334c5.781,0,10.666,4.885,10.666,10.667
-	V373.333z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<path d="M437.334,144H256.006l-42.668-48H74.666C51.197,96,32,115.198,32,138.667v234.666C32,396.802,51.197,416,74.666,416h362.668
+	C460.803,416,480,396.802,480,373.333V186.667C480,163.198,460.803,144,437.334,144z M448,373.333
+	c0,5.782-4.885,10.667-10.666,10.667H74.666C68.884,384,64,379.115,64,373.333V176h373.334c5.781,0,10.666,4.885,10.666,10.667
+	V373.333z"/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<path d="M450.679,273.5c-14.585-14.577-36.054-15.89-50.639-1.312l-41.687,41.664c-10.852,10.836-23.93,10.859-31.564,1.852
-	c-5.057-5.968-3.061-24.374-1.644-36.049l20.907-171.849c1.867-15.353-9.07-30.185-24.43-32.051
-	c-15.358-1.867-29.322,9.939-31.191,25.289L267.37,236.021c-1.205,3.358-3.79,3.938-4.081-0.582L255.44,60
-	c0-15.465-12.542-28-28.014-28c-15.473,0-28.015,12.535-28.015,28l-0.552,176.752c0.146,2.04-1.604,2.624-1.92,0.294L172.016,99.077
-	c-2.75-15.219-17.323-26.203-32.548-23.453c-15.227,2.748-25.339,18.187-22.591,33.403l22.193,161.455
-	c0.023,2.872-0.941,4.513-2.308,0.831l-33.109-88.517c-5.18-14.572-21.196-23.065-35.776-17.889
-	c-14.579,5.177-22.201,22.061-17.023,36.631l58.042,189.625c0.303,1.046,0.624,2.085,0.953,3.118l0.121,0.39
-	c0.011,0.031,0.025,0.058,0.035,0.088C126.079,444.233,172.57,480,227.427,480c35.116,0,71.591-12.378,99.357-33.672
-	c0.001,0,0.003-0.002,0.003-0.002c29.99-18.051,126.071-121.347,126.071-121.347C467.445,310.402,465.266,288.08,450.679,273.5z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<path d="M450.679,273.5c-14.585-14.577-36.054-15.89-50.639-1.312l-41.687,41.664c-10.852,10.836-23.93,10.859-31.564,1.852
+	c-5.057-5.968-3.061-24.374-1.644-36.049l20.907-171.849c1.867-15.353-9.07-30.185-24.43-32.051
+	c-15.358-1.867-29.322,9.939-31.191,25.289L267.37,236.021c-1.205,3.358-3.79,3.938-4.081-0.582L255.44,60
+	c0-15.465-12.542-28-28.014-28c-15.473,0-28.015,12.535-28.015,28l-0.552,176.752c0.146,2.04-1.604,2.624-1.92,0.294L172.016,99.077
+	c-2.75-15.219-17.323-26.203-32.548-23.453c-15.227,2.748-25.339,18.187-22.591,33.403l22.193,161.455
+	c0.023,2.872-0.941,4.513-2.308,0.831l-33.109-88.517c-5.18-14.572-21.196-23.065-35.776-17.889
+	c-14.579,5.177-22.201,22.061-17.023,36.631l58.042,189.625c0.303,1.046,0.624,2.085,0.953,3.118l0.121,0.39
+	c0.011,0.031,0.025,0.058,0.035,0.088C126.079,444.233,172.57,480,227.427,480c35.116,0,71.591-12.378,99.357-33.672
+	c0.001,0,0.003-0.002,0.003-0.002c29.99-18.051,126.071-121.347,126.071-121.347C467.445,310.402,465.266,288.08,450.679,273.5z"/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,16 +1,16 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon">
-	<g>
-		<path d="M256,176c-44.004,0-80.001,36-80.001,80c0,44.004,35.997,80,80.001,80c44.005,0,79.999-35.996,79.999-80
-			C335.999,212,300.005,176,256,176z M446.938,234.667c-9.605-88.531-81.074-160-169.605-169.599V32h-42.666v33.067
-			c-88.531,9.599-160,81.068-169.604,169.599H32v42.667h33.062c9.604,88.531,81.072,160,169.604,169.604V480h42.666v-33.062
-			c88.531-9.604,160-81.073,169.605-169.604H480v-42.667H446.938z M256,405.333c-82.137,0-149.334-67.198-149.334-149.333
-			c0-82.136,67.197-149.333,149.334-149.333c82.135,0,149.332,67.198,149.332,149.333C405.332,338.135,338.135,405.333,256,405.333z
-			"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon">
+	<g>
+		<path d="M256,176c-44.004,0-80.001,36-80.001,80c0,44.004,35.997,80,80.001,80c44.005,0,79.999-35.996,79.999-80
+			C335.999,212,300.005,176,256,176z M446.938,234.667c-9.605-88.531-81.074-160-169.605-169.599V32h-42.666v33.067
+			c-88.531,9.599-160,81.068-169.604,169.599H32v42.667h33.062c9.604,88.531,81.072,160,169.604,169.604V480h42.666v-33.062
+			c88.531-9.604,160-81.073,169.605-169.604H480v-42.667H446.938z M256,405.333c-82.137,0-149.334-67.198-149.334-149.333
+			c0-82.136,67.197-149.333,149.334-149.333c82.135,0,149.332,67.198,149.332,149.333C405.332,338.135,338.135,405.333,256,405.333z
+			"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_20_">
-	<g>
-		<path d="M256,48C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.399
-			c-91.518,0-166.399-74.882-166.399-166.399S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.399,256,422.399z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_20_">
+	<g>
+		<path d="M256,48C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.399
+			c-91.518,0-166.399-74.882-166.399-166.399S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.399,256,422.399z"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_21_">
-	<g>
-		<path d="M256,152c-57.2,0-104,46.8-104,104s46.8,104,104,104s104-46.8,104-104S313.2,152,256,152z M256,48
-			C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.4
-			c-91.518,0-166.4-74.883-166.4-166.4S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.4,256,422.4z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_21_">
+	<g>
+		<path d="M256,152c-57.2,0-104,46.8-104,104s46.8,104,104,104s104-46.8,104-104S313.2,152,256,152z M256,48
+			C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.4
+			c-91.518,0-166.4-74.883-166.4-166.4S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.4,256,422.4z"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	<path d="M256,388c-72.597,0-132-59.405-132-132c0-72.601,59.403-132,132-132c36.3,0,69.299,15.4,92.406,39.601L278,234h154V80
-		l-51.698,51.702C348.406,99.798,304.406,80,256,80c-96.797,0-176,79.203-176,176s78.094,176,176,176
-		c81.045,0,148.287-54.134,169.401-128H378.85C360.105,353.561,311.712,388,256,388z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<path d="M256,388c-72.597,0-132-59.405-132-132c0-72.601,59.403-132,132-132c36.3,0,69.299,15.4,92.406,39.601L278,234h154V80
+		l-51.698,51.702C348.406,99.798,304.406,80,256,80c-96.797,0-176,79.203-176,176s78.094,176,176,176
+		c81.045,0,148.287-54.134,169.401-128H378.85C360.105,353.561,311.712,388,256,388z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<polygon points="480,256 384,160 384,236 276,236 276,128 352,128 256,32 160,128 236,128 236,236 128,236 128,160 32,256 128,352 
-	128,276 236,276 236,384 160,384 256,480 352,384 275.8,384 275.4,275.5 384,275.8 384,352 "/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<polygon points="480,256 384,160 384,236 276,236 276,128 352,128 256,32 160,128 236,128 236,236 128,236 128,160 32,256 128,352 
+	128,276 236,276 236,384 160,384 256,480 352,384 275.8,384 275.4,275.5 384,275.8 384,352 "/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<polygon points="288,96 337.9,145.9 274,209.7 274,209.7 145.9,337.9 96,288 96,416 224,416 174.1,366.1 357.4,182.9 366.1,174.1 
-	416,224 416,96 "/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<polygon points="288,96 337.9,145.9 274,209.7 274,209.7 145.9,337.9 96,288 96,416 224,416 174.1,366.1 357.4,182.9 366.1,174.1 
+	416,224 416,96 "/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	<path d="M48.451,464.828c40.023-0.315,45.01-9.955,58.052-50.132c24.057-63.408,132.419,16.591,65.269,44.374
-		C104.622,486.852,8.428,465.143,48.451,464.828z"/>
-	<path d="M458.857,46.902c-19.417-15.647-51.592-7.938-71.864,17.219L181.645,355.849c-20.272,25.154-20.171,20.347-0.754,35.992
-		c19.417,15.648,14.738,16.77,35.011-8.388l241.406-262.669C477.581,95.628,478.275,62.55,458.857,46.902z M406.065,81.825
-		c0,0-3-3.5-13-11.5c15-24.5,44.5-20,44.5-20C409.565,66.825,406.065,81.825,406.065,81.825z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<path d="M48.451,464.828c40.023-0.315,45.01-9.955,58.052-50.132c24.057-63.408,132.419,16.591,65.269,44.374
+		C104.622,486.852,8.428,465.143,48.451,464.828z"/>
+	<path d="M458.857,46.902c-19.417-15.647-51.592-7.938-71.864,17.219L181.645,355.849c-20.272,25.154-20.171,20.347-0.754,35.992
+		c19.417,15.648,14.738,16.77,35.011-8.388l241.406-262.669C477.581,95.628,478.275,62.55,458.857,46.902z M406.065,81.825
+		c0,0-3-3.5-13-11.5c15-24.5,44.5-20,44.5-20C409.565,66.825,406.065,81.825,406.065,81.825z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/check.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/check.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/check.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Check" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
-<path d="M8.294,16.998c-0.435,0-0.847-0.203-1.111-0.553L3.61,11.724c-0.465-0.613-0.344-1.486,0.27-1.951
-	c0.615-0.467,1.488-0.344,1.953,0.27l2.351,3.104l5.911-9.492c0.407-0.652,1.267-0.852,1.921-0.445
-	c0.653,0.406,0.854,1.266,0.446,1.92L9.478,16.34c-0.242,0.391-0.661,0.635-1.12,0.656C8.336,16.998,8.316,16.998,8.294,16.998z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Check" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
+<path d="M8.294,16.998c-0.435,0-0.847-0.203-1.111-0.553L3.61,11.724c-0.465-0.613-0.344-1.486,0.27-1.951
+	c0.615-0.467,1.488-0.344,1.953,0.27l2.351,3.104l5.911-9.492c0.407-0.652,1.267-0.852,1.921-0.445
+	c0.653,0.406,0.854,1.266,0.446,1.92L9.478,16.34c-0.242,0.391-0.661,0.635-1.12,0.656C8.336,16.998,8.316,16.998,8.294,16.998z"/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Chevron_circled_left" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
-	 x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M11.302,6.776c-0.196-0.197-0.515-0.197-0.71,0L7.785,9.641c-0.196,0.199-0.196,0.52,0,0.717l2.807,2.864
-	c0.195,0.199,0.514,0.198,0.71,0c0.196-0.197,0.196-0.518,0-0.717L9,10l2.302-2.506C11.498,7.296,11.498,6.976,11.302,6.776z
-	 M10,0.4c-5.302,0-9.6,4.298-9.6,9.6c0,5.303,4.298,9.6,9.6,9.6s9.6-4.297,9.6-9.6C19.6,4.698,15.302,0.4,10,0.4z M10,18.354
-	c-4.615,0-8.354-3.74-8.354-8.354c0-4.614,3.739-8.354,8.354-8.354c4.613,0,8.354,3.74,8.354,8.354
-	C18.354,14.614,14.613,18.354,10,18.354z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Chevron_circled_left" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+	 x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M11.302,6.776c-0.196-0.197-0.515-0.197-0.71,0L7.785,9.641c-0.196,0.199-0.196,0.52,0,0.717l2.807,2.864
+	c0.195,0.199,0.514,0.198,0.71,0c0.196-0.197,0.196-0.518,0-0.717L9,10l2.302-2.506C11.498,7.296,11.498,6.976,11.302,6.776z
+	 M10,0.4c-5.302,0-9.6,4.298-9.6,9.6c0,5.303,4.298,9.6,9.6,9.6s9.6-4.297,9.6-9.6C19.6,4.698,15.302,0.4,10,0.4z M10,18.354
+	c-4.615,0-8.354-3.74-8.354-8.354c0-4.614,3.739-8.354,8.354-8.354c4.613,0,8.354,3.74,8.354,8.354
+	C18.354,14.614,14.613,18.354,10,18.354z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Chevron_circled_right" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
-	 x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M11,10L8.698,7.494c-0.196-0.198-0.196-0.519,0-0.718c0.196-0.197,0.515-0.197,0.71,0l2.807,2.864
-	c0.196,0.199,0.196,0.52,0,0.717l-2.807,2.864c-0.195,0.199-0.514,0.198-0.71,0c-0.196-0.197-0.196-0.518,0-0.717L11,10z M10,0.4
-	c5.302,0,9.6,4.298,9.6,9.6c0,5.303-4.298,9.6-9.6,9.6S0.4,15.303,0.4,10C0.4,4.698,4.698,0.4,10,0.4z M10,18.354
-	c4.613,0,8.354-3.74,8.354-8.354c0-4.614-3.741-8.354-8.354-8.354c-4.615,0-8.354,3.74-8.354,8.354
-	C1.645,14.614,5.385,18.354,10,18.354z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Chevron_circled_right" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+	 x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M11,10L8.698,7.494c-0.196-0.198-0.196-0.519,0-0.718c0.196-0.197,0.515-0.197,0.71,0l2.807,2.864
+	c0.196,0.199,0.196,0.52,0,0.717l-2.807,2.864c-0.195,0.199-0.514,0.198-0.71,0c-0.196-0.197-0.196-0.518,0-0.717L11,10z M10,0.4
+	c5.302,0,9.6,4.298,9.6,9.6c0,5.303-4.298,9.6-9.6,9.6S0.4,15.303,0.4,10C0.4,4.698,4.698,0.4,10,0.4z M10,18.354
+	c4.613,0,8.354-3.74,8.354-8.354c0-4.614-3.741-8.354-8.354-8.354c-4.615,0-8.354,3.74-8.354,8.354
+	C1.645,14.614,5.385,18.354,10,18.354z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Circle" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
-	 viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M10,0.4C4.698,0.4,0.4,4.698,0.4,10C0.4,15.302,4.698,19.6,10,19.6c5.301,0,9.6-4.298,9.6-9.601
-	C19.6,4.698,15.301,0.4,10,0.4z M10,17.599c-4.197,0-7.6-3.402-7.6-7.6S5.802,2.4,10,2.4c4.197,0,7.601,3.402,7.601,7.6
-	S14.197,17.599,10,17.599z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Circle" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
+	 viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M10,0.4C4.698,0.4,0.4,4.698,0.4,10C0.4,15.302,4.698,19.6,10,19.6c5.301,0,9.6-4.298,9.6-9.601
+	C19.6,4.698,15.301,0.4,10,0.4z M10,17.599c-4.197,0-7.6-3.402-7.6-7.6S5.802,2.4,10,2.4c4.197,0,7.601,3.402,7.601,7.6
+	S14.197,17.599,10,17.599z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<path d="M437.5,386.6L306.9,256l130.6-130.6c14.1-14.1,14.1-36.8,0-50.9c-14.1-14.1-36.8-14.1-50.9,0L256,205.1L125.4,74.5
-	c-14.1-14.1-36.8-14.1-50.9,0c-14.1,14.1-14.1,36.8,0,50.9L205.1,256L74.5,386.6c-14.1,14.1-14.1,36.8,0,50.9
-	c14.1,14.1,36.8,14.1,50.9,0L256,306.9l130.6,130.6c14.1,14.1,36.8,14.1,50.9,0C451.5,423.4,451.5,400.6,437.5,386.6z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<path d="M437.5,386.6L306.9,256l130.6-130.6c14.1-14.1,14.1-36.8,0-50.9c-14.1-14.1-36.8-14.1-50.9,0L256,205.1L125.4,74.5
+	c-14.1-14.1-36.8-14.1-50.9,0c-14.1,14.1-14.1,36.8,0,50.9L205.1,256L74.5,386.6c-14.1,14.1-14.1,36.8,0,50.9
+	c14.1,14.1,36.8,14.1,50.9,0L256,306.9l130.6,130.6c14.1,14.1,36.8,14.1,50.9,0C451.5,423.4,451.5,400.6,437.5,386.6z"/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/code.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/code.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/code.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Code" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="24px" y="24px"
-	 viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'><path d="M5.719,14.75c-0.236,0-0.474-0.083-0.664-0.252L-0.005,10l5.341-4.748C5.748,4.887,6.38,4.922,6.747,5.335
-	c0.367,0.413,0.33,1.045-0.083,1.412L3.005,10l3.378,3.002c0.413,0.367,0.45,0.999,0.083,1.412
-	C6.269,14.637,5.994,14.75,5.719,14.75z M14.664,14.748L20.005,10l-5.06-4.498c-0.413-0.367-1.045-0.33-1.411,0.083
-	c-0.367,0.413-0.33,1.045,0.083,1.412L16.995,10l-3.659,3.252c-0.413,0.367-0.45,0.999-0.083,1.412C13.45,14.887,13.725,15,14,15
-	C14.236,15,14.474,14.917,14.664,14.748z M9.986,16.165l2-12c0.091-0.545-0.277-1.06-0.822-1.151
-	c-0.547-0.092-1.061,0.277-1.15,0.822l-2,12c-0.091,0.545,0.277,1.06,0.822,1.151C8.892,16.996,8.946,17,9.001,17
-	C9.481,17,9.905,16.653,9.986,16.165z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Code" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="24px" y="24px"
+	 viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'><path d="M5.719,14.75c-0.236,0-0.474-0.083-0.664-0.252L-0.005,10l5.341-4.748C5.748,4.887,6.38,4.922,6.747,5.335
+	c0.367,0.413,0.33,1.045-0.083,1.412L3.005,10l3.378,3.002c0.413,0.367,0.45,0.999,0.083,1.412
+	C6.269,14.637,5.994,14.75,5.719,14.75z M14.664,14.748L20.005,10l-5.06-4.498c-0.413-0.367-1.045-0.33-1.411,0.083
+	c-0.367,0.413-0.33,1.045,0.083,1.412L16.995,10l-3.659,3.252c-0.413,0.367-0.45,0.999-0.083,1.412C13.45,14.887,13.725,15,14,15
+	C14.236,15,14.474,14.917,14.664,14.748z M9.986,16.165l2-12c0.091-0.545-0.277-1.06-0.822-1.151
+	c-0.547-0.092-1.061,0.277-1.15,0.822l-2,12c-0.091,0.545,0.277,1.06,0.822,1.151C8.892,16.996,8.946,17,9.001,17
+	C9.481,17,9.905,16.653,9.986,16.165z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	
-		<rect x="178.846" y="92.087" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 224.3476 631.1498)" width="128.085" height="354.049"/>
-	<path d="M471.723,88.393l-48.115-48.114c-11.723-11.724-31.558-10.896-44.304,1.85l-45.202,45.203l90.569,90.568l45.202-45.202
-		C482.616,119.952,483.445,100.116,471.723,88.393z"/>
-	<polygon points="64.021,363.252 32,480 148.737,447.979 	"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	
+		<rect x="178.846" y="92.087" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 224.3476 631.1498)" width="128.085" height="354.049"/>
+	<path d="M471.723,88.393l-48.115-48.114c-11.723-11.724-31.558-10.896-44.304,1.85l-45.202,45.203l90.569,90.568l45.202-45.202
+		C482.616,119.952,483.445,100.116,471.723,88.393z"/>
+	<polygon points="64.021,363.252 32,480 148.737,447.979 	"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<g>
-	<path d="M256,128c-81.9,0-145.7,48.8-224,128c67.4,67.7,124,128,224,128c99.9,0,173.4-76.4,224-126.6
-		C428.2,198.6,354.8,128,256,128z M256,347.3c-49.4,0-89.6-41-89.6-91.3c0-50.4,40.2-91.3,89.6-91.3s89.6,41,89.6,91.3
-		C345.6,306.4,305.4,347.3,256,347.3z"/>
-	<g>
-		<path d="M256,224c0-7.9,2.9-15.1,7.6-20.7c-2.5-0.4-5-0.6-7.6-0.6c-28.8,0-52.3,23.9-52.3,53.3c0,29.4,23.5,53.3,52.3,53.3
-			s52.3-23.9,52.3-53.3c0-2.3-0.2-4.6-0.4-6.9c-5.5,4.3-12.3,6.9-19.8,6.9C270.3,256,256,241.7,256,224z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<g>
+	<path d="M256,128c-81.9,0-145.7,48.8-224,128c67.4,67.7,124,128,224,128c99.9,0,173.4-76.4,224-126.6
+		C428.2,198.6,354.8,128,256,128z M256,347.3c-49.4,0-89.6-41-89.6-91.3c0-50.4,40.2-91.3,89.6-91.3s89.6,41,89.6,91.3
+		C345.6,306.4,305.4,347.3,256,347.3z"/>
+	<g>
+		<path d="M256,224c0-7.9,2.9-15.1,7.6-20.7c-2.5-0.4-5-0.6-7.6-0.6c-28.8,0-52.3,23.9-52.3,53.3c0,29.4,23.5,53.3,52.3,53.3
+			s52.3-23.9,52.3-53.3c0-2.3-0.2-4.6-0.4-6.9c-5.5,4.3-12.3,6.9-19.8,6.9C270.3,256,256,241.7,256,224z"/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<g>
-	<g>
-		<path d="M160,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
-			/>
-		<path d="M288,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
-			/>
-		<path d="M416,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
-			/>
-	</g>
-	<g>
-		<path d="M160,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
-			/>
-		<path d="M288,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
-			/>
-		<path d="M416,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
-			/>
-	</g>
-	<g>
-		<path d="M160,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
-			/>
-		<path d="M288,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
-			/>
-		<path d="M416,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
-			/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<g>
+	<g>
+		<path d="M160,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
+			/>
+		<path d="M288,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
+			/>
+		<path d="M416,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
+			/>
+	</g>
+	<g>
+		<path d="M160,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
+			/>
+		<path d="M288,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
+			/>
+		<path d="M416,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
+			/>
+	</g>
+	<g>
+		<path d="M160,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
+			/>
+		<path d="M288,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
+			/>
+		<path d="M416,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
+			/>
+	</g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Magnifying_glass" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
-	 y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M17.545,15.467l-3.779-3.779c0.57-0.935,0.898-2.035,0.898-3.21c0-3.417-2.961-6.377-6.378-6.377
-	C4.869,2.1,2.1,4.87,2.1,8.287c0,3.416,2.961,6.377,6.377,6.377c1.137,0,2.2-0.309,3.115-0.844l3.799,3.801
-	c0.372,0.371,0.975,0.371,1.346,0l0.943-0.943C18.051,16.307,17.916,15.838,17.545,15.467z M4.004,8.287
-	c0-2.366,1.917-4.283,4.282-4.283c2.366,0,4.474,2.107,4.474,4.474c0,2.365-1.918,4.283-4.283,4.283
-	C6.111,12.76,4.004,10.652,4.004,8.287z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Magnifying_glass" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+	 y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M17.545,15.467l-3.779-3.779c0.57-0.935,0.898-2.035,0.898-3.21c0-3.417-2.961-6.377-6.378-6.377
+	C4.869,2.1,2.1,4.87,2.1,8.287c0,3.416,2.961,6.377,6.377,6.377c1.137,0,2.2-0.309,3.115-0.844l3.799,3.801
+	c0.372,0.371,0.975,0.371,1.346,0l0.943-0.943C18.051,16.307,17.916,15.838,17.545,15.467z M4.004,8.287
+	c0-2.366,1.917-4.283,4.282-4.283c2.366,0,4.474,2.107,4.474,4.474c0,2.365-1.918,4.283-4.283,4.283
+	C6.111,12.76,4.004,10.652,4.004,8.287z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<path d="M417.4,224H288V94.6c0-16.9-14.3-30.6-32-30.6c-17.7,0-32,13.7-32,30.6V224H94.6C77.7,224,64,238.3,64,256
-	c0,17.7,13.7,32,30.6,32H224v129.4c0,16.9,14.3,30.6,32,30.6c17.7,0,32-13.7,32-30.6V288h129.4c16.9,0,30.6-14.3,30.6-32
-	C448,238.3,434.3,224,417.4,224z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<path d="M417.4,224H288V94.6c0-16.9-14.3-30.6-32-30.6c-17.7,0-32,13.7-32,30.6V224H94.6C77.7,224,64,238.3,64,256
+	c0,17.7,13.7,32,30.6,32H224v129.4c0,16.9,14.3,30.6,32,30.6c17.7,0,32-13.7,32-30.6V288h129.4c16.9,0,30.6-14.3,30.6-32
+	C448,238.3,434.3,224,417.4,224z"/>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
-<path d="M407.516,123.239l-27.717,11.48c18.585,44.869,18.585,94.291,0,139.159c-18.585,44.869-53.531,79.815-98.4,98.4
-	c-22.438,9.293-46.004,13.94-69.579,13.939c-23.569-0.001-47.147-4.647-69.579-13.939c-44.869-18.585-79.815-53.531-98.4-98.4
-	C13.507,200.647,34.758,118.71,90.758,68.644l60.801,60.801V7.521H29.635L69.514,47.4C5.222,105.826-18.985,200.6,16.123,285.359
-	c21.652,52.272,62.364,92.984,114.636,114.636c26.137,10.826,53.599,16.239,81.061,16.239s54.924-5.413,81.06-16.239
-	c52.272-21.652,92.984-62.364,114.637-114.636C429.167,233.087,429.167,175.511,407.516,123.239z"/>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-</svg>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
+<path d="M407.516,123.239l-27.717,11.48c18.585,44.869,18.585,94.291,0,139.159c-18.585,44.869-53.531,79.815-98.4,98.4
+	c-22.438,9.293-46.004,13.94-69.579,13.939c-23.569-0.001-47.147-4.647-69.579-13.939c-44.869-18.585-79.815-53.531-98.4-98.4
+	C13.507,200.647,34.758,118.71,90.758,68.644l60.801,60.801V7.521H29.635L69.514,47.4C5.222,105.826-18.985,200.6,16.123,285.359
+	c21.652,52.272,62.364,92.984,114.636,114.636c26.137,10.826,53.599,16.239,81.061,16.239s54.924-5.413,81.06-16.239
+	c52.272-21.652,92.984-62.364,114.637-114.636C429.167,233.087,429.167,175.511,407.516,123.239z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/save.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/save.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/save.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Save" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
-	 viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M15.173,2H4C2.899,2,2,2.9,2,4v12c0,1.1,0.899,2,2,2h12c1.101,0,2-0.9,2-2V5.127L15.173,2z M14,8c0,0.549-0.45,1-1,1H7
-	C6.45,9,6,8.549,6,8V3h8V8z M13,4h-2v4h2V4z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Save" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
+	 viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M15.173,2H4C2.899,2,2,2.9,2,4v12c0,1.1,0.899,2,2,2h12c1.101,0,2-0.9,2-2V5.127L15.173,2z M14,8c0,0.549-0.45,1-1,1H7
+	C6.45,9,6,8.549,6,8V3h8V8z M13,4h-2v4h2V4z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,21 +1,21 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-	<path d="M193.46,249.056c3.723-0.67,7.589-1.041,11.586-1.041L201.924,248h103.823c4.503,0,8.806-0.617,12.908-1.754
-		c19.37-5.363,33.345-22.537,33.345-43.663v-30.822v-56.402c0-24.832-21.15-43.484-46.289-47.606
-		c-15.931-2.624-39.258-3.827-55.089-3.749c-15.829,0.086-30.981,1.404-44.277,3.749C167.143,74.576,160,88.928,160,115.359V144h96
-		v16H128.82c-35.628,0-64.538,42.571-64.813,95.242C64.005,255.495,64,255.747,64,256c0,9.523,0.94,18.72,2.685,27.404
-		C74.648,323.07,99.451,352,128.82,352H144v-2.662v-43.273C144,279.238,164.146,254.332,193.46,249.056z M203.656,127.002
-		c-9.592,0-17.384-7.785-17.384-17.403c0-9.664,7.774-17.52,17.384-17.52c9.574,0,17.399,7.855,17.399,17.52
-		C221.056,119.217,213.246,127.002,203.656,127.002z"/>
-	<path d="M443.951,222.543C434.78,186.021,411.033,160,383.18,160H368v2.626v38.046c0,33.915-22.286,58.474-49.489,62.681
-		c-2.737,0.424-5.483,0.646-8.301,0.646H206.351c-4.518,0-8.904,0.584-13.049,1.672C174.18,270.689,160,286.6,160,307.236v32.922
-		v54.305c0,24.832,24.977,39.426,49.481,46.551c29.327,8.531,61.267,10.068,96.366,0C329.15,434.354,352,420.893,352,394.463V368
-		h-96v-16h127.18c25.24,0,47.107-21.365,57.814-52.549C445.474,286.404,448,271.641,448,256
-		C448,244.232,446.567,232.962,443.951,222.543z M307.867,382.82c9.59,0,17.381,7.785,17.381,17.4
-		c0,9.65-7.791,17.521-17.381,17.521c-9.577,0-17.399-7.871-17.399-17.521C290.468,390.59,298.274,382.82,307.867,382.82z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+	<path d="M193.46,249.056c3.723-0.67,7.589-1.041,11.586-1.041L201.924,248h103.823c4.503,0,8.806-0.617,12.908-1.754
+		c19.37-5.363,33.345-22.537,33.345-43.663v-30.822v-56.402c0-24.832-21.15-43.484-46.289-47.606
+		c-15.931-2.624-39.258-3.827-55.089-3.749c-15.829,0.086-30.981,1.404-44.277,3.749C167.143,74.576,160,88.928,160,115.359V144h96
+		v16H128.82c-35.628,0-64.538,42.571-64.813,95.242C64.005,255.495,64,255.747,64,256c0,9.523,0.94,18.72,2.685,27.404
+		C74.648,323.07,99.451,352,128.82,352H144v-2.662v-43.273C144,279.238,164.146,254.332,193.46,249.056z M203.656,127.002
+		c-9.592,0-17.384-7.785-17.384-17.403c0-9.664,7.774-17.52,17.384-17.52c9.574,0,17.399,7.855,17.399,17.52
+		C221.056,119.217,213.246,127.002,203.656,127.002z"/>
+	<path d="M443.951,222.543C434.78,186.021,411.033,160,383.18,160H368v2.626v38.046c0,33.915-22.286,58.474-49.489,62.681
+		c-2.737,0.424-5.483,0.646-8.301,0.646H206.351c-4.518,0-8.904,0.584-13.049,1.672C174.18,270.689,160,286.6,160,307.236v32.922
+		v54.305c0,24.832,24.977,39.426,49.481,46.551c29.327,8.531,61.267,10.068,96.366,0C329.15,434.354,352,420.893,352,394.463V368
+		h-96v-16h127.18c25.24,0,47.107-21.365,57.814-52.549C445.474,286.404,448,271.641,448,256
+		C448,244.232,446.567,232.962,443.951,222.543z M307.867,382.82c9.59,0,17.381,7.785,17.381,17.4
+		c0,9.65-7.791,17.521-17.381,17.521c-9.577,0-17.399-7.871-17.399-17.521C290.468,390.59,298.274,382.82,307.867,382.82z"/>
+</g>
+</svg>

Modified: trunk/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
-<path d="M354.24,47.4l39.879-39.879H272.196v121.924l60.801-60.801c56,50.066,77.251,132.004,46.918,205.235
-	c-18.585,44.869-53.531,79.815-98.4,98.4c-44.866,18.585-94.288,18.585-139.158,0c-44.869-18.585-79.815-53.531-98.4-98.4
-	c-18.585-44.869-18.585-94.29,0-139.159l-27.717-11.48c-21.651,52.272-21.651,109.848,0,162.12
-	c21.652,52.272,62.364,92.984,114.637,114.636c26.14,10.827,53.595,16.24,81.06,16.239c27.459-0.001,54.927-5.414,81.061-16.239
-	c52.271-21.652,92.983-62.364,114.636-114.636C442.739,200.6,418.532,105.826,354.24,47.4z"/>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-</svg>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
+<path d="M354.24,47.4l39.879-39.879H272.196v121.924l60.801-60.801c56,50.066,77.251,132.004,46.918,205.235
+	c-18.585,44.869-53.531,79.815-98.4,98.4c-44.866,18.585-94.288,18.585-139.158,0c-44.869-18.585-79.815-53.531-98.4-98.4
+	c-18.585-44.869-18.585-94.29,0-139.159l-27.717-11.48c-21.651,52.272-21.651,109.848,0,162.12
+	c21.652,52.272,62.364,92.984,114.637,114.636c26.14,10.827,53.595,16.24,81.06,16.239c27.459-0.001,54.927-5.414,81.061-16.239
+	c52.271-21.652,92.983-62.364,114.636-114.636C442.739,200.6,418.532,105.826,354.24,47.4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>

Deleted: trunk/Master/texmf-dist/asymptote/GUI/res/icons.qrc
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/res/icons.qrc	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/res/icons.qrc	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,48 +0,0 @@
-<RCC>
-  <qresource prefix="">
-    <file>icons/android-arrow-back.svg</file>
-    <file>icons/android-arrow-forward.svg</file>
-    <file>icons/android-folder-open.svg</file>
-    <file>icons/save.svg</file>
-    <file>icons/code.svg</file>
-    <file>icons/android-camera.svg</file>
-    <file>icons/plus-round.svg</file>
-    <file>icons/grid.svg</file>
-    <file>icons/magnifying-glass.svg</file>
-    <file>icons/center.svg</file>
-    <file>icons/centerorigin.svg</file>
-    <file>icons/edit.svg</file>
-    <file>icons/android-delete.svg</file>
-    <file>icons/android-hand.svg</file>
-    <file>icons/arrow-move.svg</file>
-    <file>icons/arrow-resize.svg</file>
-    <file>icons/android-refresh.svg</file>
-    <file>icons/anchor.svg</file>
-    <file>icons/eye.svg</file>
-    <file>icons/android-expand.svg</file>
-    <file>icons/chevron-with-circle-left.svg</file>
-    <file>icons/chevron-with-circle-right.svg</file>
-    <file>icons/bucket.svg</file>
-    <file>icons/filledbucket.svg</file>
-    <file>icons/android-color-palette.svg</file>
-    <file>icons/openpolygon.svg</file>
-    <file>icons/closedpolygon.svg</file>
-    <file>icons/opencurve.svg</file>
-    <file>icons/closedcurve.svg</file>
-    <file>icons/triangle-stroked-15.svg</file>
-    <file>icons/circle.svg</file>
-    <file>icons/text.svg</file>
-    <file>icons/social-python.svg</file>
-    <file>icons/subdirectory-left.svg</file>
-    <file>icons/android-done.svg</file>
-    <file>icons/android-close.svg</file>
-    <file>icons/check.svg</file>
-    <file>icons/android-radio-button-on.svg</file>
-    <file>icons/android-radio-button-off.svg</file>
-    <file>icons/android-locate.svg</file>
-    <file>icons/close-round.svg</file>
-    <file>icons/brush.svg</file>
-    <file>icons/undo.svg</file>
-    <file>icons/redo.svg</file>
-  </qresource>
-</RCC>

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -416,6 +416,10 @@
         self.color = (0, 0, 0)
         self.options = pen_options
         self.width = width
+        self.style = "solid"
+        self.capStyle = QtCore.Qt.PenCapStyle.SquareCap
+        self.opacity = 255 #Should these be in a dictionary?
+        self.dashPattern = [1,0]
         self._asyengine = asyengine
         self._deferAsyfy = False
         if pen_options:
@@ -431,6 +435,14 @@
     def asyEngine(self, value):
         self._asyengine = value
 
+    def qtCapStyleToAsyCapStyle(self, style):
+        lineCapList = [QtCore.Qt.PenCapStyle.SquareCap,QtCore.Qt.PenCapStyle.FlatCap,QtCore.Qt.PenCapStyle.RoundCap]
+        asyCapList = ["extendcap","flatcap","roundcap"]
+        if style in lineCapList:
+            return asyCapList[lineCapList.index(style)]
+        else:
+            return False
+
     def updateCode(self, asy2psmap = identity()):
         """ Generate the pen's code """
         if self._deferAsyfy:
@@ -438,6 +450,8 @@
         self.asyCode = 'rgb({:g},{:g},{:g})+{:s}'.format(self.color[0], self.color[1], self.color[2], str(self.width))
         if len(self.options) > 0:
             self.asyCode = self.asyCode + '+' + self.options
+        if self.style != "solid":
+            self.asyCode = self.style + '+' + self.asyCode
 
     def setWidth(self, newWidth):
         """ Set the pen's width """
@@ -444,6 +458,22 @@
         self.width = newWidth
         self.updateCode()
 
+    def setDashPattern(self, pattern):
+        self.dashPattern = pattern
+        self.updateCode() #Get working
+
+    def setStyle(self, style):
+        self.style = style
+        self.updateCode()
+
+    def setCapStyle(self, style):
+        self.capStyle = style
+        self.updateCode()
+
+    def setOpacity(self, opacity):
+        self.opacity = opacity
+        self.updateCode()
+
     def setColor(self, color):
         """ Set the pen's color """
         if isinstance(color, tuple) and len(color) == 3:
@@ -493,8 +523,13 @@
         if self._deferAsyfy:
             self.computeColor()
         newPen = QtGui.QPen()
-        newPen.setColor(asyPen.convertToQColor(self.color))
+        color = asyPen.convertToQColor(self.color)
+        color.setAlpha(self.opacity)
+        newPen.setColor(color)
+        newPen.setCapStyle(self.capStyle)
         newPen.setWidthF(self.width)
+        if self.dashPattern:
+            newPen.setDashPattern(self.dashPattern)
 
         return newPen
 
@@ -969,7 +1004,7 @@
             if transfExists:
                 transfExists = localCount <= len(self.transfKeymap[key]) - 1
                 if transfExists:
-                    validKey = not self.transfKeymap[key][localCount].deleted
+                    validKey = not self.transfKeymap[key][localCount].deleted #Does this ever exist?
             else:
                 validKey = False
 
@@ -1290,7 +1325,12 @@
     def copy(self):
         return type(self)(self.path,self._asyengine,self.pen)
 
+    def arrowify(self,arrowhead=0):
+        newObj = asyArrow(self.path.asyengine, pen=self.pen, transfKey = self.transfKey, transfKeymap = self.transfKeymap, canvas = self.onCanvas, arrowActive = arrowhead, code = self.path.getCode(yflip())) #transform
+        newObj.arrowSettings["fill"] = self.path.fill
+        return newObj
 
+
 class xasyFilledShape(xasyShape):
     """ A filled shape drawn on the GUI """
 
@@ -1555,11 +1595,23 @@
                 if i + 1 in keylist.keys():
                     # this case, we have a key.
                     with io.StringIO() as raw_line:
-                        for j in range(len(curr_str)):
+                        n=len(curr_str)
+                        for j in range(n):
                             raw_line.write(curr_str[j])
                             if j + 1 in keylist[i + 1]:
                                 # at this point, replace keys with xkey
-                                raw_line.write('KEY="{0:s}",'.format(linenum2key[(i + 1, j + 1)]))
+                                sep=','
+                                k=j+1
+                                # assume begingroup is on a single line for now
+                                while k < n:
+                                    c=curr_str[k]
+                                    if c == ')':
+                                        sep=''
+                                        break
+                                    if not c.isspace():
+                                        break
+                                    ++k
+                                raw_line.write('KEY="{0:s}"'.format(linenum2key[(i + 1, j + 1)])+sep)
                                 self.userKeys.add(linenum2key[(i + 1, j + 1)])
                         curr_str = raw_line.getvalue()
                 # else, skip and just write the line.
@@ -1819,3 +1871,125 @@
 
     def getID(self):
         return self.originalObj
+
+
+class asyArrow(xasyItem):
+
+    def __init__(self, asyengine, pen=None, transform=identity(), transfKey=None, transfKeymap = None, canvas=None, arrowActive=False, code=None):
+        #super().__init__(path=path, engine=asyengine, pen=pen, transform=transform)
+        """Initialize the label with the given test, location, and pen"""
+        #asyObj.__init__(self)
+        super().__init__(canvas=canvas, asyengine=asyengine) #CANVAS? Seems to work.
+        if pen is None:
+            pen = asyPen()
+        if pen.asyEngine is None:
+            pen.asyEngine = asyengine
+        self.pen = pen
+        self.fillPen = asyPen()
+        self.fillPen.asyEngine = asyengine
+        self.code = code
+        #self.path = path
+        #self.path.asyengine = asyengine
+        self.transfKey = transfKey
+        if transfKeymap == None: #Better way?
+            self.transfKeymap = {self.transfKey: [transform]}
+        else:
+            self.transfKeymap = transfKeymap
+        self.location = (0,0)
+        self.asyfied = False
+        self.onCanvas = canvas
+
+        self.arrowSettings = {"active": arrowActive, "style": 0, "fill": 0} #Rename active?
+        self.arrowList = ["","Arrow","ArcArrow"] #The first setting corresponds to no arrow.
+        self.arrowStyleList = ["","SimpleHead","HookHead","TeXHead"]
+        self.arrowFillList = ["","FillDraw","Fill","NoFill","UnFill","Draw"]
+
+    def getArrowSettings(self):
+        settings = "("
+
+        if self.arrowSettings["style"] != 0:
+            settings += "arrowhead="
+        settings += self.arrowStyleList[self.arrowSettings["style"]]
+
+        if "size" in self.arrowSettings:
+            if settings != "(": #This is really messy.
+                settings += ","
+            settings += "size=" + str(self.arrowSettings["size"]) #Should I add options to this? Like for cm?
+
+        if "angle" in self.arrowSettings: #This is so similar, you should be able to turn this into a function or something.
+            if settings != "(":
+                settings += ","
+            settings += "angle=" + str(self.arrowSettings["angle"])
+
+        if self.arrowSettings["fill"] != 0:
+            if settings != "(":
+                settings += ","
+            settings += "filltype="
+        settings += self.arrowFillList[self.arrowSettings["fill"]]
+
+        settings += ")"
+        #print(settings)
+        return settings
+
+    def setKey(self, newKey = None):
+        transform = self.transfKeymap[self.transfKey][0]
+
+        self.transfKey = newKey
+        self.transfKeymap = {self.transfKey: [transform]}
+
+    def updateCode(self, asy2psmap = identity()):
+        newLoc = asy2psmap.inverted() * self.location
+        self.asyCode = ''
+        if self.arrowSettings["active"]:
+            if self.arrowSettings["fill"]:
+                self.asyCode += 'begingroup(KEY="{0}");'.format(self.transfKey)+'\n\n'
+                self.asyCode += 'fill({0},{1});'.format(self.code, self.fillPen.getCode())+'\n\n'
+                self.asyCode += 'draw({0},{1},arrow={2}{3});'.format(self.code, self.pen.getCode(), self.arrowList[self.arrowSettings["active"]],self.getArrowSettings())+'\n\n'
+            else:
+                self.asyCode += 'draw(KEY="{0}",{1},{2},arrow={3}{4});'.format(self.transfKey, self.code, self.pen.getCode(), self.arrowList[self.arrowSettings["active"]],self.getArrowSettings())+'\n\n'
+            if self.arrowSettings["fill"]:
+                self.asyCode += 'endgroup();\n\n'
+        else:
+            self.asyCode = 'draw(KEY="{0}",{1},{2});'.format(self.transfKey, self.code, self.pen.getCode())+'\n\n'
+
+    def setPen(self, pen):
+        """ Set the label's pen """
+        self.pen = pen
+        self.updateCode()
+
+    def moveTo(self, newl):
+        """ Translate the label's location """
+        self.location = newl
+
+    def getObjectCode(self, asy2psmap=identity()):
+        self.updateCode()
+        return self.asyCode
+
+    def getTransformCode(self, asy2psmap=identity()):
+        transf = self.transfKeymap[self.transfKey][0]
+        if transf == identity():
+            return ''
+        else:
+            return xasyItem.setKeyFormatStr.format(self.transfKey, transf.getCode(asy2psmap))+'\n'
+
+    def generateDrawObjects(self, forceUpdate=False):
+        self.asyfy(forceUpdate)
+        transf = self.transfKeymap[self.transfKey][0]
+        for drawObject in self.drawObjects:
+            drawObject.pTransform = transf
+        return self.drawObjects
+
+    def __str__(self):
+        """ Create a string describing this shape """
+        return "xasyShape code:{:s}".format("\n\t".join(self.getCode().splitlines()))
+
+    def swapFill(self):
+        self.arrowSettings["fill"] = not self.arrowSettings["fill"]
+
+    def getBoundingBox(self):
+        self.asyfy()
+        return self.imageList[0].bbox
+
+    def copy(self):
+        #Include all parameters?
+        return type(self)(self._asyengine,pen=self.pen,canvas=self.onCanvas,arrowActive=self.arrowSettings["active"])

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -51,14 +51,8 @@
         self.prospectiveCtrlPts = []
 
         #The magnification isn't being set. Here I'm manually setting it to be the square root of the determinant.
-        self.info['magnification'] = math.sqrt(self.transf.xx * self.transf.yy - self.transf.xy * self.transf.yx)
-        self.parent = parent
-        if isinstance(obj,xasy2asy.xasyFilledShape) or isinstance(obj,xasy2asy.xasyShape):
-            parent.ui.btnFill.setChecked(obj.path.fill)
+        self.info['magnification'] = math.sqrt(abs(self.transf.xx * self.transf.yy - self.transf.xy * self.transf.yx))
 
-    def swapObjFill(self):
-        self.obj.swapFill() #This may end up being more in the future
-
     def setSelectionBoundaries(self):
         self.nodeSelRects = self.handleNodeSelectionBounds()
 

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -103,15 +103,27 @@
                     })
 
         elif isinstance(item, xasy2asy.xasyShape):
-            penData = {'color': item.pen.color, 'width': item.pen.width, 'options': item.pen.options}
+            penData = {'color': item.pen.color, 'width': item.pen.width, 'dashPattern': item.pen.dashPattern, 'options': item.pen.options}
             fileItems.append({'type': 'xasyShape',
                     'nodes': item.path.nodeSet,
                     'links': item.path.linkSet,
+                    'fill': item.path.fill,
                     'transform': item.transfKeymap[item.transfKey][0].t,
                     'transfKey': item.transfKey,
                     'pen': penData
                     })
 
+        elif isinstance(item, xasy2asy.asyArrow): #Will this ever even be reached?
+            penData = {'color': item.pen.color, 'width': item.pen.width, 'dashPattern': item.pen.dashPattern, 'options': item.pen.options}
+            fileItems.append({'type': 'asyArrow',
+                    'pen': penData,
+                    'arrowSettings': item.arrowSettings,
+                    'transform': item.transfKeymap[item.transfKey][0].t,
+                    'transfKey': item.transfKey,
+                    'settings': item.arrowSettings,
+                    'code': item.code
+                    })
+
         else:
             # DEBUGGING PURPOSES ONLY
             print(type(item))

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasyVersion.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyVersion.py	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyVersion.py	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,2 +1,2 @@
 #!/usr/bin/env python3
-xasyVersion = "2.79"
+xasyVersion = "2.85"

Modified: trunk/Master/texmf-dist/asymptote/asy-kate.sh
===================================================================
--- trunk/Master/texmf-dist/asymptote/asy-kate.sh	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/asy-kate.sh	2023-02-18 18:40:50 UTC (rev 65878)
@@ -2,7 +2,7 @@
 echo  '<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- based on asy-keywords.el and Highlighting file asymptote.xml by Christoph Hormann-->
-<language version="1.0" kateversion="3.2.2" name="asymptote" section="Sources" extensions="*.asy" mimetype="text/x-asymptote" licence="LGPL" author="Carsten Brenner">
+<language version="1.0" kateversion="3.2.2" name="Asymptote" section="Sources" extensions="*.asy" mimetype="text/x-asymptote" licence="LGPL" author="Carsten Brenner">
 
 <highlighting>
 ' > asymptote.xml
@@ -122,7 +122,7 @@
 			<itemData name="Decimal"      defStyleNum="dsDecVal"/>
 			<itemData name="Extensions"   defStyleNum="dsKeyword" color="#0095ff" selColor="#ffffff" bold="1" italic="0"/>
 			<itemData name="Float"        defStyleNum="dsFloat"/>
-			<itemData name="Function"     defStyleNum="dsFunction" />			
+			<itemData name="Function"     defStyleNum="dsFunction" />
 			<itemData name="Hex"          defStyleNum="dsBaseN"/>
 			<itemData name="Keyword"      defStyleNum="dsKeyword"/>
 			<itemData name="Normal Text"  defStyleNum="dsNormal"/>

Modified: trunk/Master/texmf-dist/asymptote/asy-keywords.el
===================================================================
--- trunk/Master/texmf-dist/asymptote/asy-keywords.el	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/asy-keywords.el	2023-02-18 18:40:50 UTC (rev 65878)
@@ -2,16 +2,16 @@
 ;; This file is automatically generated by asy-list.pl.
 ;; Changes will be overwritten.
 ;;
-(defvar asy-keywords-version "2.79")
+(defvar asy-keywords-version "2.85")
 
 (defvar asy-keyword-name '(
 and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
 
 (defvar asy-type-name '(
-Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real revolution scaleT scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
+Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution scaleT schur scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
 
 (defvar asy-function-name '(
-AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask asse!
 rt asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBo!
 xO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrs!
 olv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map mapArray mapTemplate margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scal!
 e scale3 scaleO scaleT scaleless scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube type uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh a!
 sk assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawV!
 ertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac!
  lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map mapArray mapTemplate margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedef!
 aults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube type uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
 
 (defvar asy-variable-name '(
-Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Peru PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlB!
 u RdYlGn Red RedOrange RedViolet Reds Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespa!
 cing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nipy_spectral nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen seismic s!
 equencereal settings signedtrailingzero simplex solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity twilight twilight_shifted undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
+Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Peru PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlB!
 u RdYlGn Red RedOrange RedViolet Reds Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doubleline!
 pen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nipy_spectral nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive optimizeTableau orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon !
 saveFunctions scalarpen seismic sequencereal settings signedtrailingzero simplex solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity twilight twilight_shifted undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))

Modified: trunk/Master/texmf-dist/asymptote/geometry.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/geometry.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/geometry.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -345,7 +345,6 @@
           arrowbar arrow = Arrow)
 {/*<asyxml></code><documentation>Draw the components (O, i, j, x - axis, y - axis) of 'R'.</documentation></function></asyxml>*/
  unravel R;
- dot(pic, O, dotpen);
  drawline(pic, O, O + i, xpen);
  drawline(pic, O, O + j, ypen);
  draw(pic, li, O--(O + i), ipen, arrow);
@@ -353,6 +352,7 @@
  lj.align(lj.align, unit(I * j));
  draw(pic, lj, O--(O + j), jpen, arrow);
  draw(pic, lj, O--(O + j), jpen, arrow);
+ dot(pic, O, dotpen);
  Label lo = lo.copy();
  lo.align(lo.align, -2 * dir(O--O + i, O--O + j));
  lo.p(dotpen);
@@ -1556,6 +1556,11 @@
   return segment(l.A, l.B);
 }
 
+path operator ecast(segment s)
+{
+  return s.A -- s.B;
+}
+
 /*<asyxml><operator type = "line" signature="*(transform,line)"><code></asyxml>*/
 line operator *(transform t, line l)
 {/*<asyxml></code><documentation>Provide transform * line</documentation></operator></asyxml>*/
@@ -3738,6 +3743,17 @@
   else draw(pic, L, (path)c, align, p, arrow, bar, margin, legend, marker);
 }
 
+void fill(picture pic = currentpicture, circle c, pen p = currentpen)
+{
+  if (!degenerate(c)) fill(pic, (path)c, p);
+}
+
+void filldraw(picture pic = currentpicture, circle c, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+  fill(pic, c, fillpen);
+  draw(pic, c, drawpen);
+}
+
 /*<asyxml><function type="void" signature="draw(picture,Label,ellipse,align,pen,arrowbar,arrowbar,margin,Label,marker)"><code></asyxml>*/
 void draw(picture pic = currentpicture, Label L = "", ellipse el,
           align align = NoAlign, pen p = currentpen,
@@ -3748,6 +3764,17 @@
   else draw(pic, L, (path)el, align, p, arrow, bar, margin, legend, marker);
 }
 
+void fill(picture pic = currentpicture, ellipse el, pen p = currentpen)
+{
+  if (!degenerate(el)) fill(pic, (path)el, p);
+}
+
+void filldraw(picture pic = currentpicture, ellipse el, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+  fill(pic, el, fillpen);
+  draw(pic, el, drawpen);
+}
+
 /*<asyxml><function type="void" signature="draw(picture,Label,parabola,align,pen,arrowbar,arrowbar,margin,Label,marker)"><code></asyxml>*/
 void draw(picture pic = currentpicture, Label L = "", parabola parabola,
           align align = NoAlign, pen p = currentpen,
@@ -5383,8 +5410,8 @@
 
 // *=======================================================*
 // *.......................TRIANGLES.......................*
-/*<asyxml><function type="point" signature="orthocentercenter(point,point,point)"><code></asyxml>*/
-point orthocentercenter(point A, point B, point C)
+/*<asyxml><function type="point" signature="orthocenter(point,point,point)"><code></asyxml>*/
+point orthocenter(point A, point B, point C)
 {/*<asyxml></code><documentation>Return the orthocenter of the triangle ABC.</documentation></function></asyxml>*/
   point[] P = standardizecoordsys(A, B, C);
   coordsys R = P[0].coordsys;
@@ -5539,9 +5566,9 @@
   real gamma() {return degrees(acos((a()^2 + b()^2 - c()^2)/(2a() * b())));}
 
   /*<asyxml><method type = "path" signature="Path()"><code></asyxml>*/
-  path Path()
+  path Path()  // retained for backward compatibility
   {/*<asyxml></code><documentation>The path of the triangle.</documentation></method></asyxml>*/
-    return A--C--B--cycle;
+    return A--B--C--cycle;
   }
 
   /*<asyxml><struct signature="side"><code></asyxml>*/
@@ -5584,6 +5611,8 @@
 
 }/*<asyxml></struct></asyxml>*/
 
+path operator cast(triangle t) { return t.A -- t.B -- t.C -- cycle; }
+
 from triangle unravel side; // The structure 'side' is now available outside the triangle structure.
 from triangle unravel vertex; // The structure 'vertex' is now available outside the triangle structure.
 
@@ -5715,10 +5744,10 @@
   return altitude(opposite(side));
 }
 
-/*<asyxml><function type="point" signature="orthocentercenter(triangle)"><code></asyxml>*/
-point orthocentercenter(triangle t)
+/*<asyxml><function type="point" signature="orthocenter(triangle)"><code></asyxml>*/
+point orthocenter(triangle t)
 {/*<asyxml></code><documentation>Return the orthocenter of the triangle t.</documentation></function></asyxml>*/
-  return orthocentercenter(t.A, t.B, t.C);
+  return orthocenter(t.A, t.B, t.C);
 }
 
 /*<asyxml><function type="point" signature="centroid(triangle)"><code></asyxml>*/
@@ -6276,15 +6305,36 @@
 /*<asyxml><function type="void" signature="draw(picture,triangle,pen,marker)"><code></asyxml>*/
 void draw(picture pic = currentpicture, triangle t, pen p = currentpen, marker marker = nomarker)
 {/*<asyxml></code><documentation>Draw sides of the triangle 't' on picture 'pic' using pen 'p'.</documentation></function></asyxml>*/
-  draw(pic, t.Path(), p, marker);
+  draw(pic, (path)t, p, marker);
 }
 
+void fill(picture pic = currentpicture, triangle t, pen p = currentpen)
+{
+  fill(pic, (path)t, p);
+}
+
+void filldraw(picture pic = currentpicture, triangle t, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+  fill(pic, t, fillpen);
+  draw(pic, t, drawpen);
+}
+
 /*<asyxml><function type="void" signature="draw(picture,triangle[],pen,marker)"><code></asyxml>*/
-void draw(picture pic = currentpicture, triangle[] t, pen p = currentpen, marker marker = nomarker)
+void draw(picture pic = currentpicture, triangle[] ts, pen p = currentpen, marker marker = nomarker)
 {/*<asyxml></code><documentation>Draw sides of the triangles 't' on picture 'pic' using pen 'p'.</documentation></function></asyxml>*/
-  for(int i = 0; i < t.length; ++i) draw(pic, t[i], p, marker);
+  for(triangle t: ts) draw(pic, t, p, marker);
 }
 
+void fill(picture pic = currentpicture, triangle[] ts, pen p = currentpen)
+{
+  for(triangle t: ts) fill(pic, t, p);
+}
+
+void filldraw(picture pic = currentpicture, triangle[] ts, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+  for(triangle t: ts) filldraw(pic, t, fillpen, drawpen);
+}
+
 /*<asyxml><function type="void" signature="drawline(picture,triangle,pen)"><code></asyxml>*/
 void drawline(picture pic = currentpicture, triangle t, pen p = currentpen)
 {/*<asyxml></code><documentation>Draw lines of the triangle 't' on picture 'pic' using pen 'p'.</documentation></function></asyxml>*/
@@ -6368,13 +6418,13 @@
     point O = radicalcenter(c1, c2);
     return inversion(O^c1, O);
   }
-  real a = abs(c1.r/c2.r);
-  if(sgn > 0) {
-    point O = c1.C + a/abs(1 - a) * (c2.C - c1.C);
-    return inversion(a * abs(abs(O - c2.C)^2 - c2.r^2), O);
+  else {
+   point C1 = c1.C, C2 = c2.C;
+    real r1 = c1.r, r2 = sgn(sgn) * c2.r;
+    return inversion(
+      r1 * r2 * (1 - (length(C2 - C1) / (r1 + r2))^2),
+      (r2 * C1 + r1 * C2) / (r1 + r2));
   }
-  point O = c1.C + a/abs(1 + a) * (c2.C - c1.C);
-  return inversion(-a * abs(abs(O - c2.C)^2 - c2.r^2), O);
 }
 
 /*<asyxml><function type="inversion" signature="inversion(circle,circle,circle)"><code></asyxml>*/
@@ -7192,9 +7242,18 @@
   return arc(A, abs(r), BA, CA, (r < 0) ^ ((BA-CA) % 360 < 180) ? CW : CCW);
 }
 
+point orthocentercenter(point A, point B, point C)
+{
+    return orthocenter(A, B, C);
+}
+
+point orthocentercenter(triangle t)
+{
+  return orthocenter(t.A, t.B, t.C);
+}
+
 // *.......End of compatibility routines........*
 // *=======================================================*
 
 // *........................FOOTER.........................*
 // *=======================================================*
-

Modified: trunk/Master/texmf-dist/asymptote/graph.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/graph.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/graph.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -2186,45 +2186,49 @@
   return pic;
 }
 
-real maxlength(pair a, pair b, int nx, int ny)
-{
-  return min((b.x-a.x)/nx,(b.y-a.y)/ny);
-}
-
 // return a vector field over box(a,b).
 picture vectorfield(path vector(pair), pair a, pair b,
                     int nx=nmesh, int ny=nx, bool truesize=false,
-                    real maxlength=truesize ? 0 : maxlength(a,b,nx,ny),
                     bool cond(pair z)=null, pen p=currentpen,
                     arrowbar arrow=Arrow, margin margin=PenMargin)
 {
   picture pic;
-  real dx=1/nx;
-  real dy=1/ny;
+  real dx=(b.x-a.x)/(nx-1);
+  real dy=(b.y-a.y)/(ny-1);
   bool all=cond == null;
   real scale;
 
-  if(maxlength > 0) {
-    real size(pair z) {
-      path g=vector(z);
-      return abs(point(g,size(g)-1)-point(g,0));
+  transform t=scale(dx,dy);
+  pair size(pair z) {
+    path g=t*vector(z);
+    int n=size(g);
+    pair w=n == 1 ? point(g,0) : point(g,n-1)-point(g,0);
+    return (abs(w.x),abs(w.y));
+  }
+  pair max=size(a);
+  for(int i=0; i < nx; ++i) {
+    real x=a.x+i*dx;
+    for(int j=0; j < ny; ++j) {
+      real y=a.y+j*dy;
+      max=maxbound(max,size((x,y)));
     }
-    real max=size(a);
-    for(int i=0; i <= nx; ++i) {
-      real x=interp(a.x,b.x,i*dx);
-      for(int j=0; j <= ny; ++j)
-        max=max(max,size((x,interp(a.y,b.y,j*dy))));
-    }
-    scale=max > 0 ? maxlength/max : 1;
-  } else scale=1;
+  }
 
-  for(int i=0; i <= nx; ++i) {
-    real x=interp(a.x,b.x,i*dx);
-    for(int j=0; j <= ny; ++j) {
-      real y=interp(a.y,b.y,j*dy);
+  if(max.x == 0)
+    scale=max.y == 0 ? 1.0 : dy/max.y;
+  else if(max.y == 0)
+    scale=dx/max.x;
+  else
+    scale=min(dx/max.x,dy/max.y);
+
+  for(int i=0; i < nx; ++i) {
+    real x=a.x+i*dx;
+    for(int j=0; j < ny; ++j) {
+      real y=a.y+j*dy;
       pair z=(x,y);
       if(all || cond(z)) {
-        path g=scale(scale)*vector(z);
+        path v=scale(scale)*t*vector(z);
+        path g=size(v) == 1 ? (0,0)--v : v;
         if(truesize)
           draw(z,pic,g,p,arrow);
         else

Modified: trunk/Master/texmf-dist/asymptote/graph3.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/graph3.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/graph3.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -2201,8 +2201,8 @@
                     string name="", render render=defaultrender)
 {
   picture pic;
-  real du=1/nu;
-  real dv=1/nv;
+  real du=(b.x-a.x)/(nu-1);
+  real dv=(b.y-a.y)/(nv-1);
   bool all=cond == null;
   real scale;
 
@@ -2209,13 +2209,16 @@
   if(maxlength > 0) {
     real size(pair z) {
       path3 g=vector(z);
-      return abs(point(g,size(g)-1)-point(g,0));
+      triple w=point(g,size(g)-1)-point(g,0);
+      return max(w.x,w.y,w.z);
     }
-    real max=size((0,0));
+    real max=size(a);
     for(int i=0; i <= nu; ++i) {
-      real x=interp(a.x,b.x,i*du);
-      for(int j=0; j <= nv; ++j)
-        max=max(max,size((x,interp(a.y,b.y,j*dv))));
+      real u=a.x+i*du;
+      for(int j=0; j < nv; ++j) {
+        real v=a.y+j*dv;
+        max=max(max,size((u,v)));
+      }
     }
     scale=max > 0 ? maxlength/max : 1;
   } else scale=1;
@@ -2224,9 +2227,10 @@
   if(group)
     begingroup3(pic,name == "" ? "vectorfield" : name,render);
   for(int i=0; i <= nu; ++i) {
-    real x=interp(a.x,b.x,i*du);
+    real u=a.x+i*du;
     for(int j=0; j <= nv; ++j) {
-      pair z=(x,interp(a.y,b.y,j*dv));
+      real v=a.y+j*dv;
+      pair z=(u,v);
       if(all || cond(z)) {
         path3 g=scale3(scale)*vector(z);
         string name="vector";

Modified: trunk/Master/texmf-dist/asymptote/plain.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/plain.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -171,7 +171,7 @@
 real[] uniform(real a, real b, int n)
 {
   if(n <= 0) return new real[];
-  return a+(b-a)/n*sequence(n+1);
+  return a+sequence(n+1)/n*(b-a);
 }
 
 void eval(string s, bool embedded=false)
@@ -264,7 +264,7 @@
 cputime cputime()
 {
   static processtime last;
-  real [] a=_cputime();
+  real[] a=_cputime();
   cputime cputime;
   real clock=a[4];
   cputime.parent.user=a[0];
@@ -302,6 +302,34 @@
   write(stdout,s,c,format,suffix);
 }
 
+struct realschur {
+  real[][] U;
+  real[][] T;
+}
+
+realschur schur(real[][] a)
+{
+  real[][][] S=_schur(a);
+  realschur schur;
+  schur.U=S[0];
+  schur.T=S[1];
+  return schur;
+}
+
+struct schur {
+  pair[][] U;
+  pair[][] T;
+}
+
+schur schur(pair[][] a)
+{
+  pair[][][] S=_schur(a);
+  schur schur;
+  schur.U=S[0];
+  schur.T=S[1];
+  return schur;
+}
+
 if(settings.autoimport != "") {
   string s=settings.autoimport;
   settings.autoimport="";

Modified: trunk/Master/texmf-dist/asymptote/plain_arrows.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_arrows.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/plain_arrows.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -53,39 +53,39 @@
 arrowhead DefaultHead;
 DefaultHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
                           real size=0, real angle=arrowangle) {
-                                                               if(size == 0) size=DefaultHead.size(p);
-                                                               bool relative=position.relative;
-                                                               real position=position.position.x;
-                                                               if(relative) position=reltime(g,position);
-                                                               path r=subpath(g,position,0);
-                                                               pair x=point(r,0);
-                                                               real t=arctime(r,size);
-                                                               pair y=point(r,t);
-                                                               path base=arrowbase(r,y,t,size);
-                                                               path left=rotate(-angle,x)*r;
-                                                               path right=rotate(angle,x)*r;
-                                                               real[] T=arrowbasepoints(base,left,right);
-                                                               pair denom=point(right,T[1])-y;
-                                                               real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
-                                                               path left=rotate(-angle*factor,x)*r;
-                                                               path right=rotate(angle*factor,x)*r;
-                                                               real[] T=arrowbasepoints(base,left,right);
-                                                               return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle;
+  if(size == 0) size=DefaultHead.size(p);
+  bool relative=position.relative;
+  real position=position.position.x;
+  if(relative) position=reltime(g,position);
+  path r=subpath(g,position,0);
+  pair x=point(r,0);
+  real t=arctime(r,size);
+  pair y=point(r,t);
+  path base=arrowbase(r,y,t,size);
+  path left=rotate(-angle,x)*r;
+  path right=rotate(angle,x)*r;
+  real[] T=arrowbasepoints(base,left,right);
+  pair denom=point(right,T[1])-y;
+  real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
+  path left=rotate(-angle*factor,x)*r;
+  path right=rotate(angle*factor,x)*r;
+  real[] T=arrowbasepoints(base,left,right);
+  return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle;
 };
 
 arrowhead SimpleHead;
 SimpleHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
                          real size=0, real angle=arrowangle) {
-                                                              if(size == 0) size=SimpleHead.size(p);
-                                                              bool relative=position.relative;
-                                                              real position=position.position.x;
-                                                              if(relative) position=reltime(g,position);
-                                                              path r=subpath(g,position,0);
-                                                              pair x=point(r,0);
-                                                              real t=arctime(r,size);
-                                                              path left=rotate(-angle,x)*r;
-                                                              path right=rotate(angle,x)*r;
-                                                              return subpath(left,t,0)--subpath(right,0,t);
+  if(size == 0) size=SimpleHead.size(p);
+  bool relative=position.relative;
+  real position=position.position.x;
+  if(relative) position=reltime(g,position);
+  path r=subpath(g,position,0);
+  pair x=point(r,0);
+  real t=arctime(r,size);
+  path left=rotate(-angle,x)*r;
+  path right=rotate(angle,x)*r;
+  return subpath(left,t,0)--subpath(right,0,t);
 };
 
 arrowhead HookHead(real dir=arrowdir, real barb=arrowbarb)
@@ -94,34 +94,34 @@
   a.head=new path(path g, position position=EndPoint, pen p=currentpen,
                   real size=0, real angle=arrowangle)
     {
-     if(size == 0) size=a.size(p);
-     angle=min(angle*arrowhookfactor,45);
-     bool relative=position.relative;
-     real position=position.position.x;
-     if(relative) position=reltime(g,position);
-     path r=subpath(g,position,0);
-     pair x=point(r,0);
-     real t=arctime(r,size);
-     pair y=point(r,t);
-     path base=arrowbase(r,y,t,size);
-     path left=rotate(-angle,x)*r;
-     path right=rotate(angle,x)*r;
-     real[] T=arrowbasepoints(base,left,right,1);
-     pair denom=point(right,T[1])-y;
-     real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
-     path left=rotate(-angle*factor,x)*r;
-     path right=rotate(angle*factor,x)*r;
-     real[] T=arrowbasepoints(base,left,right,1);
-     left=subpath(left,0,T[0]);
-     right=subpath(right,T[1],0);
-     pair pl0=point(left,0), pl1=relpoint(left,1);
-     pair pr0=relpoint(right,0), pr1=relpoint(right,1);
-     pair M=(pl1+pr0)/2;
-     pair v=barb*unit(M-pl0);
-     pl1=pl1+v; pr0=pr0+v;
-     left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M;
-     right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))};
-     return left--right&cycle;
+      if(size == 0) size=a.size(p);
+      angle=min(angle*arrowhookfactor,45);
+      bool relative=position.relative;
+      real position=position.position.x;
+      if(relative) position=reltime(g,position);
+      path r=subpath(g,position,0);
+      pair x=point(r,0);
+      real t=arctime(r,size);
+      pair y=point(r,t);
+      path base=arrowbase(r,y,t,size);
+      path left=rotate(-angle,x)*r;
+      path right=rotate(angle,x)*r;
+      real[] T=arrowbasepoints(base,left,right,1);
+      pair denom=point(right,T[1])-y;
+      real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
+      path left=rotate(-angle*factor,x)*r;
+      path right=rotate(angle*factor,x)*r;
+      real[] T=arrowbasepoints(base,left,right,1);
+      left=subpath(left,0,T[0]);
+      right=subpath(right,T[1],0);
+      pair pl0=point(left,0), pl1=relpoint(left,1);
+      pair pr0=relpoint(right,0), pr1=relpoint(right,1);
+      pair M=(pl1+pr0)/2;
+      pair v=barb*unit(M-pl0);
+      pl1=pl1+v; pr0=pr0+v;
+      left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M;
+      right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))};
+      return left--right&cycle;
     };
   return a;
 }
@@ -130,34 +130,34 @@
 arrowhead TeXHead;
 TeXHead.size=new real(pen p)
   {
-   static real hcoef=2.1; // 84/40=abs(base-hint)/base_height
-   return hcoef*arrowtexfactor*linewidth(p);
+    static real hcoef=2.1; // 84/40=abs(base-hint)/base_height
+    return hcoef*arrowtexfactor*linewidth(p);
   };
 TeXHead.arcsize=TeXHead.size;
 
 TeXHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
                       real size=0, real angle=arrowangle) {
-                                                           static real wcoef=1/84; // 1/abs(base-hint)
-                                                           static path texhead=scale(wcoef)*
-                                                           ((0,20)     .. controls (-75,75)    and (-108,158) ..
-                                                            (-108,166) .. controls (-108,175)  and (-100,178) ..
-                                                            (-93,178)  .. controls (-82,178)   and (-80,173)  ..
-                                                            (-77,168)  .. controls (-62,134)   and (-30,61)   ..
-                                                            (70,14)    .. controls (82,8)      and (84,7)     ..
-                                                            (84,0)     .. controls (84,-7)     and (82,-8)    ..
-                                                            (70,-14)   .. controls (-30,-61)   and (-62,-134) ..
-                                                            (-77,-168) .. controls (-80,-173)  and (-82,-178) ..
-                                                            (-93,-178) .. controls (-100,-178) and (-108,-175)..
-                                                            (-108,-166).. controls (-108,-158) and (-75,-75)  ..
-                                                            (0,-20)--cycle);
-                                                           if(size == 0) size=TeXHead.size(p);
-                                                           path gp=scale(size)*texhead;
-                                                           bool relative=position.relative;
-                                                           real position=position.position.x;
-                                                           if(relative) position=reltime(g,position);
-                                                           path r=subpath(g,position,0);
-                                                           pair y=point(r,arctime(r,size));
-                                                           return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size))))*gp;
+  static real wcoef=1/84; // 1/abs(base-hint)
+  static path texhead=scale(wcoef)*
+  ((0,20)     .. controls (-75,75)    and (-108,158) ..
+   (-108,166) .. controls (-108,175)  and (-100,178) ..
+   (-93,178)  .. controls (-82,178)   and (-80,173)  ..
+   (-77,168)  .. controls (-62,134)   and (-30,61)   ..
+   (70,14)    .. controls (82,8)      and (84,7)     ..
+   (84,0)     .. controls (84,-7)     and (82,-8)    ..
+   (70,-14)   .. controls (-30,-61)   and (-62,-134) ..
+   (-77,-168) .. controls (-80,-173)  and (-82,-178) ..
+   (-93,-178) .. controls (-100,-178) and (-108,-175)..
+   (-108,-166).. controls (-108,-158) and (-75,-75)  ..
+   (0,-20)--cycle);
+  if(size == 0) size=TeXHead.size(p);
+  path gp=scale(size)*texhead;
+  bool relative=position.relative;
+  real position=position.position.x;
+  if(relative) position=reltime(g,position);
+  path r=subpath(g,position,0);
+  pair y=point(r,arctime(r,size));
+  return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size)),false))*gp;
 };
 TeXHead.defaultfilltype=new filltype(pen p) {return Fill(p);};
 

Modified: trunk/Master/texmf-dist/asymptote/plain_pens.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_pens.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/plain_pens.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,4 +1,4 @@
-real labelmargin=0.3;
+real labelmargin=0.28;
 real dotfactor=6;
 
 pen solid=linetype(new real[]);
@@ -173,7 +173,7 @@
 
 real labelmargin(pen p=currentpen)
 {
-  return labelmargin*fontsize(p);
+  return labelmargin*fontsize(p)+0.5*linewidth(p);
 }
 
 void write(file file=stdout, string s="", pen[] p)

Modified: trunk/Master/texmf-dist/asymptote/rationalSimplex.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/rationalSimplex.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/rationalSimplex.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,9 +1,14 @@
 // Rational simplex solver written by John C. Bowman and Pouria Ramazi, 2018.
 import rational;
 
+bool optimizeTableau=true;
+
+int[] artificialColumn;
+
 void simplexInit(rational[] c, rational[][] A, int[] s=new int[],
                  rational[] b, int count) {}
-void simplexTableau(rational[][] E, int[] Bindices, int I=-1, int J=-1) {}
+void simplexTableau(rational[][] E, int[] Bindices, int I=-1, int J=-1,
+                    int n=E[0].length-1) {}
 void simplexPhase1(rational[] c, rational[][] A, rational[] b,
                    int[] Bindices) {}
 void simplexPhase2() {}
@@ -71,7 +76,7 @@
     }
   }
 
-  int iterate(rational[][] E, int N, int[] Bindices) {
+  int iterate(rational[][] E, int N, int[] Bindices, bool phase1=false) {
     while(true) {
       // Bland's rule: first negative entry in reduced cost (bottom) row enters
       rational[] Em=E[m];
@@ -108,11 +113,13 @@
       // Generate new tableau
       Bindices[I]=J;
       rowreduce(E,N,I,J);
+
+      if(phase1 && Em[0] == 0) break;
     }
     return OPTIMAL;
   }
 
-  int iterateDual(rational[][] E, int N, int[] Bindices) {
+  int iterateDual(rational[][] E, int N, int[] Bindices, bool phase1=false) {
     while(true) {
       // Bland's rule: negative variable with smallest subscript exits
       int I;
@@ -211,30 +218,31 @@
 
     if(phase1) {
       Bindices=new int[m];
-      int p=0;
+      int k=0;
 
+      artificialColumn.delete();
       // Check for redundant basis vectors.
-      bool checkBasis(int j) {
-        for(int i=0; i < m; ++i) {
-          rational[] Ei=E[i];
-          if(i != p ? Ei[j] != 0 : Ei[j] <= 0) return false;
+      for(int p=0; p < m; ++p) {
+        bool checkBasis(int j) {
+          for(int i=0; i < m; ++i) {
+            rational[] Ei=E[i];
+            if(i != p ? Ei[j] != 0 : Ei[j] <= 0)
+              return false;
+          }
+          return true;
         }
-        return true;
-      }
 
-      int checkTableau() {
-        for(int j=1; j <= n; ++j)
-          if(checkBasis(j)) return j;
-        return 0;
-      }
+        int checkTableau() {
+          if(optimizeTableau)
+            for(int j=1; j <= n; ++j)
+              if(checkBasis(j)) return j;
+          return 0;
+        }
 
-      int k=0;
-      while(p < m) {
         int j=checkTableau();
-        if(j > 0)
-          Bindices[p]=j;
-        else { // Add an artificial variable
-          Bindices[p]=n+1+k;
+        Bindices[p]=n+1+p;
+        if(j == 0) { // Add an artificial variable
+          artificialColumn.push(p+1);
           for(int i=0; i < p; ++i)
             E[i].push(0);
           E[p].push(1);
@@ -243,7 +251,6 @@
           E[m].push(0);
           ++k;
         }
-        ++p;
       }
 
       basicValues();
@@ -250,7 +257,7 @@
 
       simplexPhase1(c,A,b,Bindices);
 
-      iterate(E,n+k,Bindices);
+      iterate(E,n+k,Bindices,true);
 
       if(Em[0] != 0) {
         simplexTableau(E,Bindices);
@@ -265,23 +272,22 @@
     rational[] cB=phase1 ? new rational[m] : c[n-m:n];
     rational[][] D=phase1 ? new rational[m+1][n+1] : E;
     if(phase1) {
-      bool output=true;
+      write("n=",n);
+      write(Bindices);
       // Drive artificial variables out of basis.
       for(int i=0; i < m; ++i) {
-        int k=Bindices[i];
-        if(k > n) {
+        if(Bindices[i] > n) {
           rational[] Ei=E[i];
           int j;
           for(j=1; j <= n; ++j)
             if(Ei[j] != 0) break;
           if(j > n) continue;
-          output=false;
-          simplexTableau(E,Bindices,i,j);
+          simplexTableau(E,Bindices,i,j,n);
           Bindices[i]=j;
           rowreduce(E,n,i,j);
         }
       }
-      if(output) simplexTableau(E,Bindices);
+      simplexTableau(E,Bindices,-1,-1,n);
       int ip=0; // reduced i
       for(int i=0; i < m; ++i) {
         int k=Bindices[i];
@@ -307,7 +313,6 @@
         D.delete(ip,m-1);
         m=ip;
       }
-      if(!output) simplexTableau(D,Bindices);
     }
 
     rational[] Dm=D[m];
@@ -335,6 +340,8 @@
 
       for(int k=0; k < m; ++k)
         x[Bindices[k]-1]=D[k][0];
+
+      xStandard=copy(x);
     }
 
     if(case == UNBOUNDED) {
@@ -414,10 +421,7 @@
     simplexInit(C,a,b,count);
     operator init(C,a,b,phase1);
 
-    if(case != INFEASIBLE) {
-      xStandard=copy(x);
-      if(count > 0)
-        x.delete(n,n+count-1);
-    }
+    if(case != INFEASIBLE && count > 0)
+      x.delete(n,n+count-1);
   }
 }

Modified: trunk/Master/texmf-dist/asymptote/shaders/blend.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/blend.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/blend.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,34 +1,22 @@
-layout(binding=0, std430) buffer offsetBuffer {
+layout(binding=0, std430) buffer offsetBuffer
+{
+  uint maxDepth;
   uint offset[];
 };
 
-layout(binding=1, std430) buffer maxBuffer {
+layout(binding=2, std430) buffer countBuffer
+{
   uint maxSize;
-};
-
-#ifdef GPUINDEXING
-uniform uint offset2;
-uniform uint m1;
-uniform uint r;
-
-layout(binding=2, std430) buffer localSumBuffer {
-  uint localSum[];
-};
-
-layout(binding=3, std430) buffer globalSumBuffer {
-  uint globalSum[];
-};
-#else
-layout(binding=2, std430) buffer countBuffer {
   uint count[];
 };
-#endif
 
-layout(binding=4, std430) buffer fragmentBuffer {
+layout(binding=4, std430) buffer fragmentBuffer
+{
   vec4 fragment[];
 };
 
-layout(binding=5, std430) buffer depthBuffer {
+layout(binding=5, std430) buffer depthBuffer
+{
   float depth[];
 };
 
@@ -40,10 +28,21 @@
   float opaqueDepth[];
 };
 
+#ifdef GPUCOMPRESS
+layout(binding=1, std430) buffer indexBuffer
+{
+  uint index[];
+};
+#define INDEX(pixel) index[pixel]
+#define COUNT(pixel) index[pixel]
+#else
+#define INDEX(pixel) pixel
+#define COUNT(pixel) count[pixel]
+#endif
+
 out vec4 outColor;
 
 uniform uint width;
-uniform uint pixels;
 uniform vec4 background;
 
 vec4 blend(vec4 outColor, vec4 color)
@@ -53,29 +52,37 @@
 
 void main()
 {
-  uint headIndex=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+  uint pixel=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+  float OpaqueDepth=opaqueDepth[pixel];
+  uint element=INDEX(pixel);
+
+#ifdef GPUCOMPRESS
+  if(element == 0u) {
+   if(OpaqueDepth != 0.0)
+      opaqueDepth[pixel]=0.0;
+    discard;
+  }
+#endif
+
 #ifdef GPUINDEXING
-  uint size=offset[headIndex];
+  uint listIndex=offset[element];
+  uint size=offset[element+1u]-listIndex;
 #else
-  uint size=count[headIndex];
+  uint size=count[element];
 #endif
-  float OpaqueDepth=opaqueDepth[headIndex];
+
+#ifndef GPUCOMPRESS
   if(size == 0u) {
-#ifdef GPUINDEXING
-    offset[pixels+headIndex]=0u;
-#endif
-    opaqueDepth[headIndex]=0.0;
+    if(OpaqueDepth != 0.0)
+      opaqueDepth[pixel]=0.0;
     discard;
   }
+#endif
 
-  outColor=OpaqueDepth != 0.0 ? opaqueColor[headIndex] : background;
+  outColor=OpaqueDepth != 0.0 ? opaqueColor[pixel] : background;
 
-#ifdef GPUINDEXING
-  uint p=headIndex < r*(m1+1u) ? headIndex/(m1+1u) : (headIndex-r)/m1;
-  uint listIndex=localSum[p]+localSum[offset2+p/m2]+globalSum[p/(m2*m2)]+
-    offset[pixels+headIndex];
-#else
-  uint listIndex=offset[headIndex]-size;
+#ifndef GPUINDEXING
+  uint listIndex=offset[element]-size;
 #endif
 
   uint k=0u;
@@ -83,36 +90,49 @@
     while(k < size && depth[listIndex+k] >= OpaqueDepth)
       ++k;
 
+  uint n=size-k;
+
   // Sort the fragments with respect to descending depth
-  if(size-k <= ARRAYSIZE) {
-    if(k < size) {
-      uint Index[ARRAYSIZE];
-      float Depth[ARRAYSIZE];
-      Index[0]=k;
-      Depth[0]=depth[listIndex+k];
-      ++k;
+  if(n <= ARRAYSIZE) {
+    if(n == 1)
+      outColor=blend(outColor,fragment[listIndex+k]);
+    else if(n > 0) {
+      struct element {
+        uint index;
+        float depth;
+      };
+
+      element E[ARRAYSIZE];
+      E[0]=element(k,depth[listIndex+k]);
       uint i=1u;
-      while(true) {
-        if(OpaqueDepth != 0.0)
-          while(k < size && depth[listIndex+k] >= OpaqueDepth)
+      while(++k < size) {
+        float d=depth[listIndex+k];
+        if(OpaqueDepth != 0.0) {
+          while(k < size && d >= OpaqueDepth) {
             ++k;
-        if(k == size) break;
-        float d=depth[listIndex+k];
+            d=depth[listIndex+k];
+          }
+          if(k == size) break;
+        }
         uint j=i;
-        while(j > 0u && d > Depth[j-1u]) {
-          Index[j]=Index[j-1u];
-          Depth[j]=Depth[j-1u];
+        while(j > 0u && d > E[j-1u].depth) {
+          E[j]=E[j-1u];
           --j;
         }
-        Index[j]=k++;
-        Depth[j]=d;
+        E[j]=element(k,d);
         ++i;
       }
       for(uint j=0u; j < i; ++j)
-        outColor=blend(outColor,fragment[listIndex+Index[j]]);
+        outColor=blend(outColor,fragment[listIndex+E[j].index]);
     }
+
+    if(OpaqueDepth != 0.0)
+      opaqueDepth[pixel]=0.0;
   } else {
-    atomicMax(maxSize,size);
+    atomicMax(maxDepth,size);
+#ifndef GPUINDEXING
+    maxSize=maxDepth;
+#endif
     for(uint i=k+1u; i < size; i++) {
       vec4 temp=fragment[listIndex+i];
       float d=depth[listIndex+i];
@@ -130,19 +150,14 @@
     if(OpaqueDepth == 0.0)
       for(uint i=listIndex+k; i < stop; i++)
         outColor=blend(outColor,fragment[i]);
-    else
+    else {
       for(uint i=listIndex+k; i < stop; i++) {
         if(depth[i] < OpaqueDepth)
           outColor=blend(outColor,fragment[i]);
       }
+      opaqueDepth[pixel]=0.0;
+    }
   }
 
-
-  opaqueDepth[headIndex]=0.0;
-#ifdef GPUINDEXING
-  offset[headIndex]=0u;
-  offset[pixels+headIndex]=0u;
-#else
-  count[headIndex]=0u;
-#endif
+  COUNT(pixel)=0u;
 }

Added: trunk/Master/texmf-dist/asymptote/shaders/compress.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/compress.glsl	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/shaders/compress.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -0,0 +1,23 @@
+layout(binding=0) uniform atomic_uint elements;
+
+layout(binding=1, std430) buffer indexBuffer
+{
+  uint index[];
+};
+
+layout(binding=2, std430) buffer countBuffer
+{
+  uint maxSize;
+  uint count[];
+};
+
+uniform uint width;
+
+void main()
+{
+  uint pixel=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+  uint Count=index[pixel];
+  if(Count > 0u)
+    count[(index[pixel]=atomicCounterIncrement(elements))]=Count;
+  discard;
+}


Property changes on: trunk/Master/texmf-dist/asymptote/shaders/compress.glsl
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/texmf-dist/asymptote/shaders/count.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/count.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/count.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,10 +1,13 @@
-#ifdef GPUINDEXING
-layout(binding=0, std430) buffer offsetBuffer {
-  uint count[];
+#ifdef GPUCOMPRESS
+layout(binding=1, std430) buffer indexBuffer
+{
+  uint index[];
 };
 #else
-layout(binding=2, std430) buffer countBuffer {
-  uint count[];
+layout(binding=2, std430) buffer countBuffer
+{
+  uint maxSize;
+  uint index[];
 };
 #endif
 
@@ -12,6 +15,6 @@
 
 void main()
 {
-  atomicAdd(count[uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x)],1u);
+  atomicAdd(index[uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x)],1u);
   discard;
 }

Modified: trunk/Master/texmf-dist/asymptote/shaders/fragment.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/fragment.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/fragment.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -30,49 +30,51 @@
 
 #ifdef HAVE_SSBO
 
-layout(binding=0, std430) buffer offsetBuffer {
+layout(binding=0, std430) buffer offsetBuffer
+{
+  uint maxDepth;
   uint offset[];
 };
 
-#ifdef GPUINDEXING
-
-#if defined(TRANSPARENT) || (!defined(HAVE_INTERLOCK) && !defined(OPAQUE))
-uniform uint offset2;
-uniform uint m1;
-uniform uint r;
-#endif
-
-layout(binding=2, std430) buffer localSumBuffer {
-  uint localSum[];
-};
-
-layout(binding=3, std430) buffer globalSumBuffer {
-  uint globalSum[];
-};
-#else
-layout(binding=2, std430) buffer countBuffer {
+#ifndef GPUINDEXING
+layout(binding=2, std430) buffer countBuffer
+{
+  uint maxSize;
   uint count[];
 };
 #endif
 
-layout(binding=4, std430) buffer fragmentBuffer {
+layout(binding=4, std430) buffer fragmentBuffer
+{
   vec4 fragment[];
 };
 
-layout(binding=5, std430) buffer depthBuffer {
+layout(binding=5, std430) buffer depthBuffer
+{
   float depth[];
 };
 
-layout(binding=6, std430) buffer opaqueBuffer {
+layout(binding=6, std430) buffer opaqueBuffer
+{
   vec4 opaqueColor[];
 };
 
-layout(binding=7, std430) buffer opaqueDepthBuffer {
+layout(binding=7, std430) buffer opaqueDepthBuffer
+{
   float opaqueDepth[];
 };
 
+#ifdef GPUCOMPRESS
+layout(binding=1, std430) buffer indexBuffer
+{
+  uint index[];
+};
+#define INDEX(pixel) index[pixel]
+#else
+#define INDEX(pixel) pixel
+#endif
+
 uniform uint width;
-uniform uint pixels;
 
 #endif
 
@@ -272,14 +274,13 @@
 
 #ifndef WIDTH
 #ifdef HAVE_SSBO
-  uint headIndex=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+  uint pixel=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
 #if defined(TRANSPARENT) || (!defined(HAVE_INTERLOCK) && !defined(OPAQUE))
+  uint element=INDEX(pixel);
 #ifdef GPUINDEXING
-  uint p=headIndex < r*(m1+1u) ? headIndex/(m1+1u) : (headIndex-r)/m1;
-  uint listIndex=localSum[p]+localSum[offset2+p/m2]+globalSum[p/(m2*m2)]+
-    atomicAdd(offset[pixels+headIndex],-1u)-1u;
+  uint listIndex=atomicAdd(offset[element],-1u)-1u;
 #else
-  uint listIndex=offset[headIndex]-atomicAdd(count[headIndex],1u)-1u;
+  uint listIndex=offset[element]-atomicAdd(count[element],1u)-1u;
 #endif
   fragment[listIndex]=outColor;
   depth[listIndex]=gl_FragCoord.z;
@@ -287,13 +288,12 @@
   discard;
 #endif
 #else
-#ifndef OPAQUE
-#ifdef HAVE_INTERLOCK
+#if defined(HAVE_INTERLOCK) && !defined(OPAQUE)
   beginInvocationInterlockARB();
-  if(opaqueDepth[headIndex] == 0.0 || gl_FragCoord.z < opaqueDepth[headIndex])
+  if(opaqueDepth[pixel] == 0.0 || gl_FragCoord.z < opaqueDepth[pixel])
     {
-    opaqueDepth[headIndex]=gl_FragCoord.z;
-    opaqueColor[headIndex]=outColor;
+    opaqueDepth[pixel]=gl_FragCoord.z;
+    opaqueColor[pixel]=outColor;
   }
   endInvocationInterlockARB();
 #endif
@@ -300,5 +300,4 @@
 #endif
 #endif
 #endif
-#endif
 }

Modified: trunk/Master/texmf-dist/asymptote/shaders/sum1.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/sum1.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/sum1.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,38 +1,40 @@
-layout(local_size_x=LOCAL_SIZE_X) in;
+layout(local_size_x=LOCALSIZE) in;
 
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
+
 uniform uint elements;
 
-layout(binding=0, std430) buffer offsetBuffer
+layout(binding=2, std430) buffer countBuffer
 {
-  uint offset[];
+  uint maxSize;
+  uint count[];
 };
 
-layout(binding=2, std430) buffer localSumBuffer
+layout(binding=3, std430) buffer globalSumBuffer
 {
-  uint localSum[];
+  uint globalSum[];
 };
 
-void main(void)
+shared uint groupSum[LOCALSIZE];
+
+void main()
 {
-  uint id=gl_GlobalInvocationID.x;
+  uint id=gl_LocalInvocationID.x;
+  uint dataOffset=gl_WorkGroupID.x*groupSize+id;
+  uint stop=dataOffset+groupSize;
+  uint sum=0u;
+  for(uint i=dataOffset; i < stop; i += LOCALSIZE)
+    sum += count[i];
 
-  uint m=elements/(gl_WorkGroupSize.x*gl_NumWorkGroups.x);
-  uint r=elements-m*gl_WorkGroupSize.x*gl_NumWorkGroups.x;
-  uint row,stop;
-  if(id < r) {
-    row=m*id+id;
-    stop=row+m+1u;
-  } else {
-    row=m*id+r;
-    stop=row+m;
-  }
+  groupSum[id]=sum;
+  barrier();
 
-  uint Sum=offset[row];
-  offset[elements+row]=Sum;
-  for(uint i=row+1u; i < stop; ++i) {
-    Sum += offset[i];
-    offset[elements+i]=Sum;
+  for(uint s=LOCALSIZE/2; s > 0u; s >>= 1u) {
+    if(id < s)
+      groupSum[id] += groupSum[id+s];
+    barrier();
   }
 
-  localSum[id+1u]=Sum;
+  if(id == 0u)
+    globalSum[gl_WorkGroupID.x]=groupSum[0u];
 }

Modified: trunk/Master/texmf-dist/asymptote/shaders/sum2.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/sum2.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/sum2.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,24 +1,43 @@
-layout(local_size_x=LOCAL_SIZE_X) in;
+layout(local_size_x=LOCALSIZE) in;
 
-uniform uint offset2;
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
 
-layout(binding=2, std430) buffer localSumBuffer
+uniform uint blockSize;
+
+layout(binding=3, std430) buffer globalSumBuffer
 {
-  uint localSum[];
+  uint globalSum[];
 };
 
-void main(void)
+shared uint groupSum[LOCALSIZE];
+
+void main()
 {
-  uint id=gl_GlobalInvocationID.x;
+  uint localSum[groupSize];
+  uint id=gl_LocalInvocationID.x;
 
-  uint row=LOCAL_SIZE_X*id;
-  uint stop=row+LOCAL_SIZE_X;
+  uint dataOffset=blockSize*id;
+  uint sum=0u;
+  for(uint i=0; i < blockSize; ++i) {
+    localSum[i]=sum;
+    sum += globalSum[dataOffset+i];
+  }
 
-  uint Sum=localSum[row];
-  for(uint i=row+1u; i < stop; ++i) {
-    Sum += localSum[i];
-    localSum[i]=Sum;
+  groupSum[id]=sum;
+  barrier();
+
+  for(uint shift=1u; shift < LOCALSIZE; shift *= 2u) {
+    uint read;
+    if(shift <= id)
+      read=groupSum[id]+groupSum[id-shift];
+    barrier();
+    if(shift <= id)
+      groupSum[id]=read;
+    barrier();
   }
 
-  localSum[offset2+id+1u]=Sum;
+  // shift local sums and store
+  uint shift=id > 0u ? groupSum[id-1u] : 0u;
+  for(uint i=0u; i < blockSize; ++i)
+    globalSum[dataOffset+i]=localSum[i]+shift;
 }

Added: trunk/Master/texmf-dist/asymptote/shaders/sum2fast.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/sum2fast.glsl	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/shaders/sum2fast.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -0,0 +1,59 @@
+layout(local_size_x=LOCALSIZE) in;
+
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
+
+layout(binding=3, std430) buffer globalSumBuffer
+{
+  uint globalSum[];
+};
+
+layout(binding=8, std430) buffer feedbackBuffer
+{
+  uint maxSize;
+  uint fragments;
+};
+
+shared uint shuffle[groupSize+LOCALSIZE-1u];
+shared uint groupSum[LOCALSIZE+1u];
+
+void main()
+{
+  uint id=gl_LocalInvocationID.x;
+
+// avoid bank conflicts and coalesce global memory accesses
+  uint shuffleOffset=id/BLOCKSIZE+id;
+  const uint stride=LOCALSIZE/BLOCKSIZE+LOCALSIZE;
+  for(uint i=0u; i < BLOCKSIZE; i++)
+    shuffle[shuffleOffset+i*stride]=globalSum[id+i*LOCALSIZE];
+
+  barrier();
+
+  uint Offset=id*BLOCKSIZE+id;
+  uint stop=Offset+BLOCKSIZE;
+  uint sum=0u;
+  for(uint i=Offset; i < stop; ++i) {
+    uint value=shuffle[i];
+    shuffle[i]=sum;
+    sum += value;
+  }
+
+  if(id == 0u)
+    groupSum[0u]=0u;
+  groupSum[id+1u]=sum;
+  barrier();
+
+  // Apply Hillis-Steele algorithm over all sums in workgroup
+  for(uint shift=1u; shift < LOCALSIZE; shift *= 2u) {
+    uint read;
+    if(shift <= id)
+      read=groupSum[id]+groupSum[id-shift];
+    barrier();
+    if(shift <= id)
+      groupSum[id]=read;
+    barrier();
+  }
+
+  for(uint i=0u; i < BLOCKSIZE; i++)
+    globalSum[id+i*LOCALSIZE]=
+      shuffle[shuffleOffset+i*stride]+groupSum[(i*LOCALSIZE+id)/BLOCKSIZE];
+}


Property changes on: trunk/Master/texmf-dist/asymptote/shaders/sum2fast.glsl
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/texmf-dist/asymptote/shaders/sum3.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/sum3.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/sum3.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,28 +1,80 @@
-layout(local_size_x=LOCAL_SIZE_X) in;
+layout(local_size_x=LOCALSIZE) in;
 
-uniform uint offset2;
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
 
-layout(binding=2, std430) buffer localSumBuffer
+uniform uint final;
+
+layout(binding=0, std430) buffer offsetBuffer
 {
-  uint localSum[];
+  uint maxDepth;
+  uint offset[];
 };
 
-layout(binding=3, std430) buffer globalSumBuffer {
+layout(binding=2, std430) buffer countBuffer
+{
+  uint maxSize;
+  uint count[];
+};
+
+layout(binding=3, std430) buffer globalSumBuffer
+{
   uint globalSum[];
 };
 
-void main(void)
+layout(binding=8, std430) buffer feedbackBuffer
 {
-  uint id=gl_GlobalInvocationID.x;
+  uint size;
+  uint fragments;
+};
 
-  uint row=offset2+LOCAL_SIZE_X*id;
-  uint stop=row+LOCAL_SIZE_X;
+shared uint shuffle[groupSize+LOCALSIZE-1u];
+shared uint groupSum[LOCALSIZE+1u];
 
-  uint Sum=localSum[row];
-  for(uint i=row+1u; i < stop; ++i) {
-    Sum += localSum[i];
-    localSum[i]=Sum;
+void main()
+{
+  uint id=gl_LocalInvocationID.x;
+
+// avoid bank conflicts and coalesce global memory accesses
+  uint dataOffset=gl_WorkGroupID.x*groupSize+id;
+  uint shuffleOffset=id/BLOCKSIZE+id;
+  const uint stride=LOCALSIZE/BLOCKSIZE+LOCALSIZE;
+  for(uint i=0u; i < BLOCKSIZE; i++)
+    shuffle[shuffleOffset+i*stride]=count[dataOffset+i*LOCALSIZE];
+
+  barrier();
+
+  uint Offset=id*BLOCKSIZE+id;
+  uint stop=Offset+BLOCKSIZE;
+
+  uint sum=0u;
+  for(uint i=Offset; i < stop; ++i)
+    shuffle[i]=sum += shuffle[i];
+
+  if(id == 0u)
+    groupSum[0u]=0u;
+  groupSum[id+1u]=sum;
+  barrier();
+
+  // Apply Hillis-Steele algorithm over all sums in workgroup
+  for(uint shift=1u; shift < LOCALSIZE; shift *= 2u) {
+    uint read;
+    if(shift <= id)
+      read=groupSum[id]+groupSum[id-shift];
+    barrier();
+    if(shift <= id)
+      groupSum[id]=read;
+    barrier();
   }
 
-  globalSum[id+1u]=Sum;
+  uint groupOffset=globalSum[gl_WorkGroupID.x];
+  for(uint i=0u; i < BLOCKSIZE; ++i)
+    offset[dataOffset+i*LOCALSIZE]=shuffle[shuffleOffset+i*stride]+
+      groupSum[(i*LOCALSIZE+id)/BLOCKSIZE]+groupOffset;
+
+  uint diff=final-dataOffset;
+  if(diff < groupSize && diff % LOCALSIZE == 0) {
+    size=maxDepth;
+    maxDepth=0u;
+    fragments=offset[final+1u]=offset[final];
+  }
 }

Modified: trunk/Master/texmf-dist/asymptote/shaders/zero.glsl
===================================================================
--- trunk/Master/texmf-dist/asymptote/shaders/zero.glsl	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/shaders/zero.glsl	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,4 +1,6 @@
-layout(binding=2, std430) buffer countBuffer {
+layout(binding=2, std430) buffer countBuffer
+{
+  uint maxSize;
   uint count[];
 };
 

Modified: trunk/Master/texmf-dist/asymptote/simplex.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/simplex.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/simplex.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -42,7 +42,7 @@
     }
   }
 
-  int iterate(real[][] E, int N, int[] Bindices) {
+  int iterate(real[][] E, int N, int[] Bindices, bool phase1=false) {
     while(true) {
       // Bland's rule: first negative entry in reduced cost (bottom) row enters
       real[] Em=E[m];
@@ -77,11 +77,13 @@
       // Generate new tableau
       Bindices[I]=J;
       rowreduce(E,N,I,J);
+
+      if(phase1 && abs(Em[0]) <= EpsilonA) break;
     }
     return OPTIMAL;
   }
 
-  int iterateDual(real[][] E, int N, int[] Bindices) {
+  int iterateDual(real[][] E, int N, int[] Bindices, bool phase1=false) {
     while(true) {
       // Bland's rule: negative variable with smallest subscript exits
       int I;
@@ -182,30 +184,28 @@
 
     if(phase1) {
       Bindices=new int[m];
-      int p=0;
+      int k=0;
 
       // Check for redundant basis vectors.
-      bool checkBasis(int j) {
-        for(int i=0; i < m; ++i) {
-          real[] Ei=E[i];
-          if(i != p ? abs(Ei[j]) >= epsilonA : Ei[j] <= epsilonA) return false;
+      for(int p=0; p < m; ++p) {
+        bool checkBasis(int j) {
+          for(int i=0; i < m; ++i) {
+            real[] Ei=E[i];
+            if(i != p ? abs(Ei[j]) >= epsilonA : Ei[j] <= epsilonA)
+              return false;
+          }
+          return true;
         }
-        return true;
-      }
 
-      int checkTableau() {
-        for(int j=1; j <= n; ++j)
-          if(checkBasis(j)) return j;
-        return 0;
-      }
+        int checkTableau() {
+          for(int j=1; j <= n; ++j)
+            if(checkBasis(j)) return j;
+          return 0;
+        }
 
-      int k=0;
-      while(p < m) {
         int j=checkTableau();
-        if(j > 0)
-          Bindices[p]=j;
-        else { // Add an artificial variable
-          Bindices[p]=n+1+k;
+        Bindices[p]=n+1+p;
+        if(j == 0) { // Add an artificial variable
           for(int i=0; i < p; ++i)
             E[i].push(0.0);
           E[p].push(1.0);
@@ -214,12 +214,12 @@
           E[m].push(0.0);
           ++k;
         }
-        ++p;
       }
 
       basicValues();
-      iterate(E,n+k,Bindices);
 
+      iterate(E,n+k,Bindices,true);
+
       if(abs(Em[0]) > EpsilonA) {
       case=INFEASIBLE;
       return;
@@ -234,8 +234,7 @@
     if(phase1) {
       // Drive artificial variables out of basis.
       for(int i=0; i < m; ++i) {
-        int k=Bindices[i];
-        if(k > n) {
+        if(Bindices[i] > n) {
           real[] Ei=E[i];
           int j;
           for(j=1; j <= n; ++j)

Modified: trunk/Master/texmf-dist/asymptote/slopefield.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/slopefield.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/slopefield.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -3,7 +3,7 @@
 
 picture slopefield(real f(real,real), pair a, pair b,
                    int nx=nmesh, int ny=nx,
-                   real tickfactor=0.5, pen p=currentpen, arrowbar arrow=None)
+                   real tickfactor=0.5, pen p=currentpen)
 {
   picture pic;
   real dx=(b.x-a.x)/nx;
@@ -16,7 +16,7 @@
       pair cp=(x,a.y+j*dy);
       real slope=f(cp.x,cp.y);
       real mp=step/sqrt(1+slope^2);
-      draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p,arrow);
+      draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p);
     }
   }
   return pic;
@@ -23,10 +23,9 @@
 }
 
 picture slopefield(real f(real), pair a, pair b,
-                   int nx=nmesh, int ny=nx, pen p=currentpen,
-		   arrowbar arrow=None)
+                   int nx=nmesh, int ny=nx, pen p=currentpen)
 {
-  return slopefield(new real(real x, real y) {return f(x);},a,b,nx,ny,p,arrow);
+  return slopefield(new real(real x, real y) {return f(x);},a,b,nx,ny,p);
 }
 
 path curve(pair c, real f(real,real), pair a, pair b)
@@ -83,4 +82,3 @@
 {
   return curve(c,new real(real x, real y){return f(x);},a,b);
 }
-

Modified: trunk/Master/texmf-dist/asymptote/stats.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/stats.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/stats.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -290,3 +290,30 @@
   }
   return L;
 }
+
+// Do a least-squares fit of data in real arrays x and y weighted by w
+// to the line y=m*x+b, by minimizing sum(w*(y-m*x-b)^2).
+linefit leastsquares(real[] x, real[] y, real[] w)
+{
+  linefit L;
+  int n=x.length;
+  if(n == 1) abort("Least squares fit requires at least 2 data points");
+  real sx=sum(w*x);
+  real sy=sum(w*y);
+  real W=sum(w);
+  real sxx=W*sum(w*x^2)-sx^2;
+  real sxy=W*sum(w*x*y)-sx*sy;
+  L.m=sxy/sxx;
+  L.b=(sy-L.m*sx)/W;
+  if(n > 2) {
+    real syy=W*sum(w*y^2)-sy^2;
+    if(sxx == 0 || syy == 0) return L;
+    L.r=sxy/sqrt(sxx*syy);
+    real arg=syy-sxy^2/sxx;
+    if(arg <= 0) return L;
+    real s=sqrt(arg/(n-2));
+    L.dm=s*sqrt(1/sxx);
+    L.db=s*sqrt(1+sx^2/sxx)/W;
+  }
+  return L;
+}

Modified: trunk/Master/texmf-dist/asymptote/three.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/three.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/three.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -2907,11 +2907,6 @@
   if((preview || (prc && settings.render == 0)) && settings.embed) {
     image=prefix;
     if(settings.inlinetex) image += "_0";
-    if(!preview && !S.pic2.empty2()) {
-      transform T=S.pic2.scaling(S.width,S.height);
-      _shipout(image,S.pic2.fit(T),newframe,nativeformat(),false,false);
-    }
-
     image += "."+nativeformat();
     if(!settings.inlinetex) file3.push(image);
     image=graphic(image,"hiresbb");

Modified: trunk/Master/texmf-dist/asymptote/three_surface.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/three_surface.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/three_surface.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -20,7 +20,7 @@
 
 struct patch {
   triple[][] P;
-  pen[] colors;     // Optionally specify 4 corner colors.
+  pen[] colors;     // Optionally specify corner colors.
   bool straight;    // Patch is based on a piecewise straight external path.
   bool3 planar;     // Patch is planar.
   bool triangular;  // Patch is a Bezier triangle.
@@ -485,16 +485,21 @@
   return S;
 }
 
+triple[][] degenerate(triple[][] P)
+{
+  return new triple[][] {{P[0][0],P[0][0],P[0][0],P[0][0]},
+      {P[1][0],P[1][0]*2/3+P[1][1]/3,P[1][0]/3+P[1][1]*2/3,P[1][1]},
+        {P[2][0],P[2][0]/3+P[2][1]*2/3,P[2][1]*2/3+P[2][2]/3,P[2][2]},
+          {P[3][0],P[3][1],P[3][2],P[3][3]}};
+}
+
 // Return a degenerate tensor patch representation of a Bezier triangle.
 patch tensor(patch s) {
-  if(!s.triangular) return patch(s);
-  triple[][] P=s.P;
-  return patch(new triple[][] {{P[0][0],P[0][0],P[0][0],P[0][0]},
-        {P[1][0],P[1][0]*2/3+P[1][1]/3,P[1][0]/3+P[1][1]*2/3,P[1][1]},
-          {P[2][0],P[2][0]/3+P[2][1]*2/3,P[2][1]*2/3+P[2][2]/3,P[2][2]},
-            {P[3][0],P[3][1],P[3][2],P[3][3]}},
-    s.colors.length > 0 ? new pen[] {s.colors[0],s.colors[1],s.colors[2],s.colors[0]} : new pen[],
-    s.straight,s.planar,false,false);
+  if(!s.triangular) return s;
+  return patch(degenerate(s.P),
+               s.colors.length > 0 ? new pen[] {
+                 s.colors[0],s.colors[1],s.colors[2],s.colors[0]} : new pen[],
+               s.straight,s.planar,false,false);
 }
 
 // Return the tensor product patch control points corresponding to path p
@@ -1268,15 +1273,11 @@
   return patch(subpatch(s.P,a,b),s.straight,s.planar);
 }
 
-private string triangular=
-  "Intersection of path3 with Bezier triangle is not yet implemented";
-
 // return an array containing the times for one intersection of path p and
 // patch s.
 real[] intersect(path3 p, patch s, real fuzz=-1)
 {
-  if(s.triangular) abort(triangular);
-  return intersect(p,s.P,fuzz);
+  return intersect(p,s.triangular ? degenerate(s.P) : s.P,fuzz);
 }
 
 // return an array containing the times for one intersection of path p and
@@ -1293,8 +1294,7 @@
 // return an array containing all intersection times of path p and patch s.
 real[][] intersections(path3 p, patch s, real fuzz=-1)
 {
-  if(s.triangular) abort(triangular);
-  return sort(intersections(p,s.P,fuzz));
+  return sort(intersections(p,s.triangular ? degenerate(s.P) : s.P,fuzz));
 }
 
 // return an array containing all intersection times of path p and surface s.
@@ -1384,7 +1384,8 @@
     if(prc() && light.on())
         straight=false; // PRC vertex colors (for quads only) ignore lighting
     m=material(m);
-    m.diffuse(mean(s.colors));
+    if(prc())
+      m.diffuse(mean(s.colors));
   }
   m=material(m,light,s.colors.length > 0);
 
@@ -1423,7 +1424,7 @@
           triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
           int[][] pi={}, light light=currentlight, render render=defaultrender)
 {
-  bool normals=n.length > 0;
+  bool normals=ni.length > 0;
   if(!normals) {
     ni=new int[vi.length][3];
     normals=computeNormals(v,vi,n,ni) > 0;
@@ -1431,6 +1432,35 @@
   if(p.length > 0)
     m=mean(p);
   m=material(m,light);
+
+  if(prc()) {
+    int[] vertexNormal=new int[ni.length];
+    int[] vertexPen=new int[pi.length];
+
+    bool pens=pi.length > 0;
+
+    for(int i=0; i < vi.length; ++i) {
+      int[] vii=vi[i];
+      int[] nii=ni[i];
+      for(int j=0; j < 3; ++j) {
+        int V=vii[j];
+        vertexNormal[V]=nii[j];
+        if(pens)
+          vertexPen[V]=pi[i][j];
+      }
+    }
+
+    for(int i=0; i < vi.length; ++i) {
+      int[] vii=vi[i];
+      for(int j=0; j < 3; ++j) {
+        int V=vii[j];
+        ni[i][j]=vertexNormal[V];
+        if(pens)
+          pi[i][j]=vertexPen[V];
+      }
+    }
+  }
+
   draw(f,v,vi,render.interaction.center,n,ni,
        m.p,m.opacity,m.shininess,m.metallic,m.fresnel0,p,pi,
        render.interaction.type);
@@ -1441,8 +1471,7 @@
           triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
           int[][] pi={}, light light=currentlight, render render=defaultrender)
 {
-  bool prc=prc();
-  bool normals=n.length > 0;
+  bool normals=ni.length > 0;
   if(!normals) {
     ni=new int[vi.length][3];
     normals=computeNormals(v,vi,n,ni) > 0;

Modified: trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,6 +1,6 @@
 // Enum class for v3dheadertypes
 // AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2022-03-07 12:05:14.285216
+// Generated at 2023-02-09 04:54:07
 
 struct v3dheadertypes
 {

Modified: trunk/Master/texmf-dist/asymptote/v3dtypes.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/v3dtypes.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/v3dtypes.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,6 +1,6 @@
 // Enum class for v3dtypes
 // AUTO-GENERATED from v3dtypes.csv
-// Generated at 2022-03-07 12:05:14.274334
+// Generated at 2023-02-09 04:54:07
 
 struct v3dtypes
 {

Modified: trunk/Master/texmf-dist/asymptote/version.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/version.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/version.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1 +1 @@
-string VERSION="2.79";
+string VERSION="2.85";

Modified: trunk/Master/texmf-dist/asymptote/webgl/asygl.js
===================================================================
--- trunk/Master/texmf-dist/asymptote/webgl/asygl.js	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/asymptote/webgl/asygl.js	2023-02-18 18:40:50 UTC (rev 65878)
@@ -36,4 +36,4 @@
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.*/
-let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif\n  Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n  MaterialIndex=int(materialIndex);\n#ifdef COLOR\n  Color=color;\n#endif\n#else\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int !
 MaterialIndex;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n  float x=cart.x;\n  float y=cart.z;\n  float z=cart.y;\n\n  float r=length(cart);\n  float theta=r > 0.0 ? acos(z/r) : 0.0;\n  float phi=atan(y,x);\n\n  return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n  vec3 sphericalVec=cart2sphere(cartVec);\n  sphericalVec.y=sphericalVec.y*piInv;\n  sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n  return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n  vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n  vec3 reflectVec=normalize(reflect(-viewDir,normal));\n  vec2 reflCoord=normalizedAngle(reflectVec);\n  vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n  vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n  float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n  vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n  vec3 metal=diffuse.rgb*IBLRefl;\n  return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  flo!
 at denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n\n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegaln=max(dot(lightDirection,normal),0.0);\n\n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n\n  float denom=4.0*omegain*omegaln;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n\n  return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[abs(MaterialIndex)-1];\n  emissive=m.emissive;\n  if(MaterialIndex >= 0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n  }\n#else\n  m=Materials[MaterialIndex];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.!
 0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n  color=IBLColor(viewDir);\n#else\n  Roughness2=roughness*roughness;\n  color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n#endif\n  OUTVALUE=vec4(color,diffuse.a);\n#else\n  OUTVALUE=emissive;\n#endif\n}\n";!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var a in i)("object"==typeof exports?exports:e)[a]=i[a]}}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function i(a){if(t[a])return t[a].exports;var n=t[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,i),n.l=!0,n.exports}return i.m=e,i.c=t,i.d=function(e,t,a){i.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setMatrixArrayType=function(e){t.ARRAY_TYPE=e},t.toRadian=function(e){return e*n},t.equals=function(e,t){return Math.abs(e-t)<=a*Math.max(1,Math.abs(e),Math.abs(t))};var a=t.EPSILON=1e-6;t.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,t.RANDOM=Math.random;var n=Math.PI/180},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mat4=t.mat3=void 0;var a=r(i(2)),n=r(i(3));function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t}t.mat3=a,t.mat4=n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=function(){var e=new a.ARRAY_TYPE(9);return e[0]=1,e[1]=0,e[2]=0!
 ,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e},t.fromMat4=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e},t.invert=function(e,t){var i=t[0],a=t[1],n=t[2],r=t[3],s=t[4],o=t[5],l=t[6],h=t[7],c=t[8],d=c*s-o*h,m=-c*r+o*l,f=h*r-s*l,u=i*d+a*m+n*f;if(!u)return null;return u=1/u,e[0]=d*u,e[1]=(-c*a+n*h)*u,e[2]=(o*a-n*s)*u,e[3]=m*u,e[4]=(c*i-n*l)*u,e[5]=(-o*i+n*r)*u,e[6]=f*u,e[7]=(-h*i+a*l)*u,e[8]=(s*i-a*r)*u,e};var a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t}(i(0))},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=function(){var e=new a.ARRAY_TYPE(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},t.identity=function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},t.invert=function(e,t){var i=t[0],a=t[1],n=t[2],r=t[3],s=t[4],o=t[5],l=t[6],h=t[7],c=t[8],d=t[9],m=t[10],f=t[11],u=t[12],p=t[13],g=t[14],v=t[15],x=i*o-a*s,w=i*l-n*s,M=i*h-r*s,b=a*l-n*o,T=a*h-r*o,S=n*h-r*l,R=c*p-d*u,A=c*g-m*u,I=c*v-f*u,P=d*g-m*p,E=d*v-f*p,y=m*v-f*g,L=x*y-w*E+M*P+b*I-T*A+S*R;if(!L)return null;return L=1/L,e[0]=(o*y-l*E+h*P)*L,e[1]=(n*E-a*y-r*P)*L,e[2]=(p*S-g*T+v*b)*L,e[3]=(m*T-d*S-f*b)*L,e[4]=(l*I-s*y-h*A)*L,e[5]=(i*y-n*I+r*A)*L,e[6]=(g*M-u*S-v*w)*L,e[7]=(c*S-m*M+f*w)*L,e[8]=(s*E-o*I+h*R)*L,e[9]=(a*I-i*E-r*R)*L,e[10]=(u*T-p*M+v*x)*L,e[11]=(d*M-c*T-f*x)*L,e[12]=(o*A-s*P-l*R)*L,e[13]=(i*P-a*A+n*R)*L,e[14]=(p*w-u*b-g*x)*L,e[15]=(c*b-d*w+m*x)*L,e},t.multiply=n,t.translate=function(e,t,i){var a=i[0],n=i[1],r=i[2],s=void 0,o=void 0,l=void 0,h=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,g=void 0,v=void 0;t===e?(e[12]=t[0]*a+t[4]*n+t[8]*r+t[12],e[13]=t[1]*a+t[5]*n+t[9]*r+t[13],e[14]=t[2]*a+t[6]*n+t[10]*r+t[14],e[15]=t[3]*a+t[7]*n+t[11]*r+t[15]):(s=t[0],o=t[1],l=t[2],!
 h=t[3],c=t[4],d=t[5],m=t[6],f=t[7],u=t[8],p=t[9],g=t[10],v=t[11],e[0]=s,e[1]=o,e[2]=l,e[3]=h,e[4]=c,e[5]=d,e[6]=m,e[7]=f,e[8]=u,e[9]=p,e[10]=g,e[11]=v,e[12]=s*a+c*n+u*r+t[12],e[13]=o*a+d*n+p*r+t[13],e[14]=l*a+m*n+g*r+t[14],e[15]=h*a+f*n+v*r+t[15]);return e},t.rotate=function(e,t,i,n){var r,s,o,l,h,c,d,m,f,u,p,g,v,x,w,M,b,T,S,R,A,I,P,E,y=n[0],L=n[1],D=n[2],O=Math.sqrt(y*y+L*L+D*D);if(Math.abs(O)<a.EPSILON)return null;y*=O=1/O,L*=O,D*=O,r=Math.sin(i),s=Math.cos(i),o=1-s,l=t[0],h=t[1],c=t[2],d=t[3],m=t[4],f=t[5],u=t[6],p=t[7],g=t[8],v=t[9],x=t[10],w=t[11],M=y*y*o+s,b=L*y*o+D*r,T=D*y*o-L*r,S=y*L*o-D*r,R=L*L*o+s,A=D*L*o+y*r,I=y*D*o+L*r,P=L*D*o-y*r,E=D*D*o+s,e[0]=l*M+m*b+g*T,e[1]=h*M+f*b+v*T,e[2]=c*M+u*b+x*T,e[3]=d*M+p*b+w*T,e[4]=l*S+m*R+g*A,e[5]=h*S+f*R+v*A,e[6]=c*S+u*R+x*A,e[7]=d*S+p*R+w*A,e[8]=l*I+m*P+g*E,e[9]=h*I+f*P+v*E,e[10]=c*I+u*P+x*E,e[11]=d*I+p*P+w*E,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]);return e},t.fromTranslation=function(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e},t.fromRotation=function(e,t,i){var n,r,s,o=i[0],l=i[1],h=i[2],c=Math.sqrt(o*o+l*l+h*h);if(Math.abs(c)<a.EPSILON)return null;return o*=c=1/c,l*=c,h*=c,n=Math.sin(t),r=Math.cos(t),s=1-r,e[0]=o*o*s+r,e[1]=l*o*s+h*n,e[2]=h*o*s-l*n,e[3]=0,e[4]=o*l*s-h*n,e[5]=l*l*s+r,e[6]=h*l*s+o*n,e[7]=0,e[8]=o*h*s+l*n,e[9]=l*h*s-o*n,e[10]=h*h*s+r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},t.frustum=function(e,t,i,a,n,r,s){var o=1/(i-t),l=1/(n-a),h=1/(r-s);return e[0]=2*r*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*r*l,e[6]=0,e[7]=0,e[8]=(i+t)*o,e[9]=(n+a)*l,e[10]=(s+r)*h,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*r*2*h,e[15]=0,e},t.ortho=function(e,t,i,a,n,r,s){var o=1/(t-i),l=1/(a-n),h=1/(r-s);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*h,e[11]=0,e[12]=(t+i)*o,e[13]=(n+a)*l,e[14]=(s+r)*h,e[15]=1,e};var a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&!
 (t[i]=e[i]);return t.default=e,t}(i(0));function n(e,t,i){var a=t[0],n=t[1],r=t[2],s=t[3],o=t[4],l=t[5],h=t[6],c=t[7],d=t[8],m=t[9],f=t[10],u=t[11],p=t[12],g=t[13],v=t[14],x=t[15],w=i[0],M=i[1],b=i[2],T=i[3];return e[0]=w*a+M*o+b*d+T*p,e[1]=w*n+M*l+b*m+T*g,e[2]=w*r+M*h+b*f+T*v,e[3]=w*s+M*c+b*u+T*x,w=i[4],M=i[5],b=i[6],T=i[7],e[4]=w*a+M*o+b*d+T*p,e[5]=w*n+M*l+b*m+T*g,e[6]=w*r+M*h+b*f+T*v,e[7]=w*s+M*c+b*u+T*x,w=i[8],M=i[9],b=i[10],T=i[11],e[8]=w*a+M*o+b*d+T*p,e[9]=w*n+M*l+b*m+T*g,e[10]=w*r+M*h+b*f+T*v,e[11]=w*s+M*c+b*u+T*x,w=i[12],M=i[13],b=i[14],T=i[15],e[12]=w*a+M*o+b*d+T*p,e[13]=w*n+M*l+b*m+T*g,e[14]=w*r+M*h+b*f+T*v,e[15]=w*s+M*c+b*u+T*x,e}}])}));let Transform,canvasWidth,canvasHeight,imageURL,image,minBound,maxBound,orthographic,angleOfView,initialZoom,viewportMargin,zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,canvasWidth0,canvasHeight0,zoom0,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,ibl=!1,viewportShift=[0,0],webgl2=!1,nlights=0,Nmaterials=2,materials=[];const pixelResolution=.75,zoomRemeshFactor=1.5,FillFactor=.1,windowTrim=10,third=1/3,pi=Math.acos(-1),radians=pi/180;let Zoom,lastZoom,xshift,yshift,maxViewportWidth,maxViewportHeight,H,zmin,zmax,size2,ArcballFactor,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),Temp=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[],IBLReflMap=null,IBLDiffuseMap=null,IBLbdrfMap=null;function IBLReady(){return null!==IBLReflMap&&null!==IBLDiffuseMap&&null!==IBLbdrfMap}function SetIBL(){embedded||deleteShaders(),initShaders(ibl)}let roughnessStepCount=8;class Material{constructor(e,t,i,a,n,r){this.diffuse=e,this.e!
 missive=t,this.specular=i,this.shininess=a,this.metallic=n,this.fresnel0=r}setUniform(e,t){let i=i=>gl.getUniformLocation(e,"Materials["+t+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(e,t){this.direction=e,this.color=t}setUniform(e,t){let i=i=>gl.getUniformLocation(e,"Lights["+t+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(e=!1){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),pixelShader=initShader(pixelOpt),materialShader=initShader(materialOpt),colorShader=initShader(colorOpt),transparentShader=initShader(transparentOpt)}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function saveAttributes(){let e=webgl2?window.top.document.asygl2[alpha]:window.top.document.asygl[alpha];e.gl=gl,e.nlights=Lights.length,e.Nmaterials=Nmaterials,e.maxMaterials=maxMaterials,e.pixelShader=pixelShader,e.materialShader=materialShader,e.colorShader=colorShader,e.transparentShader=transparentShader}function restoreAttributes(){let e=webgl2?window.top.document.asygl2[alpha]:window.top.document.asygl[alpha];gl=e.gl,nlights=e.nlights,Nmaterials=e.Nmaterials,maxMaterials=e.maxMaterials,pixelShader=e.pixelShader,materialShader=e.materialShader,colorShade!
 r=e.colorShader,transparentShader=e.transparentShader}function webGL(e,t){let i;return webgl2&&(i=e.getContext("webgl2",{alpha:t}),embedded&&!i)?(webgl2=!1,ibl=!1,initGL(!1),null):(i||(webgl2=!1,ibl=!1,i=e.getContext("webgl",{alpha:t})),i||alert("Could not initialize WebGL"),i)}function initGL(e=!0){if(ibl&&(webgl2=!0),alpha=Background[3]<1,embedded){let t=window.top.document;if(e&&(context=canvas.getContext("2d")),offscreen=webgl2?t.offscreen2:t.offscreen,offscreen||(offscreen=t.createElement("canvas"),webgl2?t.offscreen2=offscreen:t.offscreen=offscreen),webgl2?t.asygl2||(t.asygl2=Array(2)):t.asygl||(t.asygl=Array(2)),asygl=webgl2?t.asygl2:t.asygl,asygl[alpha]&&asygl[alpha].gl)restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes());else{if(rc=webGL(offscreen,alpha),!rc)return;gl=rc,initShaders(),webgl2?t.asygl2[alpha]={}:t.asygl[alpha]={},saveAttributes()}}else gl=webGL(canvas,alpha),initShaders();indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function getShader(e,t,i,a=[]){let n=webgl2?"300 es":"100",r=Array(...a),s=[["nlights",0==wireframe?Lights.length:0],["Nmaterials",Nmaterials]],o=[["int","Nlights",Math.max(Lights.length,1)]];webgl2&&r.push("WEBGL2"),ibl&&s.push(["ROUGHNESS_STEP_COUNT",roughnessStepCount.toFixed(2)]),orthographic&&r.push("ORTHOGRAPHIC"),macros_str=s.map(e=>`#define ${e[0]} ${e[1]}`).join("\n"),define_str=r.map(e=>"#define "+e).join("\n"),const_str=o.map(e=>`const ${e[0]} ${e[1]}=${e[2]};`).join("\n"),ext_str=[].map(e=>`#extension ${e}: enable`).join("\n"),shaderSrc=`#version ${n}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n  \n${t}\n  `;let l=e.createShader(i);return e.shade!
 rSource(l,shaderSrc),e.compileShader(l),e.getShaderParameter(l,e.COMPILE_STATUS)?l:(alert(e.getShaderInfoLog(l)),null)}function registerBuffer(e,t,i,a=gl.ARRAY_BUFFER){return e.length>0&&(0==t&&(t=gl.createBuffer(),i=!0),gl.bindBuffer(a,t),i&&gl.bufferData(a,e,gl.STATIC_DRAW)),t}function drawBuffer(e,t,i=e.indices){if(0==e.indices.length)return;let a=t!=pixelShader;setUniforms(e,t),null!=IBLDiffuseMap&&(gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,IBLbdrfMap),gl.uniform1i(gl.getUniformLocation(t,"reflBRDFSampler"),0),gl.activeTexture(gl.TEXTURE1),gl.bindTexture(gl.TEXTURE_2D,IBLDiffuseMap),gl.uniform1i(gl.getUniformLocation(t,"diffuseSampler"),1),gl.activeTexture(gl.TEXTURE2),gl.bindTexture(gl.TEXTURE_2D,IBLReflMap),gl.uniform1i(gl.getUniformLocation(t,"reflImgSampler"),2));let n=remesh||e.partial||!e.rendered;e.verticesBuffer=registerBuffer(new Float32Array(e.vertices),e.verticesBuffer,n),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a?Lights.length>0&&gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),e.materialsBuffer=registerBuffer(new Int16Array(e.materialIndices),e.materialsBuffer,n),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),t!=colorShader&&t!=transparentShader||(e.colorsBuffer=registerBuffer(new Uint8Array(e.colors),e.colorsBuffer,n),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),e.indicesBuffer=registerBuffer(indexExt?new Uint32Array(i):new Uint16Array(i),e.indicesBuffer,n,gl.ELEMENT_ARRAY_BUFFER),e.rendered=!0,gl.drawElements(a?wireframe?gl.LINES:e.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(e){this.type=e||TRIANGLES,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(e,t){return this.vertic!
 es.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.materialIndices.push(materialIndex),this.nvertices++}Vertex(e,t,i=[0,0,0,0]){return this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.materialIndices.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(e,t){return this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.vertices.push(t),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(e,t,i,a=[0,0,0,0]){let n=6*e;this.vertices[n]=t[0],this.vertices[n+1]=t[1],this.vertices[n+2]=t[2],this.vertices[n+3]=i[0],this.vertices[n+4]=i[1],this.vertices[n+5]=i[2],this.materialIndices[e]=materialIndex;let r=4*e;this.colors[r]=a[0],this.colors[r+1]=a[1],this.colors[r+2]=a[2],this.colors[r+3]=a[3],this.indices.push(e)}append(e){append(this.vertices,e.vertices),append(this.materialIndices,e.materialIndices),append(this.colors,e.colors),appendOffset(this.indices,e.indices,this.nvertices),this.nvertices+=e.nvertices}}function append(e,t){let i=e.length,a=t.length;e.length+=a;for(let n=0;n<a;++n)e[i+n]=t[n]}function appendOffset(e,t,i){let a=e.length,n=t.length;e.length+=t.length;for(let r=0;r<n;++r)e[a+r]=t[r]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(e){let t=projViewMat,i=e[0],a=i[0],n=i[1],r=i[2],s=1/(t[3]*a+t[7]*n+t[11]*r+t[15]);this.x=this.X=(t[0]*a+t[4]*n+t[8]*r+t[12])*s,this.y=this.Y=(t[1]*a+t[5]*n+t[9]*r+t[13])*s;for(let i=1,a=e.length;i<a;++i){let a=e[i],n=a[0],r=a[1],s=a[2],o=1/(t[3]*n+t[7]*r+t[11]*s+t[15]),l=(t[0]*n+t[4]*r+t[8]*s+t[12])*o,h=(t[1]*n+t[5]*r+t[9]*s+t[13])*o;l<this.x?this.x=l:l>this.X&&(this.X=l),h<this.y?this.y=h:h>this.Y&&(this.Y=h)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(e){let t=this.c[0!
 ],i=this..c[1],a=this.c[2],n=e[0]-t,r=e[1]-i,s=e[2]-a;return[n*normMat[0]+r*normMat[3]+s*normMat[6]+t,n*normMat[1]+r*normMat[4]+s*normMat[7]+i,n*normMat[2]+r*normMat[5]+s*normMat[8]+a]}Tcorners(e,t){return[this.T(e),this.T([e[0],e[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],t[1],e[2]]),this.T(t)]}setMaterial(e,t){null==e.materialTable[this.MaterialIndex]&&(e.materials.length>=Nmaterials&&(e.partial=!0,t()),e.materialTable[this.MaterialIndex]=e.materials.length,e.materials.push(Materials[this.MaterialIndex])),materialIndex=e.materialTable[this.MaterialIndex]}render(){let e;if(this.setMaterialIndex(),0==this.CenterIndex?e=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],e=this.Tcorners(this.Min,this.Max)),this.offscreen(e))return this.data.clear(),void this.notRendered();let t,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();t=i}else{let e=i.length;t=Array(e);for(let a=0;a<e;++a)t[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/maxBound[2],n=.75*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=n*n,this.Epsilon=.1*n,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(t)}}class BezierPatch extends Geometry{constructor(e,t,i,a,n,r){super(),this.controlpoints=e,this.CenterIndex=t,this.MaterialIndex=i,this.Min=a,this.Max=n,this.color=r;let s=e.length;if(r){let e=r[0][3]+r[1][3]+r[2][3];this.transparent=16==s||4==s?e+r[3][3]<1020:e<765}else this.transparent=Materials[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(e){let t=e[0];this.epsilon=0;let i=e.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([e[a][0]-t[0],e[a][1]-t[1],e[!
 a][2]-t[2]]));this.epsilon*=Number.EPSILON}processTriangle(e){let t=e[0],i=e[1],a=e[2],n=unit(cross([i[0]-t[0],i[1]-t[1],i[2]-t[2]],[a[0]-t[0],a[1]-t[1],a[2]-t[2]]));if(!this.offscreen([t,i,a])){let e,r,s;this.color?(e=this.data.Vertex(t,n,this.color[0]),r=this.data.Vertex(i,n,this.color[1]),s=this.data.Vertex(a,n,this.color[2])):(e=this.vertex(t,n),r=this.vertex(i,n),s=this.vertex(a,n)),0==wireframe?(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(s)):(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(e)),this.append()}}processQuad(e){let t=e[0],i=e[1],a=e[2],n=e[3],r=cross([i[0]-t[0],i[1]-t[1],i[2]-t[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-n[0],a[1]-n[1],a[2]-n[2]],[n[0]-t[0],n[1]-t[1],n[2]-t[2]]),o=unit([r[0]+s[0],r[1]+s[1],r[2]+s[2]]);if(!this.offscreen([t,i,a,n])){let e,r,s,l;this.color?(e=this.data.Vertex(t,o,this.color[0]),r=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),l=this.data.Vertex(n,o,this.color[3])):(e=this.vertex(t,o),r=this.vertex(i,o),s=this.vertex(a,o),l=this.vertex(n,o)),0==wireframe?(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(s),this.data.indices.push(e),this.data.indices.push(s),this.data.indices.push(l)):(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(l),this.data.indices.push(l),this.data.indices.push(e)),this.append()}}curve(e,t,i,a,n){new BezierCurve([e[t],e[i],e[a],e[n]],0,materialIndex,this.Min,this.Max).render()}process(e){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==e.length)return this.process3(e);if(3==e.length)return this.processTriangle(e);if(4==e.length)return this.processQuad(e);if(1==wireframe)return this.curve(e,0,4,8,12),this.curve(e,12,13,14,15),this.curve(e,15,11,7,3),void this.curve(e,3,2,1,0);let t=e[0],i=e[3],a=e[!
 12],n=e[15],r=this.normal(i,e[2],e[1],t,e[4],e[8],a);abs2(r)<this.epsilon&&(r=this.normal(i,e[2],e[1],t,e[13],e[14],n),abs2(r)<this.epsilon&&(r=this.normal(n,e[11],e[7],i,e[4],e[8],a)));let s=this.normal(t,e[4],e[8],a,e[13],e[14],n);abs2(s)<this.epsilon&&(s=this.normal(t,e[4],e[8],a,e[11],e[7],i),abs2(s)<this.epsilon&&(s=this.normal(i,e[2],e[1],t,e[13],e[14],n)));let o=this.normal(a,e[13],e[14],n,e[11],e[7],i);abs2(o)<this.epsilon&&(o=this.normal(a,e[13],e[14],n,e[2],e[1],t),abs2(o)<this.epsilon&&(o=this.normal(t,e[4],e[8],a,e[11],e[7],i)));let l=this.normal(n,e[11],e[7],i,e[2],e[1],t);if(abs2(l)<this.epsilon&&(l=this.normal(n,e[11],e[7],i,e[4],e[8],a),abs2(l)<this.epsilon&&(l=this.normal(a,e[13],e[14],n,e[2],e[1],t))),this.color){let h=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(t,r,h),u=this.data.Vertex(a,s,c),p=this.data.Vertex(n,o,d),g=this.data.Vertex(i,l,m);this.Render(e,f,u,p,g,t,a,n,i,!1,!1,!1,!1,h,c,d,m)}else{let h=this.vertex(t,r),c=this.vertex(a,s),d=this.vertex(n,o),m=this.vertex(i,l);this.Render(e,h,c,d,m,t,a,n,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:this.color?colorData.rendered=!1:materialData.rendered=!1}Render(e,t,i,a,n,r,s,o,l,h,c,d,m,f,u,p,g){let v=this.Distance(e);if(v[0]<this.res2&&v[1]<this.res2)this.offscreen([r,s,o])||(0==wireframe?(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([r,o,l])||(0==wireframe?(this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(n)):(this.data.indices.push(a),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(t)));else{if(this.offscreen(e))return;let x=e[0],w=e[3],M=e[12],b=e[15];if(v[0]<this.res2){let v=new Split3(x,e[1],e[2],!
 w),T=new Split3(e[4],e[5],e[6],e[7]),S=new Split3(e[8],e[9],e[10],e[11]),R=new Split3(M,e[13],e[14],b),A=[x,v.m0,v.m3,v.m5,e[4],T.m0,T.m3,T.m5,e[8],S.m0,S.m3,S.m5,M,R.m0,R.m3,R.m5],I=[v.m5,v.m4,v.m2,w,T.m5,T.m4,T.m2,e[7],S.m5,S.m4,S.m2,e[11],R.m5,R.m4,R.m2,b],P=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);abs2(P)<=this.epsilon&&(P=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),abs2(P)<=this.epsilon&&(P=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let E=this.normal(I[3],I[2],I[1],I[0],I[4],I[8],I[12]);abs2(E)<=this.epsilon&&(E=this.normal(I[3],I[2],I[1],I[0],I[13],I[14],I[15]),abs2(E)<=this.epsilon&&(E=this.normal(I[15],I[11],I[7],I[3],I[4],I[8],I[12])));let y=this.Epsilon,L=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,e[13],e[14],b)<this.res2){let e=unit(this.differential(I[12],I[8],I[4],I[0]));L=[L[0]-y*e[0],L[1]-y*e[1],L[2]-y*e[2]]}else L=A[15];let D=[.5*(l[0]+r[0]),.5*(l[1]+r[1]),.5*(l[2]+r[2])];if(!m)if(m=Straightness(x,e[1],e[2],w)<this.res2){let e=unit(this.differential(A[3],A[7],A[11],A[15]));D=[D[0]-y*e[0],D[1]-y*e[1],D[2]-y*e[2]]}else D=I[0];if(f){let e=Array(4),v=Array(4);for(let t=0;t<4;++t)e[t]=.5*(u[t]+p[t]),v[t]=.5*(g[t]+f[t]);let x=this.data.Vertex(L,P,e),w=this.data.Vertex(D,E,v);this.Render(A,t,i,x,w,r,s,L,D,h,c,!1,m,f,u,e,v),this.Render(I,w,x,a,n,D,L,o,l,!1,c,d,m,v,e,p,g)}else{let e=this.vertex(L,P),f=this.vertex(D,E);this.Render(A,t,i,e,f,r,s,L,D,h,c,!1,m),this.Render(I,f,e,a,n,D,L,o,l,!1,c,d,m)}return}if(v[1]<this.res2){let v=new Split3(x,e[4],e[8],M),T=new Split3(e[1],e[5],e[9],e[13]),S=new Split3(e[2],e[6],e[10],e[14]),R=new Split3(w,e[7],e[11],b),A=[x,e[1],e[2],w,v.m0,T.m0,S.m0,R.m0,v.m3,T.m3,S.m3,R.m3,v.m5,T.m5,S.m5,R.m5],I=[v.m5,T.m5,S.m5,R.m5,v.m4,T.m4,S.m4,R.m4,v.m2,T.m2,S.m2,R.m2,M,e[13],e[14],b],P=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);abs2(P)<=this.epsilon&&(P=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),abs2(P)<=this.epsilon&&(P=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let E=this.normal(I[15],I[11],I[7],I!
 [3],I[2],I[1],I[0]);abs2(E)<=this.epsilon&&(E=this.normal(I[15],I[11],I[7],I[3],I[4],I[8],I[12]),abs2(E)<=this.epsilon&&(E=this.normal(I[12],I[13],I[14],I[15],I[2],I[1],I[0])));let y=this.Epsilon,L=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!h)if(h=Straightness(x,e[4],e[8],M)<this.res2){let e=unit(this.differential(I[0],I[1],I[2],I[3]));L=[L[0]-y*e[0],L[1]-y*e[1],L[2]-y*e[2]]}else L=A[12];let D=[.5*(o[0]+l[0]),.5*(o[1]+l[1]),.5*(o[2]+l[2])];if(!d)if(d=Straightness(b,e[11],e[7],w)<this.res2){let e=unit(this.differential(A[15],A[14],A[13],A[12]));D=[D[0]-y*e[0],D[1]-y*e[1],D[2]-y*e[2]]}else D=I[3];if(f){let e=Array(4),v=Array(4);for(let t=0;t<4;++t)e[t]=.5*(f[t]+u[t]),v[t]=.5*(p[t]+g[t]);let x=this.data.Vertex(L,P,e),w=this.data.Vertex(D,E,v);this.Render(A,t,x,w,n,r,L,D,l,h,!1,d,m,f,e,v,g),this.Render(I,x,i,a,w,L,s,o,D,h,c,d,!1,e,u,p,v)}else{let e=this.vertex(L,P),f=this.vertex(D,E);this.Render(A,t,e,f,n,r,L,D,l,h,!1,d,m),this.Render(I,e,i,a,f,L,s,o,D,h,c,d,!1)}return}let T=new Split3(x,e[1],e[2],w),S=new Split3(e[4],e[5],e[6],e[7]),R=new Split3(e[8],e[9],e[10],e[11]),A=new Split3(M,e[13],e[14],b),I=new Split3(x,e[4],e[8],M),P=new Split3(T.m0,S.m0,R.m0,A.m0),E=new Split3(T.m3,S.m3,R.m3,A.m3),y=new Split3(T.m5,S.m5,R.m5,A.m5),L=new Split3(T.m4,S.m4,R.m4,A.m4),D=new Split3(T.m2,S.m2,R.m2,A.m2),O=new Split3(w,e[7],e[11],b),B=[x,T.m0,T.m3,T.m5,I.m0,P.m0,E.m0,y.m0,I.m3,P.m3,E.m3,y.m3,I.m5,P.m5,E.m5,y.m5],N=[I.m5,P.m5,E.m5,y.m5,I.m4,P.m4,E.m4,y.m4,I.m2,P.m2,E.m2,y.m2,M,A.m0,A.m3,A.m5],z=[y.m5,L.m5,D.m5,O.m5,y.m4,L.m4,D.m4,O.m4,y.m2,L.m2,D.m2,O.m2,A.m5,A.m4,A.m2,b],_=[T.m5,T.m4,T.m2,w,y.m0,L.m0,D.m0,O.m0,y.m3,L.m3,D.m3,O.m3,y.m5,L.m5,D.m5,O.m5],C=B[15],V=this.normal(B[0],B[4],B[8],B[12],B[13],B[14],B[15]);abs2(V)<this.epsilon&&(V=this.normal(B[0],B[4],B[8],B[12],B[11],B[7],B[3]),abs2(V)<this.epsilon&&(V=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15])));let U=this.normal(N[12],N[13],N[14],N[15],N[11],N[7],N[3]);abs2(U)<this.epsilon&&(U=this.normal(N[12],N[13],N[14],N[15],N[2],N[1],N[0]),abs2(U)<this.epsilon&&(U=!
 this.normal(N[0],N[4],N[8],N[12],N[11],N[7],N[3])));let H=this.normal(z[15],z[11],z[7],z[3],z[2],z[1],z[0]);abs2(H)<this.epsilon&&(H=this.normal(z[15],z[11],z[7],z[3],z[4],z[8],z[12]),abs2(H)<this.epsilon&&(H=this.normal(z[12],z[13],z[14],z[15],z[2],z[1],z[0])));let G=this.normal(_[3],_[2],_[1],_[0],_[4],_[8],_[12]);abs2(G)<this.epsilon&&(G=this.normal(_[3],_[2],_[1],_[0],_[13],_[14],_[15]),abs2(G)<this.epsilon&&(G=this.normal(_[15],_[11],_[7],_[3],_[4],_[8],_[12])));let F=this.normal(z[3],z[2],z[1],C,z[4],z[8],z[12]),W=this.Epsilon,X=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!h)if(h=Straightness(x,e[4],e[8],M)<this.res2){let e=unit(this.differential(N[0],N[1],N[2],N[3]));X=[X[0]-W*e[0],X[1]-W*e[1],X[2]-W*e[2]]}else X=B[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,e[13],e[14],b)<this.res2){let e=unit(this.differential(z[12],z[8],z[4],z[0]));j=[j[0]-W*e[0],j[1]-W*e[1],j[2]-W*e[2]]}else j=N[15];let Z=[.5*(o[0]+l[0]),.5*(o[1]+l[1]),.5*(o[2]+l[2])];if(!d)if(d=Straightness(b,e[11],e[7],w)<this.res2){let e=unit(this.differential(_[15],_[14],_[13],_[12]));Z=[Z[0]-W*e[0],Z[1]-W*e[1],Z[2]-W*e[2]]}else Z=z[3];let k=[.5*(l[0]+r[0]),.5*(l[1]+r[1]),.5*(l[2]+r[2])];if(!m)if(m=Straightness(x,e[1],e[2],w)<this.res2){let e=unit(this.differential(B[3],B[7],B[11],B[15]));k=[k[0]-W*e[0],k[1]-W*e[1],k[2]-W*e[2]]}else k=_[0];if(f){let e=Array(4),v=Array(4),x=Array(4),w=Array(4),M=Array(4);for(let t=0;t<4;++t)e[t]=.5*(f[t]+u[t]),v[t]=.5*(u[t]+p[t]),x[t]=.5*(p[t]+g[t]),w[t]=.5*(g[t]+f[t]),M[t]=.5*(e[t]+x[t]);let b=this.data.Vertex(X,V,e),T=this.data.Vertex(j,U,v),S=this.data.Vertex(Z,H,x),R=this.data.Vertex(k,G,w),A=this.data.Vertex(C,F,M);this.Render(B,t,b,A,R,r,X,C,k,h,!1,!1,m,f,e,M,w),this.Render(N,b,i,T,A,X,s,j,C,h,c,!1,!1,e,u,v,M),this.Render(z,A,T,a,S,C,j,o,Z,!1,c,d,!1,M,v,p,x),this.Render(_,R,A,S,n,k,C,Z,l,!1,!1,d,m,w,M,x,g)}else{let e=this.vertex(X,V),f=this.vertex(j,U),u=this.vertex(Z,H),p=this.vertex(k,G),g=this.vertex(C,F);this.Render(B,t,e,g,p,r,X,C,k,h,!1,!1,m),this.Render(N,e,!
 i,f,g,X,s,j,C,h,c,!1,!1),this.Render(z,g,f,a,u,C,j,o,Z,!1,c,d,!1),this.Render(_,p,g,u,n,k,C,Z,l,!1,!1,d,m)}}}process3(e){if(1==wireframe)return this.curve(e,0,1,3,6),this.curve(e,6,7,8,9),void this.curve(e,9,5,2,0);let t=e[0],i=e[6],a=e[9],n=this.normal(a,e[5],e[2],t,e[1],e[3],i),r=this.normal(t,e[1],e[3],i,e[7],e[8],a),s=this.normal(i,e[7],e[8],a,e[5],e[2],t);if(this.color){let o=this.color[0],l=this.color[1],h=this.color[2],c=this.data.Vertex(t,n,o),d=this.data.Vertex(i,r,l),m=this.data.Vertex(a,s,h);this.Render3(e,c,d,m,t,i,a,!1,!1,!1,o,l,h)}else{let o=this.vertex(t,n),l=this.vertex(i,r),h=this.vertex(a,s);this.Render3(e,o,l,h,t,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(e,t,i,a,n,r,s,o,l,h,c,d,m){if(this.Distance3(e)<this.res2)this.offscreen([n,r,s])||(0==wireframe?(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)));else{if(this.offscreen(e))return;let f=e[0],u=e[1],p=e[2],g=e[3],v=e[4],x=e[5],w=e[6],M=e[7],b=e[8],T=e[9],S=[.5*(T[0]+x[0]),.5*(T[1]+x[1]),.5*(T[2]+x[2])],R=[.5*(T[0]+b[0]),.5*(T[1]+b[1]),.5*(T[2]+b[2])],A=[.5*(x[0]+p[0]),.5*(x[1]+p[1]),.5*(x[2]+p[2])],I=[.5*(b[0]+v[0]),.5*(b[1]+v[1]),.5*(b[2]+v[2])],P=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],E=[.5*(p[0]+v[0]),.5*(p[1]+v[1]),.5*(p[2]+v[2])],y=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],L=[.5*(v[0]+g[0]),.5*(v[1]+g[1]),.5*(v[2]+g[2])],D=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],O=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],B=[.5*(u[0]+g[0]),.5*(u[1]+g[1]),.5*(u[2]+g[2])],N=[.5*(g[0]+w[0]),.5*(g[1]+w[1]),.5*(g[2]+w[2])],z=[.5*(S[0]+A[0]),.5*(S[1]+A[1]),.5*(S[2]+A[2])],_=[.5*(R[0]+P[0]),.5*(R[1]+P[1]),.5*(R[2]+P[2])],C=[.5*(A[0]+y[0]),.5*(A[1]+y[1]),.5*(A[2]+y[2])],V=[.5*I[0]+.25*(v[0]+u[0]),.5*I[1]+.25*(v[1]+u[1]),.5*I[2]+.25*(v[2]+u[2])],U=[.5*(P[0]+D[0]),.5*(P[1]+D[1]),.5*(P[2]+D[2])],H=[.5*E[0]+.25*(v[0]+M[0]),.5*E[1]+.25*(!
 v[1]+M[1]),.5*E[2]+.25*(v[2]+M[2])],G=[.25*(x[0]+v[0])+.5*L[0],.25*(x[1]+v[1])+.5*L[1],.25*(x[2]+v[2])+.5*L[2]],F=[.5*(O[0]+B[0]),.5*(O[1]+B[1]),.5*(O[2]+B[2])],W=[.5*(B[0]+N[0]),.5*(B[1]+N[1]),.5*(B[2]+N[2])],X=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],j=[.5*(H[0]+W[0]),.5*(H[1]+W[1]),.5*(H[2]+W[2])],Z=[.5*(F[0]+W[0]),.5*(F[1]+W[1]),.5*(F[2]+W[2])],k=[.5*(G[0]+U[0]),.5*(G[1]+U[1]),.5*(G[2]+U[2])],Y=[.5*(_[0]+G[0]),.5*(_[1]+G[1]),.5*(_[2]+G[2])],q=[.5*(_[0]+U[0]),.5*(_[1]+U[1]),.5*(_[2]+U[2])],$=[.5*(z[0]+V[0]),.5*(z[1]+V[1]),.5*(z[2]+V[2])],K=[.5*(C[0]+V[0]),.5*(C[1]+V[1]),.5*(C[2]+V[2])],Q=[.5*(z[0]+C[0]),.5*(z[1]+C[1]),.5*(z[2]+C[2])],J=[f,O,y,F,[.5*(E[0]+O[0]),.5*(E[1]+O[1]),.5*(E[2]+O[2])],C,Z,X,K,Q],ee=[Z,W,j,N,[.5*(L[0]+D[0]),.5*(L[1]+D[1]),.5*(L[2]+D[2])],k,w,D,U,q],te=[Q,$,z,Y,[.5*(S[0]+I[0]),.5*(S[1]+I[1]),.5*(S[2]+I[2])],S,q,_,R,T],ie=[q,Y,k,$,[.25*(A[0]+P[0]+B[0]+v[0]),.25*(A[1]+P[1]+B[1]+v[1]),.25*(A[2]+P[2]+B[2]+v[2])],j,Q,K,X,Z],ae=this.normal(Z,j,k,q,Y,$,Q),ne=this.normal(q,Y,$,Q,K,X,Z),re=this.normal(Q,K,X,Z,j,k,q),se=this.Epsilon,oe=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!o)if(o=Straightness(w,M,b,T)<this.res2){let e=unit(this.sumdifferential(ie[0],ie[2],ie[5],ie[9],ie[1],ie[3],ie[6]));oe=[oe[0]-se*e[0],oe[1]-se*e[1],oe[2]-se*e[2]]}else oe=q;let le=[.5*(s[0]+n[0]),.5*(s[1]+n[1]),.5*(s[2]+n[2])];if(!l)if(l=Straightness(f,p,x,T)<this.res2){let e=unit(this.sumdifferential(ie[6],ie[3],ie[1],ie[0],ie[7],ie[8],ie[9]));le=[le[0]-se*e[0],le[1]-se*e[1],le[2]-se*e[2]]}else le=Q;let he=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])];if(!h)if(h=Straightness(f,u,g,w)<this.res2){let e=unit(this.sumdifferential(ie[9],ie[8],ie[7],ie[6],ie[5],ie[2],ie[0]));he=[he[0]-se*e[0],he[1]-se*e[1],he[2]-se*e[2]]}else he=Z;if(c){let e=Array(4),f=Array(4),u=Array(4);for(let t=0;t<4;++t)e[t]=.5*(d[t]+m[t]),f[t]=.5*(m[t]+c[t]),u[t]=.5*(c[t]+d[t]);let p=this.data.Vertex(oe,ae,e),g=this.data.Vertex(le,ne,f),v=this.data.Vertex(he,re,u);this.Render3(J,t,v,g,n,he,le,!1,l,h,c,u,f),this.Render3(ee,v,i,p,he,r,oe,o,!1,!
 h,u,d,e),this.Render3(te,g,p,a,le,oe,s,o,l,!1,f,e,m),this.Render3(ie,p,g,v,oe,le,he,!1,!1,!1,e,f,u)}else{let e=this.vertex(oe,ae),c=this.vertex(le,ne),d=this.vertex(he,re);this.Render3(J,t,d,c,n,he,le,!1,l,h),this.Render3(ee,d,i,e,he,r,oe,o,!1,h),this.Render3(te,c,e,a,le,oe,s,o,l,!1),this.Render3(ie,e,c,d,oe,le,he,!1,!1,!1)}}}Distance(e){let t=e[0],i=e[3],a=e[12],n=e[15],r=Flatness(t,a,i,n);r=Math.max(Straightness(t,e[4],e[8],a)),r=Math.max(r,Straightness(e[1],e[5],e[9],e[13])),r=Math.max(r,Straightness(i,e[7],e[11],n)),r=Math.max(r,Straightness(e[2],e[6],e[10],e[14]));let s=Flatness(t,i,a,n);return s=Math.max(s,Straightness(t,e[1],e[2],i)),s=Math.max(s,Straightness(e[4],e[5],e[6],e[7])),s=Math.max(s,Straightness(e[8],e[9],e[10],e[11])),s=Math.max(s,Straightness(a,e[13],e[14],n)),[r,s]}Distance3(e){let t=e[0],i=e[4],a=e[6],n=e[9],r=abs2([(t[0]+a[0]+n[0])*(1/3)-i[0],(t[1]+a[1]+n[1])*(1/3)-i[1],(t[2]+a[2]+n[2])*(1/3)-i[2]]);return r=Math.max(r,Straightness(t,e[1],e[3],a)),r=Math.max(r,Straightness(t,e[2],e[5],n)),Math.max(r,Straightness(a,e[7],e[8],n))}differential(e,t,i,a){let n=[3*(t[0]-e[0]),3*(t[1]-e[1]),3*(t[2]-e[2])];return abs2(n)>this.epsilon?n:(n=bezierPP(e,t,i),abs2(n)>this.epsilon?n:bezierPPP(e,t,i,a))}sumdifferential(e,t,i,a,n,r,s){let o=this.differential(e,t,i,a),l=this.differential(e,n,r,s);return[o[0]+l[0],o[1]+l[1],o[2]+l[2]]}normal(e,t,i,a,n,r,s){let o=3*(n[0]-a[0]),l=3*(n[1]-a[1]),h=3*(n[2]-a[2]),c=3*(i[0]-a[0]),d=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[l*m-h*d,h*c-o*m,o*d-l*c];if(abs2(f)>this.epsilon)return f;let u=[c,d,m],p=[o,l,h],g=bezierPP(a,i,t),v=bezierPP(a,n,r),x=cross(v,u),w=cross(p,g);if(f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon)return f;let M=bezierPPP(a,i,t,e),b=bezierPPP(a,n,r,s);x=cross(p,M),w=cross(b,u);let T=cross(v,g);return f=[x[0]+w[0]+T[0],x[1]+w[1]+T[1],x[2]+w[2]+T[2]],abs2(f)>this.epsilon?f:(x=cross(b,g),w=cross(v,M),f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(e,t,i,a,n){super(),this.controlpoints!
 =e,this.CenterIndex=t,this.MaterialIndex=i,this.Min=a,this.Max=n}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(e){let t=e[0],i=e[1];if(!this.offscreen([t,i])){let e=[0,0,1];this.data.indices.push(this.data.vertex(t,e)),this.data.indices.push(this.data.vertex(i,e)),this.append()}}process(e){if(2==e.length)return this.processLine(e);let t=e[0],i=e[1],a=e[2],n=e[3],r=this.normal(bezierP(t,i),bezierPP(t,i,a)),s=this.normal(bezierP(a,n),bezierPP(n,a,i)),o=this.data.vertex(t,r),l=this.data.vertex(n,s);this.Render(e,o,l),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}notRendered(){material1Data.rendered=!1}Render(e,t,i){let a=e[0],n=e[1],r=e[2],s=e[3];if(Straightness(a,n,r,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(t),this.data.indices.push(i));else{if(this.offscreen(e))return;let o=[.5*(a[0]+n[0]),.5*(a[1]+n[1]),.5*(a[2]+n[2])],l=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],c=[.5*(o[0]+l[0]),.5*(o[1]+l[1]),.5*(o[2]+l[2])],d=[.5*(l[0]+h[0]),.5*(l[1]+h[1]),.5*(l[2]+h[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[a,o,c,m],u=[m,d,h,s],p=this.normal(bezierPh(a,n,r,s),bezierPPh(a,n,r,s)),g=this.data.vertex(m,p);this.Render(f,t,g),this.Render(u,g,i)}}normal(e,t){let i=dot(e,e),a=dot(e,t);return[i*t[0]-a*e[0],i*t[1]-a*e[1],i*t[2]-a*e[2]]}}class Pixel extends Geometry{constructor(e,t,i,a,n){super(),this.controlpoint=e,this.width=t,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=n}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(e){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}notRendered(){material0Data.rendered=!1}}class Triangles extends Geometry{constructor(e,t,i,a){super(),this.CenterIndex=e,this.MaterialIndex=t,this.Min=i,this.Max=a,this.controlpoints=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[!
 ],this.transparent=Materials[this.MaterialIndex].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(e){this.data.vertices=new Array(6*e.length),materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,i=this.Indices.length;t<i;++t){let i=this.Indices[t],a=i[0],n=e[a[0]],r=e[a[1]],s=e[a[2]];if(!this.offscreen([n,r,s])){let e=i.length>1?i[1]:a;if(e&&0!=e.length||(e=a),this.Colors.length>0){let t=i.length>2?i[2]:a;t&&0!=t.length||(t=a);let o=this.Colors[t[0]],l=this.Colors[t[1]],h=this.Colors[t[2]];this.transparent|=o[3]+l[3]+h[3]<765,0==wireframe?(this.data.iVertex(a[0],n,this.Normals[e[0]],o),this.data.iVertex(a[1],r,this.Normals[e[1]],l),this.data.iVertex(a[2],s,this.Normals[e[2]],h)):(this.data.iVertex(a[0],n,this.Normals[e[0]],o),this.data.iVertex(a[1],r,this.Normals[e[1]],l),this.data.iVertex(a[1],r,this.Normals[e[1]],l),this.data.iVertex(a[2],s,this.Normals[e[2]],h),this.data.iVertex(a[2],s,this.Normals[e[2]],h),this.data.iVertex(a[0],n,this.Normals[e[0]],o))}else 0==wireframe?(this.data.iVertex(a[0],n,this.Normals[e[0]]),this.data.iVertex(a[1],r,this.Normals[e[1]]),this.data.iVertex(a[2],s,this.Normals[e[2]])):(this.data.iVertex(a[0],n,this.Normals[e[0]]),this.data.iVertex(a[1],r,this.Normals[e[1]]),this.data.iVertex(a[1],r,this.Normals[e[1]]),this.data.iVertex(a[2],s,this.Normals[e[2]]),this.data.iVertex(a[2],s,this.Normals[e[2]]),this.data.iVertex(a[0],n,this.Normals[e[0]]))}}this.data.nvertices=e.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:triangleData.rendered=!1}}function redrawScene(){initProjection(),setProjection(),remesh=!0,drawScene()}function home(){mat4.identity(rotMat),redrawScene(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1}let positionAttribute=0,normalAtt!
 ribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(e=[]){let t=getShader(gl,vertex,gl.VERTEX_SHADER,e),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,e),a=gl.createProgram();return gl.attachShader(a,t),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),gl.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(e,t,i,a){this.m0=[.5*(e[0]+t[0]),.5*(e[1]+t[1]),.5*(e[2]+t[2])];let n=.5*(t[0]+i[0]),r=.5*(t[1]+i[1]),s=.5*(t[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+n),.5*(this.m0[1]+r),.5*(this.m0[2]+s)],this.m4=[.5*(n+this.m2[0]),.5*(r+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(e){let t=1/(Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])||1);return[e[0]*t,e[1]*t,e[2]*t]}function abs2(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function dot(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function cross(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function bezierP(e,t){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function bezierPP(e,t,i){return[3*(e[0]+i[0])-6*t[0],3*(e[1]+i[1])-6*t[1],3*(e[2]+i[2])-6*t[2]]}function bezierPPP(e,t,i,a){return[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])]}function bezierPh(e,t,i,a){return[i[0]+a[0]-e[0]-t[0],i[1]+a[1]-e[1]-t[1],i[2]+a[2]-e[2]-t[2]]}function bezierPPh(e,t,i,a){return[3*e[0]-5*t[0]+i[0]+a[0],3*e[1]-5*t[1]+i[1]+a[1],3*e[2]-5*t[2]+i[2]+a[2]]}function Straightness(e,t,i,a){let n=[1/3*(a[0]-e[0]),1/3*(a[1]-e[1]),1/3*(a[2]-e[2])];return Math.max(abs2([t[0]-n[0]-e[0],t[1]-n[1]-e[1],t[2]-n[2]-e[2]]),abs2([a[0]-n[0]-i[0],a[1]-n[1]-i[1],a[2]-n[2]-i[2]]))}function Flatness(e,t,i,a){let n=[t[0]-e[0],!
 t[1]-e[1],t[2]-e[2]],r=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(n,unit(r))),abs2(cross(r,unit(n))))/9}function corners(e,t){return[e,[e[0],e[1],t[2]],[e[0],t[1],e[2]],[e[0],t[1],t[2]],[t[0],e[1],e[2]],[t[0],e[1],t[2]],[t[0],t[1],e[2]],t]}function minbound(e){return[Math.min(e[0][0],e[1][0],e[2][0],e[3][0],e[4][0],e[5][0],e[6][0],e[7][0]),Math.min(e[0][1],e[1][1],e[2][1],e[3][1],e[4][1],e[5][1],e[6][1],e[7][1]),Math.min(e[0][2],e[1][2],e[2][2],e[3][2],e[4][2],e[5][2],e[6][2],e[7][2])]}function maxbound(e){return[Math.max(e[0][0],e[1][0],e[2][0],e[3][0],e[4][0],e[5][0],e[6][0],e[7][0]),Math.max(e[0][1],e[1][1],e[2][1],e[3][1],e[4][1],e[5][1],e[6][1],e[7][1]),Math.max(e[0][2],e[1][2],e[2][2],e[3][2],e[4][2],e[5][2],e[6][2],e[7][2])]}function COBTarget(e,t){mat4.fromTranslation(Temp,[center.x,center.y,center.z]),mat4.invert(cjMatInv,Temp),mat4.multiply(e,t,cjMatInv),mat4.multiply(e,Temp,e)}function setUniforms(e,t){let i=t==pixelShader;gl.useProgram(t),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),t.projViewMatUniform=gl.getUniformLocation(t,"projViewMat"),t.viewMatUniform=gl.getUniformLocation(t,"viewMat"),t.normMatUniform=gl.getUniformLocation(t,"normMat"),t!=colorShader&&t!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let e=0;e<Lights.length;++e)Lights[e].setUniform(t,e);for(let i=0;i<e.materials.length;++i)e.materials[i].setUniform(t,i);gl.uniformMatrix4fv(t.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(t.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(t.normMatUniform,!1,normMat)}function handleMouseDown(e){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=e.clientX,lastMouseY=e.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(e){return Math.hypot(e[0].pageX-e[1].pageX,e[0].pageY-e[1].pageY)}function handleTouchStart(e){e.preventDefault(),zoomEnabled||enableZoom();!
 let t=e.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=t.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=t[0].identifier,lastMouseX=t[0].pageX,lastMouseY=t[0].pageY),2!=t.length||mouseDownOrTouchActive||(touchId=t[0].identifier,pinchStart=pinchDistance(t),pinch=!0))}function handleMouseUpOrTouchEnd(e){mouseDownOrTouchActive=!1}function rotateScene(e,t,i,a,n){if(e==i&&t==a)return;let[r,s]=arcball([e,-t],[i,-a]);mat4.fromRotation(Temp,2*n*ArcballFactor*r/Zoom,s),mat4.multiply(rotMat,Temp,rotMat)}function shiftScene(e,t,i,a){let n=1/Zoom;shift.x+=(i-e)*n*halfCanvasWidth,shift.y-=(a-t)*n*halfCanvasHeight}function panScene(e,t,i,a){orthographic?shiftScene(e,t,i,a):(center.x+=(i-e)*(viewParam.xmax-viewParam.xmin),center.y-=(a-t)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let e=Math.sqrt(Number.MAX_VALUE),t=1/e;Zoom<=t&&(Zoom=t),Zoom>=e&&(Zoom=e),(1.5*Zoom<lastZoom||Zoom>1.5*lastZoom)&&(remesh=!0,lastZoom=Zoom)}function zoomImage(e){let t=zoomStep*halfCanvasHeight*e;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(t)<i&&(Zoom*=zoomFactor**t,capzoom())}function normMouse(e){let t=e[0],i=e[1],a=Math.hypot(t,i);return a>1&&(denom=1/a,t*=denom,i*=denom),[t,i,Math.sqrt(Math.max(1-i*i-t*t,0))]}function arcball(e,t){let i=normMouse(e),a=normMouse(t),n=dot(i,a);return[n>1?0:n<-1?pi:Math.acos(n),unit(cross(i,a))]}function zoomScene(e,t,i,a){zoomImage(t-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(e,t,i,a=1){let n;switch(i){case 1:n=rotateScene;break;case 2:n=shiftScene;break;case 3:n=zoomScene;break;case 4:n=panScene;break;default:n=(e,t,i,a)=>{}}n((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(e-halfCanvasWidth)/halfCanvasWidth,(t-halfCanvasHeight)/halfCanvasHeight!
 ,a),lastMouseX=e,lastMouseY=t,setProjection(),drawScene()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function Camera(){let e=Array(3),t=Array(3),i=Array(3),a=center.x,n=center.y,r=.5*(viewParam.zmin+viewParam.zmax);for(let s=0;s<3;++s){let o=0,l=0,h=0,c=4*s;for(let e=0;e<4;++e){let t=4*e,i=rotMat[t],s=rotMat[t+1],d=rotMat[t+2],m=rotMat[t+3],f=Transform[c+e];o+=f*(m-a*i-n*s-r*d),h+=f*s,l+=f*(m-a*i-n*s)}e[s]=o,t[s]=h,i[s]=l}return[e,t,i]}function projection(){if(null==Transform)return"";let e,t,i;[e,t,i]=Camera();let a=orthographic?"  orthographic(":"  perspective(",n="".padStart(a.length),r="currentprojection=\n"+a+"camera=("+e+"),\n"+n+"up=("+t+"),\n"+n+"target=("+i+"),\n"+n+"zoom="+Zoom*initialZoom/zoom0;return orthographic||(r+=",\n"+n+"angle="+2*Math.atan(Math.tan(.5*angleOfView)/Zoom)/radians),0==xshift&&0==yshift||(r+=",\n"+n+"viewportshift=("+xshift+","+yshift+")"),orthographic||(r+=",\n"+n+"autoadjust=false"),r+=");\n",window.parent.asyProjection=!0,r}function handleKey(e){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==e.keyCode)return void disableZoom();let t=[];switch(e.key){case"x":t=[1,0,0];break;case"y":t=[0,1,0];break;case"z":t=[0,0,1];break;case"h":home();break;case"m":++wireframe,3==wireframe&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders(ibl)),remesh=!0,drawScene();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink();break;case"c":showCamera()}t.length>0&&(mat4.rotate(rotMat,rotMat,.1,t),updateViewMatrix(),drawScene())}function setZoom(){capzoom(),setProjection(),drawScene()}function handleMouseWheel(e){e.preventDefault(),e.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,setZoom()}function handleMouseMove(e){if(!mouseDownOrTouchActive)return;let t,i=e.clientX,a=e.clientY;t=e.getModifierState("Control")?2:e.getModifierState("Shift")?3:e.getModifierState("Alt")?4:1,processDrag(i,a,t)}let zooming!
 =!1,swipe=!1,rotate=!1;function handleTouchMove(e){if(e.preventDefault(),zooming)return;let t=e.targetTouches;if(!pinch&&1==t.length&&touchId==t[0].identifier){let e=t[0].pageX,i=t[0].pageY,a=e-lastMouseX,n=i-lastMouseY,r=a*a+n*n<=shiftHoldDistance*shiftHoldDistance;if(r&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(e,i,2);else if(!r){rotate=!0,processDrag(t[0].pageX,t[0].pageY,1,.5)}}if(pinch&&!swipe&&2==t.length&&touchId==t[0].identifier){let e=pinchDistance(t),i=e-pinchStart;zooming=!0,i*=zoomPinchFactor,i>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=e,swipe=rotate=zooming=!1,setProjection(),drawScene()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(e){let t=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=e.length;for(let n=0;n<e.length;++n){let r=6*n;zbuffer[n]=t*e[r]+i*e[r+1]+a*e[r+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.rendered=!1,triangleData.clear()}function drawTransparent(){let e=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,e),void transparentData.clear();if(e.length>0){transformVertices(transparentData.vertices);let t=e.length/3,i=Array(t).fill().map((e,t)=>t);i.sort((function(t,i){let a=3*t;Ia=e[a],Ib=e[a+1],Ic=e[a+2];let n=3*i;return IA=e[n],IB=e[n+1],IC=e[n+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1}));let a=Array(e.length);for(let n=0;n<t;++n){let t=3*i[n];a[3*n]=e[t],a[3*n+1]=e[t+1],a[3*n+2]=e[t+2]}gl.depthMask(!1),drawBuffer(transp!
 arentData,transparentShader,a),transparentData.rendered=!1,gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent(),requestAnimationFrame(drawBuffers)}function drawScene(){embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let e=0;e<P.length;++e)P[e].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvasWidth,canvasHeight),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(e,t,i,a){let n=e/t;xshift=(i/e+viewportShift[0])*Zoom,yshift=(a/t+viewportShift[1])*Zoom;let r=1/Zoom;if(orthographic){let e=maxBound[0]-minBound[0],t=maxBound[1]-minBound[1];if(e<t*n){let e=.5*t*n*r,i=2*e*xshift,a=t*r*yshift;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=minBound[1]*r-a,viewParam.ymax=maxBound[1]*r-a}else{let t=.5*e*r/n,i=e*r*xshift,a=2*t*yshift;viewParam.xmin=minBound[0]*r-i,viewParam.xmax=maxBound[0]*r-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}else{let e=H*r,t=e*n,i=2*t*xshift,a=2*e*yshift;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(projection())}function showCamera(){window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",projection())}function initProjection(){H=-Math.tan(.5*angleOfView)*maxBound[2],center.x=center.y=0,center.z=.5*(minBound[2]+maxBound[2]),lastZoom=Zoom=zoom0,viewParam.zmin=minBound[2],viewParam.zmax=maxBound[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasH!
 eight,gl..viewport(.5*(canvas.width-canvasWidth),.5*(canvas.height-canvasHeight),canvasWidth,canvasHeight),gl.scissor(0,0,canvas.width,canvas.height)}function setCanvas(){embedded&&(canvas.width=offscreen.width=canvasWidth,canvas.height=offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvas.width,halfCanvasHeight=.5*canvas.height,ArcballFactor=1+8*Math.hypot(viewportMargin[0],viewportMargin[1])/size2}function setsize(e,t){e>maxViewportWidth&&(e=maxViewportWidth),t>maxViewportHeight&&(t=maxViewportHeight),shift.x*=e/canvasWidth,shift.y*=t/canvasHeight,canvasWidth=e,canvasHeight=t,setCanvas(),setViewport(),setProjection(),remesh=!0}function resize(){if(zoom0=initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),absolute&&!embedded)canvasWidth=canvasWidth0*window.devicePixelRatio,canvasHeight=canvasHeight0*window.devicePixelRatio;else{let e=canvasWidth0/canvasHeight0;canvasWidth=Math.max(window.innerWidth-10,10),canvasHeight=Math.max(window.innerHeight-10,10),!orthographic&&!window.parent.asyProjection&&canvasWidth<canvasHeight*e&&(zoom0*=canvasWidth/(canvasHeight*e))}canvas.width=canvasWidth,canvas.height=canvasHeight;window.innerWidth,window.innerHeight;let e=1/zoom0;viewportShift[0]*=e,viewportShift[1]*=e,setsize(canvasWidth,canvasHeight),redrawScene()}function expand(){Zoom*=zoomFactor,setZoom()}function shrink(){Zoom/=zoomFactor,setZoom()}class Align{constructor(e,t){if(this.center=e,t){let e=t[0],i=t[1];this.ct=Math.cos(e),this.st=Math.sin(e),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(e){return[e[0]+this.center[0],e[1]+this.center[1],e[2]+this.center[2]]}T(e){let t=e[0],i=e[1],a=e[2],n=t*this.ct+a*this.st;return[n*this.cp-i*this.sp+this.center[0],n*this.sp+i*this.cp+this.center[1],-t*this.st+a*this.ct+this.center[2]]}}function Tcorners(e,t,i){let a=[e(t),e([t[0],t[1],i[2]]),e([t[0],i[1],t[2]]),e([t[0],i[1],i[2]]),e([i[0],t[1],t[2]]),e([i[0],t[1],i[2]]),e([i[0],i[1],t[2]]),e(i)];return[minbound(a!
 ),maxbound(a)]}function material(e,t,i,a,n,r){Materials.push(new Material(e,t,i,a,n,r))}function patch(e,t,i,a,n,r){P.push(new BezierPatch(e,t,i,a,n,r))}function curve(e,t,i,a,n){P.push(new BezierCurve(e,t,i,a,n))}function pixel(e,t,i,a,n){P.push(new Pixel(e,t,i,a,n))}function triangles(e,t,i,a){P.push(new Triangles(e,t,i,a))}function sphere(e,t,i,n,r){let s,o,l,h,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,g=.996685028842544,v=.0549670512339254,x=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,g],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,g],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,g],[0,1,0],[0,1,m],[0,f,u],[0,p,g]],[[p,0,g],[p,a*p,g],[v,0,x],[a*p,p,g],[w,w,1],[.05*a,0,1],[0,p,g],[0,v,x],[0,.05*a,1],[0,0,1]]],b=new Align(e,r);function T(e){let t=Array(e.length);for(let i=0;i<e.length;++i){let a=e[i];t[i]=c([s*a[0],o*a[1],l*a[2]])}return t}r?(h=1,d=0,c=b.T.bind(b)):(h=-1,d=-t,c=b.T0.bind(b));let S=Tcorners(c,[-t,-t,d],[t,t,t]),R=S[0],A=S[1];for(let e=-1;e<=1;e+=2){s=e*t;for(let e=-1;e<=1;e+=2){o=e*t;for(let e=h;e<=1;e+=2){l=e*t;for(let e=0;e<2;++e)P.push(new BezierPatch(T(M[e]),i,n,R,A))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(e,t,i,n,r){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],l=new Align(e,r);let h=Tcorners(l.T.bind(l),[-t,-t,0],[t,t,0]);P.push(new BezierPatch(function(e){let i=Array(e.length);for(let a=0;a<e.length;++a){let n=e[a];i[a]=l.T([t*n[0],t*n[1],0])}return i}(o),i,n,h[0],h[1]))}function cylinder(e,t,i,n,r,s,o){let l,h,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],[1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Align(e,s);function m(e){let t=Array(e.length);for(let a=0;a<e.length;++a){let n=e[a];t[a]=d.T([l*n[0],h*n[1],i*n[2]])}return t}let f=Tcorners(d.T.bind(d),[-t,-t,0],[t,t,i]),u=f[0],p=f[1];for(let e=-1;e<=1;e+=2){l=e*t;for(let e=-1;e<=1;e+=2)h=e*t,P.push(new BezierPatch(m(c),n!
 ,r,u,p))}if(o){let t=d.T([0,0,i]);P.push(new BezierCurve([e,t],n,r,e,t))}}function rmf(e,t,i,a,n){class r{constructor(e,t,i){this.p=e,this.r=t,this.t=i,this.s=cross(i,t)}}let s=Number.EPSILON*Math.max(abs2(e),abs2(t),abs2(i),abs2(a));function o(n){if(1==n){let n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return abs2(n)>s?unit(n):(n=[2*i[0]-t[0]-a[0],2*i[1]-t[1]-a[1],2*i[2]-t[2]-a[2]],abs2(n)>s?unit(n):[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])])}let r=[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])],o=[2*(e[0]+i[0])-4*t[0],2*(e[1]+i[1])-4*t[1],2*(e[2]+i[2])-4*t[2]],l=[t[0]-e[0],t[1]-e[1],t[2]-e[2]],h=n*n,c=[r[0]*h+o[0]*n+l[0],r[1]*h+o[1]*n+l[1],r[2]*h+o[2]*n+l[2]];return abs2(c)>s?unit(c):(h=2*n,c=[r[0]*h+o[0],r[1]*h+o[1],r[2]*h+o[2]],abs2(c)>s?unit(c):unit(r))}let l=Array(n.length),h=[t[0]-e[0],t[1]-e[1],t[2]-e[2]];abs2(h)<s&&(h=[e[0]-2*t[0]+i[0],e[1]-2*t[1]+i[1],e[2]-2*t[2]+i[2]],abs2(h)<s&&(h=[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])])),h=unit(h);let c=function(e){let t=cross(e,[0,1,0]),i=Number.EPSILON*abs2(e);return abs2(t)>i?unit(t):(t=cross(e,[0,0,1]),abs2(t)>i?unit(t):[1,0,0])}(h);l[0]=new r(e,c,h);for(let s=1;s<n.length;++s){let h=l[s-1],c=n[s],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,g=[f*e[0]+m*t[0]+d*i[0]+p*a[0],f*e[1]+m*t[1]+d*i[1]+p*a[1],f*e[2]+m*t[2]+d*i[2]+p*a[2]],v=[g[0]-h.p[0],g[1]-h.p[1],g[2]-h.p[2]];if(0!=v[0]||0!=v[1]||0!=v[2]){let e=h.r,t=unit(v),i=h.t,a=dot(t,i),n=[i[0]-2*a*t[0],i[1]-2*a*t[1],i[2]-2*a*t[2]];i=o(c);let d=2*dot(t,e),m=[e[0]-d*t[0],e[1]-d*t[1],e[2]-d*t[2]],f=unit([i[0]-n[0],i[1]-n[1],i[2]-n[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],l[s]=new r(g,unit(m),unit(i))}else l[s]=l[s-1]}return l}function tube(e,t,i,n,r,s,o){let l=rmf(e[0],e[1],e[2],e[3],[0,1/3,2/3,1]),h=a*t,c=[[t,0],[t,h],[h,t],[0,t]];function d(t,a,o,h){let d=Array(16);for(let i=0;i<4;++i){let n=l[i],r=n.r[0],s=n.s[0],m=r*t+s*a,f=r*o+s*h;r=n.r[1],s=n.s[1];let u=r*t+s*a,p=r*o+s*h;r=n.r[2],s=n.s[2];let g=r*t+s*a,v=r*o+s*h,!
 x=e[i],w=x[0];w1=x[1],w2=x[2];for(let e=0;e<4;++e){let t=c[e],a=t[0],n=t[1];d[4*i+e]=[m*a+f*n+w,u*a+p*n+w1,g*a+v*n+w2]}}P.push(new BezierPatch(d,i,n,r,s))}d(1,0,0,1),d(0,-1,1,0),d(-1,0,0,-1),d(0,1,-1,0),o&&P.push(new BezierCurve(e,i,n,r,s))}async function getReq(e){return(await fetch(e)).arrayBuffer()}function rgb(e){return e.getBytes().filter((e,t)=>t%4!=3)}function createTexture(e,t,i=gl.RGB16F){let a=e.width(),n=e.height(),r=gl.createTexture();return gl.activeTexture(gl.TEXTURE0+t),gl.bindTexture(gl.TEXTURE_2D,r),gl.pixelStorei(gl.UNPACK_ALIGNMENT,1),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texImage2D(gl.TEXTURE_2D,0,i,a,n,0,gl.RGB,gl.FLOAT,rgb(e)),r}async function initIBL(){let e=imageURL+image+"/";function t(e){return new Promise(t=>setTimeout(t,e))}for(;!Module.EXRLoader;)await t(0);promises=[getReq(imageURL+"refl.exr").then(e=>{let t=new Module.EXRLoader(e);IBLbdrfMap=createTexture(t,0)}),getReq(e+"diffuse.exr").then(e=>{let t=new Module.EXRLoader(e);IBLDiffuseMap=createTexture(t,1)})],refl_promise=[],refl_promise.push(getReq(e+"refl0.exr"));for(let t=1;t<=roughnessStepCount;++t)refl_promise.push(getReq(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let t=gl.createTexture();gl.activeTexture(gl.TEXTURE0+2),gl.pixelStorei(gl.UNPACK_ALIGNMENT,1),gl.bindTexture(gl.TEXTURE_2D,t),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAX_LEVEL,e.length-1),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR_MIPMAP_LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameterf(gl.TEXTURE_2D,gl.TEXTURE_MIN_LOD,0),gl.texParameterf(gl.TEXTURE_2D,gl.TEXTURE_MAX_LOD,roughnessStepCount);for(let t=0;t<e.length;++t){let i=new Module.EXRLoader(e[t]);gl.texImage2D(gl.TEXTURE_2D,t,gl.RGB16F,i.width(),i.height(),0,gl.RGB,gl.FLOAT,rgb(i))}IBLReflMap=t}),promises.push(finished_promise),await Promise.all(promises)}function webGLStart(){canvas=document.getElementById("Asymptote"),embedded=wi!
 ndow.top.document!=document,initGL(),gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1),canvasWidth0=canvasWidth,canvasHeight0=canvasHeight,mat4.identity(rotMat),0!=window.innerWidth&&0!=window.innerHeight&&resize(),window.addEventListener("resize",resize,!1),ibl&&initIBL().then(SetIBL).then(redrawScene)}
+let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif\n  Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n  MaterialIndex=int(materialIndex);\n#ifdef COLOR\n  Color=color;\n#endif\n#else\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int !
 MaterialIndex;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n  float x=cart.x;\n  float y=cart.z;\n  float z=cart.y;\n\n  float r=length(cart);\n  float theta=r > 0.0 ? acos(z/r) : 0.0;\n  float phi=atan(y,x);\n\n  return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n  vec3 sphericalVec=cart2sphere(cartVec);\n  sphericalVec.y=sphericalVec.y*piInv;\n  sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n  return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n  vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n  vec3 reflectVec=normalize(reflect(-viewDir,normal));\n  vec2 reflCoord=normalizedAngle(reflectVec);\n  vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n  vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n  float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n  vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n  vec3 metal=diffuse.rgb*IBLRefl;\n  return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  flo!
 at denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n\n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegaln=max(dot(lightDirection,normal),0.0);\n\n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n\n  float denom=4.0*omegain*omegaln;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n\n  return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[abs(MaterialIndex)-1];\n  emissive=m.emissive;\n  if(MaterialIndex >= 0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n  }\n#else\n  m=Materials[MaterialIndex];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.!
 0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n  color=IBLColor(viewDir);\n#else\n  Roughness2=roughness*roughness;\n  color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n#endif\n  OUTVALUE=vec4(color,diffuse.a);\n#else\n  OUTVALUE=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=n*Math.max(1,Math.abs(t),Math.abs(e))};var n=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var n=s(i(2)),r=s(i(3));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=n,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0!
 ,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*a-o*l,m=-c*s+o*h,f=l*s-a*h,u=i*d+n*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*n+r*l)*u,t[2]=(o*n-r*a)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*s)*u,t[6]=f*u,t[7]=(-l*i+n*h)*u,t[8]=(a*i-n*s)*u,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],x=e[15],g=i*o-n*a,w=i*h-r*a,M=i*l-s*a,b=n*h-r*o,R=n*l-s*o,T=r*l-s*h,y=c*p-d*u,A=c*v-m*u,E=c*x-f*u,I=d*v-m*p,L=d*x-f*p,N=m*x-f*v,O=g*N-w*L+M*I+b*E-R*A+T*y;if(!O)return null;return O=1/O,t[0]=(o*N-h*L+l*I)*O,t[1]=(r*L-n*N-s*I)*O,t[2]=(p*T-v*R+x*b)*O,t[3]=(m*R-d*T-f*b)*O,t[4]=(h*E-a*N-l*A)*O,t[5]=(i*N-r*E+s*A)*O,t[6]=(v*M-u*T-x*w)*O,t[7]=(c*T-m*M+f*w)*O,t[8]=(a*L-o*E+l*y)*O,t[9]=(n*E-i*L-s*y)*O,t[10]=(u*R-p*M+x*g)*O,t[11]=(d*M-c*R-f*g)*O,t[12]=(o*A-a*I-h*y)*O,t[13]=(i*I-n*A+r*y)*O,t[14]=(p*w-u*b-v*g)*O,t[15]=(c*b-d*w+m*g)*O,t},e.multiply=r,e.translate=function(t,e,i){var n=i[0],r=i[1],s=i[2],a=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,x=void 0;e===t?(t[12]=e[0]*n+e[4]*r+e[8]*s+e[12],t[13]=e[1]*n+e[5]*r+e[9]*s+e[13],t[14]=e[2]*n+e[6]*r+e[10]*s+e[14],t[15]=e[3]*n+e[7]*r+e[11]*s+e[15]):(a=e[0],o=e[1],h=e[2],!
 l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=x,t[12]=a*n+c*r+u*s+e[12],t[13]=o*n+d*r+p*s+e[13],t[14]=h*n+m*r+v*s+e[14],t[15]=l*n+f*r+x*s+e[15]);return t},e.rotate=function(t,e,i,r){var s,a,o,h,l,c,d,m,f,u,p,v,x,g,w,M,b,R,T,y,A,E,I,L,N=r[0],O=r[1],_=r[2],P=Math.sqrt(N*N+O*O+_*_);if(Math.abs(P)<n.EPSILON)return null;N*=P=1/P,O*=P,_*=P,s=Math.sin(i),a=Math.cos(i),o=1-a,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],x=e[9],g=e[10],w=e[11],M=N*N*o+a,b=O*N*o+_*s,R=_*N*o-O*s,T=N*O*o-_*s,y=O*O*o+a,A=_*O*o+N*s,E=N*_*o+O*s,I=O*_*o-N*s,L=_*_*o+a,t[0]=h*M+m*b+v*R,t[1]=l*M+f*b+x*R,t[2]=c*M+u*b+g*R,t[3]=d*M+p*b+w*R,t[4]=h*T+m*y+v*A,t[5]=l*T+f*y+x*A,t[6]=c*T+u*y+g*A,t[7]=d*T+p*y+w*A,t[8]=h*E+m*I+v*L,t[9]=l*E+f*I+x*L,t[10]=c*E+u*I+g*L,t[11]=d*E+p*I+w*L,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,s,a,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<n.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),s=Math.cos(e),a=1-s,t[0]=o*o*a+s,t[1]=h*o*a+l*r,t[2]=l*o*a-h*r,t[3]=0,t[4]=o*h*a-l*r,t[5]=h*h*a+s,t[6]=l*h*a+o*r,t[7]=0,t[8]=o*l*a+h*r,t[9]=h*l*a-o*r,t[10]=l*l*a+s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,n,r,s,a){var o=1/(i-e),h=1/(r-n),l=1/(s-a);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+n)*h,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,n,r,s,a){var o=1/(e-i),h=1/(n-r),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+n)*h,t[14]=(a+s)*l,t[15]=1,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!
 (e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var n=e[0],r=e[1],s=e[2],a=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],x=e[14],g=e[15],w=i[0],M=i[1],b=i[2],R=i[3];return t[0]=w*n+M*o+b*d+R*p,t[1]=w*r+M*h+b*m+R*v,t[2]=w*s+M*l+b*f+R*x,t[3]=w*a+M*c+b*u+R*g,w=i[4],M=i[5],b=i[6],R=i[7],t[4]=w*n+M*o+b*d+R*p,t[5]=w*r+M*h+b*m+R*v,t[6]=w*s+M*l+b*f+R*x,t[7]=w*a+M*c+b*u+R*g,w=i[8],M=i[9],b=i[10],R=i[11],t[8]=w*n+M*o+b*d+R*p,t[9]=w*r+M*h+b*m+R*v,t[10]=w*s+M*l+b*f+R*x,t[11]=w*a+M*c+b*u+R*g,w=i[12],M=i[13],b=i[14],R=i[15],t[12]=w*n+M*o+b*d+R*p,t[13]=w*r+M*h+b*m+R*v,t[14]=w*s+M*l+b*f+R*x,t[15]=w*a+M*c+b*u+R*g,t}}])})),function(){document.asy={canvasWidth:0,canvasHeight:0,absolute:!1,minBound:[0,0,0],maxBound:[0,0,0],orthographic:!1,angleOfView:0,initialZoom:0,viewportShift:[0,0],viewportMargin:[0,0],background:[],zoomFactor:0,zoomPinchFactor:0,zoomPinchCap:0,zoomStep:0,shiftHoldDistance:0,shiftWaitTime:0,vibrateTime:0,ibl:!1,webgl2:!1,imageURL:"",image:"",Transform:[],Centers:[]};let t,e,i,n,r,s,a,o=document.asy,h=[],l=[],c=[],d=0,m=2;const f=Math.acos(-1),u=f/180,p=Math.ceil(1-Math.log2(Number.EPSILON));let v,x,g,w,M,b,R,T=mat4.create(),y=mat4.create(),A=mat4.create(),E=mat4.create(),I=mat3.create(),L=mat3.create(),N=mat4.create(),O=mat4.create(),_={x:0,y:0,z:0},P={x:0,y:0},S={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},U=!0,V=0,B=!1,D=null,C=null,F=[],z=[],H=[],X=[],G=null,W=null,j=null;function k(){o.embedded||st(),rt(o.ibl)}class Y{constructor(t,e,i,n,r,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=n,this.metallic=r,this.fresnel0=s}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Materials["+i+"]."+n);t.uniform4fv(n("diffuse"),new Float32Array(this.diffuse)),t.uniform4fv(n("emissive"),new Float32Array(this.emissive)),t.uniform4fv(n("specular"),new Float32Array(this.specular)),t.uniform4f(n("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let $,q,K,Z,Q,J,tt,et,it;class nt{constructor(t,e){this.direction=t,this.color=e}setUniform(e,i){let n=n=>t.getUn!
 iformLocation(e,"Lights["+i+"]."+n);t.uniform3fv(n("direction"),new Float32Array(this.direction)),t.uniform3fv(n("color"),new Float32Array(this.color))}}function rt(e=!1){let i=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS);r=Math.floor((i-14)/4),m=Math.min(Math.max(m,c.length),r),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),xe=Lt(pixelOpt),ge=Lt(materialOpt),we=Lt(colorOpt),Me=Lt(transparentOpt)}function st(){t.deleteProgram(Me),t.deleteProgram(we),t.deleteProgram(ge),t.deleteProgram(xe)}function at(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];i.gl=t,i.nlights=l.length,i.Nmaterials=m,i.maxMaterials=r,i.pixelShader=xe,i.materialShader=ge,i.colorShader=we,i.transparentShader=Me}function ot(t,e){let i;return o.webgl2&&(i=t.getContext("webgl2",{alpha:e}),o.embedded&&!i)?(o.webgl2=!1,o.ibl=!1,ht(!1),null):(i||(o.webgl2=!1,o.ibl=!1,i=t.getContext("webgl",{alpha:e})),i||alert("Could not initialize WebGL"),i)}function ht(s=!0){if(o.ibl&&(o.webgl2=!0),e=o.background[3]<1,o.embedded){let a=window.top.document;if(s&&(n=o.canvas.getContext("2d")),i=o.webgl2?a.offscreen2:a.offscreen,i||(i=a.createElement("canvas"),o.webgl2?a.offscreen2=i:a.offscreen=i),o.webgl2?a.asygl2||(a.asygl2=Array(2)):a.asygl||(a.asygl=Array(2)),asygl=o.webgl2?a.asygl2:a.asygl,asygl[e]&&asygl[e].gl)!function(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];t=i.gl,d=i.nlights,m=i.Nmaterials,r=i.maxMaterials,xe=i.pixelShader,ge=i.materialShader,we=i.colorShader,Me=i.transparentShader}(),(l.length!=d||Math.min(c.length,r)>m)&&(rt(),at());else{if(rc=ot(i,e),!rc)return;t=rc,rt(),o.webgl2?a.asygl2[e]={}:a.asygl[e]={},at()}}else t=ot(o.canvas,e),rt();$=t.getExtension("OES_element_index_uint"),q=t.TRIANGLES,K=new mt(t.POINTS),Z=new mt(t.LINES),Q=new mt,J=new mt,tt=new mt,et=new mt}function lt(t,e,i,n=[]){let r=o.webgl2?"300 es":"100",s=Array(...n),a=[["nlights",0==V?l.l!
 ength:0],["Nmaterials",m]],h=[["int","Nlights",Math.max(l.length,1)]];o.webgl2&&s.push("WEBGL2"),o.ibl&&a.push(["ROUGHNESS_STEP_COUNT",8..toFixed(2)]),o.orthographic&&s.push("ORTHOGRAPHIC"),macros_str=a.map(t=>`#define ${t[0]} ${t[1]}`).join("\n"),define_str=s.map(t=>"#define "+t).join("\n"),const_str=h.map(t=>`const ${t[0]} ${t[1]}=${t[2]};`).join("\n"),ext_str=[].map(t=>`#extension ${t}: enable`).join("\n"),shaderSrc=`#version ${r}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n  \n${e}\n  `;let c=t.createShader(i);return t.shaderSource(c,shaderSrc),t.compileShader(c),t.getShaderParameter(c,t.COMPILE_STATUS)?c:(alert(t.getShaderInfoLog(c)),null)}function ct(e,i,n,r=t.ARRAY_BUFFER){return e.length>0&&(0==i&&(i=t.createBuffer(),n=!0),t.bindBuffer(r,i),n&&t.bufferData(r,e,t.STATIC_DRAW)),i}function dt(e,i,n=e.indices){if(0==e.indices.length)return;let r=i!=xe;!function(e,i){let n=i==xe;t.useProgram(i),t.enableVertexAttribArray(Tt),n&&t.enableVertexAttribArray(It);let r=!n&&l.length>0;r&&t.enableVertexAttribArray(yt);t.enableVertexAttribArray(At),i.projViewMatUniform=t.getUniformLocation(i,"projViewMat"),i.viewMatUniform=t.getUniformLocation(i,"viewMat"),i.normMatUniform=t.getUniformLocation(i,"normMat"),(i==we||i==Me)&&t.enableVertexAttribArray(Et);if(r)for(let t=0;t<l.length;++t)l[t].setUniform(i,t);for(let t=0;t<e.materials.length;++t)e.materials[t].setUniform(i,t);t.uniformMatrix4fv(i.projViewMatUniform,!1,E),t.uniformMatrix4fv(i.viewMatUniform,!1,A),t.uniformMatrix3fv(i.normMatUniform,!1,I)}(e,i),null!=W&&(t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,j),t.uniform1i(t.getUniformLocation(i,"reflBRDFSampler"),0),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,W),t.uniform1i(t.getUniformLocation(i,"diffuseSampler"),1),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,G),t.uniform1i(t.getUniformLocation(i,"reflImgSampler"),2));let s=U||e.partial||!e.rendered;e.verticesBuffer=ct(ne!
 w Float32Array(e.vertices),e.verticesBuffer,s),t.vertexAttribPointer(Tt,3,t.FLOAT,!1,r?24:16,0),r?l.length>0&&t.vertexAttribPointer(yt,3,t.FLOAT,!1,24,12):t.vertexAttribPointer(It,1,t.FLOAT,!1,16,12),e.materialsBuffer=ct(new Int16Array(e.materialIndices),e.materialsBuffer,s),t.vertexAttribPointer(At,1,t.SHORT,!1,2,0),i!=we&&i!=Me||(e.colorsBuffer=ct(new Float32Array(e.colors),e.colorsBuffer,s),t.vertexAttribPointer(Et,4,t.FLOAT,!0,0,0)),e.indicesBuffer=ct($?new Uint32Array(n):new Uint16Array(n),e.indicesBuffer,s,t.ELEMENT_ARRAY_BUFFER),e.rendered=!0,t.drawElements(r?V?t.LINES:e.type:t.POINTS,n.length,$?t.UNSIGNED_INT:t.UNSIGNED_SHORT,0)}class mt{constructor(t){this.type=t||q,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(it),this.nvertices++}iVertex(t,e,i,n=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=it;let s=4*t;this.colors[s]=n[0],this.colors[s+1]=n[1],this.colors[s+2]=n[2],this.colors[s+3]=n[3],this.indices.push(t)}append(t){ft(this.vertices,t.vertices),ft(this.materialIndices,t.materi!
 alIndices),ft(this.colors,t.colors),function(t,e,i){let n=t.length,r=e.length;t.length+=e.length;for(let s=0;s<r;++s)t[n+s]=e[s]+i}(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function ft(t,e){let i=t.length,n=e.length;t.length+=n;for(let r=0;r<n;++r)t[i+r]=e[r]}class ut{constructor(){this.data=new mt,this.Onscreen=!1,this.m=[]}offscreen(t){let e=E,i=t[0],n=i[0],r=i[1],s=i[2],a=1/(e[3]*n+e[7]*r+e[11]*s+e[15]);this.x=this.X=(e[0]*n+e[4]*r+e[8]*s+e[12])*a,this.y=this.Y=(e[1]*n+e[5]*r+e[9]*s+e[13])*a;for(let i=1,n=t.length;i<n;++i){let n=t[i],r=n[0],s=n[1],a=n[2],o=1/(e[3]*r+e[7]*s+e[11]*a+e[15]),h=(e[0]*r+e[4]*s+e[8]*a+e[12])*o,l=(e[1]*r+e[5]*s+e[9]*a+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],n=this.c[2],r=t[0]-e,s=t[1]-i,a=t[2]-n;return[r*I[0]+s*I[3]+a*I[6]+e,r*I[1]+s*I[4]+a*I[7]+i,r*I[2]+s*I[5]+a*I[8]+n]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=m&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(c[this.MaterialIndex])),it=t.materialTable[this.MaterialIndex]}render(){let t;var e,i;if(this.setMaterialIndex(),0==this.CenterIndex?(e=this.Min,i=this.Max,t=[e,[e[0],e[1],i[2]],[e[0],i[1],e[2]],[e[0],i[1],i[2]],[i[0],e[1],e[2]],[i[0],e[1],i[2]],[i[0],i[1],e[2]],i]):(this.c=o.Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let n,r=this.controlpoints;if(0==this.CenterIndex){if(!U&&this.Onscreen)return void this.append();n=r}else{let t=r.length;n=Array(t);for(let e=0;e<t;++e)n[e]=this.T(r[e])}let s=o.orthographic?1:this.Min[2]/o.maxBound[2],a=.75*Math.hypot(s*(S.xmax-S.xmin),s*(S.ymax-S.ymi!
 n))/b;this.res2=a*a,this.Epsilon=.1*a,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(n)}}function pt(t,e){let i=t[0],n=t.length;for(let r=1;r<n;++r)i=e(i,t[r]);return i}class vt extends ut{constructor(t,e,i,n,r,s){super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,this.color=n;let a=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==a||4==a?t+n[3][3]<1020:t<765}else this.transparent=c[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data);let o=this.L2norm2(this.controlpoints),h=Math.sqrt(1e3*Number.EPSILON*o);this.epsilon=o*Number.EPSILON,this.Min=r||this.Bounds(this.controlpoints,Math.min,h),this.Max=s||this.Bounds(this.controlpoints,Math.max,h)}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.color?this.setMaterial(J,Ae):this.setMaterial(Q,ye)}cornerbound(t,e){let i=e(t[0],t[3]);return i=e(i,t[12]),e(i,t[15])}controlbound(t,e){let i=e(t[1],t[2]);return i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[6]),i=e(i,t[7]),i=e(i,t[8]),i=e(i,t[9]),i=e(i,t[10]),i=e(i,t[11]),i=e(i,t[13]),e(i,t[14])}bound(t,e,i,n,r){if(i=e(i,this.cornerbound(t,e)),e(-1,1)*(i-this.controlbound(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Nt(t[0],t[1],t[2],t[3]),a=new Nt(t[4],t[5],t[6],t[7]),o=new Nt(t[8],t[9],t[10],t[11]),h=new Nt(t[12],t[13],t[14],t[15]),l=new Nt(t[0],t[4],t[8],t[12]),c=new Nt(s.m0,a.m0,o.m0,h.m0),d=new Nt(s.m3,a.m3,o.m3,h.m3),m=new Nt(s.m5,a.m5,o.m5,h.m5),f=new Nt(s.m4,a.m4,o.m4,h.m4),u=new Nt(s.m2,a.m2,o.m2,h.m2),p=new Nt(t[3],t[7],t[11],t[15]),v=[t[0],s.m0,s.m3,s.m5,l.m0,c.m0,d.m0,m.m0,l.m3,c.m3,d.m3,m.m3,l.m5,c.m5,d.m5,m.m5];i=this.bound(v,e,i,n,r);let x=[l.m5,c.m5,d.m5,m.m5,l.m4,c.m4,d.m4,m.m4,l.m2,c.m2,d.m2,m.m2,t[12],h.m0,h.m3,h.m5];i=this.bound(x,e,i,n,r);let g=[m.m5,f.m5,u.m5,p.m5,m.m4,f.m4,u.m4,p.m4,m.m2,f.m2,u.m2,p.m2,h.m5,h.m4,h.m2,t[15]];i=this.bound(g,e,i,n,r);let w=[s.m5,s.m4,s.m2,t[3],m.m0,f.m0,u.m0,p.m0,m.m3,f.m3,u.m3,p.m3,m.m5,f.m5,u.m5,p.m5];return this.bound(w,e,i,n,r)}cornerboundtri(t,e){let i=!
 e(t[0],t[6]);return e(i,t[9])}controlboundtri(t,e){let i=e(t[1],t[2]);return i=e(i,t[3]),i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[7]),e(i,t[8])}boundtri(t,e,i,n,r){if(i=e(i,this.cornerboundtri(t,e)),e(-1,1)*(i-this.controlboundtri(t,e))>=-n||0==r)return i;--r,n*=2;let s=new _t(t),a=[s.l003,s.l102,s.l012,s.l201,s.l111,s.l021,s.l300,s.l210,s.l120,s.l030];i=this.boundtri(a,e,i,n,r);let o=[s.l300,s.r102,s.r012,s.r201,s.r111,s.r021,s.r300,s.r210,s.r120,s.r030];i=this.boundtri(o,e,i,n,r);let h=[s.l030,s.u102,s.u012,s.u201,s.u111,s.u021,s.r030,s.u210,s.u120,s.u030];i=this.boundtri(h,e,i,n,r);let l=[s.r030,s.u201,s.r021,s.u102,s.c111,s.r012,s.l030,s.l120,s.l210,s.l300];return this.boundtri(l,e,i,n,r)}Bounds(t,e,i){let n=Array(3),r=t.length,s=Array(r);for(let a=0;a<3;++a){for(let e=0;e<r;++e)s[e]=t[e][a];n[a]=16==r?this.bound(s,e,s[0],i,p):10==r?this.boundtri(s,e,s[0],i,p):pt(s,e)}return[n[0],n[1],n[2]]}L2norm2(t){let e=t[0],i=0,n=t.length;for(let r=1;r<n;++r)i=Math.max(i,St([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));return i}processTriangle(t){let e=t[0],i=t[1],n=t[2],r=Pt(Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-e[0],n[1]-e[1],n[2]-e[2]]));if(!this.offscreen([e,i,n])){let t,s,a;this.color?(t=this.data.Vertex(e,r,this.color[0]),s=this.data.Vertex(i,r,this.color[1]),a=this.data.Vertex(n,r,this.color[2])):(t=this.vertex(e,r),s=this.vertex(i,r),a=this.vertex(n,r)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],n=t[2],r=t[3],s=Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-i[0],n[1]-i[1],n[2]-i[2]]),a=Vt([n[0]-r[0],n[1]-r[1],n[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=Pt([s[0]+a[0],s[1]+a[1],s[2]+a[2]]);if(!this.offscreen([e,i,n,r])){let t,s,a,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),a=this.data.Vertex(n,o,this.color[2]),h=this.data.Vertex(r,o,this.!
 color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),a=this.vertex(n,o),h=this.vertex(r,o)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,n,r){new wt([t[e],t[i],t[n],t[r]],0,it,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=V&&(it=this.color?-1-it:1+it),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==V)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],n=t[12],r=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],n);St(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r),St(s)<this.epsilon&&(s=this.normal(r,t[11],t[7],i,t[4],t[8],n)));let a=this.normal(e,t[4],t[8],n,t[13],t[14],r);St(a)<this.epsilon&&(a=this.normal(e,t[4],t[8],n,t[11],t[7],i),St(a)<this.epsilon&&(a=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(n,t[13],t[14],r,t[11],t[7],i);St(o)<this.epsilon&&(o=this.normal(n,t[13],t[14],r,t[2],t[1],e),St(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],n,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(St(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],n),St(h)<this.epsilon&&(h=this.normal(n,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,s,l),u=this.data.Vertex(n,a,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,n,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(n,a),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,n,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data)!
 :this.color?J.append(this.data):Q.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:this.color?J.rendered=!1:Q.rendered=!1}Render(t,e,i,n,r,s,a,o,h,l,c,d,m,f,u,p,v){let x=this.Distance(t);if(x[0]<this.res2&&x[1]<this.res2)this.offscreen([s,a,o])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n))),this.offscreen([s,o,h])||(0==V?(this.data.indices.push(e),this.data.indices.push(n),this.data.indices.push(r)):(this.data.indices.push(n),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let g=t[0],w=t[3],M=t[12],b=t[15];if(x[0]<this.res2){let x=new Ot(g,t[1],t[2],w),R=new Ot(t[4],t[5],t[6],t[7]),T=new Ot(t[8],t[9],t[10],t[11]),y=new Ot(M,t[13],t[14],b),A=[g,x.m0,x.m3,x.m5,t[4],R.m0,R.m3,R.m5,t[8],T.m0,T.m3,T.m5,M,y.m0,y.m3,y.m5],E=[x.m5,x.m4,x.m2,w,R.m5,R.m4,R.m2,t[7],T.m5,T.m4,T.m2,t[11],y.m5,y.m4,y.m2,b],I=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);St(I)<=this.epsilon&&(I=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let L=this.normal(E[3],E[2],E[1],E[0],E[4],E[8],E[12]);St(L)<=this.epsilon&&(L=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15]),St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12])));let N=this.Epsilon,O=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(E[12],E[8],E[4],E[0]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[15];let _=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(A[3],A[7],A[11],A[15]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[0];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),x[e]=.5*(v[e]+f[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,i,g,w,s,a,O,_,l,c,!1,m,f,u,t,!
 x),this.Render(E,w,g,n,r,_,O,o,h,!1,c,d,m,x,t,p,v)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,i,t,f,s,a,O,_,l,c,!1,m),this.Render(E,f,t,n,r,_,O,o,h,!1,c,d,m)}return}if(x[1]<this.res2){let x=new Ot(g,t[4],t[8],M),R=new Ot(t[1],t[5],t[9],t[13]),T=new Ot(t[2],t[6],t[10],t[14]),y=new Ot(w,t[7],t[11],b),A=[g,t[1],t[2],w,x.m0,R.m0,T.m0,y.m0,x.m3,R.m3,T.m3,y.m3,x.m5,R.m5,T.m5,y.m5],E=[x.m5,R.m5,T.m5,y.m5,x.m4,R.m4,T.m4,y.m4,x.m2,R.m2,T.m2,y.m2,M,t[13],t[14],b],I=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),St(I)<=this.epsilon&&(I=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let L=this.normal(E[15],E[11],E[7],E[3],E[2],E[1],E[0]);St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12]),St(L)<=this.epsilon&&(L=this.normal(E[12],E[13],E[14],E[15],E[2],E[1],E[0])));let N=this.Epsilon,O=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(E[0],E[1],E[2],E[3]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[12];let _=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(A[15],A[14],A[13],A[12]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[3];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(p[e]+v[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,g,w,r,s,O,_,h,l,!1,d,m,f,t,x,v),this.Render(E,g,i,n,w,O,a,o,_,l,c,d,!1,t,u,p,x)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,t,f,r,s,O,_,h,l,!1,d,m),this.Render(E,t,i,n,f,O,a,o,_,l,c,d,!1)}return}let R=new Ot(g,t[1],t[2],w),T=new Ot(t[4],t[5],t[6],t[7]),y=new Ot(t[8],t[9],t[10],t[11]),A=new Ot(M,t[13],t[14],b),E=new Ot(g,t[4],t[8],M),I=new Ot(R.m0,T.m0,y.m0,A.m0),L=new Ot(R.m3,T.m3,y.m3,A.m3),N=new Ot(R.m5,T.m5,y.m5,A.m5),O=new Ot(R.m4,T.m4,y.m4,A.m4),_=new Ot(R.m2,T.m2,y.m2,A.m2),P=new Ot(w,t[7],t[11],b),S=[g,R.m0,R.m3,R.m5,E.m0,I.m0,L.m0,N.m0,E.m3,I.m3,L.m!
 3,N.m3,E..m5,I.m5,L.m5,N.m5],U=[E.m5,I.m5,L.m5,N.m5,E.m4,I.m4,L.m4,N.m4,E.m2,I.m2,L.m2,N.m2,M,A.m0,A.m3,A.m5],V=[N.m5,O.m5,_.m5,P.m5,N.m4,O.m4,_.m4,P.m4,N.m2,O.m2,_.m2,P.m2,A.m5,A.m4,A.m2,b],B=[R.m5,R.m4,R.m2,w,N.m0,O.m0,_.m0,P.m0,N.m3,O.m3,_.m3,P.m3,N.m5,O.m5,_.m5,P.m5],D=S[15],C=this.normal(S[0],S[4],S[8],S[12],S[13],S[14],S[15]);St(C)<this.epsilon&&(C=this.normal(S[0],S[4],S[8],S[12],S[11],S[7],S[3]),St(C)<this.epsilon&&(C=this.normal(S[3],S[2],S[1],S[0],S[13],S[14],S[15])));let F=this.normal(U[12],U[13],U[14],U[15],U[11],U[7],U[3]);St(F)<this.epsilon&&(F=this.normal(U[12],U[13],U[14],U[15],U[2],U[1],U[0]),St(F)<this.epsilon&&(F=this.normal(U[0],U[4],U[8],U[12],U[11],U[7],U[3])));let z=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);St(z)<this.epsilon&&(z=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),St(z)<this.epsilon&&(z=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let H=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);St(H)<this.epsilon&&(H=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]),St(H)<this.epsilon&&(H=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12])));let X=this.normal(V[3],V[2],V[1],D,V[4],V[8],V[12]),G=this.Epsilon,W=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(U[0],U[1],U[2],U[3]));W=[W[0]-G*t[0],W[1]-G*t[1],W[2]-G*t[2]]}else W=S[12];let j=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-G*t[0],j[1]-G*t[1],j[2]-G*t[2]]}else j=U[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-G*t[0],k[1]-G*t[1],k[2]-G*t[2]]}else k=V[3];let Y=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(S[3],S[7],S[11],S[15]));Y=[Y[0]-G*t[0],Y[1]-G*t[1],Y[2]-G*t[2]]}else Y=B[0];if(f){let t=Array(4),x=Array(4),g=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*!
 (f[e]+u[e]),x[e]=.5*(u[e]+p[e]),g[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+g[e]);let b=this.data.Vertex(W,C,t),R=this.data.Vertex(j,F,x),T=this.data.Vertex(k,z,g),y=this.data.Vertex(Y,H,w),A=this.data.Vertex(D,X,M);this.Render(S,e,b,A,y,s,W,D,Y,l,!1,!1,m,f,t,M,w),this.Render(U,b,i,R,A,W,a,j,D,l,c,!1,!1,t,u,x,M),this.Render(V,A,R,n,T,D,j,o,k,!1,c,d,!1,M,x,p,g),this.Render(B,y,A,T,r,Y,D,k,h,!1,!1,d,m,w,M,g,v)}else{let t=this.vertex(W,C),f=this.vertex(j,F),u=this.vertex(k,z),p=this.vertex(Y,H),v=this.vertex(D,X);this.Render(S,e,t,v,p,s,W,D,Y,l,!1,!1,m),this.Render(U,t,i,f,v,W,a,j,D,l,c,!1,!1),this.Render(V,v,f,n,u,D,j,o,k,!1,c,d,!1),this.Render(B,p,v,u,r,Y,D,k,h,!1,!1,d,m)}}}process3(t){if(1==V)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],n=t[9],r=this.normal(n,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],n),a=this.normal(i,t[7],t[8],n,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(n,a,l);this.Render3(t,c,d,m,e,i,n,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,s),l=this.vertex(n,a);this.Render3(t,o,h,l,e,i,n,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,n,r,s,a,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,s,a])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],x=t[4],g=t[5],w=t[6],M=t[7],b=t[8],R=t[9],T=[.5*(R[0]+g[0]),.5*(R[1]+g[1]),.5*(R[2]+g[2])],y=[.5*(R[0]+b[0]),.5*(R[1]+b[1]),.5*(R[2]+b[2])],A=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],E=[.5*(b[0]+x[0]),.5*(b[1]+x[1]),.5*(b[2]+x[2])],I=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],L=[.5*(p[0]+x[0]),.5*(p[1]+x[1]),.5*(p[2]+x[2])],N=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[!
 2]+f[2])],O=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],_=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],P=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],S=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],U=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(T[0]+A[0]),.5*(T[1]+A[1]),.5*(T[2]+A[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],D=[.5*(A[0]+N[0]),.5*(A[1]+N[1]),.5*(A[2]+N[2])],C=[.5*E[0]+.25*(x[0]+u[0]),.5*E[1]+.25*(x[1]+u[1]),.5*E[2]+.25*(x[2]+u[2])],F=[.5*(I[0]+_[0]),.5*(I[1]+_[1]),.5*(I[2]+_[2])],z=[.5*L[0]+.25*(x[0]+M[0]),.5*L[1]+.25*(x[1]+M[1]),.5*L[2]+.25*(x[2]+M[2])],H=[.25*(g[0]+x[0])+.5*O[0],.25*(g[1]+x[1])+.5*O[1],.25*(g[2]+x[2])+.5*O[2]],X=[.5*(P[0]+S[0]),.5*(P[1]+S[1]),.5*(P[2]+S[2])],G=[.5*(S[0]+U[0]),.5*(S[1]+U[1]),.5*(S[2]+U[2])],W=[.5*(z[0]+X[0]),.5*(z[1]+X[1]),.5*(z[2]+X[2])],j=[.5*(z[0]+G[0]),.5*(z[1]+G[1]),.5*(z[2]+G[2])],k=[.5*(X[0]+G[0]),.5*(X[1]+G[1]),.5*(X[2]+G[2])],Y=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],Z=[.5*(D[0]+C[0]),.5*(D[1]+C[1]),.5*(D[2]+C[2])],Q=[.5*(V[0]+D[0]),.5*(V[1]+D[1]),.5*(V[2]+D[2])],J=[f,P,N,X,[.5*(L[0]+P[0]),.5*(L[1]+P[1]),.5*(L[2]+P[2])],D,k,W,Z,Q],tt=[k,G,j,U,[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y,w,_,F,q],et=[Q,K,V,$,[.5*(T[0]+E[0]),.5*(T[1]+E[1]),.5*(T[2]+E[2])],T,q,B,y,R],it=[q,$,Y,K,[.25*(A[0]+I[0]+S[0]+x[0]),.25*(A[1]+I[1]+S[1]+x[1]),.25*(A[2]+I[2]+S[2]+x[2])],j,Q,Z,W,k],nt=this.normal(k,j,Y,q,$,K,Q),rt=this.normal(q,$,K,Q,Z,W,k),st=this.normal(Q,Z,W,k,j,Y,q),at=this.Epsilon,ot=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!o)if(o=zt(w,M,b,R)<this.res2){let t=Pt(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-at*t[0],ot[1]-at*t[1],ot[2]-at*t[2]]}else ot=q;let ht=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])];if(!h)if(h=zt(f,p,g,R)<this.res2){let t=Pt(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-at*t[0],ht[1]-at*t[1],ht!
 [2]-at*t[2]]}else ht=Q;let lt=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!l)if(l=zt(f,u,v,w)<this.res2){let t=Pt(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-at*t[0],lt[1]-at*t[1],lt[2]-at*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,nt,t),v=this.data.Vertex(ht,rt,f),x=this.data.Vertex(lt,st,u);this.Render3(J,e,x,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,x,i,p,lt,s,ot,o,!1,l,u,d,t),this.Render3(et,v,p,n,ht,ot,a,o,h,!1,f,t,m),this.Render3(it,p,v,x,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,nt),c=this.vertex(ht,rt),d=this.vertex(lt,st);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,n,ht,ot,a,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],n=t[12],r=t[15],s=Ht(e,n,i,r);s=Math.max(zt(e,t[4],t[8],n)),s=Math.max(s,zt(t[1],t[5],t[9],t[13])),s=Math.max(s,zt(i,t[7],t[11],r)),s=Math.max(s,zt(t[2],t[6],t[10],t[14]));let a=Ht(e,i,n,r);return a=Math.max(a,zt(e,t[1],t[2],i)),a=Math.max(a,zt(t[4],t[5],t[6],t[7])),a=Math.max(a,zt(t[8],t[9],t[10],t[11])),a=Math.max(a,zt(n,t[13],t[14],r)),[s,a]}Distance3(t){let e=t[0],i=t[4],n=t[6],r=t[9],s=St([(e[0]+n[0]+r[0])*(1/3)-i[0],(e[1]+n[1]+r[1])*(1/3)-i[1],(e[2]+n[2]+r[2])*(1/3)-i[2]]);return s=Math.max(s,zt(e,t[1],t[3],n)),s=Math.max(s,zt(e,t[2],t[5],r)),Math.max(s,zt(n,t[7],t[8],r))}differential(t,e,i,n){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return St(r)>this.epsilon?r:(r=Ct(t,e,i),St(r)>this.epsilon?r:Ft(t,e,i,n))}sumdifferential(t,e,i,n,r,s,a){let o=this.differential(t,e,i,n),h=this.differential(t,r,s,a);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,n,r,s,a){let o=3*(r[0]-n[0]),h=3*(r[1]-n[1]),l=3*(r[2]-n[2]),c=3*(i[0]-n[0]),d=3*(i[1]-n[1]),m=3*(i[2]-n[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(St(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=Ct(n,i,e),x=Ct(n,r,s),g=Vt(x,u),w=Vt(p,v);if(f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>thi!
 s.epsilon)return f;let M=Ft(n,i,e,t),b=Ft(n,r,s,a);g=Vt(p,M),w=Vt(b,u);let R=Vt(x,v);return f=[g[0]+w[0]+R[0],g[1]+w[1]+R[1],g[2]+w[2]+R[2]],St(f)>this.epsilon?f:(g=Vt(b,v),w=Vt(x,M),f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>this.epsilon?f:Vt(b,M))}}function xt(t){return 0<=t&&t<=1}class gt{constructor(t,e,i){const n=1e3*Number.EPSILON,r=n*n;if(Math.abs(t)<=n*Math.abs(e)+r*Math.abs(i))Math.abs(e)>n*Math.abs(i)?(this.roots=1,this.t1=-i/e):0==i?(this.roots=1,this.t1=0):this.roots=0;else{let r=.5*e/t,s=e*r;if(Math.abs(s)<=n*Math.abs(i)){let e=-i/t;e>=0?(this.roots=2,this.t2=Math.sqrt(e),this.t1=-this.t2):this.roots=0}else{let t=-2*i/s;if(t>-1){this.roots=2;let e=r*function(t){return t/(Math.sqrt(1+t)+1)}(t),i=-e-2*r;i<=e?(this.t1=i,this.t2=e):(this.t1=e,this.t2=i)}else-1==t?(this.roots=1,this.t1=this.t2=-r):this.roots=0}}}}class wt extends ut{constructor(t,e,i,n,r){if(super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,n&&r)this.Min=n,this.Max=r;else{let t=this.Bounds(this.controlpoints);this.Min=t[0],this.Max=t[1]}}Bounds(t){let e=Array(3),i=Array(3),n=t.length,r=Array(n);for(let h=0;h<3;++h){for(let e=0;e<n;++e)r[e]=t[e][h];let l,c;if(l=c=r[0],4==n){l=Math.min(l,r[3]),c=Math.max(c,r[3]);let t=(s=r[0],a=r[1],o=r[2],[r[3]-s+3*(a-o),2*(s+o)-4*a,a-s]),e=new gt(t[0],t[1],t[2]);if(0!=e.roots&&xt(e.t1)){let t=Bt(r[0],r[1],r[2],r[3],e.t1);l=Math.min(l,t),c=Math.max(c,t)}if(2==e.roots&&xt(e.t2)){let t=Bt(r[0],r[1],r[2],r[3],e.t2);l=Math.min(l,t),c=Math.max(c,t)}}else{let t=r[1];l=Math.min(l,t),c=Math.max(c,t)}e[h]=l,i[h]=c}var s,a,o;return[[e[0],e[1],e[2]],[i[0],i[1],i[2]]]}setMaterialIndex(){this.setMaterial(Z,Te)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],n=t[2],r=t[3],s=this.normal(Dt(e,i),Ct(e,i,n)),a=this.normal(Dt(n,r),Ct(r,n,i)),o=this.data.vertex(e,s),h=this.data.vertex(r,a);this.Render(t,o,h),!
 this.data.indices.length>0&&this.append()}append(){Z.append(this.data)}notRendered(){Z.rendered=!1}Render(t,e,i){let n=t[0],r=t[1],s=t[2],a=t[3];if(zt(n,r,s,a)<this.res2)this.offscreen([n,a])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],l=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[n,o,c,m],u=[m,d,l,a],p=this.normal(function(t,e,i,n){return[i[0]+n[0]-t[0]-e[0],i[1]+n[1]-t[1]-e[1],i[2]+n[2]-t[2]-e[2]]}(n,r,s,a),function(t,e,i,n){return[3*t[0]-5*e[0]+i[0]+n[0],3*t[1]-5*e[1]+i[1]+n[1],3*t[2]-5*e[2]+i[2]+n[2]]}(n,r,s,a)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=Ut(t,t),n=Ut(t,e);return[i*e[0]-n*t[0],i*e[1]-n*t[1],i*e[2]-n*t[2]]}}class Mt extends ut{constructor(t,e,i){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=t,this.Max=t}setMaterialIndex(){this.setMaterial(K,Re)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){K.append(this.data)}notRendered(){K.rendered=!1}}class bt extends ut{constructor(t,e){super(),this.CenterIndex=t,this.MaterialIndex=e,this.Min=this.Bounds(F,Math.min),this.Max=this.Bounds(F,Math.max),this.controlpoints=F,this.Normals=z,this.Colors=H,this.Indices=X,this.transparent=c[this.MaterialIndex].diffuse[3]<1}Bounds(t,e){let i=Array(3),n=t.length,r=Array(n);for(let s=0;s<3;++s){for(let e=0;e<n;++e)r[e]=t[e][s];i[s]=pt(r,e)}return[i[0],i[1],i[2]]}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.setMaterial(et,Ee)}process(t){this.data.vertices=new Array(6*t.length),it=this.Colors.length>0?-1-it:1+it;for(let e=0,i=this.Indices.length;e<i;++e){let i=this.Indices[e],n=i[0],r=t[n[0]],s=t[n[1]],a=t[n[2]];if(!this.offscreen([r,s,a])){let t=i.length>1?i[1]:n;if(t!
 &&0!=t.length||(t=n),this.Colors.length>0){let e=i.length>2?i[2]:n;e&&0!=e.length||(e=n);let o=this.Colors[e[0]],h=this.Colors[e[1]],l=this.Colors[e[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l)):(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[0],r,this.Normals[t[0]],o))}else 0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]])):(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[0],r,this.Normals[t[0]]))}}this.data.nvertices=t.length,this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):et.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:et.rendered=!1}}function Rt(){M=-Math.tan(.5*o.angleOfView)*o.maxBound[2],_.x=_.y=0,_.z=.5*(o.minBound[2]+o.maxBound[2]),x=v=o.zoom0,S.zmin=o.minBound[2],S.zmax=o.maxBound[2],P.x=P.y=0,Oe(),U=!0,Ne()}let Tt=0,yt=1,At=2,Et=3,It=4;function Lt(e=[]){let i=lt(t,vertex,t.VERTEX_SHADER,e),n=lt(t,fragment,t.FRAGMENT_SHADER,e),r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,n),t.bindAttribLocation(r,Tt,"position"),t.bindAttribLocation(r,yt,"normal"),t.bindAttribLocation(r,At,"materialIndex"),t.bindAttribLocation(r,Et,"color"),t.bindAttribLocation(r,It,"width"),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialize shaders"),r}class Nt{constructor(t,e,i,n){this.m0=.5*(t+e);let r=.5*(e+i);this.m2=.5*(i+n),this.m3=.5*(this.m0+r),this.m4=.5*(r+this.m2),this.m5=.5*(this.m3+thi!
 s.m4)}}class Ot{constructor(t,e,i,n){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),a=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+n[0]),.5*(i[1]+n[1]),.5*(i[2]+n[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+s),.5*(this.m0[2]+a)],this.m4=[.5*(r+this.m2[0]),.5*(s+this.m2[1]),.5*(a+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}class _t{constructor(t){this.l003=t[0];let e=t[1],i=t[2],n=t[3],r=t[4],s=t[5];this.r300=t[6];let a=t[7],o=t[8];this.u030=t[9],this.u021=.5*(this.u030+s),this.u120=.5*(this.u030+o);let h=.5*(s+i),l=.5*(o+r),c=.5*(o+a),d=.5*(i+r);this.l012=.5*(i+this.l003);let m=.5*(r+n);this.r210=.5*(a+this.r300),this.l102=.5*(this.l003+e);let f=.5*(e+n);this.r201=.5*(n+this.r300),this.u012=.5*(this.u021+h),this.u210=.5*(this.u120+c),this.l021=.5*(h+this.l012);let u=.5*l+.25*(r+e);this.r120=.5*(c+this.r210);let p=.5*d+.25*(r+a),v=.25*(s+r)+.5*m;this.l201=.5*(this.l102+f),this.r102=.5*(f+this.r201),this.l210=.5*(p+this.l201),this.r012=.5*(p+this.r102),this.l300=.5*(this.l201+this.r102),this.r021=.5*(v+this.r120),this.u201=.5*(this.u210+v),this.r030=.5*(this.u210+this.r120),this.u102=.5*(this.u012+u),this.l120=.5*(this.l021+u),this.l030=.5*(this.u012+this.l021),this.l111=.5*(d+this.l102),this.r111=.5*(m+this.r210),this.u111=.5*(this.u021+l),this.c111=.25*(h+c+f+r)}}function Pt(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function St(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function Ut(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Vt(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Bt(t,e,i,n,r){let s=1-r,a=s*s;return a*s*t+r*(3*(a*e+r*s*i)+r*r*n)}function Dt(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ct(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function Ft(t,e,i,n){return[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])]}function zt(t,e,i,n){let r=[1/3*(n[0]-t[0]),1/3*(n[1]-!
 t[1]),1/3*(n[2]-t[2])];return Math.max(St([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),St([n[0]-r[0]-i[0],n[1]-r[1]-i[1],n[2]-r[2]-i[2]]))}function Ht(t,e,i,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],s=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Math.max(St(Vt(r,Pt(s))),St(Vt(s,Pt(r))))/9}function Xt(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Gt(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Wt(t){ae||oe(),B=!0,D=t.clientX,C=t.clientY}let jt,kt,Yt=!1;function $t(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function qt(t){t.preventDefault(),ae||oe();let e=t.targetTouches;ue=pe=Yt=!1,fe||(1!=e.length||B||(kt=(new Date).getTime(),touchId=e[0].identifier,D=e[0].pageX,C=e[0].pageY),2!=e.length||B||(touchId=e[0].identifier,jt=$t(e),Yt=!0))}function Kt(t){B=!1}function Zt(t,e,i,n,r){if(t==i&&e==n)return;let[s,a]=function(t,e){let i=ne(t),n=ne(e),r=Ut(i,n);return[r>1?0:r<-1?f:Math.acos(r),Pt(Vt(i,n))]}([t,-e],[i,-n]);mat4.fromRotation(O,2*r*R*s/v,a),mat4.multiply(T,O,T)}function Qt(t,e,i,n){let r=1/v;P.x+=(i-t)*r*s,P.y-=(n-e)*r*a}function Jt(t,e,i,n){o.orthographic?Qt(t,e,i,n):(_.x+=(i-t)*(S.xmax-S.xmin),_.y-=(n-e)*(S.ymax-S.ymin))}function te(){var t,e;t=A,e=T,mat4.fromTranslation(O,[_.x,_.y,_.z]),mat4.invert(N,O),mat4.multiply(t,e,N),mat4.multiply(t,O,t),mat4.translate(A,A,[_.x,_.y,0]),mat3.fromMat4(L,A),mat3.invert(I,L),mat4.multiply(E,y,A)}function ee(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;v<=e&&(v=e),v>=t&&(v=t),(1.5*v<x||v>1.5*x)&&(U=!0,x=v)}function ie(t){let e=o.zoomStep*a*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(o.zoomFactor);Math.abs(e)<i&&(v*=o.zoomFactor**e,ee())}function ne(t){let e=t[0],i=t[1!
 ],n=Math..hypot(e,i);return n>1&&(denom=1/n,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function re(t,e,i,n){ie(e-n)}function se(t,e,i,n=1){let r;switch(i){case 1:r=Zt;break;case 2:r=Qt;break;case 3:r=re;break;case 4:r=Jt;break;default:r=(t,e,i,n)=>{}}r((D-s)/s,(C-a)/a,(t-s)/s,(e-a)/a,n),D=t,C=e,Oe(),Ne()}let ae=0;function oe(){ae=1,o.canvas.addEventListener("wheel",de,!1)}function he(){let t,e,i;[t,e,i]=function(){let t=Array(3),e=Array(3),i=Array(3),n=_.x,r=_.y,s=.5*(S.zmin+S.zmax);for(let a=0;a<3;++a){let h=0,l=0,c=0,d=4*a;for(let t=0;t<4;++t){let e=4*t,i=T[e],a=T[e+1],m=T[e+2],f=T[e+3],u=o.Transform[d+t];h+=u*(f-n*i-r*a-s*m),c+=u*a,l+=u*(f-n*i-r*a)}t[a]=h,e[a]=c,i[a]=l}return[t,e,i]}();let n=o.orthographic?"  orthographic(":"  perspective(",r="".padStart(n.length),s="currentprojection=\n"+n+"camera=("+t+"),\n"+r+"up=("+e+"),\n"+r+"target=("+i+"),\n"+r+"zoom="+v*o.initialZoom/o.zoom0;return o.orthographic||(s+=",\n"+r+"angle="+2*Math.atan(Math.tan(.5*o.angleOfView)/v)/u),0==g&&0==w||(s+=",\n"+r+"viewportshift=("+g+","+w+")"),o.orthographic||(s+=",\n"+r+"autoadjust=false"),s+=");\n",window.parent.asyProjection=!0,s}function le(t){if(ae||oe(),o.embedded&&ae&&27==t.keyCode)return ae=0,void o.canvas.removeEventListener("wheel",de,!1);let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":mat4.identity(T),Rt(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1;break;case"m":++V,3==V&&(V=0),2!=V&&(o.embedded||st(),rt(o.ibl)),U=!0,Ne();break;case"+":case"=":case">":v*=o.zoomFactor,ce();break;case"-":case"_":case"<":v/=o.zoomFactor,ce();break;case"c":window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",he())}e.length>0&&(mat4.rotate(T,T,.1,e),te(),Ne())}function ce(){ee(),Oe(),Ne()}function de(t){t.preventDefault(),t.deltaY<0?v*=o.zoomFactor:v/=o.zoomFactor,ce()}function me(t){if(!B)return;let e,i=t.clientX,n=t.clientY;e=t.getModifierStat!
 e("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,se(i,n,e)}let fe=!1,ue=!1,pe=!1;function ve(t){if(t.preventDefault(),fe)return;let e=t.targetTouches;if(!Yt&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,n=t-D,r=i-C,s=n*n+r*r<=o.shiftHoldDistance*o.shiftHoldDistance;if(s&&!ue&&!pe&&(new Date).getTime()-kt>o.shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(o.vibrateTime),ue=!0),ue)se(t,i,2);else if(!s){pe=!0,se(e[0].pageX,e[0].pageY,1,.5)}}if(Yt&&!ue&&2==e.length&&touchId==e[0].identifier){let t=$t(e),i=t-jt;fe=!0,i*=o.zoomPinchFactor,i>o.zoomPinchCap&&(i=o.zoomPinchCap),i<-o.zoomPinchCap&&(i=-o.zoomPinchCap),ie(i/b),jt=t,ue=pe=fe=!1,Oe(),Ne()}}let xe,ge,we,Me,be=[];function Re(){dt(K,xe),K.clear()}function Te(){dt(Z,ge),Z.clear()}function ye(){dt(Q,ge),Q.clear()}function Ae(){dt(J,we),J.clear()}function Ee(){dt(et,Me),et.rendered=!1,et.clear()}function Ie(){let e=tt.indices;if(V>0)return dt(tt,Me,e),void tt.clear();if(e.length>0){!function(t){let e=A[2],i=A[6],n=A[10];be.length=t.length;for(let r=0;r<t.length;++r){let s=6*r;be[r]=e*t[s]+i*t[s+1]+n*t[s+2]}}(tt.vertices);let i=e.length/3,n=Array(i).fill().map((t,e)=>e);n.sort((function(t,i){let n=3*t;Ia=e[n],Ib=e[n+1],Ic=e[n+2];let r=3*i;return IA=e[r],IB=e[r+1],IC=e[r+2],be[Ia]+be[Ib]+be[Ic]<be[IA]+be[IB]+be[IC]?-1:1}));let r=Array(e.length);for(let t=0;t<i;++t){let i=3*n[t];r[3*t]=e[i],r[3*t+1]=e[i+1],r[3*t+2]=e[i+2]}t.depthMask(!1),dt(tt,Me,r),tt.rendered=!1,t.depthMask(!0)}tt.clear()}function Le(){Re(),Te(),ye(),Ae(),Ee(),Ie(),requestAnimationFrame(Le)}function Ne(){o.embedded&&(i.width=o.canvasWidth,i.height=o.canvasHeight,_e()),t.clearColor(o.background[0],o.background[1],o.background[2],o.background[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT);for(const t of h)t.render();Le(),o.embedded&&(n.clearRect(0,0,o.canvasWidth,o.canvasHeight),n.drawImage(i,0,0)),0==V&&(U=!1)}function Oe(){!function(t,e,i,n){let r=t/e;g=(i/t+o.viewportShift[0])*v,w=(n/e+o.viewportShift[1])*v;let s=1/v;if(o.orthographic!
 ){let t=o.maxBound[0]-o.minBound[0],e=o.maxBound[1]-o.minBound[1];if(t<e*r){let t=.5*e*r*s,i=2*t*g,n=e*s*w;S.xmin=-t-i,S.xmax=t-i,S.ymin=o.minBound[1]*s-n,S.ymax=o.maxBound[1]*s-n}else{let e=.5*t*s/r,i=t*s*g,n=2*e*w;S.xmin=o.minBound[0]*s-i,S.xmax=o.maxBound[0]*s-i,S.ymin=-e-n,S.ymax=e-n}}else{let t=M*s,e=t*r,i=2*e*g,n=2*t*w;S.xmin=-e-i,S.xmax=e-i,S.ymin=-t-n,S.ymax=t-n}}(o.canvasWidth,o.canvasHeight,P.x,P.y),(o.orthographic?mat4.ortho:mat4.frustum)(y,S.xmin,S.xmax,S.ymin,S.ymax,-S.zmax,-S.zmin),te(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(he())}function _e(){t.viewportWidth=o.canvasWidth,t.viewportHeight=o.canvasHeight,t.viewport(.5*(o.canvas.width-o.canvasWidth),.5*(o.canvas.height-o.canvasHeight),o.canvasWidth,o.canvasHeight),t.scissor(0,0,o.canvas.width,o.canvas.height)}function Pe(t,e){t>void 0&&(t=void 0),e>void 0&&(e=void 0),P.x*=t/o.canvasWidth,P.y*=e/o.canvasHeight,o.canvasWidth=t,o.canvasHeight=e,o.embedded&&(o.canvas.width=i.width=o.canvasWidth,o.canvas.height=i.height=o.canvasHeight),b=Math.hypot(o.canvasWidth,o.canvasHeight),s=.5*o.canvas.width,a=.5*o.canvas.height,R=1+8*Math.hypot(o.viewportMargin[0],o.viewportMargin[1])/b,_e(),Oe(),U=!0}function Se(){if(o.zoom0=o.initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),o.absolute&&!o.embedded)o.canvasWidth=o.canvasWith0*window.devicePixelRatio,o.canvasHeight=o.canvasHeight0*window.devicePixelRatio;else{let t=o.canvasWith0/o.canvasHeight0;o.canvasWidth=Math.max(window.innerWidth-10,10),o.canvasHeight=Math.max(window.innerHeight-10,10),!o.orthographic&&!window.parent.asyProjection&&o.canvasWidth<o.canvasHeight*t&&(o.zoom0*=o.canvasWidth/(o.canvasHeight*t))}o.canvas.width=o.canvasWidth,o.canvas.height=o.canvasHeight;window.innerWidth,window.innerHeight;let t=1/o.zoom0;o.viewportShift[0]*=t,o.viewportShift[1]*=t,Pe(o.canvasWidth,o.canvasHeight),Rt()}class Ue{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),!
 this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],n=t[2],r=e*this.ct+n*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+n*this.ct+this.center[2]]}}function Ve(t,e,i){let n=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[Xt(n),Gt(n)]}let Be=4/3*(Math.sqrt(2)-1);async function De(t){return(await fetch(t)).arrayBuffer()}function Ce(t){return t.getBytes().filter((t,e)=>e%4!=3)}function Fe(e,i,n=t.RGB16F){let r=e.width(),s=e.height(),a=t.createTexture();return t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,a),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,n,r,s,0,t.RGB,t.FLOAT,Ce(e)),a}window.webGLStart=function(){o.canvas=document.getElementById("Asymptote"),o.embedded=window.top.document!=document,ht(),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.DEPTH_TEST),t.enable(t.SCISSOR_TEST),o.canvas.onmousedown=Wt,document.onmouseup=Kt,document.onmousemove=me,o.canvas.onkeydown=le,o.embedded||oe(),o.canvas.addEventListener("touchstart",qt,!1),o.canvas.addEventListener("touchend",Kt,!1),o.canvas.addEventListener("touchcancel",Kt,!1),o.canvas.addEventListener("touchleave",Kt,!1),o.canvas.addEventListener("touchmove",ve,!1),document.addEventListener("keydown",le,!1),o.canvasWith0=o.canvasWidth,o.canvasHeight0=o.canvasHeight,mat4.identity(T),0!=window.innerWidth&&0!=window.innerHeight&&Se(),window.addEventListener("resize",Se,!1),o.ibl&&async function(){let e=o.imageURL+o.image+"/";function i(t){return new Promise(e=>setTimeout(e,t))}for(;!Module.EXRLoader;)await i(0);promises=[De(o.imageURL+"refl.exr").then(t=>{let e=new Module.EXRLoader(t);j=Fe(e,0)}),De(e+"diffuse.exr").then(t=>{let e=new Module.EXRLoader(t);W=Fe(e,1)})],refl_p!
 romise=[],refl_promise.push(De(e+"refl0.exr"));for(let t=1;t<=8;++t)refl_promise.push(De(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let i=t.createTexture();t.activeTexture(t.TEXTURE0+2),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAX_LEVEL,e.length-1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MIN_LOD,0),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MAX_LOD,8);for(let i=0;i<e.length;++i){let n=new Module.EXRLoader(e[i]);t.texImage2D(t.TEXTURE_2D,i,t.RGB16F,n.width(),n.height(),0,t.RGB,t.FLOAT,Ce(n))}G=i}),promises.push(finished_promise),await Promise.all(promises)}().then(k).then(Rt)},window.light=function(t,e){l.push(new nt(t,e))},window.material=function(t,e,i,n,r,s){c.push(new Y(t,e,i,n,r,s))},window.patch=function(t,e,i,n){h.push(new vt(t,e,i,n))},window.curve=function(t,e,i){h.push(new wt(t,e,i))},window.pixel=function(t,e,i){h.push(new Mt(t,e,i))},window.triangles=function(t,e){h.push(new bt(t,e)),window.Positions=F=[],window.Normals=z=[],window.Colors=H=[],window.Indices=X=[]},window.sphere=function(t,e,i,n,r){let s,a,o,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,x=.0549670512339254,g=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,Be,0],[1,Be,m],[f,Be*f,u],[p,Be*p,v],[Be,1,0],[Be,1,m],[Be*f,f,u],[Be*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,Be*p,v],[x,0,g],[Be*p,p,v],[w,w,1],[.05*Be,0,1],[0,p,v],[0,x,g],[0,.05*Be,1],[0,0,1]]],b=new Ue(t,r);function R(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let n=t[i];e[i]=c([s*n[0],a*n[1],o*n[2]])}return e}r?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let T=Ve(c,[-e,-e,d],[e,e,e]),y=T[0],A=T[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){a=t*e;for(let t=l;t<=1;t+=2){o=t*e;for(let t=0;t<2;++t)h.push(new vt(R(M[t]),i,n,null,y,A))}}}},windo!
 w.disk=function(t,e,i,n,r){let s=1-2*Be/3,a=[[1,0,0],[1,-Be,0],[Be,-1,0],[0,-1,0],[1,Be,0],[s,0,0],[0,-s,0],[-Be,-1,0],[Be,1,0],[0,s,0],[-s,0,0],[-1,-Be,0],[0,1,0],[-Be,1,0],[-1,Be,0],[-1,0,0]],o=new Ue(t,r),l=Ve(o.T.bind(o),[-e,-e,0],[e,e,0]);h.push(new vt(function(t){let i=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];i[n]=o.T([e*r[0],e*r[1],0])}return i}(a),i,n,null,l[0],l[1]))},window.cylinder=function(t,e,i,n,r,s,a){let o,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,Be,0],[1,Be,1/3],[1,Be,2/3],[1,Be,1],[Be,1,0],[Be,1,1/3],[Be,1,2/3],[Be,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Ue(t,s);function m(t){let e=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];e[n]=d.T([o*r[0],l*r[1],i*r[2]])}return e}let f=Ve(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){o=t*e;for(let t=-1;t<=1;t+=2)l=t*e,h.push(new vt(m(c),n,r,null,u,p))}if(a){let e=d.T([0,0,i]);h.push(new wt([t,e],n,r,t,e))}},window.tube=function(t,e,i,n,r){let s=function(t,e,i,n,r){class s{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=Vt(i,e)}}let a=Number.EPSILON*Math.max(St(t),St(e),St(i),St(n));function o(r){if(1==r){let r=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return St(r)>a?Pt(r):(r=[2*i[0]-e[0]-n[0],2*i[1]-e[1]-n[1],2*i[2]-e[2]-n[2]],St(r)>a?Pt(r):[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])}let s=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[s[0]*l+o[0]*r+h[0],s[1]*l+o[1]*r+h[1],s[2]*l+o[2]*r+h[2]];return St(c)>a?Pt(c):(l=2*r,c=[s[0]*l+o[0],s[1]*l+o[1],s[2]*l+o[2]],St(c)>a?Pt(c):Pt(s))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];St(l)<a&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],St(l)<a&&(l=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])),l=Pt(l);let c=function(t){let e=Vt(t,[0,1,0]),i=Number.EPSILON*St(t);return St(e)>i?Pt(e):(e=Vt(t,[0,0,1]),St(e)>i?Pt(e):[1,0,0])}(l);h[0]=new s(t,c,l);for(le!
 t a=1;a<r.length;++a){let l=h[a-1],c=r[a],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*n[0],f*t[1]+m*e[1]+d*i[1]+p*n[1],f*t[2]+m*e[2]+d*i[2]+p*n[2]],x=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=x[0]||0!=x[1]||0!=x[2]){let t=l.r,e=Pt(x),i=l.t,n=Ut(e,i),r=[i[0]-2*n*e[0],i[1]-2*n*e[1],i[2]-2*n*e[2]];i=o(c);let d=2*Ut(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=Pt([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*Ut(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[a]=new s(v,Pt(m),Pt(i))}else h[a]=h[a-1]}return h}(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),a=Be*e,o=[[e,0],[e,a],[a,e],[0,e]];function l(e,r,a,l){let c=Array(16);for(let i=0;i<4;++i){let n=s[i],h=n.r[0],d=n.s[0],m=h*e+d*r,f=h*a+d*l;h=n.r[1],d=n.s[1];let u=h*e+d*r,p=h*a+d*l;h=n.r[2],d=n.s[2];let v=h*e+d*r,x=h*a+d*l,g=t[i],w=g[0];w1=g[1],w2=g[2];for(let t=0;t<4;++t){let e=o[t],n=e[0],r=e[1];c[4*i+t]=[m*n+f*r+w,u*n+p*r+w1,v*n+x*r+w2]}}h.push(new vt(c,i,n))}l(1,0,0,1),l(0,-1,1,0),l(-1,0,0,-1),l(0,1,-1,0),r&&h.push(new wt(t,i,n))},window.Positions=F,window.Normals=z,window.Colors=H,window.Indices=X}();

Modified: trunk/Master/texmf-dist/doc/asymptote/CAD.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/asy-latex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/asymptote.pdf
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -0,0 +1,16 @@
+import graph3;
+import gsl;
+
+size(10cm,15cm,IgnoreAspect);
+currentprojection=orthographic(150,50,1);
+
+real f(pair z) {real r=abs(z); return r == 0 ? 1 : (2.0*J(1,r)/r)^2;}
+
+real R=15;
+surface s=surface(f,(-R,-R),(R,R),100,Spline);
+
+draw(s,green);
+
+xaxis3("$x$",Bounds,InTicks);
+yaxis3("$y$",Bounds,InTicks);
+zaxis3(rotate(90)*"$I(\sqrt{x^2+y^2})$",Bounds,InTicks("$%#.1f$"));

Added: trunk/Master/texmf-dist/doc/asymptote/examples/Viviani.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/Viviani.asy	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/Viviani.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -0,0 +1,26 @@
+import graph3;
+size(300);
+
+pen yellow=rgb("F1FA8C");
+pen purple=rgb("BB95FF");
+pen blue=rgb("7A8FFE");
+pen darkblack=rgb("101010");
+
+currentprojection=orthographic(3,3,1,up=Z);
+currentlight=light((1,0,1),(-1.5,0,-1));
+currentlight.background=darkblack;
+
+real aS=2.5;
+draw(Label("$x$",EndPoint),-aS*X--aS*X,white,Arrow3);
+draw(Label("$y$",EndPoint),-aS*Y--aS*Y,white,Arrow3);
+draw(Label("$z$",EndPoint),-aS*Z--aS*Z,white,Arrow3);
+
+draw(shift(0.5,0,-2)*scale(0.5,0.5,4)*unitcylinder,
+     material(blue+opacity(0.8),shininess=0.3));
+
+draw(unitsphere,material(purple,shininess=0.3));
+
+triple f(real t) {return(cos(t)^2,cos(t)*sin(t),sin(t));}
+
+path3 curve=graph(f,0,8pi,operator ..);
+draw(curve,yellow+linewidth(1));

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -6,9 +6,10 @@
 
 import animation;
 
-size(0,200);
+size(0,500);
 
-defaultpen(3);
+import fontsize;
+defaultpen(fontsize(48pt)+3);
 dotfactor=4;
 
 pair wheelpoint(real t)
@@ -26,7 +27,7 @@
   return g;
 }
 
-real t1=0; 
+real t1=0;
 real t2=t1+2*pi;
 
 animation a;
@@ -45,7 +46,7 @@
 real dt=(t2-t1)/n;
 for(int i=0; i <= n; ++i) {
   save();
-  
+
   real t=t1+dt*i;
   draw(circle((t,0),1),red);
   dot(wheelpoint(t));

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -7,16 +7,16 @@
 real[] x=in;
 real[] y=in;
 
-real[][] f=in;
+real[][] z=in;
 
 triple f(pair t) {
   int i=round(t.x);
   int j=round(t.y);
-  return (x[i],y[j],f[i][j]);
+  return (x[i],y[j],z[i][j]);
 }
 
 surface s=surface(f,(0,0),(x.length-1,y.length-1),x.length-1,y.length-1);
-real[] level=uniform(min(f)*(1-sqrtEpsilon),max(f)*(1+sqrtEpsilon),4);
+real[] level=uniform(min(z)*(1-sqrtEpsilon),max(z)*(1+sqrtEpsilon),4);
 
 s.colors(palette(s.map(new real(triple v) {return find(level >= v.z);}),
                  Rainbow()));
@@ -41,5 +41,3 @@
 
 currentprojection=perspective(camera=target+realmult(dir(68,225),M-m),
                               target=target);
-
-

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.dat
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.dat	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.dat	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,12 +1,12 @@
-1	12	24	36	60	84	120	180	240	360																																						
-2005	2005.083333	2005.166667	2005.25	2005.333333	2005.416667	2005.5	2005.583333	2005.666667	2005.75	2005.833333	2005.916667	2006	2006.083333	2006.166667	2006.25	2006.333333	2006.416667	2006.5	2006.583333	2006.666667	2006.75	2006.833333	2006.916667	2007	2007.083333	2007.166667	2007.25	2007.333333	2007.416667	2007.5	2007.583333	2007.666667	2007.75	2007.833333	2007.916667	2008	2008.083333	2008.166667	2008.25	2008.333333	2008.416667	2008.5	2008.583333	2008.666667	2008.75	2008.833333	2008.916667
-2.111	2.1039	2.103	2.1047	2.1041	2.1039	2.1064	2.1126	2.1152	2.1209	2.2225	2.4112	2.3885	2.4586	2.6333	2.6489	2.6926	2.8691	2.9389	3.0941	3.1572	3.3501	3.4214	3.64	3.6159	3.6511	3.8439	3.859	3.9194	4.0982	4.105	4.3081	4.4339	4.2355	4.216	4.7114	4.1973	4.1821	4.3046	4.3691	4.3874	4.4724	4.4716	4.4875	4.6599	4.8313	3.8433	2.9929
-2.223809524	2.228	2.246190476	2.165238095	2.092727273	1.997272727	2.07185	2.14	2.128636364	2.327619048	2.577272727	2.67	2.717727273	2.793	2.978695652	3.094210526	3.175	3.271363636	3.415238095	3.489565217	3.573333333	3.664090909	3.723636364	3.773157895	3.914090909	3.9605	3.982727273	4.132105263	4.254545455	4.398095238	4.44	4.228695652	4.088	4.09	4.044090909	4.0855	3.870909091	3.631904762	3.711052632	3.955909091	4.141428571	4.562380952	4.575217391	4.36952381	4.210909091	2.93173913	2.3795	2.007727273
-2.431904762	2.4595	2.517142857	2.367619048	2.237272727	2.077727273	2.18235	2.253913043	2.222727273	2.484761905	2.743636364	2.804285714	2.862272727	2.968	3.192173913	3.343157895	3.381818182	3.462727273	3.574285714	3.575652174	3.602380952	3.657272727	3.677727273	3.744210526	3.926818182	3.954	3.922272727	4.105263158	4.255454545	4.464285714	4.475	4.183478261	4.0595	4.090434783	3.898636364	3.9975	3.68	3.334761905	3.402105263	3.781818182	4.07047619	4.624761905	4.542608696	4.178095238	4.008636364	3.151304348	2.641	2.375
-2.638095238	2.6685	2.735714286	2.562380952	2.416818182	2.241363636	2.33035	2.400869565	2.340454545	2.60952381	2.865454545	2.895238095	2.949545455	3.0775	3.297826087	3.477368421	3.521363636	3.589545455	3.685714286	3.640434783	3.614761905	3.674545455	3.668636364	3.742631579	3.938636364	3.9625	3.91	4.106842105	4.258636364	4.496666667	4.496818182	4.210869565	4.0975	4.138695652	3.933181818	4.027	3.719090909	3.413809524	3.434210526	3.818636364	4.071428571	4.622380952	4.56826087	4.157619048	3.993181818	3.358695652	2.8285	2.594090909
-2.996190476	3.015	3.124761905	2.920952381	2.753181818	2.581818182	2.6606	2.710869565	2.595	2.829047619	3.082272727	3.056190476	3.080909091	3.2445	3.45173913	3.664736842	3.703181818	3.74	3.82047619	3.726956522	3.655714286	3.712727273	3.669090909	3.753157895	3.970454545	4.0055	3.914090909	4.126315789	4.273181818	4.538095238	4.537727273	4.25826087	4.1655	4.210869565	3.982727273	4.1085	3.829545455	3.600952381	3.591578947	3.941363636	4.137619048	4.65952381	4.622173913	4.201428571	4.126363636	3.774782609	3.2075	2.983181818
-3.265714286	3.2665	3.405238095	3.21	3.04	2.87	2.9277	2.959565217	2.819545455	3.021428571	3.238636364	3.144761905	3.143636364	3.3225	3.536086957	3.798421053	3.85	3.867727273	3.91047619	3.803043478	3.706666667	3.757727273	3.700454545	3.775263158	4.003181818	4.037368421	3.938181818	4.156315789	4.288636364	4.566190476	4.546363636	4.31173913	4.23	4.27	4.076818182	4.185	3.949545455	3.793333333	3.730526316	4.043636364	4.219047619	4.636190476	4.62173913	4.258095238	4.190454545	3.967826087	3.53	3.192272727
-3.593809524	3.5845	3.745238095	3.543333333	3.381363636	3.209545455	3.249	3.282173913	3.122272727	3.285714286	3.488181818	3.380952381	3.344545455	3.497	3.674347826	3.935789474	4.004090909	4.004545455	4.029047619	3.906956522	3.778095238	3.817272727	3.75	3.811052632	4.055909091	4.091	3.99	4.203157895	4.330454545	4.614285714	4.590454545	4.393913043	4.344	4.397391304	4.234545455	4.346	4.165	4.105238095	4.044210526	4.252727273	4.398571429	4.718571429	4.705217391	4.407142857	4.379090909	4.255652174	3.998	3.514545455
-3.78952381	3.7435	3.9255	3.75	3.582272727	3.451363636	3.50775	3.513913043	3.359545455	3.494761905	3.665909091	3.551428571	3.504545455	3.6535	3.812608696	4.098421053	4.167272727	4.175909091	4.186666667	4.056086957	3.908571429	3.916363636	3.824545455	3.882105263	4.12	4.162	4.089090909	4.306315789	4.423181818	4.699047619	4.661818182	4.504782609	4.4985	4.519565217	4.402272727	4.5115	4.382727273	4.366666667	4.336842105	4.509545455	4.613809524	4.861428571	4.877391304	4.636666667	4.659545455	4.482173913	4.2535	3.744545455
-3.99	3.9085	4.098571429	3.944285714	3.771363636	3.609090909	3.6536	3.640869565	3.488181818	3.604761905	3.755454545	3.634285714	3.565909091	3.7165	3.866521739	4.151052632	4.235454545	4.235909091	4.249047619	4.116086957	3.961904762	3.953333333	3.855714286	3.92	4.153636364	4.1985	4.139090909	4.365789474	4.471818182	4.747142857	4.695454545	4.55	4.572	4.590434783	4.500909091	4.602	4.504090909	4.513809524	4.521052632	4.656818182	4.733809524	4.899047619	4.935652174	4.746190476	4.776818182	4.598695652	4.4835	3.900454545
-4.137142857	4.0305	4.213333333	4.08	3.902727273	3.739090909	3.774285714	3.757391304	3.598181818	3.706190476	3.842272727	3.712	3.629545455	3.771	3.919565217	4.231111111	4.295909091	4.306818182	4.31	4.170434783	4.000952381	3.99	3.881818182	3.943684211	4.176818182	4.2195	4.163636364	4.387368421	4.480454545	4.758095238	4.710454545	4.559565217	4.595	4.612173913	4.544090909	4.64	4.57	4.58	4.614736842	4.702727273	4.768571429	4.884761905	4.905652174	4.741904762	4.775454545	4.496521739	4.3585	3.738636364
+1	12	24	36	60	84	120	180	240	360																																						
+2005	2005.083333	2005.166667	2005.25	2005.333333	2005.416667	2005.5	2005.583333	2005.666667	2005.75	2005.833333	2005.916667	2006	2006.083333	2006.166667	2006.25	2006.333333	2006.416667	2006.5	2006.583333	2006.666667	2006.75	2006.833333	2006.916667	2007	2007.083333	2007.166667	2007.25	2007.333333	2007.416667	2007.5	2007.583333	2007.666667	2007.75	2007.833333	2007.916667	2008	2008.083333	2008.166667	2008.25	2008.333333	2008.416667	2008.5	2008.583333	2008.666667	2008.75	2008.833333	2008.916667
+2.111	2.1039	2.103	2.1047	2.1041	2.1039	2.1064	2.1126	2.1152	2.1209	2.2225	2.4112	2.3885	2.4586	2.6333	2.6489	2.6926	2.8691	2.9389	3.0941	3.1572	3.3501	3.4214	3.64	3.6159	3.6511	3.8439	3.859	3.9194	4.0982	4.105	4.3081	4.4339	4.2355	4.216	4.7114	4.1973	4.1821	4.3046	4.3691	4.3874	4.4724	4.4716	4.4875	4.6599	4.8313	3.8433	2.9929
+2.223809524	2.228	2.246190476	2.165238095	2.092727273	1.997272727	2.07185	2.14	2.128636364	2.327619048	2.577272727	2.67	2.717727273	2.793	2.978695652	3.094210526	3.175	3.271363636	3.415238095	3.489565217	3.573333333	3.664090909	3.723636364	3.773157895	3.914090909	3.9605	3.982727273	4.132105263	4.254545455	4.398095238	4.44	4.228695652	4.088	4.09	4.044090909	4.0855	3.870909091	3.631904762	3.711052632	3.955909091	4.141428571	4.562380952	4.575217391	4.36952381	4.210909091	2.93173913	2.3795	2.007727273
+2.431904762	2.4595	2.517142857	2.367619048	2.237272727	2.077727273	2.18235	2.253913043	2.222727273	2.484761905	2.743636364	2.804285714	2.862272727	2.968	3.192173913	3.343157895	3.381818182	3.462727273	3.574285714	3.575652174	3.602380952	3.657272727	3.677727273	3.744210526	3.926818182	3.954	3.922272727	4.105263158	4.255454545	4.464285714	4.475	4.183478261	4.0595	4.090434783	3.898636364	3.9975	3.68	3.334761905	3.402105263	3.781818182	4.07047619	4.624761905	4.542608696	4.178095238	4.008636364	3.151304348	2.641	2.375
+2.638095238	2.6685	2.735714286	2.562380952	2.416818182	2.241363636	2.33035	2.400869565	2.340454545	2.60952381	2.865454545	2.895238095	2.949545455	3.0775	3.297826087	3.477368421	3.521363636	3.589545455	3.685714286	3.640434783	3.614761905	3.674545455	3.668636364	3.742631579	3.938636364	3.9625	3.91	4.106842105	4.258636364	4.496666667	4.496818182	4.210869565	4.0975	4.138695652	3.933181818	4.027	3.719090909	3.413809524	3.434210526	3.818636364	4.071428571	4.622380952	4.56826087	4.157619048	3.993181818	3.358695652	2.8285	2.594090909
+2.996190476	3.015	3.124761905	2.920952381	2.753181818	2.581818182	2.6606	2.710869565	2.595	2.829047619	3.082272727	3.056190476	3.080909091	3.2445	3.45173913	3.664736842	3.703181818	3.74	3.82047619	3.726956522	3.655714286	3.712727273	3.669090909	3.753157895	3.970454545	4.0055	3.914090909	4.126315789	4.273181818	4.538095238	4.537727273	4.25826087	4.1655	4.210869565	3.982727273	4.1085	3.829545455	3.600952381	3.591578947	3.941363636	4.137619048	4.65952381	4.622173913	4.201428571	4.126363636	3.774782609	3.2075	2.983181818
+3.265714286	3.2665	3.405238095	3.21	3.04	2.87	2.9277	2.959565217	2.819545455	3.021428571	3.238636364	3.144761905	3.143636364	3.3225	3.536086957	3.798421053	3.85	3.867727273	3.91047619	3.803043478	3.706666667	3.757727273	3.700454545	3.775263158	4.003181818	4.037368421	3.938181818	4.156315789	4.288636364	4.566190476	4.546363636	4.31173913	4.23	4.27	4.076818182	4.185	3.949545455	3.793333333	3.730526316	4.043636364	4.219047619	4.636190476	4.62173913	4.258095238	4.190454545	3.967826087	3.53	3.192272727
+3.593809524	3.5845	3.745238095	3.543333333	3.381363636	3.209545455	3.249	3.282173913	3.122272727	3.285714286	3.488181818	3.380952381	3.344545455	3.497	3.674347826	3.935789474	4.004090909	4.004545455	4.029047619	3.906956522	3.778095238	3.817272727	3.75	3.811052632	4.055909091	4.091	3.99	4.203157895	4.330454545	4.614285714	4.590454545	4.393913043	4.344	4.397391304	4.234545455	4.346	4.165	4.105238095	4.044210526	4.252727273	4.398571429	4.718571429	4.705217391	4.407142857	4.379090909	4.255652174	3.998	3.514545455
+3.78952381	3.7435	3.9255	3.75	3.582272727	3.451363636	3.50775	3.513913043	3.359545455	3.494761905	3.665909091	3.551428571	3.504545455	3.6535	3.812608696	4.098421053	4.167272727	4.175909091	4.186666667	4.056086957	3.908571429	3.916363636	3.824545455	3.882105263	4.12	4.162	4.089090909	4.306315789	4.423181818	4.699047619	4.661818182	4.504782609	4.4985	4.519565217	4.402272727	4.5115	4.382727273	4.366666667	4.336842105	4.509545455	4.613809524	4.861428571	4.877391304	4.636666667	4.659545455	4.482173913	4.2535	3.744545455
+3.99	3.9085	4.098571429	3.944285714	3.771363636	3.609090909	3.6536	3.640869565	3.488181818	3.604761905	3.755454545	3.634285714	3.565909091	3.7165	3.866521739	4.151052632	4.235454545	4.235909091	4.249047619	4.116086957	3.961904762	3.953333333	3.855714286	3.92	4.153636364	4.1985	4.139090909	4.365789474	4.471818182	4.747142857	4.695454545	4.55	4.572	4.590434783	4.500909091	4.602	4.504090909	4.513809524	4.521052632	4.656818182	4.733809524	4.899047619	4.935652174	4.746190476	4.776818182	4.598695652	4.4835	3.900454545
+4.137142857	4.0305	4.213333333	4.08	3.902727273	3.739090909	3.774285714	3.757391304	3.598181818	3.706190476	3.842272727	3.712	3.629545455	3.771	3.919565217	4.231111111	4.295909091	4.306818182	4.31	4.170434783	4.000952381	3.99	3.881818182	3.943684211	4.176818182	4.2195	4.163636364	4.387368421	4.480454545	4.758095238	4.710454545	4.559565217	4.595	4.612173913	4.544090909	4.64	4.57	4.58	4.614736842	4.702727273	4.768571429	4.884761905	4.905652174	4.741904762	4.775454545	4.496521739	4.3585	3.738636364

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/histogram.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/histogram.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/histogram.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -12,8 +12,7 @@
 // Optionally calculate "optimal" number of bins a la Shimazaki and Shinomoto.
 int N=bins(a);
 
-histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=false);
+histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=true);
 
 xaxis("$x$",BottomTop,LeftTicks);
 yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));
-

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -3,7 +3,5 @@
 size(200);
 
 real func(real x) {return 2x;}
-add(slopefield(func,(-3,-3),(3,3),20,Arrow));
+add(slopefield(func,(-3,-3),(3,3),20));
 draw(curve((0,0),func,(-3,-3),(3,3)),red);
-
-

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/triads.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/triads.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/triads.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -51,4 +51,4 @@
 
 shipout("triadkpq");
 
-erase();
+currentpicture.erase();

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -4,6 +4,6 @@
 pair a=(0,0);
 pair b=(2pi,2pi);
 
-path vector(pair z) {return (0,0)--(sin(z.x),cos(z.y));}
+path vector(pair z) {return (sin(z.x),cos(z.y));}
 
 add(vectorfield(vector,a,b));

Modified: trunk/Master/texmf-dist/doc/info/asy-faq.info
===================================================================
--- trunk/Master/texmf-dist/doc/info/asy-faq.info	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/info/asy-faq.info	2023-02-18 18:40:50 UTC (rev 65878)
@@ -10,7 +10,7 @@
 File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
 
             ASYMPTOTE FREQUENTLY ASKED QUESTIONS
-                            2022-03-07
+                            2023-02-09
                           
 This is the list of Frequently Asked Questions about Asymptote (asy).
 

Modified: trunk/Master/texmf-dist/doc/info/asymptote.info
===================================================================
--- trunk/Master/texmf-dist/doc/info/asymptote.info	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/info/asymptote.info	2023-02-18 18:40:50 UTC (rev 65878)
@@ -1,11 +1,11 @@
 This is asymptote.info, produced by makeinfo version 6.8 from
 asymptote.texi.
 
-This file documents 'Asymptote', version 2.79.
+This file documents 'Asymptote', version 2.85.
 
    <https://asymptote.sourceforge.io>
 
-   Copyright (C) 2004-22 Andy Hammerlindl, John Bowman, and Tom Prince.
+   Copyright (C) 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Lesser General Public License
@@ -22,11 +22,11 @@
 Asymptote
 *********
 
-This file documents 'Asymptote', version 2.79.
+This file documents 'Asymptote', version 2.85.
 
    <https://asymptote.sourceforge.io>
 
-   Copyright (C) 2004-22 Andy Hammerlindl, John Bowman, and Tom Prince.
+   Copyright (C) 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Lesser General Public License
@@ -345,8 +345,7 @@
    A working TeX implementation (we recommend
 <https://www.tug.org/texlive> or <http://www.miktex.org>) will be
 required to typeset labels.  You will also need to install 'GPL
-Ghostscript' version 9.52 or later from
-<http://downloads.ghostscript.com/public>.
+Ghostscript' version 9.56 or later from <https://www.ghostscript.com/>.
 
    To view 'PostScript' output, you can install the program 'Sumatra
 PDF' available from <https://www.sumatrapdfreader.org/>.
@@ -371,17 +370,12 @@
 
 In interactive mode, or when given the '-V' option (the default when
 running 'Asymptote' on a single file under 'MSDOS'), 'Asymptote' will
-automatically invoke the 'PostScript' viewer 'gv' (under 'UNIX') or
-'gsview' (under 'MSDOS') to display graphical output.  The 'PostScript'
-viewer should be capable of automatically redrawing whenever the output
-file is updated.  The default 'UNIX' 'PostScript' viewer 'gv' supports
-this (via a 'SIGHUP' signal).  Version 'gv-3.6.3' or later (from
-<https://ftp.gnu.org/gnu/gv/>) is required for interactive mode to work
-properly.  Users of 'ggv' will need to enable 'Watch file' under
-'Edit/PostScript Viewer Preferences'.  Users of 'gsview' will need to
-enable 'Options/Auto Redisplay' (however, under 'MSDOS' it is still
-necessary to click on the 'gsview' window; under 'UNIX' one must
-manually redisplay by pressing the 'r' key).
+automatically invoke your 'PostScript' viewer ('evince' under 'UNIX') to
+display graphical output.  The 'PostScript' viewer should be capable of
+automatically redrawing whenever the output file is updated.  The 'UNIX'
+'PostScript' viewer 'gv' supports this (via a 'SIGHUP' signal).  Users
+of 'ggv' will need to enable 'Watch file' under 'Edit/PostScript Viewer
+Preferences'.
 
    Configuration variables are most easily set as 'Asymptote' variables
 in an optional configuration file 'config.asy' (*note configuration
@@ -392,7 +386,7 @@
 import settings;
 pdfviewer="acroread";
 htmlviewer="google-chrome";
-psviewer="gv";
+psviewer="evince";
 display="display";
 animate="animate";
 gs="gs";
@@ -456,7 +450,7 @@
 
    Configuration variables may also be set or overwritten with a
 command-line option:
-asy -psviewer=gsview -V venn
+asy -psviewer=evince -V venn
 
    Alternatively, system environment versions of the above configuration
 variables may be set in the conventional way.  The corresponding
@@ -463,7 +457,7 @@
 environment variable name is obtained by converting the configuration
 variable name to upper case and prepending 'ASYMPTOTE_': for example, to
 set the environment variable
-ASYMPTOTE_PSVIEWER="C:\Program Files\Ghostgum\gsview\gsview32.exe";
+ASYMPTOTE_PAPERTYPE="a4";
 under 'Microsoft Windows XP':
   1. Click on the 'Start' button;
   2. Right-click on 'My Computer';
@@ -617,7 +611,7 @@
    Syntax highlighting support for the KDE editor 'Kate' can be enabled
 by running 'asy-kate.sh' in the '/usr/local/share/asymptote' directory
 and putting the generated 'asymptote.xml' file in
-'~/.kde/share/apps/katepart/syntax/'.
+'~/.local/share/org.kde.syntax-highlighting/syntax/'.
 
 
 File: asymptote.info,  Node: Git,  Next: Uninstall,  Prev: Editing modes,  Up: Installation
@@ -3330,12 +3324,12 @@
 
    The function 'bool alias(T,T)' checks to see if two structure
 references refer to the same instance of the structure (or both to
-'null').  In example at the beginning of this section, 'alias(foo,bar)'
-would return true, but 'alias(foo,new T)' would return false, as 'new T'
-creates a new instance of the structure 'T'.  The boolean operators '=='
-and '!=' are by default equivalent to 'alias' and '!alias' respectively,
-but may be overwritten for a particular type (for example, to do a deep
-comparison).
+'null').  In the example at the beginning of this section,
+'alias(foo,bar)' would return true, but 'alias(foo,new T)' would return
+false, as 'new T' creates a new instance of the structure 'T'.  The
+boolean operators '==' and '!=' are by default equivalent to 'alias' and
+'!alias' respectively, but may be overwritten for a particular type (for
+example, to do a deep comparison).
 
    Here is a simple example that illustrates the use of structures:
 struct S {
@@ -4297,6 +4291,14 @@
      returns the unnormalized three-dimensional Fourier transform of 'a'
      using the given 'sign';
 
+'realschur schur(real[][] a)'
+     returns a struct 'realschur' containing a unitary matrix 'U' and a
+     quasitriangular matrix 'T' such that 'a=U*T*transpose(U)';
+
+'schur schur(pair[][] a)'
+     returns a struct 'schur' containing a unitary matrix 'U' and a
+     triangular matrix 'T' such that 'a=U*T*conj(transpose(U))';
+
 'real dot(real[] a, real[] b)'
      returns the dot product of the vectors 'a' and 'b';
 
@@ -4892,7 +4894,7 @@
 can be included with
 \asyinclude[<options>]{<filename.asy>}
 so that 'latexmk' will recognize when the code is changed.  Note that
-'latemk' requires 'perl', available from <https://www.perl.org/>.
+'latexmk' requires 'perl', available from <https://www.perl.org/>.
 
    One can specify 'width', 'height', 'keepAspect', 'viewportwidth',
 'viewportheight', 'attach', and 'inline'.  'keyval'-style options to the
@@ -6462,11 +6464,10 @@
      // Optionally calculate "optimal" number of bins a la Shimazaki and Shinomoto.
      int N=bins(a);
      
-     histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=false);
+     histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=true);
      
      xaxis("$x$",BottomTop,LeftTicks);
      yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));
-     
 
                              [./histogram]
 
@@ -6598,7 +6599,7 @@
      pair a=(0,0);
      pair b=(2pi,2pi);
      
-     path vector(pair z) {return (0,0)--(sin(z.x),cos(z.y));}
+     path vector(pair z) {return (sin(z.x),cos(z.y));}
      
      add(vectorfield(vector,a,b));
 
@@ -6990,8 +6991,8 @@
 indices of the elements in 'v' that form the vertices of each triangle.
 Similarly, the arguments 'n' and 'ni' contain optional normal data and
 'p' and 'pi' contain optional pen vertex data.  If more than one normal
-or pen is specified for a vertex, the last one specified is used.  An
-example of this tessellation facility is given in 'triangles.asy'.
+or pen is specified for a vertex, the last one is used.  An example of
+this tessellation facility is given in 'triangles.asy'.
 
    Arbitrary thick three-dimensional curves and line caps (which the
 'OpenGL' standard does not require implementations to provide) are
@@ -7130,7 +7131,7 @@
   5. Output a 'V3D' portable compressed binary file for viewing with an
      external viewer or conversion to an alternate 3D format with the
      Python 'pyv3d' library.  The 'V3D' specification and the 'pyv3d'
-     library are available at <https://gitlab.com/vectorgraphics/v3d>.
+     library are available at <https://github.com/vectorgraphics/v3d>.
      A 'V3D' file 'file.v3d' may be imported and viewed by 'Asymptote'
      either by specifying 'file.v3d' on the command line
      asy -V file.v3d
@@ -7339,7 +7340,7 @@
      scales by 'x' in the x direction, by 'y' in the y direction, and by
      'z' in the z direction;
 'rotate(real angle, triple v)'
-     rotates by 'angle' in degrees about an axis 'v' through the origin;
+     rotates by 'angle' in degrees about the axis 'O--v';
 'rotate(real angle, triple u, triple v)'
      rotates by 'angle' in degrees about the axis 'u--v';
 'reflect(triple u, triple v, triple w)'
@@ -7662,10 +7663,20 @@
 'parametricsurface.asy'.  An optional splinetype 'Spline' may be
 specified.  The boolean array or function 'cond' can be used to control
 which surface mesh cells are actually drawn (by default all mesh cells
-over 'box(a,b)' are drawn).  Surface lighting is illustrated in the
-example files 'parametricsurface.asy' and 'sinc.asy'.  Lighting can be
-disabled by setting 'light=nolight', as in this example of a Gaussian
-surface:
+over 'box(a,b)' are drawn).
+
+   One can also construct the surface generated by rotating a path 'g'
+between 'angle1' to 'angle2' (in degrees) sampled 'n' times about the
+line 'c--c+axis':
+surface surface(triple c, path3 g, triple axis, int n=nslice,
+                real angle1=0, real angle2=360, pen color(int i, real j)=null);
+The optional argument 'color(int i, real j)' can be used to override the
+surface color at the point obtained by rotating vertex 'i' by angle 'j'
+(in degrees).
+
+Surface lighting is illustrated in the example files
+'parametricsurface.asy' and 'sinc.asy'.  Lighting can be disabled by
+setting 'light=nolight', as in this example of a Gaussian surface:
 import graph3;
 
 size(200,0);
@@ -8237,11 +8248,9 @@
 size(200);
 
 real func(real x) {return 2x;}
-add(slopefield(func,(-3,-3),(3,3),20,Arrow));
+add(slopefield(func,(-3,-3),(3,3),20));
 draw(curve((0,0),func,(-3,-3),(3,3)),red);
 
-
-
                             [./slopefield1]
 
 
@@ -8264,19 +8273,22 @@
 'Asymptote':
 Usage: ../asy [options] [file ...]
 
-Options (negate by replacing - with -no): 
+Options (negate boolean options by replacing - with -no): 
 
+-GPUblockSize n        Compute shader block size [8]
+-GPUcompress           Compress GPU transparent fragment counts [false]
 -GPUindexing           Compute indexing partial sums on GPU [true]
 -GPUinterlock          Use fragment shader interlock [true]
--GPUlocalSize n        Compute shader local size [16]
+-GPUlocalSize n        Compute shader local size [256]
 -V,-View               View output; command-line only
 -absolute              Use absolute WebGL dimensions [false]
 -a,-align C|B|T|Z      Center, Bottom, Top, or Zero page alignment [C]
 -aligndir pair         Directional page alignment (overrides align) [(0,0)]
+-animating             [false]
 -antialias n           Antialiasing width for rasterized output [2]
 -auto3D                Automatically activate 3D scene [true]
 -autobillboard         3D labels always face viewer by default [true]
--autoimport string     Module to automatically import
+-autoimport str        Module to automatically import
 -autoplain             Enable automatic importing of plain [true]
 -autoplay              Autoplay 3D animations [false]
 -autorotate            Enable automatic PDF page rotation [false]
@@ -8283,36 +8295,46 @@
 -axes3                 Show 3D axes in PDF output [true]
 -batchMask             Mask fpu exceptions in batch mode [false]
 -batchView             View output in batch mode [false]
--bw                    Convert all colors to black and white [false]
+-bw                    Convert all colors to black and white false
 -cd directory          Set current directory; command-line only
--cmyk                  Convert rgb colors to cmyk [false]
--c,-command string     Command to autoexecute
--compact               Conserve memory at the expense of speed [false]
+-cmyk                  Convert rgb colors to cmyk false
+-c,-command str        Command to autoexecute
+-compact               Conserve memory at the expense of speed false
 -compress              Compress images in PDF output [true]
+-convertOptions str    []
 -d,-debug              Enable debugging messages [false]
 -devicepixelratio n    Ratio of physical to logical pixels [1]
 -digits n              Default output file precision [7]
 -divisor n             Garbage collect using purge(divisor=n) [2]
--dvisvgmMultipleFiles  dvisvgm supports multiple files [false]
+-dvipsOptions str      []
+-dvisvgmMultipleFiles  dvisvgm supports multiple files [true]
+-dvisvgmOptions str    []
 -embed                 Embed rendered preview image [true]
+-e,-environment        Show summary of environment settings; command-line only
 -exitonEOF             Exit interactive mode on EOF [true]
 -fitscreen             Fit rendered image to screen [true]
--framedelay ms         Additional frame delay [0]
 -framerate frames/s    Animation speed [30]
--globalread            Allow read from other directory [true]
--globalwrite           Allow write to other directory [false]
--gray                  Convert all colors to grayscale [false]
+-glOptions str         []
+-globalread            Allow read from other directory true
+-globalwrite           Allow write to other directory false
+-gray                  Convert all colors to grayscale false
+-gsOptions str         []
 -h,-help               Show summary of options; command-line only
 -historylines n        Retain n lines of history [1000]
+-htmlviewerOptions str
+                       []
+-hyperrefOptions str   [setpagesize=false,unicode,pdfborder=0 0 0]
 -ibl                   Enable environment map image-based lighting [false]
 -iconify               Iconify rendering window [false]
--image string          Environment image name [snowyField]
--imageDir string       Environment image library directory [ibl]
+-image str             Environment image name [snowyField]
+-imageDir str          Environment image library directory [ibl]
 -inlineimage           Generate inline embedded image [false]
 -inlinetex             Generate inline TeX code [false]
+-inpipe n              Input pipe [-1]
 -interactiveMask       Mask fpu exceptions in interactive mode [true]
 -interactiveView       View output in interactive mode [true]
 -interactiveWrite      Write expressions entered at the prompt to stdout [true]
+-interrupt             [false]
 -k,-keep               Keep intermediate files [false]
 -keepaux               Keep intermediate LaTeX .aux files [false]
 -level n               Postscript level [3]
@@ -8331,20 +8353,26 @@
 -O,-offset pair        PostScript offset [(0,0)]
 -f,-outformat format   Convert each output file to specified format
 -o,-outname name       Alternative output directory/filename
+-outpipe n             Output pipe [-1]
+-paperheight bp        Default page height [0]
+-paperwidth bp         Default page width [0]
 -p,-parseonly          Parse file [false]
 -pdfreload             Automatically reload document in pdfviewer [false]
+-pdfreloadOptions str  []
 -pdfreloaddelay usec   Delay before attempting initial pdf reload [750000]
+-pdfviewerOptions str  []
 -position pair         Initial 3D rendering screen position [(0,0)]
 -prc                   Embed 3D PRC graphics in PDF output [false]
 -prerender resolution  Prerender V3D objects (0 implies vector output) [0]
--prompt string         Prompt [> ]
--prompt2 string        Continuation prompt for multiline input  [..]
+-prompt str            Prompt [> ]
+-prompt2 str           Continuation prompt for multiline input  [..]
+-psviewerOptions str   []
 -q,-quiet              Suppress welcome text and noninteractive stdout [false]
 -render n              Render 3D graphics using n pixels per bp (-1=auto) [-1]
 -resizestep step       Resize step [1.2]
 -reverse               reverse 3D animations [false]
--rgb                   Convert cmyk colors to rgb [false]
--safe                  Disable system call [true]
+-rgb                   Convert cmyk colors to rgb false
+-safe                  Disable system call true
 -scroll n              Scroll standard output n lines at a time [0]
 -shiftHoldDistance n   WebGL touch screen distance limit for shift mode [20]
 -shiftWaitTime ms      WebGL touch screen shift mode delay [200]
@@ -8359,13 +8387,13 @@
 -s,-translate          Show translated virtual machine code [false]
 -twice                 Run LaTeX twice (to resolve references) [false]
 -twosided              Use two-sided 3D lighting model for rendering [true]
--u,-user string        General purpose user string
--v,-verbose            Increase verbosity level (can specify multiple times) [0]
+-u,-user str           General purpose user string
+-v,-verbose            Increase verbosity level (can specify multiple times) 0
 -version               Show version; command-line only
 -vibrateTime ms        WebGL shift mode vibrate duration [25]
 -viewportmargin pair   Horizontal and vertical 3D viewport margin [(0.5,0.5)]
 -wait                  Wait for child processes to finish before exiting [false]
--warn string           Enable warning; command-line only
+-warn str              Enable warning; command-line only
 -webgl2                Use webgl2 if available [false]
 -where                 Show where listed variables are declared [false]
 -wsl                   Run asy under the Windows Subsystem for Linux. [false]
@@ -8431,9 +8459,10 @@
 later) from <https://dvisvgm.de>.  You might need to adjust the
 configuration variable 'libgs' to point to the location of your
 'Ghostscript' library 'libgs.so' (or to an empty string, depending on
-how 'dvisvgm' was configured).  The 2.10 version (or later) of 'dvisvgm'
-can display SVG output (used by the 'xasy' editor) for embedded EPS,
-PDF, PNG, and JPEG images included with the 'graphic()' function.
+how 'dvisvgm' was configured).  The 2.13.1 version (or later) of
+'dvisvgm' can display SVG output (used by the 'xasy' editor) for
+embedded EPS, PDF, PNG, and JPEG images included with the 'graphic()'
+function.
 
    'Asymptote' can also produce any output format supported by the
 'ImageMagick' 'convert' program (version 6.3.5 or later recommended; an
@@ -8619,10 +8648,8 @@
    <https://sourceforge.net/projects/tumagcc/files/rsvg-convert-2.40.20.7z>
 
    Deconstruction of a picture into its components is fastest when using
-the 'LaTeX' TeX engine.  One can speed up deconstruction for other TeX
-engines using the 2.13.1 version or later of 'dvisvgm' and setting
-'dvisvgmMultipleFiles=true;' in the 'Asymptote' configuration file
-(*note configuration file::).
+the 'LaTeX' TeX engine.  The default setting 'dvisvgmMultipleFiles=true'
+speeds up deconstruction under PDF TeX engines.
 
 
 File: asymptote.info,  Node: GUI usage,  Prev: GUI installation,  Up: GUI
@@ -8932,9 +8959,9 @@
 * ---:                                   Bezier curves.      (line   84)
 * -=:                                    Self & prefix operators.
                                                              (line    6)
-* -c:                                    Options.            (line  206)
-* -l:                                    Options.            (line  225)
-* -u:                                    Options.            (line  216)
+* -c:                                    Options.            (line  226)
+* -l:                                    Options.            (line  245)
+* -u:                                    Options.            (line  236)
 * -V:                                    Configuring.        (line    6)
 * -V <1>:                                Drawing in batch mode.
                                                              (line   16)
@@ -8975,7 +9002,7 @@
                                                              (line   53)
 * ||:                                    Arithmetic & logical.
                                                              (line   51)
-* a4:                                    Configuring.        (line   68)
+* a4:                                    Configuring.        (line   63)
 * abort:                                 Data types.         (line  364)
 * abs:                                   Data types.         (line   65)
 * abs <1>:                               Data types.         (line  144)
@@ -8983,7 +9010,7 @@
                                                              (line   35)
 * abs2:                                  Data types.         (line   65)
 * abs2 <1>:                              Data types.         (line  144)
-* absolute:                              Configuring.        (line   43)
+* absolute:                              Configuring.        (line   38)
 * absolute <1>:                          three.              (line  241)
 * accel:                                 Paths and guides.   (line  126)
 * accel <1>:                             Paths and guides.   (line  132)
@@ -9013,14 +9040,14 @@
 * alias:                                 Structures.         (line   62)
 * alias <1>:                             Arrays.             (line  183)
 * Align:                                 label.              (line   12)
-* aligndir:                              Options.            (line  198)
-* all:                                   Arrays.             (line  342)
+* aligndir:                              Options.            (line  218)
+* all:                                   Arrays.             (line  350)
 * Allow:                                 Pens.               (line  363)
 * and:                                   Bezier curves.      (line   56)
 * AND:                                   Arithmetic & logical.
                                                              (line   68)
 * angle:                                 Data types.         (line   73)
-* animate:                               Configuring.        (line   20)
+* animate:                               Configuring.        (line   15)
 * animate <1>:                           Files.              (line  159)
 * animate <2>:                           animation.          (line   12)
 * animation:                             animation.          (line    6)
@@ -9027,7 +9054,7 @@
 * animation <1>:                         animation.          (line    6)
 * annotate:                              annotate.           (line    6)
 * antialias:                             three.              (line  261)
-* antialias <1>:                         Options.            (line  168)
+* antialias <1>:                         Options.            (line  187)
 * append:                                Files.              (line   38)
 * append <1>:                            Arrays.             (line   39)
 * arc:                                   Paths and guides.   (line   24)
@@ -9076,12 +9103,12 @@
 * asy <1>:                               Import.             (line  106)
 * asy-mode:                              Editing modes.      (line    6)
 * asy.vim:                               Editing modes.      (line   32)
-* asygl:                                 Configuring.        (line   74)
+* asygl:                                 Configuring.        (line   69)
 * asyinclude:                            LaTeX usage.        (line   45)
 * Asymptote Web Application:             Description.        (line    6)
 * asymptote.sty:                         LaTeX usage.        (line    6)
 * asymptote.xml:                         Editing modes.      (line   48)
-* ASYMPTOTE_CONFIG:                      Options.            (line  139)
+* ASYMPTOTE_CONFIG:                      Options.            (line  158)
 * atan:                                  Mathematical functions.
                                                              (line    6)
 * aTan:                                  Mathematical functions.
@@ -9096,12 +9123,12 @@
 * attach <1>:                            LaTeX usage.        (line   50)
 * attach <2>:                            graph.              (line  406)
 * autoadjust:                            three.              (line  418)
-* autoimport:                            Options.            (line  135)
+* autoimport:                            Options.            (line  154)
 * automatic scaling:                     graph.              (line  710)
 * automatic scaling <1>:                 graph.              (line  710)
 * axialshade:                            fill.               (line   43)
 * axis:                                  graph.              (line  924)
-* axis <1>:                              graph.              (line 1007)
+* axis <1>:                              graph.              (line 1006)
 * axis <2>:                              graph3.             (line   66)
 * axis <3>:                              graph3.             (line   82)
 * azimuth:                               Data types.         (line  154)
@@ -9231,10 +9258,11 @@
 * CLZ:                                   Arithmetic & logical.
                                                              (line   68)
 * cm:                                    Figure size.        (line   18)
-* cmd:                                   Configuring.        (line   35)
+* cmd:                                   Configuring.        (line   30)
 * cmyk:                                  Pens.               (line   38)
 * colatitude:                            Data types.         (line  159)
 * color:                                 Pens.               (line   23)
+* color <1>:                             graph3.             (line  133)
 * coloredNodes:                          tube.               (line   25)
 * coloredpath:                           tube.               (line   18)
 * coloredSegments:                       tube.               (line   25)
@@ -9241,10 +9269,10 @@
 * colorless:                             Pens.               (line   57)
 * colors:                                Pens.               (line   54)
 * comma:                                 Files.              (line   65)
-* comma-separated-value mode:            Arrays.             (line  374)
+* comma-separated-value mode:            Arrays.             (line  382)
 * command-line interface:                Command-Line Interface.
                                                              (line    6)
-* command-line options:                  Configuring.        (line   91)
+* command-line options:                  Configuring.        (line   86)
 * command-line options <1>:              Options.            (line    6)
 * comment character:                     Files.              (line   16)
 * compass directions:                    Labels.             (line   18)
@@ -9255,14 +9283,14 @@
 * conditional:                           Programming.        (line   26)
 * conditional <1>:                       Arithmetic & logical.
                                                              (line   61)
-* config:                                Configuring.        (line   74)
-* config <1>:                            Options.            (line  139)
-* configuration file:                    Configuring.        (line   20)
-* configuration file <1>:                Options.            (line  139)
+* config:                                Configuring.        (line   69)
+* config <1>:                            Options.            (line  158)
+* configuration file:                    Configuring.        (line   15)
+* configuration file <1>:                Options.            (line  158)
 * configuring:                           Configuring.        (line    6)
 * conj:                                  Data types.         (line   62)
 * constructors:                          Structures.         (line   91)
-* context:                               Options.            (line  168)
+* context:                               Options.            (line  187)
 * continue:                              Programming.        (line   48)
 * continue <1>:                          Debugger.           (line   31)
 * contour:                               contour.            (line    6)
@@ -9270,11 +9298,11 @@
 * controls:                              Bezier curves.      (line   45)
 * controls <1>:                          three.              (line    6)
 * controlSpecifier:                      Paths and guides.   (line  396)
-* convert:                               Configuring.        (line   74)
+* convert:                               Configuring.        (line   69)
 * convert <1>:                           Files.              (line  159)
 * convert <2>:                           animation.          (line    6)
-* convert <3>:                           Options.            (line  168)
-* convertOptions:                        Options.            (line  154)
+* convert <3>:                           Options.            (line  187)
+* convertOptions:                        Options.            (line  173)
 * Coons shading:                         fill.               (line   78)
 * copy:                                  Arrays.             (line  176)
 * cos:                                   Mathematical functions.
@@ -9291,10 +9319,10 @@
 * cross <2>:                             graph.              (line  480)
 * crossframe:                            markers.            (line   22)
 * crosshatch:                            Pens.               (line  302)
-* csv:                                   Arrays.             (line  374)
+* csv:                                   Arrays.             (line  382)
 * CTZ:                                   Arithmetic & logical.
                                                              (line   68)
-* cubicroots:                            Arrays.             (line  331)
+* cubicroots:                            Arrays.             (line  339)
 * curl:                                  Bezier curves.      (line   66)
 * curl <1>:                              three.              (line    6)
 * curlSpecifier:                         Paths and guides.   (line  408)
@@ -9345,11 +9373,11 @@
 * delete <1>:                            Arrays.             (line   39)
 * description:                           Description.        (line    6)
 * devicepixelratio:                      three.              (line  184)
-* diagonal:                              Arrays.             (line  316)
+* diagonal:                              Arrays.             (line  324)
 * diamond:                               flowchart.          (line   54)
 * diffuse:                               three.              (line   76)
 * diffusepen:                            three.              (line   66)
-* dimension:                             Arrays.             (line  379)
+* dimension:                             Arrays.             (line  387)
 * dir:                                   Search paths.       (line    9)
 * dir <1>:                               Data types.         (line   90)
 * dir <2>:                               Data types.         (line  181)
@@ -9359,7 +9387,7 @@
 * directory:                             Files.              (line   26)
 * dirSpecifier:                          Paths and guides.   (line  390)
 * dirtime:                               Paths and guides.   (line  166)
-* display:                               Configuring.        (line   20)
+* display:                               Configuring.        (line   15)
 * do:                                    Programming.        (line   48)
 * DOSendl:                               Files.              (line   65)
 * DOSnewl:                               Files.              (line   65)
@@ -9366,8 +9394,8 @@
 * dot:                                   draw.               (line   83)
 * dot <1>:                               Data types.         (line  103)
 * dot <2>:                               Data types.         (line  194)
-* dot <3>:                               Arrays.             (line  271)
-* dot <4>:                               Arrays.             (line  274)
+* dot <3>:                               Arrays.             (line  279)
+* dot <4>:                               Arrays.             (line  282)
 * DotMargin:                             draw.               (line   42)
 * DotMargin3:                            three.              (line  638)
 * DotMargins:                            draw.               (line   42)
@@ -9385,11 +9413,12 @@
 * drawing commands:                      Drawing commands.   (line    6)
 * drawline:                              math.               (line    9)
 * drawtree:                              drawtree.           (line    6)
-* dvips:                                 Configuring.        (line   74)
-* dvipsOptions:                          Options.            (line  154)
-* dvisvgm:                               Configuring.        (line   74)
-* dvisvgm <1>:                           Options.            (line  173)
-* dvisvgmOptions:                        Options.            (line  154)
+* dvips:                                 Configuring.        (line   69)
+* dvipsOptions:                          Options.            (line  173)
+* dvisvgm:                               Configuring.        (line   69)
+* dvisvgm <1>:                           Options.            (line  192)
+* dvisvgmMultipleFiles:                  GUI installation.   (line   20)
+* dvisvgmOptions:                        Options.            (line  173)
 * E:                                     Labels.             (line   18)
 * E <1>:                                 Mathematical functions.
                                                              (line   48)
@@ -9425,13 +9454,13 @@
 * EndPoint:                              label.              (line   55)
 * envelope:                              Frames and pictures.
                                                              (line   25)
-* environment variables:                 Configuring.        (line   95)
+* environment variables:                 Configuring.        (line   90)
 * eof:                                   Files.              (line   97)
-* eof <1>:                               Arrays.             (line  356)
+* eof <1>:                               Arrays.             (line  364)
 * eol:                                   Files.              (line   97)
-* eol <1>:                               Arrays.             (line  356)
+* eol <1>:                               Arrays.             (line  364)
 * EPS:                                   label.              (line   78)
-* EPS <1>:                               Options.            (line  168)
+* EPS <1>:                               Options.            (line  187)
 * erase:                                 Drawing in interactive mode.
                                                              (line   11)
 * erase <1>:                             Data types.         (line  257)
@@ -9522,7 +9551,7 @@
 * fontsize:                              Pens.               (line  192)
 * for:                                   Programming.        (line   26)
 * format:                                Data types.         (line  290)
-* format <1>:                            Options.            (line  168)
+* format <1>:                            Options.            (line  187)
 * forum:                                 Help.               (line    6)
 * frame:                                 Frames and pictures.
                                                              (line    7)
@@ -9542,6 +9571,7 @@
                                                              (line   39)
 * geometry:                              geometry.           (line    6)
 * getc:                                  Files.              (line   32)
+* getint:                                Files.              (line  122)
 * getpair:                               Files.              (line  122)
 * getreal:                               Files.              (line  122)
 * getstring:                             Files.              (line  122)
@@ -9550,7 +9580,7 @@
 * globalwrite:                           Files.              (line   40)
 * globalwrite <1>:                       Files.              (line  154)
 * glOptions:                             three.              (line  261)
-* glOptions <1>:                         Options.            (line  154)
+* glOptions <1>:                         Options.            (line  173)
 * GNU Scientific Library:                Mathematical functions.
                                                              (line   48)
 * gouraudshade:                          fill.               (line   63)
@@ -9559,7 +9589,7 @@
 * graph:                                 graph.              (line    6)
 * graph3:                                graph3.             (line    6)
 * graphic:                               label.              (line   78)
-* graphic <1>:                           Options.            (line  173)
+* graphic <1>:                           Options.            (line  192)
 * graphical user interface:              GUI.                (line    6)
 * graphwithderiv:                        graph.              (line  670)
 * gray:                                  Pens.               (line   25)
@@ -9568,12 +9598,12 @@
 * grid:                                  Pens.               (line  285)
 * grid <1>:                              graph.              (line  766)
 * grid3:                                 grid3.              (line    6)
-* gs:                                    Configuring.        (line   20)
+* gs:                                    Configuring.        (line   15)
 * GSL:                                   Compiling from UNIX source.
                                                              (line   62)
 * gsl:                                   Mathematical functions.
                                                              (line   48)
-* gsOptions:                             Options.            (line  154)
+* gsOptions:                             Options.            (line  173)
 * GUI:                                   GUI.                (line    6)
 * GUI installation:                      GUI installation.   (line    6)
 * GUI usage:                             GUI usage.          (line    6)
@@ -9601,10 +9631,10 @@
 * HookHead3:                             three.              (line  622)
 * Horizontal:                            flowchart.          (line   77)
 * HTML5:                                 three.              (line  233)
-* htmlviewer:                            Configuring.        (line   20)
-* htmlviewer <1>:                        Configuring.        (line   43)
-* htmlviewerOptions:                     Options.            (line  154)
-* hyperrefOptions:                       Options.            (line  154)
+* htmlviewer:                            Configuring.        (line   15)
+* htmlviewer <1>:                        Configuring.        (line   38)
+* htmlviewerOptions:                     Options.            (line  173)
+* hyperrefOptions:                       Options.            (line  173)
 * hypot:                                 Mathematical functions.
                                                              (line    6)
 * I:                                     Mathematical functions.
@@ -9614,7 +9644,7 @@
 * identity:                              Transforms.         (line   24)
 * identity <1>:                          Mathematical functions.
                                                              (line    6)
-* identity <2>:                          Arrays.             (line  313)
+* identity <2>:                          Arrays.             (line  321)
 * identity4:                             three.              (line  494)
 * if:                                    Programming.        (line   26)
 * IgnoreAspect:                          Frames and pictures.
@@ -9622,9 +9652,9 @@
 * image:                                 palette.            (line   33)
 * image <1>:                             palette.            (line   61)
 * image-based lighting:                  three.              (line  104)
-* ImageMagick:                           Configuring.        (line   74)
+* ImageMagick:                           Configuring.        (line   69)
 * ImageMagick <1>:                       animation.          (line    6)
-* ImageMagick <2>:                       Options.            (line  168)
+* ImageMagick <2>:                       Options.            (line  187)
 * images:                                palette.            (line    6)
 * implicit casts:                        Casts.              (line    6)
 * implicit linear solver:                MetaPost.           (line   10)
@@ -9688,7 +9718,7 @@
 * intMax:                                Data types.         (line   30)
 * intMin:                                Data types.         (line   30)
 * inverse:                               Transforms.         (line   16)
-* inverse <1>:                           Arrays.             (line  319)
+* inverse <1>:                           Arrays.             (line  327)
 * invert:                                three.              (line  484)
 * invisible:                             Pens.               (line   43)
 * isnan:                                 Data types.         (line   35)
@@ -9733,7 +9763,7 @@
                                                              (line    6)
 * lastcut:                               Paths and guides.   (line  266)
 * lasy-mode:                             Editing modes.      (line    6)
-* latex:                                 Options.            (line  168)
+* latex:                                 Options.            (line  187)
 * LaTeX NFSS fonts:                      Pens.               (line  206)
 * LaTeX usage:                           LaTeX usage.        (line    6)
 * latexmk:                               LaTeX usage.        (line   30)
@@ -9741,7 +9771,7 @@
 * latticeshade:                          fill.               (line   32)
 * layer:                                 Drawing commands.   (line   16)
 * leastsquares:                          stats.              (line    6)
-* leastsquares <1>:                      graph.              (line  948)
+* leastsquares <1>:                      graph.              (line  947)
 * Left:                                  graph.              (line  269)
 * LeftRight:                             graph.              (line  275)
 * LeftSide:                              label.              (line   60)
@@ -9760,11 +9790,11 @@
 * length <4>:                            Paths and guides.   (line  373)
 * length <5>:                            Arrays.             (line   39)
 * length <6>:                            three.              (line  556)
-* letter:                                Configuring.        (line   68)
+* letter:                                Configuring.        (line   63)
 * lexorder:                              math.               (line   63)
 * lexorder <1>:                          math.               (line   66)
 * libcurl:                               Import.             (line   94)
-* libgs:                                 Options.            (line  173)
+* libgs:                                 Options.            (line  192)
 * libm routines:                         Mathematical functions.
                                                              (line    6)
 * libsigsegv:                            Functions.          (line  100)
@@ -9771,9 +9801,9 @@
 * libsigsegv <1>:                        Help.               (line   27)
 * light:                                 three.              (line   76)
 * limits:                                graph.              (line  639)
-* line:                                  Arrays.             (line  356)
-* line <1>:                              Arrays.             (line  360)
-* line mode:                             Arrays.             (line  356)
+* line:                                  Arrays.             (line  364)
+* line <1>:                              Arrays.             (line  368)
+* line mode:                             Arrays.             (line  364)
 * Linear:                                graph.              (line  710)
 * linecap:                               Pens.               (line  139)
 * linejoin:                              Pens.               (line  149)
@@ -9799,8 +9829,8 @@
 * loop:                                  Programming.        (line   26)
 * LSP:                                   Language server protocol.
                                                              (line    6)
-* lualatex:                              Options.            (line  168)
-* luatex:                                Options.            (line  168)
+* lualatex:                              Options.            (line  187)
+* luatex:                                Options.            (line  187)
 * MacOS X binary distributions:          MacOS X binary distributions.
                                                              (line    6)
 * MacOS X configuration:                 Compiling from UNIX source.
@@ -9906,7 +9936,7 @@
 * None <1>:                              draw.               (line   26)
 * none:                                  Files.              (line   65)
 * normal:                                three.              (line  542)
-* nosafe:                                Options.            (line  193)
+* nosafe:                                Options.            (line  213)
 * NOT:                                   Arithmetic & logical.
                                                              (line   68)
 * notaknot:                              graph.              (line   36)
@@ -9927,7 +9957,7 @@
 * obliqueZ:                              three.              (line  378)
 * ode:                                   ode.                (line    6)
 * offset:                                Pens.               (line  123)
-* offset <1>:                            Options.            (line  198)
+* offset <1>:                            Options.            (line  218)
 * OmitTick:                              graph.              (line  223)
 * OmitTickInterval:                      graph.              (line  223)
 * OmitTickIntervals:                     graph.              (line  223)
@@ -9959,7 +9989,7 @@
 * outprefix:                             Frames and pictures.
                                                              (line   91)
 * output:                                Files.              (line   38)
-* output <1>:                            Options.            (line  168)
+* output <1>:                            Options.            (line  187)
 * OutTicks:                              graph3.             (line   35)
 * overloading functions:                 Functions.          (line   55)
 * overwrite:                             Pens.               (line  360)
@@ -9972,9 +10002,9 @@
 * pair:                                  Figure size.        (line    6)
 * pair <1>:                              Data types.         (line   46)
 * pairs:                                 Arrays.             (line  245)
-* paperheight:                           Configuring.        (line   68)
-* papertype:                             Configuring.        (line   68)
-* paperwidth:                            Configuring.        (line   68)
+* paperheight:                           Configuring.        (line   63)
+* papertype:                             Configuring.        (line   63)
+* paperwidth:                            Configuring.        (line   63)
 * parallelogram:                         flowchart.          (line   47)
 * parametric surface:                    graph3.             (line   99)
 * parametrized curve:                    graph.              (line  639)
@@ -9992,11 +10022,11 @@
 * patterns:                              Pens.               (line  271)
 * patterns <1>:                          patterns.           (line    6)
 * PBR:                                   three.              (line   74)
-* PDF:                                   Options.            (line  168)
-* pdflatex:                              Options.            (line  168)
-* pdfreloadOptions:                      Options.            (line  154)
-* pdfviewer:                             Configuring.        (line   20)
-* pdfviewerOptions:                      Options.            (line  154)
+* PDF:                                   Options.            (line  187)
+* pdflatex:                              Options.            (line  187)
+* pdfreloadOptions:                      Options.            (line  173)
+* pdfviewer:                             Configuring.        (line   15)
+* pdfviewerOptions:                      Options.            (line  173)
 * pen:                                   Pens.               (line    6)
 * PenMargin:                             draw.               (line   42)
 * PenMargin2:                            three.              (line  638)
@@ -10052,14 +10082,14 @@
 * programming:                           Programming.        (line    6)
 * pstoedit:                              PostScript to Asymptote.
                                                              (line    6)
-* psviewer:                              Configuring.        (line   20)
-* psviewerOptions:                       Options.            (line  154)
+* psviewer:                              Configuring.        (line   15)
+* psviewerOptions:                       Options.            (line  173)
 * pt:                                    Figure size.        (line   18)
 * public:                                Structures.         (line    6)
 * push:                                  Arrays.             (line   39)
 * Python usage:                          Interactive mode.   (line   72)
-* quadraticroots:                        Arrays.             (line  322)
-* quadraticroots <1>:                    Arrays.             (line  327)
+* quadraticroots:                        Arrays.             (line  330)
+* quadraticroots <1>:                    Arrays.             (line  335)
 * quarticroots:                          math.               (line   22)
 * quick reference:                       Description.        (line   92)
 * quit:                                  Drawing in interactive mode.
@@ -10083,9 +10113,9 @@
                                                              (line   39)
 * randMax:                               Mathematical functions.
                                                              (line   39)
-* read:                                  Arrays.             (line  396)
+* read:                                  Arrays.             (line  404)
 * reading:                               Files.              (line   12)
-* reading string arrays:                 Arrays.             (line  366)
+* reading string arrays:                 Arrays.             (line  374)
 * readline:                              Files.              (line  139)
 * real:                                  Data types.         (line   35)
 * realDigits:                            Data types.         (line   35)
@@ -10093,6 +10123,7 @@
 * realMax:                               Data types.         (line   35)
 * realMin:                               Data types.         (line   35)
 * realmult:                              Data types.         (line  100)
+* realschur:                             Arrays.             (line  271)
 * rectangle:                             flowchart.          (line   34)
 * recursion:                             Functions.          (line  100)
 * reference:                             Description.        (line   92)
@@ -10106,7 +10137,7 @@
 * rename:                                Files.              (line  156)
 * render:                                three.              (line   46)
 * render <1>:                            three.              (line  184)
-* render <2>:                            Options.            (line  168)
+* render <2>:                            Options.            (line  187)
 * replace:                               Data types.         (line  270)
 * resetdefaultpen:                       Pens.               (line  387)
 * rest arguments:                        Rest arguments.     (line    6)
@@ -10145,7 +10176,7 @@
 * runtime imports:                       Import.             (line  102)
 * Russian:                               Pens.               (line  238)
 * S:                                     Labels.             (line   18)
-* safe:                                  Options.            (line  193)
+* safe:                                  Options.            (line  213)
 * save:                                  Frames and pictures.
                                                              (line  288)
 * saveline:                              Files.              (line  139)
@@ -10158,6 +10189,8 @@
 * scale <4>:                             three.              (line  509)
 * scale3:                                three.              (line  507)
 * scaled graph:                          graph.              (line  690)
+* schur:                                 Arrays.             (line  271)
+* schur <1>:                             Arrays.             (line  275)
 * scientific graph:                      graph.              (line  387)
 * scroll:                                Files.              (line  113)
 * search:                                Arrays.             (line  166)
@@ -10176,8 +10209,8 @@
 * self operators:                        Self & prefix operators.
                                                              (line    6)
 * sequence:                              Arrays.             (line  118)
-* settings:                              Configuring.        (line   20)
-* settings <1>:                          Options.            (line  139)
+* settings:                              Configuring.        (line   15)
+* settings <1>:                          Options.            (line  158)
 * sgn:                                   Mathematical functions.
                                                              (line   26)
 * shading:                               fill.               (line   32)
@@ -10221,7 +10254,7 @@
 * size <4>:                              Frames and pictures.
                                                              (line   74)
 * size <5>:                              three.              (line  556)
-* size <6>:                              Options.            (line  168)
+* size <6>:                              Options.            (line  187)
 * size3:                                 three.              (line  320)
 * Slant:                                 label.              (line   42)
 * slant:                                 Transforms.         (line   38)
@@ -10238,8 +10271,8 @@
                                                              (line   48)
 * solid:                                 Pens.               (line  102)
 * solids:                                solids.             (line    6)
-* solve:                                 Arrays.             (line  291)
-* solve <1>:                             Arrays.             (line  307)
+* solve:                                 Arrays.             (line  299)
+* solve <1>:                             Arrays.             (line  315)
 * sort:                                  Arrays.             (line  186)
 * sort <1>:                              Arrays.             (line  190)
 * sort <2>:                              Arrays.             (line  205)
@@ -10291,9 +10324,10 @@
 * surface <2>:                           three.              (line  128)
 * surface <3>:                           three.              (line  142)
 * surface <4>:                           graph3.             (line   99)
-* SVG:                                   Options.            (line  173)
+* surface <5>:                           graph3.             (line  128)
+* SVG:                                   Options.            (line  192)
 * system:                                Data types.         (line  354)
-* system <1>:                            Options.            (line  193)
+* system <1>:                            Options.            (line  213)
 * syzygy:                                syzygy.             (line    6)
 * tab:                                   Files.              (line   65)
 * tab completion:                        Drawing in interactive mode.
@@ -10314,13 +10348,13 @@
 * tessellation:                          three.              (line  154)
 * tex:                                   Frames and pictures.
                                                              (line  305)
-* tex <1>:                               Options.            (line  168)
+* tex <1>:                               Options.            (line  187)
 * TeX fonts:                             Pens.               (line  213)
 * TeX string:                            Data types.         (line  208)
-* texcommand:                            Configuring.        (line   74)
+* texcommand:                            Configuring.        (line   69)
 * TeXHead:                               draw.               (line   26)
 * TeXHead3:                              three.              (line  622)
-* texpath:                               Configuring.        (line   74)
+* texpath:                               Configuring.        (line   69)
 * texpath <1>:                           label.              (line  113)
 * texpreamble:                           Frames and pictures.
                                                              (line  314)
@@ -10365,7 +10399,7 @@
 * triangle:                              geometry.           (line    6)
 * triangles:                             three.              (line  154)
 * triangulate:                           contour.            (line  192)
-* tridiagonal:                           Arrays.             (line  278)
+* tridiagonal:                           Arrays.             (line  286)
 * trigonometric integrals:               Mathematical functions.
                                                              (line   48)
 * triple:                                Data types.         (line  137)
@@ -10424,10 +10458,10 @@
                                                              (line   55)
 * variable initializers:                 Variable initializers.
                                                              (line    6)
-* vectorfield:                           graph.              (line 1023)
-* vectorfield <1>:                       graph.              (line 1062)
-* vectorfield3:                          graph3.             (line  157)
-* vectorization:                         Arrays.             (line  335)
+* vectorfield:                           graph.              (line 1022)
+* vectorfield <1>:                       graph.              (line 1061)
+* vectorfield3:                          graph3.             (line  167)
+* vectorization:                         Arrays.             (line  343)
 * verbatim:                              Frames and pictures.
                                                              (line  297)
 * vertex-dependent colors:               three.              (line  119)
@@ -10448,17 +10482,17 @@
 * wheel mouse:                           GUI.                (line    6)
 * while:                                 Programming.        (line   48)
 * White:                                 three.              (line   76)
-* white-space string delimiter mode:     Arrays.             (line  366)
+* white-space string delimiter mode:     Arrays.             (line  374)
 * width:                                 LaTeX usage.        (line   50)
 * windingnumber:                         Paths and guides.   (line  283)
-* word:                                  Arrays.             (line  366)
+* word:                                  Arrays.             (line  374)
 * write:                                 Files.              (line   57)
-* write <1>:                             Arrays.             (line  405)
+* write <1>:                             Arrays.             (line  413)
 * X:                                     three.              (line  335)
 * xasy:                                  GUI.                (line    6)
 * xaxis3:                                graph3.             (line    7)
 * xdr:                                   Files.              (line   80)
-* xelatex:                               Options.            (line  168)
+* xelatex:                               Options.            (line  187)
 * XEquals:                               graph.              (line  265)
 * xequals:                               graph.              (line  278)
 * xlimits:                               graph.              (line  639)
@@ -10526,147 +10560,147 @@
 Node: UNIX binary distributions12610
 Node: MacOS X binary distributions13733
 Node: Microsoft Windows14321
-Node: Configuring15529
-Node: Search paths20144
-Node: Compiling from UNIX source21152
-Node: Editing modes24303
-Node: Git26725
-Node: Uninstall27232
-Node: Tutorial27578
-Node: Drawing in batch mode28425
-Node: Drawing in interactive mode29301
-Node: Figure size30333
-Node: Labels31928
-Node: Paths32756
-Ref: unitcircle33372
-Node: Drawing commands35313
-Node: draw37121
-Ref: arrows38303
-Node: fill43818
-Ref: gradient shading44864
-Node: clip49478
-Node: label50227
-Ref: Label50827
-Node: Bezier curves56684
-Node: Programming60584
-Ref: array iteration62337
-Node: Data types62504
-Ref: format73272
-Node: Paths and guides77718
-Ref: circle77972
-Ref: extension87672
-Node: Pens94482
-Ref: fillrule102173
-Ref: basealign103077
-Ref: transparency106759
-Ref: makepen110353
-Ref: overwrite111237
-Node: Transforms112451
-Node: Frames and pictures114390
-Ref: envelope115548
-Ref: size116641
-Ref: unitsize117628
-Ref: shipout118701
-Ref: filltype121052
-Ref: add124465
-Ref: add about125407
-Ref: tex128437
-Node: Files129332
-Ref: cd130389
-Ref: scroll135291
-Node: Variable initializers138209
-Node: Structures140926
-Node: Operators148499
-Node: Arithmetic & logical148813
-Node: Self & prefix operators151183
-Node: User-defined operators151977
-Node: Implicit scaling152890
-Node: Functions153453
-Ref: stack overflow156570
-Node: Default arguments156852
-Node: Named arguments157608
-Node: Rest arguments160178
-Node: Mathematical functions163299
-Node: Arrays167956
-Ref: sort175395
-Ref: tridiagonal178306
-Ref: solve179537
-Node: Slices183677
-Node: Casts187585
-Node: Import189855
-Node: Static195425
-Node: LaTeX usage198311
-Node: Base modules204826
-Node: plain207303
-Node: simplex207977
-Node: math208250
-Node: interpolate210917
-Node: geometry211196
-Node: trembling211876
-Node: stats212145
-Node: patterns212404
-Node: markers212639
-Node: map214497
-Node: tree214921
-Node: binarytree215101
-Node: drawtree215768
-Node: syzygy215969
-Node: feynman216243
-Node: roundedpath216517
-Node: animation216799
-Ref: animate217220
-Node: embed218332
-Node: slide219286
-Node: MetaPost219617
-Node: babel220333
-Node: labelpath220565
-Node: labelpath3221385
-Node: annotate221696
-Node: CAD222166
-Node: graph222476
-Ref: ticks229635
-Ref: pathmarkers243357
-Ref: marker243827
-Ref: markuniform244181
-Ref: errorbars246040
-Ref: automatic scaling251169
-Node: palette262879
-Ref: images262997
-Ref: image267293
-Ref: logimage267814
-Ref: penimage268920
-Ref: penfunctionimage269183
-Node: three269955
-Ref: PostScript3D300255
-Node: obj301993
-Node: graph3302242
-Ref: GaussianSurface307524
-Node: grid3308674
-Node: solids309502
-Node: tube310494
-Node: flowchart312766
-Node: contour317409
-Node: contour3323917
-Node: smoothcontour3324229
-Node: slopefield325948
-Node: ode327437
-Node: Options327694
-Ref: configuration file335303
-Ref: settings335303
-Ref: texengines336567
-Ref: convert336567
-Node: Interactive mode340010
-Ref: history342159
-Node: GUI343462
-Node: GUI installation344012
-Node: GUI usage345054
-Node: Command-Line Interface346117
-Node: Language server protocol347559
-Node: PostScript to Asymptote348984
-Node: Help349762
-Node: Debugger351436
-Node: Credits353192
-Node: Index354417
+Node: Configuring15518
+Node: Search paths19737
+Node: Compiling from UNIX source20745
+Node: Editing modes23896
+Node: Git26334
+Node: Uninstall26841
+Node: Tutorial27187
+Node: Drawing in batch mode28034
+Node: Drawing in interactive mode28910
+Node: Figure size29942
+Node: Labels31537
+Node: Paths32365
+Ref: unitcircle32981
+Node: Drawing commands34922
+Node: draw36730
+Ref: arrows37912
+Node: fill43427
+Ref: gradient shading44473
+Node: clip49087
+Node: label49836
+Ref: Label50436
+Node: Bezier curves56293
+Node: Programming60193
+Ref: array iteration61946
+Node: Data types62113
+Ref: format72881
+Node: Paths and guides77327
+Ref: circle77581
+Ref: extension87281
+Node: Pens94091
+Ref: fillrule101782
+Ref: basealign102686
+Ref: transparency106368
+Ref: makepen109962
+Ref: overwrite110846
+Node: Transforms112060
+Node: Frames and pictures113999
+Ref: envelope115157
+Ref: size116250
+Ref: unitsize117237
+Ref: shipout118310
+Ref: filltype120661
+Ref: add124074
+Ref: add about125016
+Ref: tex128046
+Node: Files128941
+Ref: cd129998
+Ref: scroll134900
+Node: Variable initializers137818
+Node: Structures140535
+Node: Operators148112
+Node: Arithmetic & logical148426
+Node: Self & prefix operators150796
+Node: User-defined operators151590
+Node: Implicit scaling152503
+Node: Functions153066
+Ref: stack overflow156183
+Node: Default arguments156465
+Node: Named arguments157221
+Node: Rest arguments159791
+Node: Mathematical functions162912
+Node: Arrays167569
+Ref: sort175008
+Ref: tridiagonal178246
+Ref: solve179477
+Node: Slices183617
+Node: Casts187525
+Node: Import189795
+Node: Static195365
+Node: LaTeX usage198251
+Node: Base modules204767
+Node: plain207244
+Node: simplex207918
+Node: math208191
+Node: interpolate210858
+Node: geometry211137
+Node: trembling211817
+Node: stats212086
+Node: patterns212345
+Node: markers212580
+Node: map214438
+Node: tree214862
+Node: binarytree215042
+Node: drawtree215709
+Node: syzygy215910
+Node: feynman216184
+Node: roundedpath216458
+Node: animation216740
+Ref: animate217161
+Node: embed218273
+Node: slide219227
+Node: MetaPost219558
+Node: babel220274
+Node: labelpath220506
+Node: labelpath3221326
+Node: annotate221637
+Node: CAD222107
+Node: graph222417
+Ref: ticks229576
+Ref: pathmarkers243298
+Ref: marker243768
+Ref: markuniform244122
+Ref: errorbars245981
+Ref: automatic scaling251110
+Node: palette262806
+Ref: images262924
+Ref: image267220
+Ref: logimage267741
+Ref: penimage268847
+Ref: penfunctionimage269110
+Node: three269882
+Ref: PostScript3D300157
+Node: obj301895
+Node: graph3302144
+Ref: GaussianSurface307887
+Node: grid3309037
+Node: solids309865
+Node: tube310857
+Node: flowchart313129
+Node: contour317772
+Node: contour3324280
+Node: smoothcontour3324592
+Node: slopefield326311
+Node: ode327792
+Node: Options328049
+Ref: configuration file336368
+Ref: settings336368
+Ref: texengines337632
+Ref: convert337632
+Node: Interactive mode341077
+Ref: history343226
+Node: GUI344529
+Node: GUI installation345079
+Node: GUI usage346007
+Node: Command-Line Interface347070
+Node: Language server protocol348512
+Node: PostScript to Asymptote349937
+Node: Help350715
+Node: Debugger352389
+Node: Credits354145
+Node: Index355370
 
 End Tag Table
 

Modified: trunk/Master/texmf-dist/doc/man/man1/asy.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/asy.1	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/texmf-dist/doc/man/man1/asy.1	2023-02-18 18:40:50 UTC (rev 65878)
@@ -31,6 +31,12 @@
 For a complete
 description, see the Info files.
 .TP
+.B \-GPUblockSize n      
+Compute shader block size [8].
+.TP
+.B \-GPUcompress         
+Compress GPU transparent fragment counts [false].
+.TP
 .B \-GPUindexing         
 Compute indexing partial sums on GPU [true].
 .TP
@@ -38,7 +44,7 @@
 Use fragment shader interlock [true].
 .TP
 .B \-GPUlocalSize n      
-Compute shader local size [16].
+Compute shader local size [256].
 .TP
 .B \-V,\-View             
 View output; command-line only.
@@ -51,6 +57,7 @@
 .TP
 .B \-aligndir pair       
 Directional page alignment (overrides align) [(0,0)].
+-animating             [false]
 .TP
 .B \-antialias n         
 Antialiasing width for rasterized output [2].
@@ -61,7 +68,7 @@
 .B \-autobillboard       
 3D labels always face viewer by default [true].
 .TP
-.B \-autoimport string   
+.B \-autoimport str      
 Module to automatically import.
 .TP
 .B \-autoplain           
@@ -83,22 +90,23 @@
 View output in batch mode [false].
 .TP
 .B \-bw                  
-Convert all colors to black and white [false].
+Convert all colors to black and white false.
 .TP
 .B \-cd directory        
 Set current directory; command-line only.
 .TP
 .B \-cmyk                
-Convert rgb colors to cmyk [false].
+Convert rgb colors to cmyk false.
 .TP
-.B \-c,\-command string   
+.B \-c,\-command str      
 Command to autoexecute.
 .TP
 .B \-compact             
-Conserve memory at the expense of speed [false].
+Conserve memory at the expense of speed false.
 .TP
 .B \-compress            
 Compress images in PDF output [true].
+-convertOptions str    []
 .TP
 .B \-d,\-debug            
 Enable debugging messages [false].
@@ -111,13 +119,18 @@
 .TP
 .B \-divisor n           
 Garbage collect using purge(divisor=n) [2].
+-dvipsOptions str      []
 .TP
 .B \-dvisvgmMultipleFiles
-dvisvgm supports multiple files [false].
+dvisvgm supports multiple files [true].
+-dvisvgmOptions str    []
 .TP
 .B \-embed               
 Embed rendered preview image [true].
 .TP
+.B \-e,\-environment      
+Show summary of environment settings; command-line only.
+.TP
 .B \-exitonEOF           
 Exit interactive mode on EOF [true].
 .TP
@@ -124,20 +137,19 @@
 .B \-fitscreen           
 Fit rendered image to screen [true].
 .TP
-.B \-framedelay ms       
-Additional frame delay [0].
-.TP
 .B \-framerate frames/s  
 Animation speed [30].
+-glOptions str         []
 .TP
 .B \-globalread          
-Allow read from other directory [true].
+Allow read from other directory true.
 .TP
 .B \-globalwrite         
-Allow write to other directory [false].
+Allow write to other directory false.
 .TP
 .B \-gray                
-Convert all colors to grayscale [false].
+Convert all colors to grayscale false.
+-gsOptions str         []
 .TP
 .B \-h,\-help             
 Show summary of options; command-line only.
@@ -144,6 +156,8 @@
 .TP
 .B \-historylines n      
 Retain n lines of history [1000].
+-htmlviewerOptions str
+-hyperrefOptions str   [setpagesize=false,unicode,pdfborder=0 0 0]
 .TP
 .B \-ibl                 
 Enable environment map image-based lighting [false].
@@ -151,10 +165,10 @@
 .B \-iconify             
 Iconify rendering window [false].
 .TP
-.B \-image string        
+.B \-image str           
 Environment image name [snowyField].
 .TP
-.B \-imageDir string     
+.B \-imageDir str        
 Environment image library directory [ibl].
 .TP
 .B \-inlineimage         
@@ -163,6 +177,9 @@
 .B \-inlinetex           
 Generate inline TeX code [false].
 .TP
+.B \-inpipe n            
+Input pipe [-1].
+.TP
 .B \-interactiveMask     
 Mask fpu exceptions in interactive mode [true].
 .TP
@@ -171,6 +188,7 @@
 .TP
 .B \-interactiveWrite    
 Write expressions entered at the prompt to stdout [true].
+-interrupt             [false]
 .TP
 .B \-k,\-keep             
 Keep intermediate files [false].
@@ -226,14 +244,25 @@
 .B \-o,\-outname name     
 Alternative output directory/filename.
 .TP
+.B \-outpipe n           
+Output pipe [-1].
+.TP
+.B \-paperheight bp      
+Default page height [0].
+.TP
+.B \-paperwidth bp       
+Default page width [0].
+.TP
 .B \-p,\-parseonly        
 Parse file [false].
 .TP
 .B \-pdfreload           
 Automatically reload document in pdfviewer [false].
+-pdfreloadOptions str  []
 .TP
 .B \-pdfreloaddelay usec 
 Delay before attempting initial pdf reload [750000].
+-pdfviewerOptions str  []
 .TP
 .B \-position pair       
 Initial 3D rendering screen position [(0,0)].
@@ -244,11 +273,12 @@
 .B \-prerender resolution
 Prerender V3D objects (0 implies vector output) [0].
 .TP
-.B \-prompt string       
+.B \-prompt str          
 Prompt [> ].
 .TP
-.B \-prompt2 string      
+.B \-prompt2 str         
 Continuation prompt for multiline input  [..].
+-psviewerOptions str   []
 .TP
 .B \-q,\-quiet            
 Suppress welcome text and noninteractive stdout [false].
@@ -263,10 +293,10 @@
 reverse 3D animations [false].
 .TP
 .B \-rgb                 
-Convert cmyk colors to rgb [false].
+Convert cmyk colors to rgb false.
 .TP
 .B \-safe                
-Disable system call [true].
+Disable system call true.
 .TP
 .B \-scroll n            
 Scroll standard output n lines at a time [0].
@@ -310,11 +340,11 @@
 .B \-twosided            
 Use two-sided 3D lighting model for rendering [true].
 .TP
-.B \-u,\-user string      
+.B \-u,\-user str         
 General purpose user string.
 .TP
 .B \-v,\-verbose          
-Increase verbosity level (can specify multiple times) [0].
+Increase verbosity level (can specify multiple times) 0.
 .TP
 .B \-version             
 Show version; command-line only.
@@ -328,7 +358,7 @@
 .B \-wait                
 Wait for child processes to finish before exiting [false].
 .TP
-.B \-warn string         
+.B \-warn str            
 Enable warning; command-line only.
 .TP
 .B \-webgl2              

Modified: trunk/Master/texmf-dist/doc/man/man1/asy.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/asymptote/asy.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/asymptote64/asy.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/bin/tl-update-asy
===================================================================
--- trunk/Master/tlpkg/bin/tl-update-asy	2023-02-18 18:37:30 UTC (rev 65877)
+++ trunk/Master/tlpkg/bin/tl-update-asy	2023-02-18 18:40:50 UTC (rev 65878)
@@ -87,6 +87,8 @@
   xu=$B/source/utils
   xy=$xu/asymptote
   cd $xy
+  ver=`awk -F\" '{print $2}' revision.cc | sed 1q`; echo $ver
+  #
   $cp binaries/i386-windows/texlive/asy.exe $pg/asymptote/
   $cp binaries/x86_64-windows/texlive/asy.exe $pg/asymptote64/
   # also check dlls



More information about the tex-live-commits mailing list.