Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Mauno/Degrees_Of_Pedity
  • prout/Degrees_Of_Pedity
  • Pedy/Degrees_Of_Pedity
  • Pregmodder/Degrees_Of_Pedity
  • scientist/Degrees_Of_Pedity
  • K.Izumi/Degrees_Of_Pedity
6 results
Show changes
Commits on Source (72)
Showing
with 171439 additions and 2827 deletions
......@@ -9,6 +9,5 @@
*.orig
*.lnk
[Tt]humbs.db
*.bat
*.db
*.save
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
@echo off
:: Free Cities Basic Compiler - Windows
:: Set working directory
pushd %~dp0
:: Run the appropriate compiler for the user's CPU architecture.
if %PROCESSOR_ARCHITECTURE% == AMD64 (
CALL "%~dp0devTools\tweeGo\tweego_win64.exe" -t -w -s "Init" -o "%~dp0Degrees_of_Lewdity_mod.html" "%~dp0src"
) else (
CALL "%~dp0devTools\tweeGo\tweego_win86.exe" -t -w -s "Init" -o "%~dp0Degrees_of_Lewdity_mod.html" "%~dp0src"
)
popd
ECHO Done
pause
\ No newline at end of file
@echo off
:: Free Cities Basic Compiler - Windows
:: Set working directory
pushd %~dp0
:: Run the appropriate compiler for the user's CPU architecture.
if %PROCESSOR_ARCHITECTURE% == AMD64 (
CALL "%~dp0devTools\tweeGo\tweego_win64.exe" -s "Init" -o "%~dp0Degrees_of_Lewdity_mod.html" "%~dp0src"
) else (
CALL "%~dp0devTools\tweeGo\tweego_win86.exe" -s "Init" -o "%~dp0Degrees_of_Lewdity_mod.html" "%~dp0src"
)
popd
ECHO Done
@echo off
:: Free Cities Basic Compiler - Windows
:: Set working directory
pushd %~dp0
:: See if we can find a git installation
setlocal enabledelayedexpansion
for %%k in (HKCU HKLM) do (
for %%w in (\ \Wow6432Node\) do (
for /f "skip=2 delims=: tokens=1*" %%a in ('reg query "%%k\SOFTWARE%%wMicrosoft\Windows\CurrentVersion\Uninstall\Git_is1" /v InstallLocation 2^> nul') do (
for /f "tokens=3" %%z in ("%%a") do (
set GIT=%%z:%%b
set GITFOUND=yes
goto FOUND
)
)
)
)
:FOUND
if %GITFOUND% == yes (
set "PATH=%GIT%bin;%PATH%"
bash --login -c ./sanityCheck
)
:: Compile the game
call "%~dp0compile.bat"
if %GITFOUND% == yes (
:: Make the output prettier, replacing \t with a tab and \n with a newline
bash -c "sed -i -e '/^.*<div id=\"store-area\".*$/s/\\\t/\t/g' -e '/^.*<div id=\"store-area\".*$/s/\\\n/\n/g' Degrees_of_Lewdity_mod.html"
)
popd
PAUSE
@echo off
:: Free Cities Basic Compiler - Windows
:: Set working directory
pushd %~dp0
:: Compile the game
call "%~dp0compile.bat"
type test.txt | repl "\bred\b" "blue" >test.txt.new
move test.txt.new test.txt
popd
PAUSE
@echo off
:: Free Cities Basic Compiler - Windows
:: Set working directory
pushd %~dp0
:: Run the appropriate compiler for the user's CPU architecture.
if %PROCESSOR_ARCHITECTURE% == AMD64 (
CALL "%~dp0devTools\tweeGo\tweego_win64.exe" -d "%~dp0Degrees_of_Lewdity.html" -o "%~dp0output/output.tw"
) else (
CALL "%~dp0devTools\tweeGo\tweego_win86.exe" -d "%~dp0Degrees_of_Lewdity.html" -o "%~dp0output/output.tw"
)
popd
ECHO Done
PAUSE
\ No newline at end of file
#!/bin/sh Requires MEGAcmd, git, mv, cd, mkidr, echo
COUNTER=0 LocalDir=~/fc-pregmod/ RemoteDir=FC-GIT U=anon@anon.anon P=13245 && mega-login $U $P
while [ $COUNTER -ge 0 ]; do
if [ $COUNTER -eq 0 ]; then mega-login $U $P && mega-mkdir $RemoteDir && mega-export -a $RemoteDir && mkdir $LocalDir ; git clone -q https://gitgud.io/pregmodfan/fc-pregmod.git $LocalDir
fi
cd $LocalDir/ && AbrevHash=`git log --reverse -n1 --abbrev-commit |grep -m1 commit | sed 's/commit //'`
if [ $COUNTER -eq 0 ]; then ./compile > /dev/null && mv bin/FC_pregmod.html "bin/FC-pregmod-$(git log -1 --format='%cd' --date='format:%F-%H-%M')-$AbrevHash.html" && mega-put bin/*.html $RemoteDir
else if [ "$(git pull)" == "Already up to date." ]; then ehco -n ""
else clear && rm bin/*.html ; ./compile > /dev/null && mv bin/FC_pregmod.html "bin/FC-pregmod-$(git log -1 --format='%cd' --date='format:%F-%H-%M')-$AbrevHash.html" && mega-login $U $P && mega-put bin/*.html $RemoteDir
fi
fi
let COUNTER=COUNTER+1 && mega-logout > /dev/null && sleep 300s
done
\ No newline at end of file
#!/bin/sh Requires MEGAcmd, git, mv, cd, mkidr, echo
COUNTER=0 LocalDir=~/fc-pregmod/ RemoteDir=FC-GIT U=anon@anon.anon P=13245 && mega-login $U $P
while [ $COUNTER -ge 0 ]; do
if [ $COUNTER -eq 0 ]; then mega-login $U $P && mega-mkdir $RemoteDir ; mega-export -a $RemoteDir ; mkdir $LocalDir ; git clone -q https://gitgud.io/pregmodfan/fc-pregmod.git $LocalDir
fi
cd $LocalDir/ && AbrevHash=`git log -n1 --reverse --abbrev-commit |grep -m1 commit | sed 's/commit //'`
if [ $COUNTER -eq 0 ]; then echo "First run. Compliling, formatting and placing .html." && ./compile > /dev/null && mv bin/FC_pregmod.html "bin/FC-pregmod-$(git log -1 --format='%cd' --date='format:%F-%H-%M')-$AbrevHash.html" && mega-put bin/*.html $RemoteDir && echo "Inital compiled .html placed."
else if [ "$(git pull)" == "Already up to date." ]; then echo "No updated files."
else echo "Compliling, formatting and placing updated .html." ; rm bin/*.html ; ./compile > /dev/null && mv bin/FC_pregmod.html "bin/FC-pregmod-$(git log -1 --format='%cd' --date='format:%F-%H-%M')-$AbrevHash.html" && mega-login $U $P && mega-put bin/*.html $RemoteDir ; echo "Updated .html placed."
fi
fi
let COUNTER=COUNTER+1 && mega-logout > /dev/null && sleep 300s
done
\ No newline at end of file
#!/bin/sh
# setup:
# add this to crontab:
# */15 * * * * cd ~/FC/fc-pregmod && git pull --ff-only origin pregmod-master > ~/FC/git_pull.log 2>&1
# and do "ln -s ~/FC/fc-pregmod/devTools/BuildAndIPFSify.sh .git/hooks/post-merge"
# NOTE: you may need to define XDG_RUNTIME_DIR in your crontab
# TODO: add logic to figure out if we should use ipfs-cluster instead of using the local instance directly.
# if we use ipfs-cluster we probably don't need to warm ipfs.io's cache.
rm bin/*.html
# if this script is used as the post-merge hook then
# a) git pull has pulled something
# b) $PWD is fc-pregmod
if [ "$(basename "$0")" != "post-merge" ]; then
# cd to fc-pregmod based on where this script is
cd "$(readlink -f "$(dirname "$0")")/.." || exit 1
git pull
# if there are new html files then git probably pulled something and ran this script as a post-merge hook
if ls bin/*.html; then
exit 0
fi
fi
# If we've done this before then unpin the previous hash so IPFS can GC it if it needs to
if [ -r ../IPFS_hash.txt ]; then
ipfs pin rm --recursive=true "$(cut -d : -f 2 ../IPFS_hash.txt | tr -d ' ')"
fi
./compile || exit 1
# Keep the build time from changing the hash of the file
sed -Ei -e '/^ \* Built on .+$/d' bin/*.html
# add the date of the last commit to the file, but don't use colons because Windows (still?) doesn't like them
mv bin/*.html "bin/FC pregmod $(git log -1 --format='%cd' --date='format:%F %H-%M').html"
# include the unembedded vector art
ipfs_hash="$(ipfs add -w -Q -r bin/*.html resources)"
echo "IPFS Folder Hash: ${ipfs_hash}" > ../IPFS_hash.txt
ipfs name publish "$ipfs_hash"
# when it's done it will print something like "Published to $your_pubkey: /ipfs/$ipfs_hash"
# You can view the folder at http://127.0.0.1:8080/ipns/$your_pubkey
# make ipfs.io cache the files
# $XDG_RUNTIME_DIR SHOULD be defined, but there are cases where it wouldn't be
if [ -z "${XDG_RUNTIME_DIR+x}" ]; then
echo "\$XDG_RUNTIME_DIR is unset, bailing"
exit 2
fi
# throw it into a file so we can loop over lines, not "strings delimited by whitespace"
find resources bin -print | grep -ve '.gitignore' | sed -e 's|bin/||' | grep -Ee '.+\.svg' -e '.html' > "${XDG_RUNTIME_DIR}/files.list"
# ipfs PeerID, it's user specific
PeerID="$(ipfs config show | grep -e 'PeerID' | cut -d: -f 2 | tr -d ' "')"
while IFS= read -r item
do
echo "https://ipfs.io/ipns/${PeerID}/${item}"
done < "${XDG_RUNTIME_DIR}/files.list" | xargs --max-procs=10 --max-args=1 --replace curl --silent --show-error --range 0-499 --output /dev/null '{}'
rm "${XDG_RUNTIME_DIR}/files.list"
#!/usr/bin/env python3
import fileinput
import re
import sys
WARNING = '\033[93m'
ENDC = '\033[0m'
def myprint(*args):
print(WARNING, fileinput.filename() + ":", ENDC,*args)
def yield_line_and_islastline(f):
global filename
global linenumber
try:
prevline = next(f)
filename = fileinput.filename()
linenumber = fileinput.filelineno()
except StopIteration:
return
for line in f:
yield (prevline, f.isfirstline())
filename = fileinput.filename()
linenumber = fileinput.filelineno()
prevline = line
yield prevline, True
pattern = re.compile(r'(<<(\/?) *(if|for|else|switch|case|replace|link)[^<>]*)')
tagfound = []
try:
for line, isLastLine in yield_line_and_islastline(fileinput.input()):
for (whole,end,tag) in re.findall(pattern,line):
if tag == "else" or tag == 'case':
if len(tagfound) == 0:
myprint("Found", tag, "but with no opening tag:")
myprint(" ", linenumber,":", whole)
fileinput.nextfile()
lasttag = tagfound[-1]
if (tag == "else" and lasttag["tag"] != "if") or (tag == "case" and lasttag["tag"] != "switch"):
myprint("Mismatched else: Opening tag was:")
myprint(" ",lasttag["linenumber"],":", lasttag["whole"])
myprint("But this tag was:")
myprint(" ",linenumber,":", whole)
fileinput.nextfile()
break
elif end != '/':
tagfound.append({"whole": whole, "linenumber":linenumber,"tag":tag})
else:
if len(tagfound) == 0:
myprint("Found closing tag but with no opening tag:")
myprint(" ", linenumber,":", whole)
fileinput.nextfile()
break
lasttag = tagfound.pop()
if lasttag["tag"] != tag:
myprint("Mismatched tag: Opening tag was:")
myprint(" ",lasttag["linenumber"],":", lasttag["whole"])
myprint("Closing tag was:")
myprint(" ",linenumber,":", whole)
fileinput.nextfile()
break
if isLastLine:
if len(tagfound) != 0:
myprint("End of file found but", len(tagfound), ("tag hasn't" if len(tagfound)==1 else "tags haven't"), "been closed:")
for tag in tagfound:
myprint(" ", tag["linenumber"],":", tag["whole"])
tagfound = []
except UnicodeDecodeError as e:
myprint(e)
print(" Hint: In linux, you can get more details about unicode errors by running:")
print(" isutf8", fileinput.filename())
print(" :Note it might be caused by ", filename)
#!/usr/bin/env python3
'''
Script for embedding favicons into the SugarCube Header.
Script file is expected to reside in devTools directory.
Note: This does not actually check the image file's contents for size detection.
Usage:
python3 embed_favicon.py
'''
import sys
import os
import re
import base64
# file extensions eligible for use as favicons and their mimetype
ext2mimetype = {
'.png': 'image/png',
'.ico': 'image/x-icon'
}
# reads a file, turns it into a data uri
def data_uri_from_file(filename, mimetype):
data = open(filename,'rb').read()
base64data = base64.b64encode(data).decode('ascii')
out = 'data:%s;base64,%s'%(mimetype, base64data)
return out
if __name__ == "__main__":
# find project root directory path
# (script file is expected to reside in devTools)
project_root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# path to SugarCube's header.html
header_html_path = os.path.join(
project_root_path,
'devTools/tweeGo/storyFormats/sugarcube-2/header.html'
)
# path to directory containing all favicons to embed
favicons_source_path = os.path.join(
project_root_path,
'resources/raster/favicon/'
)
# walk directory for all files
favicons_paths = [
os.path.join(dirpath, filename)
for dirpath, dirnames, filenames in os.walk(favicons_source_path)
for filename in filenames
]
# ignore files with unknown extensions
favicons_paths = [f for f in favicons_paths if f[-4:] in ext2mimetype.keys()]
# prepare embedded data
size_from_filename = re.compile(r'([0-9]+)\....$')
favicons_html = []
for fp in favicons_paths:
# get mimetype by file extension
mimetype = ext2mimetype[fp[-4:]]
if (mimetype == 'image/x-icon'):
# assume sizes in ico
sizes = '16x16 32x32 64x64'
else:
# guess icon size from file name
size = size_from_filename.search(fp).group(1)
sizes = '%sx%s'%(size, size)
data = data_uri_from_file(fp, mimetype)
favicons_html.append(
# prepare html with favicon data embedded
'<link rel="icon" type="%s" sizes="%s" href="%s">\n'%(
mimetype, sizes, data
)
)
# modify header file
with open(header_html_path,'r+') as hf:
lines_in = hf.readlines() # read whole file
lines_out = []
for line in lines_in:
# embed favicons into head
if (line.startswith('</head>')):
lines_out.extend(favicons_html)
# remove all currently embedded favicons
if (not (line.startswith('<link') and 'icon' in line)):
lines_out.append(line)
hf.seek(0) # move to beginning of file
hf.write(''.join(lines_out)) # overwrite with new data
hf.truncate() # remove trailing old data
This diff is collapsed.
tweego is licensed under this Simplified BSD License.
Copyright (c) 2014-2016 Thomas Michael Edwards <tmedwards@motoslave.net>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright (c) 2013-2016 Thomas Michael Edwards <tmedwards@motoslave.net>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" id="svg2" version="1.1" inkscape:version="0.48.0 r9654" sodipodi:docname="New document 1">
<defs id="defs4"/>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="11.313708" inkscape:cx="27.203376" inkscape:cy="26.578528" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1280" inkscape:window-height="968" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1">
<inkscape:grid type="xygrid" id="grid2985" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
</sodipodi:namedview>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1004.3622)">
<g id="g3000" transform="translate(-6,1003)">
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path2987" d="m 30,2.3621826 -20,10.0000004 20,10 20,-10 z" style="fill:#f9f9f9;stroke:none"/>
<path style="fill:#ececec;stroke:none" d="m 30,22.362183 0,25 20,-10 0,-25 z" id="path2989" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path2991" d="m 30,22.362183 0,25 -20,-10 0,-25 z" style="fill:#cccccc;stroke:none"/>
<path inkscape:connector-curvature="0" id="path2993" d="M 30,2.3749996 10,12.375 l 0,25 20,10 20,-10 0,-25 L 30,2.3749996 z" style="fill:none;stroke:#4d4d4d;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
</g>
</g>
<metadata>
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
<dc:publisher>
<cc:Agent rdf:about="http://openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title>Sugar Cube icon</dc:title>
<dc:date>2010-10-10T11:46:52</dc:date>
<dc:description>A sugar cube.</dc:description>
<dc:source>http://openclipart.org/detail/89407/sugar-cube-icon-by-jhnri4</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>jhnri4</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>SVG</rdf:li>
<rdf:li>block</rdf:li>
<rdf:li>clip art</rdf:li>
<rdf:li>clipart</rdf:li>
<rdf:li>cube</rdf:li>
<rdf:li>icon</rdf:li>
<rdf:li>sugar</rdf:li>
<rdf:li>white</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
</cc:License>
</rdf:RDF>
</metadata>
</svg>
Copyright (c) 2013-2018 Thomas Michael Edwards <thomasmedwards@gmail.com>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This diff is collapsed.