FreeCAD/src/Mod/Ship/TankInstance.py
2012-05-30 13:16:34 -03:00

1947 lines
82 KiB
Python

#***************************************************************************
#* *
#* Copyright (c) 2011, 2012 *
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
#* *
#* This program is free software; you can redistribute it and/or modify *
#* it under the terms of the GNU Lesser General Public License (LGPL) *
#* as published by the Free Software Foundation; either version 2 of *
#* the License, or (at your option) any later version. *
#* for detail see the LICENCE text file. *
#* *
#* This program is distributed in the hope that it will be useful, *
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
#* GNU Library General Public License for more details. *
#* *
#* You should have received a copy of the GNU Library General Public *
#* License along with this program; if not, write to the Free Software *
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
#* USA *
#* *
#***************************************************************************
import time
# COIN
from pivy.coin import *
from pivy import coin
# FreeCAD
import FreeCAD,FreeCADGui
from FreeCAD import Part, Base, Vector
# Ship design module
from shipUtils import Paths, Translator, Math
class ShipTank:
def __init__(self, obj, solid, level=0, density=998.0):
""" Creates a new tank on active document.
@param obj Created Part::FeaturePython object.
@param solid Solid shape that represent the tank.
@param level Tank filling level.
@param density Fluid density.
"""
# Add uniqueness property to identify Tank instances
obj.addProperty("App::PropertyBool","IsShipTank","ShipTank", str(Translator.translate("True if is a valid ship tank instance"))).IsShipTank=True
# Add general options
obj.addProperty("App::PropertyFloat","Level","ShipTank", str(Translator.translate("Fluid filling level percentage"))).Level=level
obj.addProperty("App::PropertyFloat","Density","ShipTank", str(Translator.translate("Inside fluid density"))).Density=density
# Add shapes
shape = self.computeShape(solid)
if not shape:
obj.IsShipTank=False
return
# obj.addProperty("Part::PropertyPartShape","Shape","ShipTank", str(Translator.translate("Tank solid"))).Shape = shape
obj.Shape = shape
obj.Proxy = self
self.obj = obj
def onChanged(self, fp, prop):
""" Property changed, tank must be recomputed """
if prop == "IsShipTank":
FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n")
elif prop == "Level":
if fp.Level > 100.0:
fp.Level = 100.0
elif fp.Level < 0.0:
fp.Level = 0.0
def execute(self, obj):
""" Shape recomputation called """
obj.Shape = self.computeShape(obj.Shape)
def computeShape(self, solid):
""" Create faces shape. This method also calls to generate boxes.
@param solid Solid shape that represent the tank.
@return Computed solid shape. None if can't build it.
"""
# Study input to try to build a solid
if solid.isDerivedFrom('Part::Feature'):
# Get shape
shape = solid.Shape
if not shape:
return None
solid = shape
if not solid.isDerivedFrom('Part::TopoShape'):
return None
# Get shells
shells = solid.Shells
if not shells:
return None
# Build solids
solids = []
for s in shells:
solid = Part.Solid(s)
if solid.Volume < 0.0:
solid.reverse()
solids.append(solid)
# Create compound
shape = Part.CompSolid(solids)
return shape
class ViewProviderShipTank:
def __init__(self, obj):
""" Set this object to the proxy object of the actual view provider """
obj.Proxy = self
def attach(self, obj):
""" Setup the scene sub-graph of the view provider, this method is mandatory """
return
def updateData(self, fp, prop):
""" If a property of the handled feature has changed we have the chance to handle this here """
return
def getDisplayModes(self,obj):
''' Return a list of display modes. '''
modes=[]
return modes
def getDefaultDisplayMode(self):
''' Return the name of the default display mode. It must be defined in getDisplayModes. '''
return "Shaded"
def setDisplayMode(self,mode):
''' Map the display mode defined in attach with those defined in getDisplayModes.
Since they have the same names nothing needs to be done. This method is optinal.
'''
return mode
def onChanged(self, vp, prop):
''' Print the name of the property that has changed '''
# FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
def __getstate__(self):
''' When saving the document this object gets stored using Python's cPickle module.
Since we have some un-pickable here -- the Coin stuff -- we must define this method
to return a tuple of all pickable objects or None.
'''
return None
def __setstate__(self,state):
''' When restoring the pickled object from document we have the chance to set some
internals here. Since no data were pickled nothing needs to be done here.
'''
return None
def getIcon(self):
return """
/* XPM */
static char * Tank_xpm[] = {
"128 128 1605 2",
" c None",
". c #000000",
"+ c #D1D1D1",
"@ c #D2D2D2",
"# c #D3D3D3",
"$ c #D3D4D4",
"% c #D5D5D5",
"& c #CFD0CF",
"* c #D0D0D0",
"= c #D3D2D3",
"- c #D4D4D3",
"; c #D5D6D5",
"> c #D6D6D6",
", c #D7D7D7",
"' c #CDCECE",
") c #CFCECE",
"! c #D0CFCF",
"~ c #D3D3D2",
"{ c #D3D3D4",
"] c #D5D4D5",
"^ c #D6D7D6",
"/ c #D8D8D8",
"( c #D8D8D9",
"_ c #D9D9DA",
": c #CCCCCB",
"< c #CCCCCC",
"[ c #CECECD",
"} c #CECECE",
"| c #CFCFCF",
"1 c #D1D2D2",
"2 c #D5D4D4",
"3 c #D8D9D9",
"4 c #DAD9DA",
"5 c #DADBDB",
"6 c #DBDCDB",
"7 c #CACACA",
"8 c #CACBCB",
"9 c #CBCBCB",
"0 c #CCCDCD",
"a c #CECDCD",
"b c #D2D2D1",
"c c #D2D3D3",
"d c #D4D3D3",
"e c #D9D9D8",
"f c #D9D9D9",
"g c #DADBDA",
"h c #DBDCDC",
"i c #DCDCDC",
"j c #DDDDDD",
"k c #DEDEDE",
"l c #C7C8C8",
"m c #C9C9C9",
"n c #CAC9CA",
"o c #CBCBCC",
"p c #CCCDCC",
"q c #CDCDCD",
"r c #D0D1D1",
"s c #D1D2D1",
"t c #D3D2D2",
"u c #D4D4D5",
"v c #D5D5D6",
"w c #D6D7D7",
"x c #D8D7D8",
"y c #D9D8D9",
"z c #DADAD9",
"A c #DBDADA",
"B c #DBDBDC",
"C c #DDDCDD",
"D c #DDDEDE",
"E c #DEDFDE",
"F c #DFE0E0",
"G c #E0E0E1",
"H c #C6C6C6",
"I c #C7C7C7",
"J c #C8C8C7",
"K c #C9C9C8",
"L c #CACAC9",
"M c #CBCACB",
"N c #D0CFD0",
"O c #D1D0D1",
"P c #D1D1D2",
"Q c #D4D4D4",
"R c #D6D5D6",
"S c #D7D6D7",
"T c #D7D8D8",
"U c #DAD9D9",
"V c #DADADA",
"W c #DBDBDB",
"X c #DCDBDC",
"Y c #DDDDDC",
"Z c #DFDEDF",
"` c #E0DFDF",
" . c #E0E0E0",
".. c #E1E1E1",
"+. c #E2E2E2",
"@. c #C5C4C4",
"#. c #C5C5C5",
"$. c #C8C8C8",
"%. c #C9C8C8",
"&. c #D5D5D4",
"*. c #D8D7D7",
"=. c #D9D8D8",
"-. c #DCDDDD",
";. c #DEDDDD",
">. c #E3E4E3",
",. c #E5E4E4",
"'. c #C4C4C4",
"). c #C6C7C6",
"!. c #C7C8C7",
"~. c #C8C8C9",
"{. c #CACACB",
"]. c #CCCBCB",
"^. c #D0D0D1",
"/. c #D5D6D6",
"(. c #D7D7D6",
"_. c #DFDFDF",
":. c #E1E2E2",
"<. c #E3E3E3",
"[. c #E4E3E4",
"}. c #E6E5E5",
"|. c #E6E6E6",
"1. c #E6E7E7",
"2. c #C4C5C5",
"3. c #C6C6C7",
"4. c #CFD0D0",
"5. c #D1D0D0",
"6. c #D6D5D5",
"7. c #DADADB",
"8. c #DCDDDC",
"9. c #DDDDDE",
"0. c #DEDFDF",
"a. c #E1E1E2",
"b. c #E3E2E2",
"c. c #E4E4E4",
"d. c #E5E5E5",
"e. c #E8E8E7",
"f. c #E9E8E9",
"g. c #EAE9EA",
"h. c #C5C5C4",
"i. c #C6C6C5",
"j. c #C7C7C6",
"k. c #CBCACA",
"l. c #CDCDCC",
"m. c #CECFCF",
"n. c #DBDADB",
"o. c #E0E0DF",
"p. c #E1E1E0",
"q. c #E1E2E1",
"r. c #E3E3E4",
"s. c #E4E5E5",
"t. c #E7E6E7",
"u. c #E7E7E8",
"v. c #E9E9E8",
"w. c #E9EAE9",
"x. c #EAEAEA",
"y. c #EBEBEA",
"z. c #C4C5C4",
"A. c #C6C5C5",
"B. c #C6C7C7",
"C. c #CCCCCD",
"D. c #CECECF",
"E. c #D9DAD9",
"F. c #DBDBDA",
"G. c #DEDEDD",
"H. c #E0DFE0",
"I. c #E0E1E0",
"J. c #E6E5E6",
"K. c #E7E7E6",
"L. c #E7E8E7",
"M. c #E8E8E9",
"N. c #E9E9E9",
"O. c #ECECEC",
"P. c #ECEDED",
"Q. c #EDEDEE",
"R. c #010101",
"S. c #C5C4C5",
"T. c #CBCCCB",
"U. c #CDCCCC",
"V. c #CECFCE",
"W. c #CFCFCE",
"X. c #CFCFD0",
"Y. c #D7D8D7",
"Z. c #DEDDDE",
"`. c #E1E0E0",
" + c #E5E6E6",
".+ c #EBEBEB",
"++ c #ECEBEC",
"@+ c #EDEDED",
"#+ c #EEEEEE",
"$+ c #EFEFEF",
"%+ c #F0F0F0",
"&+ c #C4C4C5",
"*+ c #CFCECF",
"=+ c #D2D1D1",
"-+ c #D6D6D5",
";+ c #D8D9D8",
">+ c #DDDEDD",
",+ c #DFDEDE",
"'+ c #E2E3E3",
")+ c #E7E7E7",
"!+ c #E8E8E8",
"~+ c #EBECEC",
"{+ c #ECEDEC",
"]+ c #EFEFF0",
"^+ c #F1F0F1",
"/+ c #F1F1F1",
"(+ c #C7C6C6",
"_+ c #C9C8C9",
":+ c #C9CAC9",
"<+ c #CACBCA",
"[+ c #D2D2D3",
"}+ c #D4D5D5",
"|+ c #DCDCDB",
"1+ c #E3E3E2",
"2+ c #E4E3E3",
"3+ c #E4E4E5",
"4+ c #E5E5E6",
"5+ c #EAEAE9",
"6+ c #ECEBEB",
"7+ c #F0F0EF",
"8+ c #F0F0F1",
"9+ c #C8C7C8",
"0+ c #C8C9C9",
"a+ c #CBCBCA",
"b+ c #CCCBCC",
"c+ c #D7D6D6",
"d+ c #DDDCDC",
"e+ c #E2E2E1",
"f+ c #E2E3E2",
"g+ c #E3E4E4",
"h+ c #E8E7E8",
"i+ c #E9E8E8",
"j+ c #EAE9E9",
"k+ c #EDECEC",
"l+ c #EEEEED",
"m+ c #EFEEEF",
"n+ c #EFF0F0",
"o+ c #F1F0F0",
"p+ c #C5C6C6",
"q+ c #C7C6C7",
"r+ c #D0D0CF",
"s+ c #D4D5D4",
"t+ c #E1E0E1",
"u+ c #E8E9E9",
"v+ c #EDECED",
"w+ c #EEEDED",
"x+ c #EEEFEF",
"y+ c #F0EFF0",
"z+ c #F0F1F0",
"A+ c #D7D7D8",
"B+ c #C8C7C7",
"C+ c #C9C9CA",
"D+ c #D2D1D2",
"E+ c #D9DADA",
"F+ c #E2E1E1",
"G+ c #E9E9EA",
"H+ c #EAEBEB",
"I+ c #D8D8D7",
"J+ c #CBCCCC",
"K+ c #CDCCCD",
"L+ c #D6D6D7",
"M+ c #E6E6E5",
"N+ c #E7E6E6",
"O+ c #E8E7E7",
"P+ c #EFEEEE",
"Q+ c #CDCECD",
"R+ c #D1D1D0",
"S+ c #D2D3D2",
"T+ c #DFE0DF",
"U+ c #E3E2E3",
"V+ c #E4E5E4",
"W+ c #E5E6E5",
"X+ c #ECECED",
"Y+ c #D4D3D4",
"Z+ c #CECDCE",
"`+ c #E6E6E7",
" @ c #EBEAEB",
".@ c #ECECEB",
"+@ c #F0F1F1",
"@@ c #DCDCDD",
"#@ c #EBEAEA",
"$@ c #F0EFEF",
"%@ c #D3D4D3",
"&@ c #E6E7E6",
"*@ c #EEEDEE",
"=@ c #ADADAD",
"-@ c #565656",
";@ c #DCDBDB",
">@ c #DFDFE0",
",@ c #E7E8E8",
"'@ c #E8E9E8",
")@ c #EDEDEC",
"!@ c #EBEBEC",
"~@ c #EEEFEE",
"{@ c #B7B6B7",
"]@ c #E5E4E5",
"^@ c #EDEEED",
"/@ c #B6B6B6",
"(@ c #B6B7B7",
"_@ c #B7B7B6",
":@ c #B7B6B6",
"<@ c #E5E5E4",
"[@ c #B5B6B5",
"}@ c #B5B6B6",
"|@ c #B5B5B5",
"1@ c #B6B5B5",
"2@ c #B6B5B6",
"3@ c #E2E1E2",
"4@ c #E4E4E3",
"5@ c #B4B4B4",
"6@ c #B4B5B5",
"7@ c #B5B5B4",
"8@ c #B6B6B5",
"9@ c #E2E2E3",
"0@ c #B3B4B4",
"a@ c #B4B4B5",
"b@ c #B4B5B4",
"c@ c #B5B4B4",
"d@ c #B3B3B3",
"e@ c #B3B3B4",
"f@ c #B4B3B3",
"g@ c #B4B4B3",
"h@ c #B5B4B5",
"i@ c #D0D1D0",
"j@ c #B3B3B2",
"k@ c #B3B2B3",
"l@ c #B4B3B4",
"m@ c #90B9D9",
"n@ c #91BAD9",
"o@ c #C6C5C6",
"p@ c #B1B2B2",
"q@ c #B2B2B2",
"r@ c #B2B3B2",
"s@ c #B2B3B3",
"t@ c #8FB7D8",
"u@ c #8EB7D7",
"v@ c #8FB8D8",
"w@ c #90B8D8",
"x@ c #91BBD9",
"y@ c #91BCDA",
"z@ c #C2C2C2",
"A@ c #C3C4C3",
"B@ c #C3C4C4",
"C@ c #C8C9C8",
"D@ c #CDCDCE",
"E@ c #B1B1B1",
"F@ c #B1B2B1",
"G@ c #B2B1B2",
"H@ c #B2B2B3",
"I@ c #B3B2B2",
"J@ c #8CB4D6",
"K@ c #8DB4D6",
"L@ c #8DB5D7",
"M@ c #8EB6D7",
"N@ c #8EB7D8",
"O@ c #8FB7D7",
"P@ c #90B9D8",
"Q@ c #91BBDA",
"R@ c #92BCD9",
"S@ c #92BCDA",
"T@ c #C1C1C0",
"U@ c #C1C1C1",
"V@ c #C2C2C1",
"W@ c #C3C3C2",
"X@ c #C3C3C3",
"Y@ c #C3C3C4",
"Z@ c #CAC9C9",
"`@ c #B1B0B0",
" # c #B2B2B1",
".# c #8BB2D5",
"+# c #8BB2D6",
"@# c #8CB3D6",
"## c #8CB3D7",
"$# c #8DB5D6",
"%# c #8EB5D7",
"&# c #8FB8D7",
"*# c #92BBD9",
"=# c #92BBDA",
"-# c #BFC0C0",
";# c #C0C1C0",
"># c #C2C1C1",
",# c #C3C2C2",
"'# c #C4C4C3",
")# c #C5C6C5",
"!# c #C5C5C6",
"~# c #B0B0B0",
"{# c #B0B1B0",
"]# c #B1B1B2",
"^# c #B2B1B1",
"/# c #0E3459",
"(# c #0E355A",
"_# c #0F355A",
":# c #0F365A",
"<# c #8AB2D5",
"[# c #8CB3D5",
"}# c #8BB3D6",
"|# c #8FB6D7",
"1# c #8FB9D7",
"2# c #90B9D7",
"3# c #90BAD8",
"4# c #90BBD9",
"5# c #92BDDA",
"6# c #93BEDA",
"7# c #BEBEBE",
"8# c #BEBFBE",
"9# c #BFBFBE",
"0# c #BFBFC0",
"a# c #C0C0BF",
"b# c #C2C3C2",
"c# c #C4C3C3",
"d# c #AFB0B0",
"e# c #AFAFB0",
"f# c #B0AFB0",
"g# c #B0B1B1",
"h# c #B0B0B1",
"i# c #B1B0B1",
"j# c #7A9EC5",
"k# c #799FC5",
"l# c #7A9FC5",
"m# c #7AA0C6",
"n# c #0E345A",
"o# c #0F3559",
"p# c #8BB1D5",
"q# c #8CB4D5",
"r# c #8FB9D8",
"s# c #90BAD7",
"t# c #91BBD8",
"u# c #91BCD9",
"v# c #91BDD9",
"w# c #92BEDA",
"x# c #93BFDA",
"y# c #BDBDBD",
"z# c #BDBEBD",
"A# c #BEBEBD",
"B# c #BEBEBF",
"C# c #BEBFBF",
"D# c #BFBFBF",
"E# c #C0C0C0",
"F# c #C1C0C0",
"G# c #C0C1C1",
"H# c #C3C2C3",
"I# c #C4C3C4",
"J# c #AFAEAF",
"K# c #AFAFAF",
"L# c #B0AFAF",
"M# c #789DC5",
"N# c #789EC5",
"O# c #799EC5",
"P# c #7AA1C5",
"Q# c #7BA1C5",
"R# c #0F3659",
"S# c #10375A",
"T# c #8DB6D6",
"U# c #8EB8D7",
"V# c #92BDD9",
"W# c #143F5B",
"X# c #174A6A",
"Y# c #84B0CB",
"Z# c #85B0CC",
"`# c #BCBCBC",
" $ c #BDBCBC",
".$ c #C0C0C1",
"+$ c #C1C2C1",
"@$ c #C2C3C3",
"#$ c #AEAEAE",
"$$ c #AEAFAF",
"%$ c #AFAFAE",
"&$ c #779BC4",
"*$ c #779CC4",
"=$ c #789CC4",
"-$ c #789DC4",
";$ c #789EC4",
">$ c #799FC4",
",$ c #7AA0C5",
"'$ c #10385A",
")$ c #8DB7D7",
"!$ c #8EB7D6",
"~$ c #90BBD8",
"{$ c #133E5B",
"]$ c #83AEC9",
"^$ c #84AFCA",
"/$ c #85B1CB",
"($ c #85B2CB",
"_$ c #BDBCBD",
":$ c #BEBDBD",
"<$ c #C0BFBF",
"[$ c #C1C1C2",
"}$ c #C9CACA",
"|$ c #AEAEAD",
"1$ c #AEAFAE",
"2$ c #AEAEAF",
"3$ c #7599C3",
"4$ c #7699C3",
"5$ c #7699C2",
"6$ c #769AC3",
"7$ c #779BC3",
"8$ c #789BC4",
"9$ c #799EC4",
"0$ c #79A0C4",
"a$ c #8CB5D5",
"b$ c #8CB5D6",
"c$ c #8DB7D6",
"d$ c #426D8A",
"e$ c #16486A",
"f$ c #7AA5C1",
"g$ c #83ADC9",
"h$ c #84B1CB",
"i$ c #85B1CC",
"j$ c #BCBDBD",
"k$ c #BDBDBC",
"l$ c #BFBEBF",
"m$ c #BFC0BF",
"n$ c #ADADAC",
"o$ c #AEADAD",
"p$ c #ADAEAD",
"q$ c #ADAEAE",
"r$ c #7496C2",
"s$ c #7597C2",
"t$ c #7598C2",
"u$ c #769BC2",
"v$ c #779BC2",
"w$ c #779CC3",
"x$ c #789DC3",
"y$ c #7AA0C4",
"z$ c #7AA1C4",
"A$ c #7AA2C5",
"B$ c #7BA2C5",
"C$ c #10395A",
"D$ c #8EB6D6",
"E$ c #8EB8D6",
"F$ c #133D5A",
"G$ c #81ABC8",
"H$ c #82ACC9",
"I$ c #82ADC9",
"J$ c #82AEC9",
"K$ c #83AFC9",
"L$ c #83B0CA",
"M$ c #BDBEBE",
"N$ c #C1C0C1",
"O$ c #C7C7C8",
"P$ c #ADACAC",
"Q$ c #AFAEAE",
"R$ c #7395C1",
"S$ c #7395C2",
"T$ c #7496C1",
"U$ c #7599C2",
"V$ c #769BC3",
"W$ c #779DC3",
"X$ c #789EC3",
"Y$ c #7AA2C4",
"Z$ c #7BA3C4",
"`$ c #7BA3C5",
" % c #11395A",
".% c #113A5A",
"+% c #123C5A",
"@% c #164A6E",
"#% c #4C7694",
"$% c #80AAC7",
"%% c #80ABC8",
"&% c #81ACC9",
"*% c #81ACC8",
"=% c #81ADC9",
"-% c #83AFCA",
";% c #84B0CA",
">% c #84B1CA",
",% c #86B3CB",
"'% c #87B4CC",
")% c #BFBEBE",
"!% c #ACACAC",
"~% c #ABACAC",
"{% c #ACACAD",
"]% c #7294C0",
"^% c #7194C0",
"/% c #7294C1",
"(% c #7394C1",
"_% c #7396C1",
":% c #7497C2",
"<% c #7498C2",
"[% c #799FC3",
"}% c #7CA3C5",
"|% c #123B5A",
"1% c #88B1D0",
"2% c #7EA8C6",
"3% c #7FA9C6",
"4% c #7FAAC7",
"5% c #81ADC8",
"6% c #85B1CA",
"7% c #86B2CB",
"8% c #86B4CB",
"9% c #87B5CB",
"0% c #BCBCBD",
"a% c #C0BFC0",
"b% c #ABABAB",
"c% c #ACABAC",
"d% c #ABABAC",
"e% c #ACADAC",
"f% c #ACADAD",
"g% c #7193C0",
"h% c #7293C0",
"i% c #7193C1",
"j% c #7293C1",
"k% c #7498C1",
"l% c #789FC4",
"m% c #79A1C3",
"n% c #79A1C4",
"o% c #7BA2C4",
"p% c #7CA4C5",
"q% c #7CA4C4",
"r% c #16496F",
"s% c #7DA7C5",
"t% c #7FAAC6",
"u% c #80ABC7",
"v% c #80ACC7",
"w% c #82AFC9",
"x% c #84B1C9",
"y% c #85B2CA",
"z% c #87B5CC",
"A% c #88B6CC",
"B% c #BDBDBE",
"C% c #C1C2C2",
"D% c #AAABAB",
"E% c #AAAAAA",
"F% c #ABAAAB",
"G% c #ABACAB",
"H% c #ACACAB",
"I% c #7192C0",
"J% c #7292C0",
"K% c #7598C1",
"L% c #7599C1",
"M% c #759AC1",
"N% c #769AC2",
"O% c #779CC2",
"P% c #779DC2",
"Q% c #789DC2",
"R% c #78A0C3",
"S% c #7CA3C4",
"T% c #7AA2C2",
"U% c #7CA5C4",
"V% c #7DA5C4",
"W% c #7DA6C5",
"X% c #7EA8C5",
"Y% c #82ADC8",
"Z% c #83B0C9",
"`% c #85B3CA",
" & c #86B5CB",
".& c #87B6CC",
"+& c #BCBDBC",
"@& c #C2C1C2",
"#& c #C2C2C3",
"$& c #AAA9AA",
"%& c #AAABAA",
"&& c #ABAAAA",
"*& c #7091BF",
"=& c #7092BF",
"-& c #7191C0",
";& c #7192BF",
">& c #7092C0",
",& c #7295C0",
"'& c #7497C1",
")& c #759AC2",
"!& c #769CC2",
"~& c #789FC3",
"{& c #79A0C3",
"]& c #79A2C4",
"^& c #7AA4C3",
"/& c #7BA4C4",
"(& c #7DA8C5",
"_& c #7EA9C6",
":& c #80AAC6",
"<& c #81ADC7",
"[& c #82ADC7",
"}& c #82AEC8",
"|& c #88B7CC",
"1& c #A9A9A9",
"2& c #A9AAAA",
"3& c #A9A9AA",
"4& c #A9AAA9",
"5& c #7090BE",
"6& c #7091BE",
"7& c #7092BE",
"8& c #7191BF",
"9& c #7397C1",
"0& c #7499C1",
"a& c #7AA1C3",
"b& c #7AA2C3",
"c& c #79A2C2",
"d& c #7AA3C3",
"e& c #7BA5C4",
"f& c #80ABC6",
"g& c #81ACC7",
"h& c #81AEC8",
"i& c #82AFC8",
"j& c #83B1CA",
"k& c #85B3CB",
"l& c #85B4CA",
"m& c #87B6CB",
"n& c #88B8CC",
"o& c #A8A8A8",
"p& c #6F90BE",
"q& c #6F91BE",
"r& c #7192BE",
"s& c #7193BF",
"t& c #769BC1",
"u& c #779EC3",
"v& c #789FC2",
"w& c #79A1C2",
"x& c #7AA3C2",
"y& c #7BA4C3",
"z& c #7CA6C5",
"A& c #7DA7C4",
"B& c #7EA7C5",
"C& c #7EA9C5",
"D& c #7EAAC6",
"E& c #7FACC6",
"F& c #81AEC7",
"G& c #82AFC7",
"H& c #83B1C9",
"I& c #84B2C9",
"J& c #84B3C9",
"K& c #86B4CA",
"L& c #89B7CC",
"M& c #89B8CD",
"N& c #A8A8A7",
"O& c #6F90BD",
"P& c #6E90BD",
"Q& c #6E90BE",
"R& c #7293BF",
"S& c #7396C0",
"T& c #7397C0",
"U& c #7498C0",
"V& c #759BC1",
"W& c #769CC1",
"X& c #779EC2",
"Y& c #789EC2",
"Z& c #78A0C1",
"`& c #78A1C2",
" * c #7BA6C3",
".* c #7BA6C4",
"+* c #7CA6C4",
"@* c #7FABC6",
"#* c #82AEC7",
"$* c #83AFC8",
"%* c #83B0C8",
"&* c #88B7CB",
"** c #89B9CC",
"=* c #89BACD",
"-* c #6E8FBD",
";* c #6F91BD",
">* c #7093BF",
",* c #7194BF",
"'* c #7294BF",
")* c #7395C0",
"!* c #7398C0",
"~* c #779FC1",
"{* c #77A0C1",
"]* c #78A1C1",
"^* c #7AA4C2",
"/* c #7CA7C4",
"(* c #7DA8C4",
"_* c #7DA9C5",
":* c #7FAAC5",
"<* c #80ACC6",
"[* c #80ADC7",
"}* c #84B1C8",
"|* c #88B8CB",
"1* c #89BACC",
"2* c #BEBDBE",
"3* c #12285A",
"4* c #768CBE",
"5* c #768DBE",
"6* c #6E91BD",
"7* c #7193BE",
"8* c #7295BF",
"9* c #7396BF",
"0* c #7398BF",
"a* c #7499C0",
"b* c #749AC1",
"c* c #779DC1",
"d* c #789FC1",
"e* c #779EC0",
"f* c #769EC0",
"g* c #769FC0",
"h* c #77A0C0",
"i* c #79A2C1",
"j* c #79A3C2",
"k* c #7BA4C2",
"l* c #7CA7C3",
"m* c #7EAAC5",
"n* c #80ADC6",
"o* c #82B0C7",
"p* c #85B2C9",
"q* c #85B3C9",
"r* c #85B4C9",
"s* c #86B5CA",
"t* c #87B6CA",
"u* c #88B9CC",
"v* c #8AB9CC",
"w* c #8ABACC",
"x* c #8BBBCC",
"y* c #758BBE",
"z* c #758CBE",
"A* c #768CBF",
"B* c #6E91BE",
"C* c #7093BE",
"D* c #7397BF",
"E* c #7497BF",
"F* c #749AC0",
"G* c #759AC0",
"H* c #769BC0",
"I* c #769CC0",
"J* c #779EC1",
"K* c #769DC0",
"L* c #759DBF",
"M* c #769DBE",
"N* c #77A1C0",
"O* c #7AA5C2",
"P* c #7DA7C3",
"Q* c #7EA9C4",
"R* c #7EAAC4",
"S* c #7FABC5",
"T* c #81ADC6",
"U* c #81AFC7",
"V* c #82B0C8",
"W* c #83B1C8",
"X* c #84B2C8",
"Y* c #86B6CB",
"Z* c #87B7CA",
"`* c #87B7CB",
" = c #84AFCB",
".= c #143F5A",
"+= c #12275A",
"@= c #758BBD",
"#= c #768BBE",
"$= c #6E8FBC",
"%= c #6E8EBD",
"&= c #7296BF",
"*= c #7297BF",
"== c #779CC1",
"-= c #749BBE",
";= c #749CBF",
">= c #759EBE",
",= c #769FBF",
"'= c #76A0C0",
")= c #779FC0",
"!= c #7BA5C3",
"~= c #7CA6C3",
"{= c #7CA8C4",
"]= c #7DA9C3",
"^= c #7FAAC4",
"/= c #81AFC6",
"(= c #82B1C7",
"_= c #85B5C9",
":= c #86B6CA",
"<= c #82AECA",
"[= c #758ABD",
"}= c #748ABD",
"|= c #758CBD",
"1= c #6D8FBC",
"2= c #759CC1",
"3= c #769DC1",
"4= c #759BBF",
"5= c #739ABE",
"6= c #759DBE",
"7= c #769EBE",
"8= c #769EBF",
"9= c #779FBF",
"0= c #78A1C0",
"a= c #78A2C1",
"b= c #79A2C0",
"c= c #7AA3C1",
"d= c #7CA8C3",
"e= c #7DA9C4",
"f= c #82B0C6",
"g= c #83B2C8",
"h= c #84B3C8",
"i= c #143E5B",
"j= c #11265A",
"k= c #7489BC",
"l= c #748ABC",
"m= c #758ABC",
"n= c #6D8EBC",
"o= c #6E8EBC",
"p= c #6D8FBD",
"q= c #6F8FBD",
"r= c #7092BD",
"s= c #7294BE",
"t= c #7194BE",
"u= c #7295BE",
"v= c #7196BF",
"w= c #759BC0",
"x= c #749ABE",
"y= c #7399BC",
"z= c #729ABD",
"A= c #739ABD",
"B= c #749CBD",
"C= c #769DBF",
"D= c #779EBF",
"E= c #78A2C0",
"F= c #79A3C1",
"G= c #7AA4C1",
"H= c #7BA6C2",
"I= c #7CA9C4",
"J= c #7EABC4",
"K= c #7FACC4",
"L= c #80ADC5",
"M= c #80AEC6",
"N= c #81AEC6",
"O= c #83B1C7",
"P= c #7EA9C7",
"Q= c #7FAAC8",
"R= c #80AAC8",
"S= c #7388BC",
"T= c #7488BC",
"U= c #7389BC",
"V= c #7489BD",
"W= c #6E8EBB",
"X= c #6D8EBD",
"Y= c #7195BE",
"Z= c #7499BF",
"`= c #749ABF",
" - c #749BC0",
".- c #7198BB",
"+- c #7298BC",
"@- c #7299BC",
"#- c #729ABC",
"$- c #739BBD",
"%- c #749BBD",
"&- c #749DBE",
"*- c #76A0BF",
"=- c #77A2C0",
"-- c #78A3C1",
";- c #79A4C1",
">- c #7CA8C2",
",- c #7DAAC4",
"'- c #7FACC5",
")- c #7DA7C6",
"!- c #7FA9C7",
"~- c #133E5A",
"{- c #7387BC",
"]- c #6F92BD",
"^- c #7094BE",
"/- c #7296BE",
"(- c #7399BD",
"_- c #0E3559",
":- c #7096BB",
"<- c #7197BB",
"[- c #7199BB",
"}- c #739BBC",
"|- c #749CBE",
"1- c #749EBE",
"2- c #769FBE",
"3- c #77A0BF",
"4- c #77A1BF",
"5- c #78A3C0",
"6- c #79A4C0",
"7- c #7AA6C2",
"8- c #7BA7C2",
"9- c #7DA8C3",
"0- c #7EACC5",
"a- c #7CA5C5",
"b- c #10255A",
"c- c #7286BB",
"d- c #7287BC",
"e- c #6D8EBB",
"f- c #7093BD",
"g- c #7094BD",
"h- c #7195BF",
"i- c #7399BF",
"j- c #739ABF",
"k- c #7398BE",
"l- c #6F95BA",
"m- c #7096BA",
"n- c #7097BB",
"o- c #739ABC",
"p- c #739CBD",
"q- c #759EBF",
"r- c #78A2BF",
"s- c #7CA7C2",
"t- c #10245A",
"u- c #7185BB",
"v- c #7286BC",
"w- c #7387BB",
"x- c #7487BC",
"y- c #6E90BC",
"z- c #6F93BE",
"A- c #7196BE",
"B- c #7297BE",
"C- c #7298BF",
"D- c #7297BD",
"E- c #6E94BA",
"F- c #6F95B9",
"G- c #6F96BA",
"H- c #7097BA",
"I- c #729ABB",
"J- c #749DBD",
"K- c #77A0BE",
"L- c #78A4C0",
"M- c #7AA5C0",
"N- c #7CA7C5",
"O- c #7185BA",
"P- c #7286BA",
"Q- c #7285BB",
"R- c #7386BB",
"S- c #7288BC",
"T- c #7589BD",
"U- c #6E91BC",
"V- c #6F91BC",
"W- c #6E92BC",
"X- c #6F93BD",
"Y- c #7194BD",
"Z- c #7195BD",
"`- c #7298BE",
" ; c #7297BC",
".; c #6D93B8",
"+; c #6E94B8",
"@; c #6E95B9",
"#; c #7096B9",
"$; c #739CBC",
"%; c #76A0BE",
"&; c #78A1BF",
"*; c #79A1C1",
"=; c #79A4C2",
"-; c #7BA3C3",
";; c #7084BA",
">; c #7184BB",
",; c #7085BB",
"'; c #7186BB",
"); c #7287BB",
"!; c #7388BB",
"~; c #6C8EBB",
"{; c #6D8FBB",
"]; c #6F92BC",
"^; c #7095BD",
"/; c #7196BD",
"(; c #7195BC",
"_; c #0E3359",
":; c #6C92B7",
"<; c #6D94B8",
"[; c #6F96B9",
"}; c #6F97BA",
"|; c #7299BB",
"1; c #729BBB",
"2; c #749DBC",
"3; c #759EBD",
"4; c #759FBE",
"5; c #10235A",
"6; c #7083BA",
"7; c #7084BB",
"8; c #7085BA",
"9; c #7093BC",
"0; c #7095BC",
"a; c #6C91B7",
"b; c #6E95B8",
"c; c #7198BA",
"d; c #739BBB",
"e; c #78A2C2",
"f; c #0F225A",
"g; c #6F82B9",
"h; c #7083B9",
"i; c #6F83B9",
"j; c #6F83BA",
"k; c #7184BA",
"l; c #6C8DBB",
"m; c #6C8FBB",
"n; c #6D90BB",
"o; c #6E91BB",
"p; c #6F93BC",
"q; c #7094BC",
"r; c #6F94BB",
"s; c #0D3259",
"t; c #6A8FB6",
"u; c #6B91B7",
"v; c #6E93B8",
"w; c #7098BA",
"x; c #7099BA",
"y; c #7199BA",
"z; c #729BBC",
"A; c #6E81B9",
"B; c #6E82B9",
"C; c #6E90BB",
"D; c #6E93BA",
"E; c #698EB6",
"F; c #6A8EB6",
"G; c #6A90B6",
"H; c #6B90B6",
"I; c #6B92B7",
"J; c #6D93B7",
"K; c #6E96B8",
"L; c #6F97B9",
"M; c #7098BB",
"N; c #78A0C0",
"O; c #6E80B8",
"P; c #6E81B8",
"Q; c #6F81B8",
"R; c #6F81B9",
"S; c #6F82B8",
"T; c #6F92BB",
"U; c #6E92BA",
"V; c #0D3159",
"W; c #688DB4",
"X; c #698EB5",
"Y; c #698FB5",
"Z; c #6A90B7",
"`; c #6C93B7",
" > c #518FC8",
".> c #6F96B8",
"+> c #123A5A",
"@> c #0F215A",
"#> c #6D80B8",
"$> c #6D81B8",
"%> c #6C8FBA",
"&> c #6E90BA",
"*> c #6E92BB",
"=> c #6E93BC",
"-> c #0C3159",
";> c #678CB4",
">> c #678DB4",
",> c #688EB4",
"'> c #698EB4",
")> c #6A90B5",
"!> c #6B91B6",
"~> c #6D94B7",
"{> c #6D95B8",
"]> c #6E96B9",
"^> c #0E2159",
"/> c #6C7FB8",
"(> c #6D7FB7",
"_> c #6D7FB8",
":> c #507FC9",
"<> c #6D8FBA",
"[> c #6D91BB",
"}> c #6D91B9",
"|> c #0C3059",
"1> c #678AB3",
"2> c #678BB3",
"3> c #678DB3",
"4> c #6B91B5",
"5> c #6B92B5",
"6> c #6C92B6",
"7> c #6B92B6",
"8> c #6C93B6",
"9> c #0E2059",
"0> c #6C7EB7",
"a> c #6D7EB7",
"b> c #6E80B7",
"c> c #6E82B8",
"d> c #7084B9",
"e> c #6F84BA",
"f> c #6C90B9",
"g> c #668AB2",
"h> c #698FB4",
"i> c #6A90B4",
"j> c #719ABB",
"k> c #749BBC",
"l> c #6B7EB7",
"m> c #6B7DB6",
"n> c #6C7DB7",
"o> c #6C7FB7",
"p> c #6D80B7",
"q> c #6F84B9",
"r> c #7186BA",
"s> c #6C8EB9",
"t> c #6589B1",
"u> c #678CB2",
"v> c #678DB2",
"w> c #688EB3",
"x> c #6A8FB5",
"y> c #6A91B5",
"z> c #6C92B5",
"A> c #6C94B7",
"B> c #6D95B7",
"C> c #759DBD",
"D> c #0E1F5A",
"E> c #6A7CB6",
"F> c #6A7DB6",
"G> c #6C7EB6",
"H> c #7082B9",
"I> c #7285BA",
"J> c #7085B9",
"K> c #0E335A",
"L> c #658BB1",
"M> c #668BB1",
"N> c #668CB1",
"O> c #678CB1",
"P> c #688DB3",
"Q> c #688FB3",
"R> c #698FB3",
"S> c #6990B4",
"T> c #7097B9",
"U> c #7197BA",
"V> c #739CBE",
"W> c #0E1F59",
"X> c #6A7BB6",
"Y> c #6B7CB6",
"Z> c #6C7DB6",
"`> c #6B7DB7",
" , c #6F82B6",
"., c #648AB0",
"+, c #658AB1",
"@, c #658BB0",
"#, c #668CB2",
"$, c #688FB4",
"%, c #6B90B5",
"&, c #0D1E59",
"*, c #697BB5",
"=, c #6A7CB7",
"-, c #6B7EB6",
";, c #6C7EB8",
">, c #6E82B7",
",, c #6389B0",
"', c #6489B0",
"), c #658AB0",
"!, c #668AB1",
"~, c #688DB2",
"{, c #6990B5",
"], c #697AB5",
"^, c #697BB6",
"/, c #6A7BB5",
"(, c #6D7EB8",
"_, c #6D81B6",
":, c #6388AE",
"<, c #6388AF",
"[, c #6389AF",
"}, c #6489AF",
"|, c #668BB0",
"1, c #6979B4",
"2, c #6879B5",
"3, c #6879B4",
"4, c #6979B5",
"5, c #6A7AB5",
"6, c #6B7CB7",
"7, c #6D80B5",
"8, c #6287AE",
"9, c #6288AE",
"0, c #0D1D59",
"a, c #6878B4",
"b, c #6778B4",
"c, c #6C7EB5",
"d, c #6186AC",
"e, c #6186AD",
"f, c #6286AE",
"g, c #668DB1",
"h, c #678EB3",
"i, c #0D1C59",
"j, c #6777B3",
"k, c #6777B4",
"l, c #697AB4",
"m, c #6A7CB5",
"n, c #6E81B7",
"o, c #6084AC",
"p, c #6185AC",
"q, c #6086AD",
"r, c #6187AE",
"s, c #6387AE",
"t, c #0C1C59",
"u, c #6676B3",
"v, c #6776B3",
"w, c #6877B4",
"x, c #687AB5",
"y, c #697CB6",
"z, c #6A7DB7",
"A, c #6B7DB5",
"B, c #5F83AC",
"C, c #6083AC",
"D, c #6185AD",
"E, c #6288AD",
"F, c #668BB2",
"G, c #6A91B4",
"H, c #6675B3",
"I, c #6575B3",
"J, c #6677B3",
"K, c #6677B4",
"L, c #6A7DB4",
"M, c #5E82AB",
"N, c #5F83AB",
"O, c #5F84AC",
"P, c #6085AD",
"Q, c #6085AC",
"R, c #10365A",
"S, c #0C1B59",
"T, c #6575B2",
"U, c #6675B2",
"V, c #6676B2",
"W, c #6676B4",
"X, c #6776B4",
"Y, c #687AB4",
"Z, c #5D81AA",
"`, c #5D81AB",
" ' c #5D82AA",
".' c #5E83AB",
"+' c #6083AB",
"@' c #6286AD",
"#' c #648AB1",
"$' c #6473B3",
"%' c #6474B2",
"&' c #697CB3",
"*' c #5D80A9",
"=' c #5E82AA",
"-' c #5F84AB",
";' c #6287AD",
">' c #6389AE",
",' c #0B1A59",
"'' c #6473B2",
")' c #6574B2",
"!' c #6574B3",
"~' c #6778B3",
"{' c #6779B4",
"]' c #687BB2",
"^' c #5B7FA9",
"/' c #5B80A9",
"(' c #5C80A9",
"_' c #5D81A9",
":' c #5E81AA",
"<' c #6184AC",
"[' c #638AB0",
"}' c #678DB1",
"|' c #0B1A58",
"1' c #6372B1",
"2' c #6472B2",
"3' c #6472B1",
"4' c #6473B1",
"5' c #6573B2",
"6' c #6576B3",
"7' c #6878B3",
"8' c #687AB3",
"9' c #5B7EA7",
"0' c #5B7FA8",
"a' c #5B80A8",
"b' c #5C81AA",
"c' c #5F82AB",
"d' c #668DB2",
"e' c #11268E",
"f' c #11268D",
"g' c #0B1958",
"h' c #6373B2",
"i' c #6877B3",
"j' c #6879B2",
"k' c #0C2F59",
"l' c #5A7DA7",
"m' c #5A7EA7",
"n' c #5B7FA7",
"o' c #5B7EA8",
"p' c #5C7FA8",
"q' c #5F83AA",
"r' c #6084AB",
"s' c #6589B0",
"t' c #0C196C",
"u' c #152064",
"v' c #11258D",
"w' c #6371B1",
"x' c #6271B1",
"y' c #6372B2",
"z' c #6778B1",
"A' c #0C2E59",
"B' c #597CA6",
"C' c #5A7CA6",
"D' c #597DA6",
"E' c #5D80AA",
"F' c #5E83AA",
"G' c #0E355B",
"H' c #0C1A6F",
"I' c #131E62",
"J' c #414C90",
"K' c #10258E",
"L' c #6271B0",
"M' c #6272B1",
"N' c #6373B1",
"O' c #6677B1",
"P' c #0B2E59",
"Q' c #577BA5",
"R' c #587BA6",
"S' c #587CA6",
"T' c #5A7EA8",
"U' c #5D82AB",
"V' c #6289AE",
"W' c #1A5FA3",
"X' c #0D1C75",
"Y' c #131E61",
"Z' c #404B8E",
"`' c #475296",
" ) c #10258D",
".) c #6270B0",
"+) c #6272B0",
"@) c #6576B2",
"#) c #6576B1",
"$) c #577AA4",
"%) c #577BA4",
"&) c #587BA5",
"*) c #5C81A9",
"=) c #648AAF",
"-) c #0E345B",
";) c #0D1D79",
">) c #101B5F",
",) c #3C478B",
"') c #11258E",
")) c #6371B0",
"!) c #6575B1",
"~) c #0B2E58",
"{) c #5679A3",
"]) c #5779A4",
"^) c #567AA4",
"/) c #577AA5",
"() c #577BA6",
"_) c #597BA6",
":) c #175797",
"<) c #0E1F82",
"[) c #101B5E",
"}) c #384487",
"|) c #0B1858",
"1) c #6170B0",
"2) c #6575B0",
"3) c #5578A2",
"4) c #5678A3",
"5) c #5679A4",
"6) c #5A7DA6",
"7) c #102394",
"8) c #111C60",
"9) c #141F63",
"0) c #293578",
"a) c #0A1859",
"b) c #616FAF",
"c) c #616FB0",
"d) c #6270AF",
"e) c #6372B0",
"f) c #6474AF",
"g) c #0B2D58",
"h) c #5576A2",
"i) c #5577A2",
"j) c #5577A3",
"k) c #5578A4",
"l) c #5578A3",
"m) c #587CA5",
"n) c #597DA7",
"o) c #5D82A9",
"p) c #6187AD",
"q) c #154F8D",
"r) c #1227A5",
"s) c #0D185C",
"t) c #1B266A",
"u) c #313C80",
"v) c #445093",
"w) c #10248D",
"x) c #6170AF",
"y) c #6474B1",
"z) c #6373AF",
"A) c #5375A1",
"B) c #5476A2",
"C) c #587AA4",
"D) c #5C7FA9",
"E) c #6084AD",
"F) c #102393",
"G) c #0C196A",
"H) c #0E1A5D",
"I) c #242F73",
"J) c #3A4589",
"K) c #626FAF",
"L) c #626FB0",
"M) c #6475B2",
"N) c #6272AE",
"O) c #0A2C59",
"P) c #5275A1",
"Q) c #5376A2",
"R) c #5477A2",
"S) c #144A84",
"T) c #0E1E7F",
"U) c #121D61",
"V) c #2B3679",
"W) c #0A1858",
"X) c #6370B0",
"Y) c #6271AF",
"Z) c #0A2C58",
"`) c #5173A0",
" ! c #5274A1",
".! c #5274A0",
"+! c #0D1B74",
"@! c #10248E",
"#! c #6171AE",
"$! c #51729F",
"%! c #51739F",
"&! c #5273A0",
"*! c #5476A1",
"=! c #5576A3",
"-! c #114379",
";! c #102291",
">! c #0C196B",
",! c #1F2A6E",
"'! c #364185",
")! c #465195",
"!! c #10238D",
"~! c #616EAF",
"{! c #616FAD",
"]! c #0A2B59",
"^! c #50729E",
"/! c #50729F",
"(! c #5375A0",
"_! c #134C8D",
":! c #0E1E81",
"<! c #142063",
"[! c #263275",
"}! c #3D488C",
"|! c #0A1758",
"1! c #606FAC",
"2! c #0A2B58",
"3! c #4F709D",
"4! c #50719E",
"5! c #52749F",
"6! c #0C305A",
"7! c #15539B",
"8! c #132AB0",
"9! c #0D1D7A",
"0! c #172366",
"a! c #2E397D",
"b! c #434E92",
"c! c #606DAD",
"d! c #4D709D",
"e! c #4E709D",
"f! c #4F719D",
"g! c #50719F",
"h! c #5375A2",
"i! c #5677A3",
"j! c #0C315D",
"k! c #1758A7",
"l! c #11249A",
"m! c #1F2A6D",
"n! c #354184",
"o! c #465194",
"p! c #616EB0",
"q! c #5F6DAC",
"r! c #4D6F9C",
"s! c #4D6F9D",
"t! c #5374A1",
"u! c #5476A3",
"v! c #0D3464",
"w! c #0F2089",
"x! c #172266",
"y! c #263175",
"z! c #3D488B",
"A! c #0A1658",
"B! c #4D6E9C",
"C! c #4E6F9D",
"D! c #4F719E",
"E! c #5174A0",
"F! c #5376A1",
"G! c #5477A3",
"H! c #0E376C",
"I! c #0D1D7B",
"J! c #162165",
"K! c #2D387C",
"L! c #424D91",
"M! c #5F6CAC",
"N! c #4E6F9C",
"O! c #4F709E",
"P! c #51749F",
"Q! c #0B2D59",
"R! c #10417F",
"S! c #11259E",
"T! c #0C1B71",
"U! c #1D296C",
"V! c #343F83",
"W! c #616DAF",
"X! c #5E6BAC",
"Y! c #4E709C",
"Z! c #4F6F9D",
"`! c #50709D",
" ~ c #0F407F",
".~ c #0F218C",
"+~ c #182367",
"@~ c #0F1A5E",
"#~ c #3B478A",
"$~ c #114992",
"%~ c #0E1E7E",
"&~ c #2C387B",
"*~ c #0A2C5A",
"=~ c #124EA0",
"-~ c #11269F",
";~ c #1C276B",
">~ c #323D81",
",~ c #0A2D5D",
"'~ c #1354AE",
")~ c #10228F",
"!~ c #212C70",
"~~ c #374286",
"{~ c #0F228B",
"]~ c #1251A7",
"^~ c #283377",
"/~ c #3E4A8D",
"(~ c #0F4085",
"_~ c #0B2F62",
":~ c #1328A8",
"<~ c #0D1C77",
"[~ c #303B7F",
"}~ c #104289",
"|~ c #0B3063",
"1~ c #112497",
"2~ c #1C276A",
"3~ c #0C175B",
"4~ c #0F438A",
"5~ c #0B3266",
"6~ c #0F2088",
"7~ c #0C3367",
"8~ c #365885",
"9~ c #0B3369",
"0~ c #0E1D7C",
"a~ c #0B2F60",
"b~ c #0C366E",
" ",
" ",
" ",
" ",
" ",
" . . ",
" . . . . . . . ",
" . . . . + @ # $ % . . . . ",
" . . . . & * + @ = - % ; > , . . . . ",
" . . . . ' ) ! * + @ ~ { ] % ^ , / ( _ . . . ",
" . . . . : < [ } | * + 1 = $ 2 ; > , / 3 4 5 6 . . . . ",
" . . . . 7 8 9 0 a } | * + b c d 2 % > , / e f g h i j k . . . . ",
" . . . . l m n 9 o p q } | * r s t # u % v w x y z A B i C D E F G . . . ",
" . . . . H I J K L M 9 < q ' | N O P t # Q % R S T / U V W X Y D Z ` ...+.. . . . ",
" . . . . @.#.H I $.%.L M 9 < q } } N r + @ # Q &.R S *.=.f V W X -.;.k ` ...+.+.>.,.. . . . ",
" . . . . '.'.'.#.H ).!.~.n {.].< 0 ' } | ^.b @ # Q ] /.(., / f 4 5 B i D k _. ...:.<.[.,.}.|.1.. . . . ",
" . . . . '.'.'.'.'.2.H 3.J %.m 7 9 < p } ) 4.5.+ @ ~ Q Q 6.> , / 3 4 7.X 8.9.k 0. ...a.b.<.c.d.|.1.e.f.g.. . . ",
" . . . . . '.'.'.'.'.'.'.h.i.j.$.$.m 7 k.< l.a m.| * + @ c Q Q % > , / f f n.B i j k _.o.p.q.+.r.c.s.|.t.u.v.w.x.y.. . . . ",
" . . . . . '.'.'.'.'.'.'.'.z.A.B.I $.m 7 9 ].C.q D.| * + P t # Q 6.> (.T f E.F.6 i j G.0.H.I...+.<.c.d.J.K.L.M.N.x.y.O.P.Q.. . . . ",
" R.. . '.'.'.'.'.'.'.'.'.'.'.S.A.3.I $.m n k.T.U.q V.W.X.+ + t # Q % /.S Y./ z F.W i -.Z.k _.`.a.+.<.r.s. +|.L.M.N.g..+++O.@+#+$+%+. . . ",
" . . . . . '.'.'.'.'.'.'.'.'.&+i.H I $.K n 8 < < q } *+* ^.=+@ { Q ] -+, , ;+_ V W B 8.>+,+_.G ..+.'+c.d.d.t.)+!+M.x.x.~+{+Q.#+$+]+^+/+. . . . ",
" . . =.f . . . . . '.'.'.'.'.'.2.A.H (+$._+:+<+].< q } | N ^.s [+# Q }+6.> *./ f V 5 |+C D 0._. ...q.1+2+3+4+|.1.!+N.5+y.6+O.Q.#+$+7+8+/+/+/+/+. . . . ",
" . . / / y e . . . . . '.'.'.'.&+#.H I 9+0+m a+9 b+l.} m.X.5.+ @ = $ % > c+Y./ f U W X d+k k _. ...e+f+g+c.d.J.)+h+i+j+x.6+k+@+l+m+n+o+/+/+/+/+/+/+/+. . . . ",
" . . S , *.x T / / 3 . . . . . '.'.#.p+q+!.~.m 7 9 < 0 ' } r+* P @ # { s+% w , / e V 5 B -.j k _. .t+e+1+2+3+d.|.K.u.u+N.x..+O.v+w+x+y+z+/+/+/+/+/+/+/+/+/+/+. . . ",
" . . ; > > ^ , A+/ / e y ( . . . . . i.).B+$.C+7 9 : l.a } | * + D+t d Q % > , / f E+5 6 d+j k _.o.p.F+<.r.c.d.J.)+h+!+G+x.H+O.@+@+$+y+%+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ",
" . . 2 % % /.-+> ^ S , Y.I+/ =.e . . . . . I $.C+L 9 J+K+a } & 4.+ P c d Q v L+S / f f g |+i j k ,+H.t+:.+.<.c.s.M+N+O+i+N.x..+~+@+#+P+]+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ",
" . . # $ Q 2 s+6./.> > , , , , / / ;+y . . . . . 7 a+< U.Q+} | N R+P S+# u % > , / ( f V W i -.Z._.T+I...+.U+c.V+W+t.O+!+N.x.y.++X+@+#+$+%+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . ",
" . . @ t # Y+Y+Q Q &.% v v > c+c+S , , / =.( f . . . . . < q Z+) X.^.D+c Q Q % /., Y./ 4 V W i d+k Z T+`.q.+.<.r.d.}.`+)+!+N.x. @.+k+@+#+x+%+z+/+/+/+/+/+/+/+/+/+/+/+/+/+. . . . f f . ",
" . . + D+@ c # # $ Q Q Q }+% % /./.S S , *.T / ;+;+f . . . . . m.4.5.b @ # Q % R > , e f V W i 8.j k _.G ..+.'+<.c.4+`+)+h+v.w.y..@O.@+#+x+n++@/+/+/+/+/+/+/+/+/+/+/+. . . . f f f f f . ",
" . . . ^.+ + P b @ c t # - - u u &.% /.R c+c+S , A+/ / y f . . . . . 5.+ @ # Q ] /.L+A+=.f V W |+@@9.k _. .t++.b.g+c.W+|.1.!+u+j+#@~+O.@+l+#+$@8+/+/+/+/+/+/+/+/+/+. . . . f f f f f f f f . ",
" . . | N * * + + =+=+D+@ S+# %@%@- Q 2 % 6.v /.> , , , / T y f f . . . . . # Q % % > , / f E+V B -.9.k _.o.p.F+f+r.c.d.|.&@O+u+N.x..+++@+*@#+]+%+/+/+/+/+/+/+/+. . . =@f f f f f f f f f f -@. ",
" . . . W.D.| | 4.* 5.r + P b @ S+# # Y+- Q Q }+% ; -+> w w S , I+/ / 3 f . . . . . ; > , A+f V g ;@i j k _.>@`...+.r.c.d.|.&@,@'@G+x..+O.)@@+x+$+z+/+/+/+/+/+. . . T / ( y f f f f f f f f f f . . ",
" . . . a } V.} W.| r+4.* ^.* + D+@ @ @ # # - Q Q ] 2 ; /.-+> w (., A+Y./ f f . . . . . , / / U V X @@j k Z .t+a.+.<.c.d.|.K.O+!+G+x.y.!@P.Q.~@$+8+/+/+/+. . . ; > w ^ , T / 3 f f f f f f f f f . . ",
" . {@. . . . Z+} ) D.m.| r+* * 5.r + D+@ S+c # # - Q Q s+% % -+> c+(., , / / / / f . . . . . f g B i j k _._.`.q.+.<.c.]@ +1.O+!+N.x..+!@)@^@#+$+%+%+. . . # - Q % % % > L+w Y./ / / f f f f f f f . . ",
" . /@(@_@:@. . . . [ } } W.| N ! * * R++ + @ @ c c # # # Q u 2 % % ; > L+, , *./ / =.;+f . . . . . i j 9.E >@G ..+.'+c.<@4+&@)+!+N.G+.+O.O.l+#+@+. . . O s @ c c $ Q Q 2 % % > c+, I+x ;+f f f f f f . ",
" . [@/@}@/@/@/@. . . . q } } W.V.! ! N * + O + b b [+t c # $ Q u 2 ] % v R > > ^ *.A+I+/ e f f . . . . 9.E _. ...+.'+[.V+}.|.)+!+v.x..+6+{+.+. . . *+X.r+* r + s @ S+c { - Q s+% > > (., *./ f f f f f . ",
" . |@|@|@1@}@2@/@}@/@. . . . Q+[ } W.| N & * * R++ D+=+@ S+~ # # %@Q Q ] % R -+> ^ , w , , / =.;+f . . . . . ...3@<.4@3+}.|.)+!+u+w.x.)+. . . 0 q } [ V.| & 4.+ R++ b @ # # Q Q &.% 6.> > , A+x ( f f . ",
" . 5@5@6@|@7@|@|@8@}@}@2@/@. . . . ' } ) | | X.| * * ^.+ P 1 @ @ ~ # d Y+Q Q % % v > v w , , *.T / =.f f . . . . . 9@2+,.d.|.t.!+!+b.. . . <+9 o b+p 0 q Z+} ) | N * O + s @ t = d - Q % % -+> ^ , *./ . ",
" . 0@5@a@a@b@c@6@7@|@|@[@8@|@8@. . . . . } ) W.W.N & r+* * r + s 1 @ # # # { - Q u % % ; ; > c+, , , I+/ ( f f . . . . . d.M+t.j . . . $.0+m :+7 M 9 9 < U.q Z+} ) *+& 4.* O + @ @ c # { - }+% % R ^ , . ",
" . d@e@f@f@g@5@5@h@b@5@h@|@b@|@|@|@|@. . . . Z+} } | | & X.r+5.i@+ s D+@ [+t # # Q Q 2 &.% % /.R > c+, , T T / y f . . . . . . . . H 3.I !.$.%.~.C+7 {.a+T.: C.< q q } D.| r+* ^.+ =+1 @ c # - Q s+% v . ",
" . j@k@d@d@d@d@g@f@e@d@l@5@5@a@b@6@c@6@|@|@. . . . [ } } m.| | r+* * + + =+D+@ ~ ~ # m@n@n@Q &.% % v > c+(., , Y./ / =.f . . . '.h.#.#.o@H I I J $.K m C+7 M M ].< U.p q ' D.m.| ! * O + @ @ c @ d d 2 . ",
" . p@q@q@r@r@r@j@s@d@d@f@e@5@l@0@5@5@b@b@c@7@7@7@. . . . } V.V.) | & * * * + s t@u@v@v@w@m@n@x@y@u % v % > > (., , *.x / Y.. . z@A@B@'.2.#.#.p+j.I !.$.C@_+:+C+<+8 9 o < U.0 D@} W.m.| r+* O + s @ t # . ",
" . E@E@F@F@G@q@q@H@H@I@d@H@d@d@d@d@5@f@5@5@5@5@5@c@h@. . . . [ Z+) ) m.| 4.J@K@L@M@N@O@v@w@m@P@x@Q@R@S@] % 6.6.> > w , , . . T@U@V@W@X@Y@X@h.2.#.#.H B.I !.$.$._+Z@7 7 9 T.o < l.q q } } | | X.^.r D+=+. ",
" . `@E@E@E@E@F@G@ #p@q@q@q@q@d@k@d@H@d@d@g@f@g@d@5@0@5@5@6@. . . . Z+} .#+#@###$#L@%#M@O@O@&#P@P@n@n@*#=#S@&.}+% 6.-+> > . . -#T@;#U@>#z@,#X@Y@'#@.#.)#!#H I I I $.K m 7 7 7 9 9 T.< q q } } D.r+4.* 5.. ",
" . ~#~#~#{#~#E@E@E@]#G@^#^# #p@q@q@q@j@k@j@k@d@d@d@d@0@0@e@l@0@5@/#(#_#:#<#.#[#}#K@K@L@M@|#O@&#1#2#3#4#4#x@R@5#6#% }+v . . 7#8#9#0#a#U@T@U@U@,#b#X@c#'.#.#.)#H 3.I l $.$.m m 7 7 M 9 9 < 0 q D@} *+| | . ",
" . d#e#f#~#~#~#g#h#{#{#E@i#E@E@q@F@p@]#q@q@q@q@q@j@d@k@d@d@d@j#k#l#m#n#o#:#:#p#+#}#q#$#$#$#M@M@u@v@1#r#s#3#t#u#v#5#w#x#. . y#z#A#B#C#D#a#E#F#G#V@z@H#X@I#'.@.#.#.H H B.I $.$.0+K :+7 M M : : < q q ' } . ",
" . J#K#K#K#K#L#~#~#~#~#~#~#{#{#i#E@E@^#]#G@]#q@q@^#q@I@H@M#M#N#O#k#k#l#P#Q#_#R#:#S#[#[#J@$#$#T#T#u@U#1#1#P@3#t#t#u#V#W#X#Y#Z#`# $y#z#7#7#D#D#-#.$U@U@+$z@@$H#'#'.2.2.#.p+j.I I l $.%.m m 7 7 9 ].< C.q . ",
" . #$J#K#$$$$%$K#K#L#K#L#f#~#f#~#~#`@`@E@E@E@E@E@E@q@&$*$=$=$-$-$;$O#>$>$,$,$Q#:#:#S#S#'$q#J@$#$#T#)$!$U#1#1#s#~$t#t#{$W#]$^$^$/$($`#_$y#:$7#9#D#<$a#E#U@+$[$b#X@X@A@'.2.#.p+H H B.!.!.~._+m }$7 a+9 ].. ",
" . =@|$#$#$#$1$2$K##$%$K#K#L#e#f#e#~#L#~#~#~#{#3$4$5$6$7$7$8$&$*$-$-$9$9$>$0$0$P#P#Q#S#S#'$'$'$a$b$T#c$!$!$&#1#2#3#d$e$f$g$]$^$^$h$/$i$`#j$k$y#7#7#l$<$m$E#;#U@+$z@z@H#'.'.@.#.#.i.H q+I J $.K K :+C+7 . ",
" . n$o$p$=@o$q$#$q$#$#$#$J##$$$%$$$K#K#e#e#r$s$s$t$4$5$5$u$v$7$w$w$w$-$x$9$>$>$0$y$P#z$A$B$'$'$'$C$b$T#D$D$!$E$&#1#F$F$G$H$I$J$K$^$L$Y#h$($($`#`#y#y#M$7#C#D#E#E#N$U@>#z@b#X@'#'.z.#.#.p+H j.!.O$K 0+m . ",
" . P$P$n$=@=@=@=@p$p$o$#$#$#$#$#$Q$K#Q$R$R$S$T$r$s$t$t$U$5$6$V$6$w$w$W$x$-$X$;$>$0$y$y$z$z$Y$Z$`$'$ % %.%T#T#!$u@+%@%#%$%%%&%*%=%J$K$-%;%>%>%($,%'%`#`#y#z#7#)%D#0#E#;#N$U@z@,#@$X@Y@'.S.#.o@H I j.I J . ",
" . !%!%~%P${%!%n$!%=@=@=@=@=@p$#$]%^%/%/%/%(%S$T$_%:%s$<%t$5$5$5$6$u$7$w$w$-$X$X$>$[%>$y$y$Y$Y$A$`$}%C$ %.%.%|%1%+%+%2%3%4%$%%%*%5%I$J$K$^$;%>%6%7%,%8%9%0%k$:$7#8#8#D#a%E#.$U@[$z@z@X@Y@Y@S.@.#.A.H q+. ",
" . b%b%c%b%d%d%!%!%!%e%f%e%n$g%g%g%^%h%h%i%j%/%R$R$T$_%:%s$k%U$U$4$6$u$V$w$7$w$x$X$X$l%l%0$m%n%z$A$o%`$p%q%.%.%|%r%+%s%2%2%3%t%u%v%*%5%J$]$w%L$x%y%6%7%,%'%z%A%`#y#B%7#l$l$D#E#E#T@[$C%z@H#X@A@I#z.#.A.. ",
" . D%E%F%F%b%b%G%b%~%~%H%I%I%I%J%J%J%g%I%I%g%]%(%R$_%R$T$T$K%k%K%U$L%M%N%u$w$O%P%Q%X$X$X$[%R%0$n%n%z$Y$Z$Z$S%q%T%|%U%V%W%s%X%3%t%4%u%v%*%Y%J$J$Z%;%;%y%y%`%8% &9%.&`#+&y#7#7#B#D#0#E#E#U@U@@&#&W@X@B@&+. ",
" . $&E%E%E%%&E%&&b%b%*&=&-&;&I%;&I%>&I%I%I%I%g%h%]%/%,&_%_%'&'&k%k%L%U$M%)&N%u$!&O%x$x$W$X$~&~&{&{&0$]&z$Y$Z$Z$T%.%^&/&U%W%s%(&2%_&3%:&u%v%<&[&}&K$K$;%>%y%y%,%8%9%9%z%|&`#y#:$7#7#C#m$E#E#.$U@U@z@@$X@. ",
" . 1&$&E%2&3&4&5&6&6&*&7&6&=&=&*&=&>&-&8&-&I%I%J%g%h%]%,&(%R$_%9&9&'&k%0&L%)&)&u$v$O%!&W$P%W$X$~&~&[%a&z$Y$b&o%c&.%d&d&e&/&U%W%s%X%2%3%t%f&f&g&<&<&h&i&Z%Z%j&y%y%k&l& &m&.&|&n&0%y#z#A#)%D#<$E#;#T@>#@&. ",
" . o&1&1&1&p&p&q&q&p&6&6&6&6&6&*&*&r&8&7&=&8&8&I%;&s&g%]%]%]%,&,&_%9&'&:%K%L%L%U$t&)&!&!&!&W$P%u&v&~&[%{&{&a&Y$w& %T%T%x&y&y&U%z&A&A&B&C&D&D&E&v%v%v%F&G&i&Z%H&x%I&J&K&8%9%m&.&|&L&M& $y#M$7#8#D#m$a%U@. ",
" . N&o&O&O&P&Q&q&q&p&6&q&q&6&6&5&6&6&6&6&=&7&*&*&=&;&;&g%R&^%^%,&,&S&T&T&U&U&k%L%L%M%N%V&W&O%!&X&u&v&Y&v&{&m%m%Z&C$Z&`&c&x&x&y&y& *.*+*s%2%C&D&t%@*f&v%<&#*G&$*%*H&x%y%`%l&8%9%m&A%&*n&**=*y#y#7#7#9#m$. ",
" . -*-*P&O&P&P&P&P&O&p&;*Q&p&p&p&q&q&5&6&q&6&6&6&6&*&=&=&>*s&s&,*'*,&)*S&T&T&!*k%k%L%M%M%V&t&!&O%P%P%X&Y&v&v&{&~*'$~*{*]*]*c&x&x&^*^& *+*/*(*_*D&t%:*E&<*[*F&#*G&$*%*}*I&I&`%K& &9%m&&*|*n&**1* $y#2*2*. ",
" 3*4*5*-*-*-*-*O&-*P&O&P&6*P&P&Q&p&p&q&p&6&5&q&6&6&6&q&6&*&7*7*>*s&,*8*8*9*S&T&U&0*U&a*b*M%M%V&W&W&c*c*X&X&Y&d*e*'$f*g*h*{*]*i*j*x&x&k* * *l*(*(*_*C&m*@*f&n*[*F&#*G&o*%*}*p*q*r*K&s*t*m&&*|*u*v*w*x*k$. ",
" 3*y*z*4*4*A*-*-*-*-*-*-*P&P&P&O&P&p&p&P&P&;*B*p&p&q&q&q&6&6&7&=&C*7*,*8*8*8*9*T&D*E*!*a*a*F*G*H*V&I*W&W&c*J*~*K*'$L*M*f*g*h*N*]*i*c&x&^*y&O* *l*P*(*Q*R*m*S*E&<*T*F&U*G&V*W*X*X*q*r*l&s*Y*Z*`*|***** =.= ",
" +=y*@=@=#=4*4*4*5*$=%=-*-*-*-*O&O&P&-*P&P&Q&Q&P&q&p&;*q&q&q&7&q&7&C*s&,*,*'*8*9*&=*=D*!*U&a*F*G*M%V&t&W&W&==c*I*S#-=;=L*>=,='=)=h*]*i*j*j*^*O*!=~=/*{=]=Q*^=S*S*<*<*T*F&/=o*(=W*X*X*J&r*_=s*:=`*I$<=-%.= ",
" +=[=}=}=[=y*@=y*z*|=z*4*1=1=-*$=-*%=-*-*-*P&P&-*P&P&P&Q&p&q&q&p&q&7&7&C*7*,*,*8*8*D*&=D*!*!*a*a*a*F*G*V&2=W&3=4=:#5=-=-=6=7=>=8=9=h*0=a=b=c=^*O*O*!=l*d={=e=R*R*R*S*E&n*F&U*U*f=o*W*g=X*h=r*G$G$&%H$I$i= ",
" j=k=l=m=l=}=}=}=}=[=@=#=@=4*#=n=1=$=o=-*1=p=-*-*P&q=-*q=-*P&O&O&;*q&6&r=C*7*7*s=t=u=&=v=9*D*0*0*a*a*F*w=w=w=2=x=:#y=z=A=B=B=6=8=C=D='=h*N*E=F=F=G=^*H=H=l*d={=I=e=R*J=K=L=L=M=N=U*o*O=P=4%Q=R=R=G$*%H${$ ",
" j=S=T=k=U=k=V=k=k=}=m=[=[=@=@=y*y*@=n=W=1=X=X=$=-*-*p=-*-*-*q=-*-*O&;*;*7&7&7&C*t=t=Y=v=&=&=*=D*D*0*a*Z=G*`= -5=_#.-+-@-#-$-%-B=&-6=7=,=*-N*=-E=----;-O*O* *l*>-d=]=,-J='-'-L=n*N=)-B&X%X%_&_&!-Q=R=R=~- ",
" j={-S={-S=S=T=S=T=k=k=V=k=V=l=[=[=[=y*y*y*n=n=o=o=n=$=p=1=%=%=$=-*-*P&O&;*;*]-r=r&C*^-t=t=/-&=/-0*0*0*0*Z=`=F*(-_-:-<-.-[-#-A=}-$-|-&-1-2-*-3-4-0=E=5-6-;-f$7-8-l*d=9-]=,-J=0-U%a-z&W%W%s%2%2%2%_&3%4%F$ ",
" b-c-c-c-d-{-d-{-S=S=S=S=T=T=k=k=V=k=V=}=[=[=y*@=n=o=e-n=1=o=1=$=p=%=-*-*P&O&;*r=]-7&f-g-t=t=Y=h-&=D**=0*0*i-j-k-(#l-m-n-.-[-@-#-o-$-p-B=&-q-2-2-3-4-r-E=5-;-G=f$H=s-8-d=x&x&y&y&q%U%U%z&W%s%s%X%2%_&2%F$ ",
" t-c-u-c-c-c-v-d-{-w-{-w-S=x-S=S=S=U=k=l=k=k=V=}=}=[=e-e-e-W=e-e-o=o=n=$=$=-*y-O&;*]-]-z-C*g-^-Y=Y=A-&=B-B-C-i-D-n#E-F-l-G-H-.-.-@-I-}-}-B=J-1->=2-3-K-4-r-5-L-6-M-f$]*]*i*c&j*x&^*^*y&e&q%z&z&N-A&s%B&+% ",
" t-O-u-u-u-u-P-Q-c-c-c-v-c-R-{-S-{-S=S=T=S=k=S=k=k=T-}=m=}=e-e-e-e-e-n=1=n=$=$=y-U-6*V-W-X-f-f-g-Y-Z-A-/-B-B-`- ;/#.;+;@;l-#;H-H-.-[-I-I-}-$;p-J->=>=2-%;4-&;r-,=3-,={*Z&]**;a=i*c&=;x&-;y&!=/&U%a-+*s%+% ",
" t-;;>;,;;;O-u-u-';Q-u-Q-Q-P-c-d-);d-);w-!;S=S=U=T=T=k=T=k=V=}=l=e-~;e-e-e-n=$={;y-$=y-U-V-];]-f-f-Y-^;Z-/;/;/;(;_;:;.;.;<;@;l-[;};n-.-|;I-1;}-$;2;J-3;4;%;6=6=6=8=8=,=3-3-h*]*a=a=i*c&j*x&x&^&!=y&U%+*+% ",
" 5;6;;;;;;;;;;;7;8;O-u-O-O-';';';';Q-c-c-);{-);w-{-{-S=k=S=U=T=k=V=k=m=e-e-~;e-e-{;1={;U-U-];V-];9;9;g-Y-^;^;/;0;_;a;a;:;.;.;b;@;[;G-H-c;[-|;I-d;$;$;J-o-}-B=B=|-&-6=8=8=,=9=3-h*0=]*`&e;a=c&x&d&^&^&y&|% ",
" f;g;g;h;h;i;j;j;;;;;8;>;k;O-u-u-O-c-u-u-';c-c-c-);c-d-w-w-S=S=S=S=T=U=k=k=V=l;l;~;m;e-1=n;o;V-U-];p;9;g-q;g-0;r;s;t;u;u;:;:;.;v;+;b;[;};w;w;x;y;[-|;|;I-o-z;}-$-%-B=&-6=6=8=8=,=*-h*h*0=]*]*i*j*j*j*x&|% ",
" f;A;B;g;g;g;g;g;h;j;6;6;;;k;;;;;O-;;O-k;u-u-c-Q-';';';c-v-);c-w-);d-S=S=U=S=S=T=S=l;~;m;{;{;C;y-y-V-];9;p;p;g-D;s;E;F;G;H;I;:;:;J;<;<;K;[;L;L;H-H-M;y;[-|;I-I-}-}-$-%-p-B=6=6=C=7=8=,=)=h*N;0=]*]*i*c&|% ",
" f;O;P;Q;R;P;Q;S;g;g;g;g;g;i;j;j;;;;;;;;;7;k;O-O-u-u-u-P-';P-u-c-c-);d-w-S={-S=!;S=S=U=k=~;{;{;n;y-o;U-T;p;p;p;U;V;W;X;Y;Y;G;Z;u;:;`;J; >b;b;.>[;};H-n-n-c;[-[-I-#-#-o-$-$-p-|-&-6=6=q-8=8=9=9=h*h*0=]*+> ",
" @>O;#>O;$>#>O;P;P;P;P;S;g;g;g;g;i;h;j;6;6;6;;;;;;;,;>;k;u-u-u-u-';u-';c-c-c-);{-);{-{-S-S=S=U=%>{;&>&>o;*>W-=>U;->;>>>,>'>Y;)>)>!>`;J;~>~>{>{>K;@;]>[;G-H-M;w;y;|;[-@-I-d;z;$-p-B=B=|-6=6=M*8=9=9=h*h*.% ",
" ^>/>(>_>(>_>_>O;O;O;$>O;A;A;P;P;S;R;g;g;i;i;i;6;6;;;;;;;;;k;k;u-O-u-O-u-Q-u-c-c-';c-c-);w-d-S=S-S-:><>n;[>[>o;}>|>1>2>3>W;'>'>)>4>5>6>7>8>J;~>~>{>{>b;K;[;[;H-H-.-c;y;[-[-#-#-}-}-p-$-B=|-&-6=>=8=,=,=.% ",
" 9>0>0>0>a>a>(>/>_>_>#>b>O;O;P;$>P;P;P;Q;g;S;c>g;g;h;i;d>j;6;e>;;;;;;k;u-;;O-u-O-Q-Q-';c-';c-);););{-S-S=n;n;[>f>|>g>g>2>'>h>h>h>h>i>)>!>7>7>8>`;`;~>~>b;b;K;.>[;[;m-w;w;c;.-[-j>I-#-z;}-k>B=B=B=&->=>=.% ",
" 9>l>m>n>0>0>0>0>a>o>(>(>_>_>p>#>p>O;O;P;P;Q;P;Q;g;g;g;g;i;g;i;h;e>j;q>;;;;;;8;7;8;>;u-O-u-u-O-';r>c-c-););w-);s>|>t>u>v>3>w>,>,>'>h>x>)>i>y>5>z>7>`;`;A>~>B>{>K;b;[;L;};H-<-w;c;[-|;#-I-#-}-}-$-B=B=C> % ",
" D>E>F>m>m>m>G>0>0>n>0>0>0>o>_>o>(>_>_>#>#>#>O;#>P;P;P;A;P;B;g;B;g;i;H>i;i;6;;;h;;;;;8;7;O-O-O-u-u-Q-I>';Q-c-c-J>K>L>M>N>O>u>v>w>P>w>Q>R>S>h>)>)>4>!>7>6>`;`;J;~>b;{>b;.>K;[;T>H-U>c;c;[-|;@-#-#-$-}-V> % ",
" W>X>E>E>m>Y>m>Y>Z>`>n>0>0>0>l>0>0>0>(>0>(>/>(>_>_>#>#>O;P;P;P;P;A;B;A;R;g;g;g;j;i;i;i;;;;;;;;;;;8;k;8;O-u-O-u- ,K>.,+,@,M>M>#,u>v>3>P>,>Q>$,$,h>)>i>%,4>6>7>6>`;J;~>~>+;b;]>]>[;L;H-w;w;y;.-[-|;#-#-o-'$ ",
" &,X>X>*,X>X>X>X>E>E>=,m>`>m>`>l>-,l>n>0>0>0>;,;,a>o>(>_>_>O;P;#>#>P;O;P;c>B;P;c>B;g;i;i;i;6;;;e>6;;;7;;;,;O-O->,_;,,',.,),!,L>N>N>#,v>v>~,w>w>w>h>h>{,i>y>4>4>7>6>:;`;J;~>{>{>b;]>.>[;L;w;w;c;[-.-[-#-'$ ",
" &,],],],],^,*,],/,X>X>E>E>E>Y>m>m>m>`>n>`>l>G>l>0>0>0>(,;,o>(>_>(>#>O;p>#>#>P;P;P;c>A;S;g;g;g;g;i;j;i;;;;;6;;;_,s;:,<,[,},.,),+,|,L>M>N>#,v>v>P>w>w>$,h>h>S>)>)>4>7>7>6>`;A>~>{>b;b;b;]>.>[;L;w;H-c;[-'$ ",
" &,1,2,3,4,2,],],],5,^,^,X>X>E>E>E>F>6,E>Y>`>`>l>`>`>`>n>l>0>o>a>_>(>_>_>_>#>p>O;O;P;$>P;P;P;g;c>g;c>g;g;i;q>i;7,s;8,8,9,:,[,[,',),.,),M>N>N>N>v>v>v>w>w>,>Q>$,Y;i>)>y>!>5>6>:;`;`;~>{>{>b;K;[;[;};H-U>'$ ",
" 0,a,a,b,a,3,3,2,3,4,],],],*,^,],^,X>X>E>E>E>E>E>6,`>m>m>`>Z>G>`>l>0>0>0>a>_>(>p>(>#>#>#>$>P;#>P;P;P;P;P;B;g;i;c,s;d,e,f,8,:,<,:,[,[,',',),@,M>N>M>#,g,v>h,P>w>'>$,h>S>)>y>y>4>6>7>`;`;~>B>b;b;b;]>[;L;S# ",
" i,j,k,k,b,j,b,a,3,3,3,2,l,3,],l,],],*,/,/,X>m,E>X>Y>Y>=,F>F>F>m>-,-,l>n>`>0>0>0>o>o>o>p>(>#>p>#>#>b>O;P;n,P;c>c,V;o,p,q,e,r,r,s,9,9,<,,,},.,.,+,L>M>M>N>O>v>v>3>w>Q>'>h>h>{,)>y>4>4>6>6>`;`;~>~>b;b;b;S# ",
" t,u,u,j,v,k,k,j,k,a,w,a,b,a,a,3,1,4,x,],l,],],/,X>X>^,y,E>Y>=,=,m>z,`>`>m>l>n>n>l>0>G>0>0>o>(>/>_>#>#>#>O;$>$>A,V;B,C,o,p,D,e,e,r,8,E,9,<,[,},',.,.,!,M>M>F,O>O>~,3>P>w>$,Q>h>S>Y;G,y>4>7>6>8>`;J;~>~>:# ",
" t,H,I,u,u,J,u,j,j,K,k,j,j,k,k,b,b,a,a,3,1,4,4,],4,],],/,/,^,X>/,*,E>E>E>E>`>m>`>`>`>`>m>0>-,0>0>0>0>(>/>_>/>p>L,|>M,N,N,C,O,P,Q,D,e,f,e,8,9,9,<,[,',.,),),|,M>N>N>u>u>v>P>w>w>,>$,h>S>)>y>4>4>7>:;8>`;R, ",
" S,T,H,H,I,U,V,V,u,v,W,u,X,j,k,k,b,b,b,b,a,a,a,3,3,3,Y,x,x,],],],],],X>X>E>E>E>E>=,F>`>`>z,`>m>`>0>G>l>0>0>0>0>L,|>Z,`, '.'N,N,+'o,P,P,e,e,@'8,9,8,:,<,[,,,#'),),M>M>F,N>u>v>3>w>,>,>h>h>h>S>i>y>4>4>6>:# ",
" S,$'%'%'T,T,I,U,I,V,U,H,u,u,J,J,u,v,v,j,j,k,b,b,a,a,b,3,3,1,l,3,],l,x,*,],*,*,/,m,X>m,E>F>Y>`>z,m>m>`>`>m>-,G>&'|>*'Z,Z,Z,=' 'M,N,B,-'o,o,d,D,e,;'8,8,9,>'[,,,',),),+,M>M>N>N>v>v>h,w>$,h>h>h>{,)>)>%,:# ",
" ,''''''''')')')'!')'I,T,T,I,H,u,u,u,u,v,W,v,j,j,j,j,k,~'~'{'a,3,3,3,2,x,4,],],],],/,*,y,/,X>m,E>z,E>F>F>Y>`>`>]'|>^'/'('*'Z,_':'M,M,M,N,o,o,<'P,D,D,e,8,s,9,:,<,[,['.,.,),M>@,M>#,O>}'v>3>w>w>h>h>h>S>_# ",
" |'1'2'3'4'''''''5'''%'T,)'T,T,I,H,u,I,6'u,u,u,v,u,u,X,v,j,j,j,7'b,a,a,b,3,3,3,Y,l,],Y,],*,*,*,*,*,X>X>E>E>E>Y>8'|>9'9'0'a'('('b'*'Z,='M,N,c'B,o,o,Q,P,Q,q,e,8,8,9,<,<,[,.,.,),),M>M>F,N>d'u>h,w>w>,>$,o# ",
" e'f'g'1'1'1'2'h'4'''4'''''''%'%'%'I,T,T,I,T,u,6'u,u,u,u,J,v,j,J,j,k,k,j,i'b,a,a,3,3,2,],4,x,],],],],^,/,/,*,X>j'k'l'l'm'n'o'p'/'('('*'_'Z,='M,q'.'-'r'o,Q,D,e,e,8,8,8,9,<,[,',',s'),L>M>M>N>O>v>3>3>w>/# ",
" t'u'v'v'e'w'x'w'1'y'1'3'3'4'4'''''5'%''')')'T,T,T,T,I,u,u,u,u,u,v,J,K,j,v,k,k,b,b,a,a,b,3,3,3,3,1,l,l,],*,*,],z'A'B'C'D'l'l'9'n'0'^'('('E'*'_'='='='F'N,O,o,P,P,P,D,e,f,8,9,:,[,[,,,.,),L>@,M>N>O>u>u>G' ",
" H'I'J'K'K'v'g'L'L'w'w'M'1'1'y'''3'N'2'''%'%'%')'%'T,T,T,T,I,T,I,u,H,u,u,u,u,j,j,k,~'b,b,~'7'3,7'3,3,3,2,1,Y,O'P'Q'R'S'B'B'l'l'o'o'T'0'p'('*'E'_' 'U'='.'N,N,O,o,D,e,D,e,f,8,8,:,V'[,[,.,',),@,|,M>/#W' ",
" X'Y'Z'`'`' ) ) )g'L'.)L'+)1'w'1'1'3'1'2'''''''''%'%'%'!')'T,)'I,T,H,@)u,H,u,u,u,J,j,j,j,k,k,b,b,a,a,b,a,3,#)P'$)%)&)R'R'S'B'D'l'l'9'9'0'0'p'('*)Z,Z, 'U'='.'N,N,r'P,D,P,D,@'e,8,s,9,<,[,=)',),@,-) ",
" ;)>),)`'`'`'`'') )g'.).).)L'))w'w'))w'1'1'4'1'3'4'N'''''%'%')'%'T,T,T,T,I,T,V,H,u,u,u,u,K,v,J,J,k,~'b,~'!)~){)])^)/)/)()R'_)S'B'l'l'm'9'n'0'('('('b'Z,Z,=' 'M,N,N,C,o,o,p,e,e,e,8,8,9,:,<,[,_;:) ",
" <)[)})`'`'`'`'`' ) ) )|)1).).)L'L'L'L'L'w'))1'1'1'3'2'3'h'h'''%'%')')'T,!'T,T,T,T,6'u,u,H,u,u,u,j,J,j,2)P'3)4){)5)5)$)$)Q'Q'S'S'B'D'6)l'T'o'o'0'0'('('*)Z,Z,M,M,.'N,-'o,o,o,P,d,e,;'8,8,:,K> ",
" 7)8)9)0)J'`'`'`'`'`' ) )a)b)c)d).).)d).)L'.)e)1'))x'1'1'1'4'''''''''%'%')'%'!')')'I,I,U,U,V,u,I,u,u,f)g)h)i)j)4)k)l)5)])$)&)&)m)S'B'D'n)6)l'9'n'o'0'p'('E'_'o)Z,M,.'F'N,r'o,P,o,e,D,p)s;q) ",
" r)X's)t)u)v)`'`'`'`'K'w)K'a)b)b)x)1).).).).).)L'w'))))1'1'1'3'1'N'1'4'''y)''%')')'T,T,T,T,6'I,V,z)g)A)A)B)h)i)i)l){){)$)$)/)C)()R'S'B'B'C'l'm'9'o'0'a'D)('_'Z,_'M,='F'N,N,r'o,P,E)s; ",
" F)G)H)I)J)`'`'`'`'`'w) )w)b)b)b)c)K)L)d).).)d).)L'))))w'e)e)1'1'y'2'''4'4'%''')'%'M)T,T,T,N)O)P)A)A)Q)B)B)R)j)j){)5)5)5)$)$)Q'&)S'S'B'D'l'l'9'0'0'p'p'('('*'Z,:'M,F'M,N,-'V;S) ",
" T)U)I'V)J'`'`'`'`'w)w)w)W)c)c)b)c)c)c)L)b)d).).).)X)L'+)w'e)e)1'1'1'h'2'4'''''%')'%'Y)Z)`) !.!P)A)A)A)B)i)j)4)4)4)4)5)$)$)/)Q'&)S'S'B'D'l'm'9'0'0'p'a'('*'_'Z,Z,:'M,V; ",
" r)+!s)t)u)v)`'`'`'`'w)w)@!W)b)b)b)c)b)c)b)L)K).).)d)d)L'L'L'w'w'1'e)1'1'1'3'4'''#!Z)$!$!%!&!.! ! !P)A)*!B)=!i)l)l)4)5)5)$)$)Q'R'S'S'B'6)l'l'l'9'n'0'D)('*)E'_'|>-! ",
" ;!>!s),!'!)!`'`'`'`'!!w)W)b)~!b)b)b)c)b)b)b)c)b)K).).)L'.).)L'))))e)+)1'1'{!]!^!/!$!$!%!%!&!.! !P)(!Q)B)B)h)j)l){)5)^)$)$)Q'&)R'S'S'B'D'6)m'm'9'9'p'|>|>_! ",
" :!<!>)[!}!`'`'`'`'!!!!!!|!~!~!~!c)b)b)c)c)b)b)c)K)x)L).)1).)X)L'L'))1!2!3!3!4!^!/!/!$!%!5!&!.!.! !A)A)B)h)i)i)l)4)5)5)$)$)%)R'&)R'S'B'n)l'k'6!7! ",
" 8!9![)0!a!b!`'`'`'`'!!!!!!|!~!~!b)~!c)c)b)b)b)c)b)c)c)L)d).).).)c!2!d!e!3!f!4!4!g!/!%!`)`)&!.!.!P)A)h!B)B)i)i!4)4){)5)])$)$)%)&)S'k'j!k! ",
" l!H's)m!n!o!`'`'`'`'!!!!|!~!~!~!~!p!b)b)c)c)b)b)b)b)b)b)K)q!2!r!r!s!e!e!3!3!4!4!/!/!`)%!`)`).!P)t!A)Q)B)u!i)j)l)l)4)5)5)P'v! ",
" w!x![)y!z!`'`'`'`'!!!!!!A!~!~!~!~!~!p!~!b)b)c)b)b)c)q!2!B!B!B!B!r!C!e!e!3!f!D!4!/!$!%!`)E!.!.!P)A)F!B)B)G!R)P'P'H! ",
" I!>)J!K!L!`'`'`'`'!!!!|!~!~!~!~!~!~!~!b)~!b)c)M!2!B!B!B!B!B!r!r!N!C!e!3!O!3!4!^!/!/!%!P!`).!.!t!(!Q!g)R! ",
" S!T!s)U!V!o!`'`'`'!!!!!!|!W!~!~!W!~!~!~!~!X!2!B!B!B!B!B!B!B!r!B!r!Y!e!Z!e!`!D!4!^!$!$!%!5!Z)O) ~ ",
" .~+~@~I)#~`'`'`'`'!!!!A!|!W!~!W!W!W!X!2!B!B!B!B!B!B!B!B!B!B!r!r!r!r!e!Z!3!D!D!g!Z)O)$~ ",
" %~8)u'&~L!`'`'`'`'!!!!|!W!~!W!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!r!r!d!3!2!*~=~ ",
" -~T!s);~>~v)`'`'`'!!!!!!A!X!2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~'~ ",
" )~t)s)!~~~)!`'`'`'!!{~2!B!B!B!B!B!B!B!B!B!B!B!B!B!B!2!,~]~ ",
" :!U)U)^~/~`'`'`'(~2!B!B!B!B!B!B!B!B!B!B!B!2!_~ ",
" :~<~@~+~[~b!`'}~2!B!B!B!B!B!B!B!B!2!|~ ",
" 1~2~3~,!'!4~2!B!B!B!B!B!2!5~ ",
" 6~x!@~7~2!B!8~2!9~ ",
" 0~a~2!b~ ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};
"""
def tankWeight(obj, angles=Vector(0.0,0.0,0.0), cor=Vector(0.0,0.0,0.0)):
""" Compute tank fluid weight and their center of gravity.
@param obj Tank object.
@param angles Tank angles, Roll, Pitch and Yaw.
@param cor Center or rotation.
@return Weight and center of gravity. None if errors detected
"""
# Test if is a tank instance
props = obj.PropertiesList
try:
props.index("IsShipTank")
except ValueError:
return None
if not obj.IsShipTank:
return None
# Get object solids
Solids = obj.Shape.Solids
W = [0.0, 0.0, 0.0, 0.0]
for s in Solids:
# Get fluid volume
bbox = s.BoundBox
z0 = bbox.ZMin
z1 = bbox.ZMax
dz = obj.Level/100.0 * (z1-z0)
z = z0 + dz
dx = bbox.XMax-bbox.XMin
dy = bbox.YMax-bbox.YMin
box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0)))
fluid = s.common(box)
vol = fluid.Volume
W[0] = W[0] + vol*obj.Density
# Compute fluid solid in rotated position (non linear rotation
# are ussually computed as Roll -> Pitch -> Yaw).
s.rotate(cor, Vector(1.0,0.0,0.0), angles.x)
s.rotate(cor, Vector(0.0,1.0,0.0), angles.y)
s.rotate(cor, Vector(0.0,0.0,1.0), angles.z)
bbox = s.BoundBox
z0 = bbox.ZMin
z1 = bbox.ZMax
dx = bbox.XMax-bbox.XMin
dy = bbox.YMax-bbox.YMin
Error = 0.01*vol
z = 0.0
v = 0.0
while(abs(vol - v) > Error):
z = z + (vol - v) / (dx*dy)
dz = z - z0
box = Part.makeBox(3.0*(dx), 3.0*(dy), (z1-z0)+dz, Vector(bbox.XMin-dx, bbox.YMin-dy, bbox.ZMin-(z1-z0)))
fluid = s.common(box)
v = fluid.Volume
if(abs(vol - v) / (dx*dy) <= 0.000001):
break
# Add fluid moments
for f in fluid.Solids:
cog = f.CenterOfMass
W[1] = W[1] + f.Volume*obj.Density*cog.x
W[2] = W[2] + f.Volume*obj.Density*cog.y
W[3] = W[3] + f.Volume*obj.Density*cog.z
return [W[0], W[1]/W[0], W[2]/W[0], W[3]/W[0]]